diff options
author | Anubisss <none@none> | 2009-08-10 17:03:11 +0200 |
---|---|---|
committer | Anubisss <none@none> | 2009-08-10 17:03:11 +0200 |
commit | 18f712f52b9270747a6f307440b7da1e6195d0e1 (patch) | |
tree | 202d36f8dd6e45dcaddb9426637fe0f428e1566c /src/game | |
parent | 7faff34ae5a51b854536ef597b51c19e3754523e (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.cpp | 3 | ||||
-rw-r--r-- | src/game/Chat.h | 3 | ||||
-rw-r--r-- | src/game/Level3.cpp | 22 | ||||
-rw-r--r-- | src/game/World.cpp | 93 | ||||
-rw-r--r-- | src/game/World.h | 4 |
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; |