From 409c7356ead2978ca1ae1f601e94d9a911c4995c Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sun, 5 Feb 2023 13:32:41 +0100 Subject: [PATCH] refactor(Core/ObjectMgr): Load Creatures.CustomIDs into stores (#14835) --- src/server/game/Globals/ObjectMgr.cpp | 25 ++++++++++++++++--------- src/server/game/Globals/ObjectMgr.h | 4 ++++ src/server/game/World/World.cpp | 3 +++ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index e900f625f..58546192e 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -841,6 +841,21 @@ void ObjectMgr::LoadCreatureTemplateAddons() LOG_INFO("server.loading", " "); } +/** + * @brief Load config option Creatures.CustomIDs into Store + */ +void ObjectMgr::LoadCreatureCustomIDs() +{ + // Hack for modules + std::string stringCreatureIds = sConfigMgr->GetOption("Creatures.CustomIDs", ""); + std::vector CustomCreatures = Acore::Tokenize(stringCreatureIds, ',', false); + + for (auto itr : CustomCreatures) + { + _creatureCustomIDsStore.push_back(Acore::StringTo(itr).value()); + } +} + void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) { if (!cInfo) @@ -1183,15 +1198,7 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) const_cast(cInfo)->DamageModifier *= Creature::_GetDamageMod(cInfo->rank); // Hack for modules - std::vector CustomCreatures; - std::string stringCreatureIds(sConfigMgr->GetOption("Creatures.CustomIDs", "")); - for (std::string_view id : Acore::Tokenize(stringCreatureIds, ',', false)) - { - uint32 entry = Acore::StringTo(id).value_or(0); - CustomCreatures.emplace_back(entry); - } - - for (auto const& itr : CustomCreatures) + for (auto itr : _creatureCustomIDsStore) { if (cInfo->Entry == itr) return; diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 2403e8a76..19ea6b2a5 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -672,6 +672,8 @@ typedef std::unordered_map CacheVendorItemContainer; typedef std::unordered_map CacheTrainerSpellContainer; typedef std::unordered_map ServerMailContainer; +typedef std::vector CreatureCustomIDsContainer; + enum SkillRangeType { SKILL_RANGE_LANGUAGE, // 300..300 @@ -1020,6 +1022,7 @@ public: void LoadCreatureTemplateAddons(); void LoadCreatureTemplateResistances(); void LoadCreatureTemplateSpells(); + void LoadCreatureCustomIDs(); void CheckCreatureTemplate(CreatureTemplate const* cInfo); void CheckCreatureMovement(char const* table, uint64 id, CreatureMovementData& creatureMovement); void LoadGameObjectQuestItems(); @@ -1555,6 +1558,7 @@ private: CellObjectGuids _emptyCellObjectGuids; CreatureDataContainer _creatureDataStore; CreatureTemplateContainer _creatureTemplateStore; + CreatureCustomIDsContainer _creatureCustomIDsStore; std::vector _creatureTemplateStoreFast; // pussywizard CreatureModelContainer _creatureModelStore; CreatureAddonContainer _creatureAddonStore; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 787f0df92..8110e1028 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1697,6 +1697,9 @@ void World::SetInitialWorldSettings() LOG_INFO("server.loading", "Loading Creature Model Based Info Data..."); sObjectMgr->LoadCreatureModelInfo(); + LOG_INFO("server.loading", "Loading Creature Custom IDs Config..."); + sObjectMgr->LoadCreatureCustomIDs(); + LOG_INFO("server.loading", "Loading Creature Templates..."); sObjectMgr->LoadCreatureTemplates();