From 5421f13c1330af2e008ae264aabc77d09f8deae9 Mon Sep 17 00:00:00 2001 From: Takenbacon Date: Wed, 12 Feb 2025 05:40:04 -0800 Subject: [PATCH] fix(Core/Disables): Optimize DisableMgr container (#21416) --- src/server/game/Conditions/DisableMgr.cpp | 10 ++++------ src/server/game/Conditions/DisableMgr.h | 9 +++++---- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp index e1019aee8..abb9681be 100644 --- a/src/server/game/Conditions/DisableMgr.cpp +++ b/src/server/game/Conditions/DisableMgr.cpp @@ -28,7 +28,7 @@ #include "VMapMgr2.h" #include "World.h" -std::map> DisableMgr::m_DisableMap; +DisableMgr::DisableMap DisableMgr::m_DisableMap; DisableMgr::DisableMgr() {} DisableMgr::~DisableMgr() {} @@ -44,10 +44,8 @@ void DisableMgr::LoadDisables() uint32 oldMSTime = getMSTime(); // reload case - for (DisableMap::iterator itr = m_DisableMap.begin(); itr != m_DisableMap.end(); ++itr) - itr->second.clear(); - - m_DisableMap.clear(); + for (DisableTypeMap& disableTypeMap : m_DisableMap) + disableTypeMap.clear(); QueryResult result = WorldDatabase.Query("SELECT sourceType, entry, flags, params_0, params_1 FROM disables"); @@ -99,7 +97,7 @@ void DisableMgr::LoadDisables() * @param param0 MapId if DISABLE_TYPE_SPELL used, 0 for all maps. * @param param1 AreaId if DISABLE_TYPE_SPELL used, 0 for all areas. */ -void DisableMgr::AddDisable(DisableType type, uint32 entry, uint8 flags, std::string param0, std::string param1) +void DisableMgr::AddDisable(DisableType type, uint32 entry, uint8 flags, std::string const& param0, std::string const& param1) { if (type >= MAX_DISABLE_TYPES) { diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h index 1c7b7f2a6..bfad29a4d 100644 --- a/src/server/game/Conditions/DisableMgr.h +++ b/src/server/game/Conditions/DisableMgr.h @@ -20,6 +20,7 @@ #include "Define.h" #include "Map.h" + class Unit; enum DisableType @@ -68,19 +69,19 @@ public: static DisableMgr* instance(); void LoadDisables(); - void AddDisable(DisableType type, uint32 entry, uint8 flags, std::string param0, std::string param1); + void AddDisable(DisableType type, uint32 entry, uint8 flags, std::string const& param0, std::string const& param1); bool HandleDisableType(DisableType type, uint32 entry, uint8 flags, std::string const& params_0, std::string const& params_1, DisableData& data); static bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags = 0); void CheckQuestDisables(); static bool IsVMAPDisabledFor(uint32 entry, uint8 flags); static bool IsPathfindingEnabled(Map const* map); -private: // single disables here with optional data - typedef std::map DisableTypeMap; + typedef std::unordered_map DisableTypeMap; // global disable map by source - typedef std::map DisableMap; + typedef std::array DisableMap; +private: static DisableMap m_DisableMap; };