Core/WorldStates: Add area requirements to world states
This commit is contained in:
1 parent
67dd72dfc0
commit
10823f8fcc
6 files changed
+90
-8
No files matched your search
@@ -3538,12 +3538,29 @@ void Map::SetWorldStateValue(int32 worldStateId, int32 value)
|
||||
int32 oldValue = itr->second;
|
||||
itr->second = value;
|
||||
|
||||
if (WorldStateTemplate const* worldStateTemplate = sWorldStateMgr->GetWorldStateTemplate(worldStateId))
|
||||
WorldStateTemplate const* worldStateTemplate = sWorldStateMgr->GetWorldStateTemplate(worldStateId);
|
||||
if (worldStateTemplate)
|
||||
sScriptMgr->OnWorldStateValueChange(worldStateTemplate, oldValue, value, this);
|
||||
|
||||
// Broadcast update to all players on the map
|
||||
WorldPackets::WorldState::UpdateWorldState updateWorldState;
|
||||
updateWorldState.VariableID = worldStateId;
|
||||
updateWorldState.Value = value;
|
||||
SendToPlayers(updateWorldState.Write());
|
||||
updateWorldState.Write();
|
||||
|
||||
for (MapReference const& mapReference : m_mapRefManager)
|
||||
{
|
||||
if (worldStateTemplate && !worldStateTemplate->AreaIds.empty())
|
||||
{
|
||||
bool isInAllowedArea = std::any_of(worldStateTemplate->AreaIds.begin(), worldStateTemplate->AreaIds.end(),
|
||||
[playerAreaId = mapReference.GetSource()->GetAreaId()](uint32 requiredAreaId)
|
||||
{
|
||||
return DBCManager::IsInArea(playerAreaId, requiredAreaId);
|
||||
});
|
||||
if (!isInAllowedArea)
|
||||
continue;
|
||||
}
|
||||
|
||||
mapReference.GetSource()->SendDirectMessage(updateWorldState.GetRawPacket());
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user