diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 09dbde3cf8..9db63ad353 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -56,6 +56,7 @@ #include "SpellScript.h" #include "TemporarySummon.h" #include "TerrainMgr.h" +#include "ThreadPool.h" #include "UpdateMask.h" #include "Util.h" #include "Vehicle.h" @@ -10234,25 +10235,29 @@ void ObjectMgr::InitializeQueriesData(QueryDataGroup mask) return; } + Trinity::ThreadPool pool; + // Initialize Query data for creatures if (mask & QUERY_DATA_CREATURES) - for (auto& creaturePair : _creatureTemplateStore) - creaturePair.second.InitializeQueryData(); + for (auto& creatureTemplatePair : _creatureTemplateStore) + pool.PostWork([creature = &creatureTemplatePair.second]() { creature->InitializeQueryData(); }); // Initialize Query Data for gameobjects if (mask & QUERY_DATA_GAMEOBJECTS) - for (auto& gameobjectPair : _gameObjectTemplateStore) - gameobjectPair.second.InitializeQueryData(); + for (auto& gameObjectTemplatePair : _gameObjectTemplateStore) + pool.PostWork([gobj = &gameObjectTemplatePair.second]() { gobj->InitializeQueryData(); }); // Initialize Query Data for quests if (mask & QUERY_DATA_QUESTS) - for (auto& questPair : _questTemplates) - questPair.second.InitializeQueryData(); + for (auto& questTemplatePair : _questTemplates) + pool.PostWork([quest = &questTemplatePair.second]() { quest->InitializeQueryData(); }); // Initialize Quest POI data if (mask & QUERY_DATA_POIS) - for (auto& poiPair : _questPOIStore) - poiPair.second.InitializeQueryData(); + for (auto& poiWrapperPair : _questPOIStore) + pool.PostWork([poi = &poiWrapperPair.second]() { poi->InitializeQueryData(); }); + + pool.Join(); TC_LOG_INFO("server.loading", ">> Initialized query cache data in %u ms", GetMSTimeDiffToNow(oldMSTime)); }