aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Conditions/DisableMgr.cpp24
-rw-r--r--src/server/game/Conditions/DisableMgr.h4
2 files changed, 12 insertions, 16 deletions
diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp
index 21957198bac..43c9d928107 100644
--- a/src/server/game/Conditions/DisableMgr.cpp
+++ b/src/server/game/Conditions/DisableMgr.cpp
@@ -42,17 +42,13 @@ namespace
struct DisableData
{
uint8 flags;
- std::set<uint32> params[2]; // params0, params1
+ std::unordered_set<uint32> params[2]; // params0, params1
};
// single disables here with optional data
- typedef std::map<uint32, DisableData> DisableTypeMap;
- // global disable map by source
- typedef std::map<DisableType, DisableTypeMap> DisableMap;
+ typedef std::unordered_map<uint32, DisableData> DisableTypeMap;
- DisableMap m_DisableMap;
-
- uint8 MAX_DISABLE_TYPES = 8;
+ std::array<DisableTypeMap, MAX_DISABLE_TYPES> m_DisableMap;
}
void LoadDisables()
@@ -60,10 +56,8 @@ void 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 (std::size_t i = 0; i < m_DisableMap.size(); ++i)
+ m_DisableMap[i].clear();
QueryResult result = WorldDatabase.Query("SELECT sourceType, entry, flags, params_0, params_1 FROM disables");
@@ -184,7 +178,7 @@ void LoadDisables()
TC_LOG_ERROR("sql.sql", "Disable flags specified for outdoor PvP %u, useless data.", entry);
break;
case DISABLE_TYPE_CRITERIA:
- if (!sCriteriaMgr->GetCriteria(entry))
+ if (!sCriteriaStore.LookupEntry(entry))
{
TC_LOG_ERROR("sql.sql", "Criteria entry %u from `disables` doesn't exist in dbc, skipped.", entry);
continue;
@@ -237,7 +231,7 @@ void LoadDisables()
break;
}
- m_DisableMap[type].insert(DisableTypeMap::value_type(entry, data));
+ m_DisableMap[type][entry] = std::move(data);
++total_count;
}
while (result->NextRow());
@@ -296,7 +290,7 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
{
if (spellFlags & SPELL_DISABLE_MAP)
{
- std::set<uint32> const& mapIds = itr->second.params[0];
+ std::unordered_set<uint32> const& mapIds = itr->second.params[0];
if (mapIds.find(unit->GetMapId()) != mapIds.end())
return true; // Spell is disabled on current map
@@ -308,7 +302,7 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
if (spellFlags & SPELL_DISABLE_AREA)
{
- std::set<uint32> const& areaIds = itr->second.params[1];
+ std::unordered_set<uint32> const& areaIds = itr->second.params[1];
if (areaIds.find(unit->GetAreaId()) != areaIds.end())
return true; // Spell is disabled in this area
return false; // Spell is disabled in another area, but not this one, return false
diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h
index 95e54932f15..85d3c40d604 100644
--- a/src/server/game/Conditions/DisableMgr.h
+++ b/src/server/game/Conditions/DisableMgr.h
@@ -33,7 +33,9 @@ enum DisableType
DISABLE_TYPE_CRITERIA = 4,
DISABLE_TYPE_OUTDOORPVP = 5,
DISABLE_TYPE_VMAP = 6,
- DISABLE_TYPE_MMAP = 7
+ DISABLE_TYPE_MMAP = 7,
+
+ MAX_DISABLE_TYPES
};
enum SpellDisableTypes