*Read AutoBroadcast's messages from cache instead of from DB every times.

--HG--
branch : trunk
This commit is contained in:
Anubisss
2009-08-10 17:03:11 +02:00
parent 7faff34ae5
commit 18f712f52b
7 changed files with 95 additions and 34 deletions
+2
View File
@@ -0,0 +1,2 @@
DELETE FROM `command` WHERE `name` = 'reload autobroadcast';
INSERT INTO `command` (`name`, `security`, `help`) VALUES ('reload autobroadcast', 3, 'Syntax: .reload autobroadcast\nReload autobroadcast table.');
+2 -1
View File
@@ -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 },
+2 -1
View File
@@ -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);
+16 -6
View File
@@ -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*)
{
+68 -25
View File
@@ -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()
+4
View File
@@ -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;
+1 -1
View File
@@ -1362,7 +1362,7 @@ Death.Bones.BattlegroundOrArena = 1
# 2 - both
#
# AutoBroadcast.Timer
# Timer for auto broadcast
# Timer for auto broadcast (in milliseconds)
#
###################################################################################################################