Core/Conditions: fix a memory leak for CONDITION_SOURCE_TYPE_TERRAIN_SWAP

Reported by Aokromes.
This commit is contained in:
ariel-
2016-03-02 22:02:45 -03:00
parent d0263c03fd
commit 3a7f311547
5 changed files with 22 additions and 61 deletions
+16 -16
View File
@@ -3112,26 +3112,26 @@ void WorldObject::RebuildTerrainSwaps()
// Check all applied phases for terrain swap and add it only once
for (uint32 phaseId : _phases)
{
if (std::vector<PhaseInfoStruct> const* swaps = sObjectMgr->GetPhaseTerrainSwaps(phaseId))
if (std::vector<uint32> const* swaps = sObjectMgr->GetPhaseTerrainSwaps(phaseId))
{
for (PhaseInfoStruct const& swap : *swaps)
for (uint32 const& swap : *swaps)
{
// only add terrain swaps for current map
MapEntry const* mapEntry = sMapStore.LookupEntry(swap.Id);
MapEntry const* mapEntry = sMapStore.LookupEntry(swap);
if (!mapEntry || mapEntry->ParentMapID != int32(GetMapId()))
continue;
if (sConditionMgr->IsObjectMeetToConditions(this, swap.Conditions))
_terrainSwaps.insert(swap.Id);
if (sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, swap, this))
_terrainSwaps.insert(swap);
}
}
}
// get default terrain swaps, only for current map always
if (std::vector<PhaseInfoStruct> const* mapSwaps = sObjectMgr->GetDefaultTerrainSwaps(GetMapId()))
for (PhaseInfoStruct const& swap : *mapSwaps)
if (sConditionMgr->IsObjectMeetToConditions(this, swap.Conditions))
_terrainSwaps.insert(swap.Id);
if (std::vector<uint32> const* mapSwaps = sObjectMgr->GetDefaultTerrainSwaps(GetMapId()))
for (uint32 const& swap : *mapSwaps)
if (sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, swap, this))
_terrainSwaps.insert(swap);
// online players have a game client with world map display
if (GetTypeId() == TYPEID_PLAYER)
@@ -3147,18 +3147,18 @@ void WorldObject::RebuildWorldMapAreaSwaps()
// send the worldmaparea for it, to see swapped worldmaparea in client from other maps too, not just from our current
TerrainPhaseInfo const& defaults = sObjectMgr->GetDefaultTerrainSwapStore();
for (TerrainPhaseInfo::const_iterator itr = defaults.begin(); itr != defaults.end(); ++itr)
for (PhaseInfoStruct const& swap : itr->second)
if (std::vector<uint32> const* uiMapSwaps = sObjectMgr->GetTerrainWorldMaps(swap.Id))
if (sConditionMgr->IsObjectMeetToConditions(this, swap.Conditions))
for (uint32 const& swap : itr->second)
if (std::vector<uint32> const* uiMapSwaps = sObjectMgr->GetTerrainWorldMaps(swap))
if (sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, swap, this))
for (uint32 worldMapAreaId : *uiMapSwaps)
_worldMapAreaSwaps.insert(worldMapAreaId);
// Check all applied phases for world map area swaps
for (uint32 phaseId : _phases)
if (std::vector<PhaseInfoStruct> const* swaps = sObjectMgr->GetPhaseTerrainSwaps(phaseId))
for (PhaseInfoStruct const& swap : *swaps)
if (std::vector<uint32> const* uiMapSwaps = sObjectMgr->GetTerrainWorldMaps(swap.Id))
if (sConditionMgr->IsObjectMeetToConditions(this, swap.Conditions))
if (std::vector<uint32> const* swaps = sObjectMgr->GetPhaseTerrainSwaps(phaseId))
for (uint32 const& swap : *swaps)
if (std::vector<uint32> const* uiMapSwaps = sObjectMgr->GetTerrainWorldMaps(swap))
if (sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, swap, this))
for (uint32 worldMapAreaId : *uiMapSwaps)
_worldMapAreaSwaps.insert(worldMapAreaId);
}