aboutsummaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorAnubisss <none@none>2009-08-10 17:03:11 +0200
committerAnubisss <none@none>2009-08-10 17:03:11 +0200
commit18f712f52b9270747a6f307440b7da1e6195d0e1 (patch)
tree202d36f8dd6e45dcaddb9426637fe0f428e1566c /src/game
parent7faff34ae5a51b854536ef597b51c19e3754523e (diff)
*Read AutoBroadcast's messages from cache instead of from DB every times.
--HG-- branch : trunk
Diffstat (limited to 'src/game')
-rw-r--r--src/game/Chat.cpp3
-rw-r--r--src/game/Chat.h3
-rw-r--r--src/game/Level3.cpp22
-rw-r--r--src/game/World.cpp93
-rw-r--r--src/game/World.h4
5 files changed, 92 insertions, 33 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 06822627460..d3c3213059f 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -424,12 +424,13 @@ ChatCommand * ChatHandler::getCommandTable()
{ "config", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadConfigCommand, "", NULL },
+ { "access_requirement", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAccessRequirementCommand, "", NULL },
{ "achievement_criteria_data", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAchievementCriteriaDataCommand, "", NULL },
{ "achievement_reward", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAchievementRewardCommand, "", NULL },
{ "areatrigger_involvedrelation",SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadQuestAreaTriggersCommand, "", NULL },
{ "areatrigger_tavern", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTavernCommand, "", NULL },
{ "areatrigger_teleport", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAreaTriggerTeleportCommand, "", NULL },
- { "access_requirement", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAccessRequirementCommand, "", NULL },
+ { "autobroadcast", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadAutobroadcastCommand, "", NULL },
{ "command", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommandCommand, "", NULL },
{ "creature_ai_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadEventAIScriptsCommand, "", NULL },
{ "creature_ai_summons", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadEventAISummonsCommand, "", NULL },
diff --git a/src/game/Chat.h b/src/game/Chat.h
index ee01b7b61f4..308698fc04f 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -342,11 +342,12 @@ class ChatHandler
bool HandleReloadConfigCommand(const char* args);
+ bool HandleReloadAccessRequirementCommand(const char* args);
bool HandleReloadAchievementCriteriaDataCommand(const char* args);
bool HandleReloadAchievementRewardCommand(const char* args);
bool HandleReloadAreaTriggerTavernCommand(const char* args);
bool HandleReloadAreaTriggerTeleportCommand(const char* args);
- bool HandleReloadAccessRequirementCommand(const char* args);
+ bool HandleReloadAutobroadcastCommand(const char* args);
bool HandleReloadEventScriptsCommand(const char* args);
bool HandleReloadEventAITextsCommand(const char* args);
bool HandleReloadEventAISummonsCommand(const char* args);
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index c1b8b56f043..f062807ec10 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -562,6 +562,8 @@ bool ChatHandler::HandleReloadAllCommand(const char*)
HandleReloadReservedNameCommand("");
HandleReloadTrinityStringCommand("");
HandleReloadGameTeleCommand("");
+
+ HandleReloadAutobroadcastCommand("");
return true;
}
@@ -688,6 +690,14 @@ bool ChatHandler::HandleReloadConfigCommand(const char* /*args*/)
return true;
}
+bool ChatHandler::HandleReloadAccessRequirementCommand(const char*)
+{
+ sLog.outString( "Re-Loading Access Requirement definitions..." );
+ objmgr.LoadAccessRequirements();
+ SendGlobalGMSysMessage("DB table `access_requirement` reloaded.");
+ return true;
+}
+
bool ChatHandler::HandleReloadAchievementCriteriaDataCommand(const char*)
{
sLog.outString( "Re-Loading Additional Achievement Criteria Data..." );
@@ -720,13 +730,13 @@ bool ChatHandler::HandleReloadAreaTriggerTeleportCommand(const char*)
return true;
}
-bool ChatHandler::HandleReloadAccessRequirementCommand(const char*)
+bool ChatHandler::HandleReloadAutobroadcastCommand(const char*)
{
- sLog.outString( "Re-Loading Access Requirement definitions..." );
- objmgr.LoadAccessRequirements();
- SendGlobalGMSysMessage("DB table `access_requirement` reloaded.");
- return true;
- }
+ sLog.outString("Re-Loading Aautobroadcast...");
+ sWorld.LoadAutobroadcasts();
+ SendGlobalGMSysMessage("DB table `autobroadcast` reloaded.");
+ return true;
+}
bool ChatHandler::HandleReloadCommandCommand(const char*)
{
diff --git a/src/game/World.cpp b/src/game/World.cpp
index f7cc552342a..1f82c4d2c9b 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -67,6 +67,7 @@
#include "Language.h"
#include "CreatureGroups.h"
#include "Transports.h"
+#include "ProgressBar.h"
INSTANTIATE_SINGLETON_1( World );
@@ -1494,6 +1495,9 @@ void World::SetInitialWorldSettings()
sLog.outString( "Returning old mails..." );
objmgr.ReturnOrDeleteOldMails(false);
+ sLog.outString("Loading Autobroadcasts...");
+ LoadAutobroadcasts();
+
///- Load and initialize scripts
sLog.outString( "Loading Scripts..." );
sLog.outString();
@@ -1699,6 +1703,45 @@ void World::RecordTimeDiff(const char *text, ...)
m_currentTime = thisTime;
}
+void World::LoadAutobroadcasts()
+{
+ m_Autobroadcasts.clear();
+
+ QueryResult *result = WorldDatabase.Query("SELECT text FROM autobroadcast");
+
+ if(!result)
+ {
+ barGoLink bar(1);
+ bar.step();
+
+ sLog.outString();
+ sLog.outString( ">> Loaded 0 autobroadcasts definitions");
+ return;
+ }
+
+ barGoLink bar(result->GetRowCount());
+
+ uint32 count = 0;
+
+ do
+ {
+ bar.step();
+
+ Field *fields = result->Fetch();
+
+ std::string message = fields[0].GetCppString();
+
+ m_Autobroadcasts.push_back(message);
+
+ count++;
+ } while(result->NextRow());
+
+ delete result;
+
+ sLog.outString();
+ sLog.outString( ">> Loaded %u autobroadcasts definitions", count);
+}
+
/// Update the World !
void World::Update(uint32 diff)
{
@@ -2321,41 +2364,41 @@ void World::ProcessCliCommands()
void World::SendRNDBroadcast()
{
- std::string msg;
- QueryResult *result = WorldDatabase.PQuery("SELECT `text` FROM autobroadcast AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM autobroadcast)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 1"); // ORDER BY RAND() is bad.. look it up to see why.
+ if(m_Autobroadcasts.empty())
+ return;
- if(!result)
- return;
+ std::string msg;
- msg = result->Fetch()[0].GetString();
- delete result;
+ std::list<std::string>::const_iterator itr = m_Autobroadcasts.begin();
+ std::advance(itr, rand() % m_Autobroadcasts.size());
+ msg = *itr;
- static uint32 abcenter = 0;
+ static uint32 abcenter = 0;
abcenter = sConfig.GetIntDefault("AutoBroadcast.Center", 0);
if(abcenter == 0)
{
- sWorld.SendWorldText(LANG_AUTO_BROADCAST, msg.c_str());
+ 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 == 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());
+ 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);
+ WorldPacket data(SMSG_NOTIFICATION, (msg.size()+1));
+ data << msg;
+ sWorld.SendGlobalMessage(&data);
- sLog.outString("AutoBroadcast: '%s'",msg.c_str());
- }
+ sLog.outString("AutoBroadcast: '%s'",msg.c_str());
+ }
}
void World::InitResultQueue()
diff --git a/src/game/World.h b/src/game/World.h
index 0bd2abb4c9b..783b57d0175 100644
--- a/src/game/World.h
+++ b/src/game/World.h
@@ -597,6 +597,8 @@ class World
char const* GetScriptsVersion() { return m_ScriptsVersion.c_str(); }
void RecordTimeDiff(const char * text, ...);
+
+ void LoadAutobroadcasts();
protected:
void _UpdateGameTime();
// callback for UpdateRealmCharacters
@@ -675,6 +677,8 @@ class World
std::string m_DBVersion;
std::string m_CreatureEventAIVersion;
std::string m_ScriptsVersion;
+
+ std::list<std::string> m_Autobroadcasts;
};
extern uint32 realmID;