here is updated patch
diff --git a/src/game/World.cpp b/src/game/World.cpp
index abf002d..daabc68 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -1367,8 +1367,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);
- loginDatabase.PExecute("INSERT INTO uptime (realmid, starttime, startstring, uptime) VALUES('%u', " I64FMTD ", '%s', 0)",
- realmID, uint64(m_startTime), isoDate);
+ loginDatabase.PExecute("INSERT INTO uptime (realmid, starttime, startstring, uptime) VALUES('%u', " I64FMTD ", '%s', 0)", realmID, uint64(m_startTime), isoDate);
+
+ static uint32 abtimer = 0;
+ abtimer = sConfig.GetIntDefault("AutoBroadcast.Timer", 60000);
m_timers[WUPDATE_OBJECTS].SetInterval(0);
m_timers[WUPDATE_SESSIONS].SetInterval(0);
@@ -1378,6 +1378,7 @@ void World::SetInitialWorldSettings()
//Update "uptime" table based on configuration entry in minutes.
m_timers[WUPDATE_CORPSES].SetInterval(20*MINUTE*IN_MILISECONDS);
//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
@@ -1418,6 +1418,8 @@ void World::SetInitialWorldSettings()
uint32 nextGameEvent = gameeventmgr.Initialize();
m_timers[WUPDATE_EVENTS].SetInterval(nextGameEvent); //depend on next event
+ sLog.outString("Starting Autobroadcast system..." );
+
sLog.outString( "WORLD: World initialized" );
}
@@ -1574,6 +1574,17 @@ void World::Update(uint32 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();
@@ -2729,6 +2729,56 @@ void World::ProcessCliCommands()
zprint("mangos>");
}
+void World::SendBroadcast()
+{
+ std::string msg;
+ static int nextid;
+
+ QueryResult *result;
+ if(nextid != 0)
+ {
+ result = loginDatabase.PQuery("SELECT `text`, `next` FROM `autobroadcast` WHERE `id` = %u", nextid);
+ }
+ else
+ {
+ result = loginDatabase.PQuery("SELECT `text`, `next` FROM `autobroadcast` ORDER BY RAND() LIMIT 1");
+ }
+
+ if(!result)
+ return;
+
+ Field *fields = result->Fetch();
+ nextid = fields[1].GetUInt32();
+ msg = fields[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 3e4b24c..6b41cd3 100644
--- a/src/game/World.h
+++ b/src/game/World.h
@@ -76,7 +76,8 @@ enum WorldTimers
WUPDATE_UPTIME = 4,
WUPDATE_CORPSES = 5,
WUPDATE_EVENTS = 6,
- WUPDATE_COUNT = 7
+ WUPDATE_AUTOBROADCAST = 7,
+ WUPDATE_COUNT = 8
};
/// Configuration elements
@@ -366,6 +366,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();
diff --git a/src/mangosd.conf.dist b/src/mangosd/mangosd.conf.dist
index 3e4b24c..6b41cd3 100644
--- a/src/mangosd/mangosd.conf.dist.in
+++ b/src/mangosd/mangosd.conf.dist.in
@@ -1250,6 +1250,29 @@ Network.OutUBuff = 65536
Network.TcpNodelay = 1
###################################################################################################################
+# --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
+
+###################################################################################################################
# CONSOLE AND REMOTE ACCESS
#
# Console.Enable
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 1300-9999
+ // Broadcaster
+ LANG_AUTO_BROADCAST = 1300,
// Use for not-in-offcial-sources patches
// 10000-10999
the sql (execute on realmd DB]
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 ;
the sql (execute on mangos DB]
INSERT INTO `mangos_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES
(1300, '|cffffcc00[server]: |cff00ff00%s|r', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
Notice: not tested.