Core/WorldStates: Allow using -1 in database for MapIDs column to mark worldstates that should be bound to a map and allowed on all maps

This commit is contained in:
Shauren authored and Ovahlord committed 2022-12-29 22:15:58 +01:00
1 parent 81b2ff0d94
commit 353b06d16e
1 file changed
+12 -8
@@ -28,9 +28,10 @@
namespace
{
constexpr int32 WORLDSTATE_ANY_MAP = -1;
std::unordered_map<int32, WorldStateTemplate> _worldStateTemplates;
WorldStateValueContainer _realmWorldStateValues;
std::unordered_map<uint32, WorldStateValueContainer> _worldStatesByMap;
std::unordered_map<int32, WorldStateValueContainer> _worldStatesByMap;
}
void WorldStateMgr::LoadFromDB()
@@ -55,7 +56,7 @@ void WorldStateMgr::LoadFromDB()
uint8 i = 0;
for (Tokenizer::const_iterator itr = tokens.begin(); itr != tokens.end(); ++itr, ++i)
{
uint32 mapId = atoul(*itr);
int32 mapId = atoi(*itr);
if (!mapId)
{
TC_LOG_ERROR("sql.sql", "Table `world_state` contains a world state %d with non-integer MapID (%s), map ignored",
@@ -63,7 +64,7 @@ void WorldStateMgr::LoadFromDB()
continue;
}
if (!sMapStore.LookupEntry(mapId))
if (!sMapStore.LookupEntry(mapId) && mapId != WORLDSTATE_ANY_MAP)
{
TC_LOG_ERROR("sql.sql", "Table `world_state` contains a world state %d with invalid MapID (%u), map ignored",
id, mapId);
@@ -129,7 +130,7 @@ void WorldStateMgr::LoadFromDB()
if (!worldState.MapIds.empty())
{
for (uint32 mapId : worldState.MapIds)
for (int32 mapId : worldState.MapIds)
_worldStatesByMap[mapId][id] = worldState.DefaultValue;
}
else
@@ -160,7 +161,7 @@ void WorldStateMgr::LoadFromDB()
if (!worldState->MapIds.empty())
{
for (uint32 mapId : worldState->MapIds)
for (int32 mapId : worldState->MapIds)
_worldStatesByMap[mapId][worldStateId] = value;
}
else
@@ -189,7 +190,7 @@ int32 WorldStateMgr::GetValue(int32 worldStateId, Map const* map) const
return 0;
}
if (!map || worldStateTemplate->MapIds.find(map->GetId()) == worldStateTemplate->MapIds.end())
if (!map || (!worldStateTemplate->MapIds.count(map->GetId()) && !worldStateTemplate->MapIds.count(WORLDSTATE_ANY_MAP)))
return 0;
return map->GetWorldStateValue(worldStateId);
@@ -219,7 +220,7 @@ void WorldStateMgr::SetValue(int32 worldStateId, int32 value, bool hidden, Map*
return;
}
if (!map || worldStateTemplate->MapIds.find(map->GetId()) == worldStateTemplate->MapIds.end())
if (!map || (!worldStateTemplate->MapIds.count(map->GetId()) && !worldStateTemplate->MapIds.count(WORLDSTATE_ANY_MAP)))
return;
map->SetWorldStateValue(worldStateId, value, hidden);
@@ -246,7 +247,10 @@ WorldStateValueContainer WorldStateMgr::GetInitialWorldStatesForMap(Map const* m
{
WorldStateValueContainer initialValues;
if (WorldStateValueContainer const* valuesTemplate = Trinity::Containers::MapGetValuePtr(_worldStatesByMap, map->GetId()))
initialValues = *valuesTemplate;
initialValues.insert(valuesTemplate->begin(), valuesTemplate->end());
if (WorldStateValueContainer const* valuesTemplate = Trinity::Containers::MapGetValuePtr(_worldStatesByMap, WORLDSTATE_ANY_MAP))
initialValues.insert(valuesTemplate->begin(), valuesTemplate->end());
return initialValues;
}