*Read AutoBroadcast's messages from cache instead of from DB every times.
--HG-- branch : trunk
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1362,7 +1362,7 @@ Death.Bones.BattlegroundOrArena = 1
|
||||
# 2 - both
|
||||
#
|
||||
# AutoBroadcast.Timer
|
||||
# Timer for auto broadcast
|
||||
# Timer for auto broadcast (in milliseconds)
|
||||
#
|
||||
###################################################################################################################
|
||||
|
||||
|
||||
Reference in New Issue
Block a user