Jump to content

xeross

Members
  • Posts

    36
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Posts posted by xeross

  1. Hey,

    i've modified the announcer script i've found for mangos to allow a next id to be specified this will be the id of the next message that will be announced.

    Here's the patch(It's cut from my own source patch that had some other stuff in it so might not work):

    diff --git a/src/game/Language.h b/src/game/Language.h
    index 0c20968..6b27f6e 100644
    --- a/src/game/Language.h
    +++ b/src/game/Language.h
    @@ -723,6 +723,8 @@ enum MangosStrings
    
        // FREE IDS                           1200-9999
    
    +    // Broadcaster
    +    LANG_AUTO_BROADCAST                 = 1200,
        // Use for not-in-offcial-sources patches
        //                                    10000-10999
    
    diff --git a/src/game/World.cpp b/src/game/World.cpp
    index 6fa9a30..5547766 100644
    --- a/src/game/World.cpp
    +++ b/src/game/World.cpp
    @@ -58,6 +58,7 @@
    #include "WaypointManager.h"
    #include "GMTicketMgr.h"
    #include "Util.h"
    +#include "Language.h"
    
    INSTANTIATE_SINGLETON_1( World );
    
    @@ -1304,8 +1305,10 @@ void World::SetInitialWorldSettings()
        sprintf( isoDate, "%04d-%02d-%02d %02d:%02d:%02d",
            local.tm_year+1900, local.tm_mon+1, local.tm_mday, local.tm_hour, local.tm_min, local.tm_sec);
    
    -    WorldDatabase.PExecute("INSERT INTO uptime (startstring, starttime, uptime) VALUES('%s', " I64FMTD ", 0)",
    -        isoDate, uint64(m_startTime));
    +    WorldDatabase.PExecute("INSERT INTO uptime (startstring, starttime, uptime) VALUES('%s', " I64FMTD ", 0)", isoDate, uint64(m_startTime));
    +
    +    static uint32 abtimer = 0;
    +    abtimer = sConfig.GetIntDefault("AutoBroadcast.Timer", 60000);
    
        m_timers[WUPDATE_OBJECTS].SetInterval(0);
        m_timers[WUPDATE_SESSIONS].SetInterval(0);
    @@ -1314,6 +1317,7 @@ void World::SetInitialWorldSettings()
        m_timers[WUPDATE_UPTIME].SetInterval(m_configs[CONFIG_UPTIME_UPDATE]*MINUTE*1000);
                                                                //Update "uptime" table based on configuration entry in minutes.
        m_timers[WUPDATE_CORPSES].SetInterval(20*MINUTE*1000);  //erase corpses every 20 minutes
    +    m_timers[WUPDATE_AUTOBROADCAST].SetInterval(abtimer);
    
        //to set mailtimer to return mails every day between 4 and 5 am
        //mailtimer is increased when updating auctions
    @@ -1552,6 +1556,17 @@ void World::Update(time_t diff)
            m_timers[WUPDATE_EVENTS].Reset();
        }
    
    +    static uint32 autobroadcaston = 0;
    +    autobroadcaston = sConfig.GetIntDefault("AutoBroadcast.On", 0);
    +    if(autobroadcaston == 1)
    +    {
    +        if (m_timers[WUPDATE_AUTOBROADCAST].Passed())
    +        {
    +            m_timers[WUPDATE_AUTOBROADCAST].Reset();
    +            SendBroadcast();
    +        }
    +    }
    +
        /// [/list]
        ///- Move all creatures with "delayed move" and remove and delete all objects with "delayed remove"
        MapManager::Instance().DoDelayedMovesAndRemoves();
    @@ -2629,6 +2644,56 @@ void World::ProcessCliCommands()
        zprint("mangos>");
    }
    
    +void World::SendBroadcast()
    +{
    +    std::string msg;
    +    static int nextid;
    +
    +    QueryResult *result;
    +    if(nextid != 0)
    +    {
    +        result = WorldDatabase.PQuery("SELECT `text`, `next` FROM `autobroadcast` WHERE `id` = %u", nextid);
    +    }
    +    else
    +    {
    +        result = WorldDatabase.PQuery("SELECT `text`, `next` FROM `autobroadcast` ORDER BY RAND() LIMIT 1");
    +    }
    +
    +    if(!result)
    +        return;
    +
    +    nextid = result->Fetch()[1].GetUInt8();
    +    msg = result->Fetch()[0].GetString();
    +    delete result;
    +
    +    static uint32 abcenter = 0;
    +    abcenter = sConfig.GetIntDefault("AutoBroadcast.Center", 0);
    +    if(abcenter == 0)
    +    {
    +        sWorld.SendWorldText(LANG_AUTO_BROADCAST, msg.c_str());
    +
    +        sLog.outString("AutoBroadcast: '%s'",msg.c_str());
    +    }
    +    if(abcenter == 1)
    +    {
    +        WorldPacket data(SMSG_NOTIFICATION, (msg.size()+1));
    +        data << msg;
    +        sWorld.SendGlobalMessage(&data);
    +
    +        sLog.outString("AutoBroadcast: '%s'",msg.c_str());
    +    }
    +    if(abcenter == 2)
    +    {
    +        sWorld.SendWorldText(LANG_AUTO_BROADCAST, msg.c_str());
    +
    +        WorldPacket data(SMSG_NOTIFICATION, (msg.size()+1));
    +        data << msg;
    +        sWorld.SendGlobalMessage(&data);
    +
    +        sLog.outString("AutoBroadcast: '%s'",msg.c_str());
    +    }
    +}
    +
    void World::InitResultQueue()
    {
        m_resultQueue = new SqlResultQueue;
    diff --git a/src/game/World.h b/src/game/World.h
    index 57167bf..5f70d80 100644
    --- a/src/game/World.h
    +++ b/src/game/World.h
    @@ -66,7 +66,8 @@ enum WorldTimers
        WUPDATE_UPTIME      = 4,
        WUPDATE_CORPSES     = 5,
        WUPDATE_EVENTS      = 6,
    -    WUPDATE_COUNT       = 7
    +    WUPDATE_AUTOBROADCAST = 7,
    +    WUPDATE_COUNT         = 8
    };
    
    /// Configuration elements
    @@ -342,6 +343,7 @@ class World
    
            WorldSession* FindSession(uint32 id) const;
            void AddSession(WorldSession *s);
    +        void SendBroadcast();
            bool RemoveSession(uint32 id);
            /// Get the number of current active sessions
            void UpdateMaxSessionCounters();

    The SQL:

    CREATE TABLE IF NOT EXISTS `autobroadcast` (
     `id` int(11) NOT NULL auto_increment,
     `text` longtext NOT NULL,
     `next` int(11) NOT NULL,
     PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
    
    INSERT INTO `mangos_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES
    (1200, '|cffffcc00[server]: |cff00ff00%s|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

    Add the following to your config:

    ###################################################################################################################
    # AUTO BROADCAST
    #
    #    AutoBroadcast.On
    #        Enable auto broadcast
    #        Default: 0 - off
    #                 1 - on
    #
    #    AutoBroadcast.Center
    #        Display method
    #        Default: 0 - announce
    #                 1 - notify
    #                 2 - both
    #
    #    AutoBroadcast.Timer
    #        Timer for auto broadcast
    #
    ###################################################################################################################
    
    AutoBroadcast.On = 1
    AutoBroadcast.Center = 2
    AutoBroadcast.Timer = 30000

    Enjoy, Xeross

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use