fix(Core/Disables): Optimize DisableMgr container (#21416)

This commit is contained in:
Takenbacon 2025-02-12 05:40:04 -08:00 committed by GitHub
parent b17d69b33c
commit 5421f13c13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 10 deletions

View File

@ -28,7 +28,7 @@
#include "VMapMgr2.h"
#include "World.h"
std::map<DisableType, std::map<uint32, DisableData>> 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)
{

View File

@ -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<uint32, DisableData> DisableTypeMap;
typedef std::unordered_map<uint32, DisableData> DisableTypeMap;
// global disable map by source
typedef std::map<DisableType, DisableTypeMap> DisableMap;
typedef std::array<DisableTypeMap, MAX_DISABLE_TYPES> DisableMap;
private:
static DisableMap m_DisableMap;
};