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:
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;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user