aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-07-30 20:52:46 +0200
committerShauren <shauren.trinity@gmail.com>2020-07-30 20:52:46 +0200
commit0fc7b50c041131b3d6dbc011f29d6547c9ca0660 (patch)
tree71917cff5af82eeb60c67ebf68728dc8471c0a4e /src
parent57eaab80d9e1f6f25274f376da16e1f2f67ab4bc (diff)
Core/Commands: Initialize commands on startup instead of first use
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Chat/Chat.cpp35
-rw-r--r--src/server/game/Chat/Chat.h1
-rw-r--r--src/server/game/World/World.cpp3
3 files changed, 23 insertions, 16 deletions
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index 20468af0511..7518b80050d 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -42,27 +42,30 @@ static Optional<std::vector<ChatCommand>> commandTableCache;
std::vector<ChatCommand> const& ChatHandler::getCommandTable()
{
if (!commandTableCache)
- {
- // We need to initialize this at top since SetDataForCommandInTable
- // calls getCommandTable() recursively.
- commandTableCache = sScriptMgr->GetChatCommands();
+ InitializeCommandTable();
+
+ return *commandTableCache;
+}
+
+void ChatHandler::InitializeCommandTable()
+{
+ // We need to initialize this at top since SetDataForCommandInTable
+ // calls getCommandTable() recursively.
+ commandTableCache = sScriptMgr->GetChatCommands();
- WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_COMMANDS);
- PreparedQueryResult result = WorldDatabase.Query(stmt);
- if (result)
+ WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_COMMANDS);
+ PreparedQueryResult result = WorldDatabase.Query(stmt);
+ if (result)
+ {
+ do
{
- do
- {
- Field* fields = result->Fetch();
- std::string name = fields[0].GetString();
+ Field* fields = result->Fetch();
+ std::string name = fields[0].GetString();
- SetDataForCommandInTable(*commandTableCache, name.c_str(), fields[1].GetUInt16(), fields[2].GetString(), name);
- }
- while (result->NextRow());
+ SetDataForCommandInTable(*commandTableCache, name.c_str(), fields[1].GetUInt16(), fields[2].GetString(), name);
}
+ while (result->NextRow());
}
-
- return *commandTableCache;
}
void ChatHandler::invalidateCommandTable()
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index e6c96212566..13e0c18c37a 100644
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -83,6 +83,7 @@ class TC_GAME_API ChatHandler
virtual bool ParseCommands(char const* text);
static std::vector<ChatCommand> const& getCommandTable();
+ static void InitializeCommandTable();
static void invalidateCommandTable();
void SendGlobalSysMessage(const char *str);
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 8badf72b7f8..06387511eba 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -2075,6 +2075,9 @@ void World::SetInitialWorldSettings()
TC_LOG_INFO("server.loading", "Initialize query data...");
sObjectMgr->InitializeQueriesData(QUERY_DATA_ALL);
+ TC_LOG_INFO("server.loading", "Initialize commands...");
+ ChatHandler::InitializeCommandTable();
+
///- Initialize game time and timers
TC_LOG_INFO("server.loading", "Initialize game time and timers");
GameTime::UpdateGameTimers();