aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Phasing
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-09-25 21:08:38 +0200
committerShauren <shauren.trinity@gmail.com>2018-09-26 23:08:22 +0200
commita6fb448b44b5c7e64e6ea960bf951ccf0a8dd0c9 (patch)
treeb0e24d187f2ba39d3258e08410cfb7becc1676e0 /src/server/game/Phasing
parentf46314c8cec6c741273b37f77fef378c619a6263 (diff)
Core/DataStores: Updated hotfix database structure
* Updated handling for removed db2s
Diffstat (limited to 'src/server/game/Phasing')
-rw-r--r--src/server/game/Phasing/PhaseShift.cpp16
-rw-r--r--src/server/game/Phasing/PhaseShift.h14
-rw-r--r--src/server/game/Phasing/PhasingHandler.cpp41
3 files changed, 37 insertions, 34 deletions
diff --git a/src/server/game/Phasing/PhaseShift.cpp b/src/server/game/Phasing/PhaseShift.cpp
index b2885ae15bb..b7df2e5cd13 100644
--- a/src/server/game/Phasing/PhaseShift.cpp
+++ b/src/server/game/Phasing/PhaseShift.cpp
@@ -60,23 +60,23 @@ PhaseShift::EraseResult<PhaseShift::VisibleMapIdContainer> PhaseShift::RemoveVis
return { VisibleMapIds.end(), false };
}
-bool PhaseShift::AddUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId, int32 references /*= 1*/)
+bool PhaseShift::AddUiMapPhaseId(uint32 uiMapPhaseId, int32 references /*= 1*/)
{
- auto insertResult = UiWorldMapAreaIdSwaps.emplace(uiWorldMapAreaId, UiWorldMapAreaIdSwapRef{ 0 });
+ auto insertResult = UiMapPhaseIds.emplace(uiMapPhaseId, UiMapPhaseIdRef{ 0 });
insertResult.first->second.References += references;
return insertResult.second;
}
-PhaseShift::EraseResult<PhaseShift::UiWorldMapAreaIdSwapContainer> PhaseShift::RemoveUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId)
+PhaseShift::EraseResult<PhaseShift::UiMapPhaseIdContainer> PhaseShift::RemoveUiMapPhaseId(uint32 uiMapPhaseId)
{
- auto itr = UiWorldMapAreaIdSwaps.find(uiWorldMapAreaId);
- if (itr != UiWorldMapAreaIdSwaps.end())
+ auto itr = UiMapPhaseIds.find(uiMapPhaseId);
+ if (itr != UiMapPhaseIds.end())
{
if (!--itr->second.References)
- return { UiWorldMapAreaIdSwaps.erase(itr), true };
+ return { UiMapPhaseIds.erase(itr), true };
return { itr, false };
}
- return { UiWorldMapAreaIdSwaps.end(), false };
+ return { UiMapPhaseIds.end(), false };
}
void PhaseShift::Clear()
@@ -84,7 +84,7 @@ void PhaseShift::Clear()
ClearPhases();
PersonalGuid.Clear();
VisibleMapIds.clear();
- UiWorldMapAreaIdSwaps.clear();
+ UiMapPhaseIds.clear();
}
void PhaseShift::ClearPhases()
diff --git a/src/server/game/Phasing/PhaseShift.h b/src/server/game/Phasing/PhaseShift.h
index f1929168613..c15bf4100a2 100644
--- a/src/server/game/Phasing/PhaseShift.h
+++ b/src/server/game/Phasing/PhaseShift.h
@@ -68,7 +68,7 @@ public:
int32 References = 0;
TerrainSwapInfo const* VisibleMapInfo = nullptr;
};
- struct UiWorldMapAreaIdSwapRef
+ struct UiMapPhaseIdRef
{
int32 References = 0;
};
@@ -80,7 +80,7 @@ public:
};
typedef boost::container::flat_set<PhaseRef> PhaseContainer;
typedef std::map<uint32, VisibleMapIdRef> VisibleMapIdContainer;
- typedef std::map<uint32, UiWorldMapAreaIdSwapRef> UiWorldMapAreaIdSwapContainer;
+ typedef std::map<uint32, UiMapPhaseIdRef> UiMapPhaseIdContainer;
PhaseShift() : Flags(PhaseShiftFlags::Unphased), NonCosmeticReferences(0), CosmeticReferences(0), DefaultReferences(0), IsDbPhaseShift(false) { }
@@ -94,10 +94,10 @@ public:
bool HasVisibleMapId(uint32 visibleMapId) const { return VisibleMapIds.find(visibleMapId) != VisibleMapIds.end(); }
VisibleMapIdContainer const& GetVisibleMapIds() const { return VisibleMapIds; }
- bool AddUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId, int32 references = 1);
- EraseResult<UiWorldMapAreaIdSwapContainer> RemoveUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId);
- bool HasUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId) const { return UiWorldMapAreaIdSwaps.find(uiWorldMapAreaId) != UiWorldMapAreaIdSwaps.end(); }
- UiWorldMapAreaIdSwapContainer const& GetUiWorldMapAreaIdSwaps() const { return UiWorldMapAreaIdSwaps; }
+ bool AddUiMapPhaseId(uint32 uiMapPhaseId, int32 references = 1);
+ EraseResult<UiMapPhaseIdContainer> RemoveUiMapPhaseId(uint32 uiMapPhaseId);
+ bool HasUiMapPhaseId(uint32 uiMapPhaseId) const { return UiMapPhaseIds.find(uiMapPhaseId) != UiMapPhaseIds.end(); }
+ UiMapPhaseIdContainer const& GetUiWorldMapAreaIdSwaps() const { return UiMapPhaseIds; }
void Clear();
void ClearPhases();
@@ -111,7 +111,7 @@ protected:
ObjectGuid PersonalGuid;
PhaseContainer Phases;
VisibleMapIdContainer VisibleMapIds;
- UiWorldMapAreaIdSwapContainer UiWorldMapAreaIdSwaps;
+ UiMapPhaseIdContainer UiMapPhaseIds;
void ModifyPhasesReferences(PhaseContainer::iterator itr, int32 references);
void UpdateUnphasedFlag();
diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp
index e60c87b4816..1cce3361654 100644
--- a/src/server/game/Phasing/PhasingHandler.cpp
+++ b/src/server/game/Phasing/PhasingHandler.cpp
@@ -146,8 +146,8 @@ void PhasingHandler::AddVisibleMapId(WorldObject* object, uint32 visibleMapId)
TerrainSwapInfo const* terrainSwapInfo = sObjectMgr->GetTerrainSwapInfo(visibleMapId);
bool changed = object->GetPhaseShift().AddVisibleMapId(visibleMapId, terrainSwapInfo);
- for (uint32 uiWorldMapAreaIDSwap : terrainSwapInfo->UiWorldMapAreaIDSwaps)
- changed = object->GetPhaseShift().AddUiWorldMapAreaIdSwap(uiWorldMapAreaIDSwap) || changed;
+ for (uint32 uiMapPhaseId : terrainSwapInfo->UiMapPhaseIDs)
+ changed = object->GetPhaseShift().AddUiMapPhaseId(uiMapPhaseId) || changed;
if (Unit* unit = object->ToUnit())
{
@@ -165,8 +165,8 @@ void PhasingHandler::RemoveVisibleMapId(WorldObject* object, uint32 visibleMapId
TerrainSwapInfo const* terrainSwapInfo = sObjectMgr->GetTerrainSwapInfo(visibleMapId);
bool changed = object->GetPhaseShift().RemoveVisibleMapId(visibleMapId).Erased;
- for (uint32 uiWorldMapAreaIDSwap : terrainSwapInfo->UiWorldMapAreaIDSwaps)
- changed = object->GetPhaseShift().RemoveUiWorldMapAreaIdSwap(uiWorldMapAreaIDSwap).Erased || changed;
+ for (uint32 uiWorldMapAreaIDSwap : terrainSwapInfo->UiMapPhaseIDs)
+ changed = object->GetPhaseShift().RemoveUiMapPhaseId(uiWorldMapAreaIDSwap).Erased || changed;
if (Unit* unit = object->ToUnit())
{
@@ -198,18 +198,21 @@ void PhasingHandler::OnMapChange(WorldObject* object)
ConditionSourceInfo srcInfo = ConditionSourceInfo(object);
object->GetPhaseShift().VisibleMapIds.clear();
- object->GetPhaseShift().UiWorldMapAreaIdSwaps.clear();
+ object->GetPhaseShift().UiMapPhaseIds.clear();
object->GetSuppressedPhaseShift().VisibleMapIds.clear();
- if (std::vector<TerrainSwapInfo*> const* visibleMapIds = sObjectMgr->GetTerrainSwapsForMap(object->GetMapId()))
+ for (auto visibleMapPair : sObjectMgr->GetTerrainSwaps())
{
- for (TerrainSwapInfo const* visibleMapInfo : *visibleMapIds)
+ for (TerrainSwapInfo const* visibleMapInfo : visibleMapPair.second)
{
if (sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, visibleMapInfo->Id, srcInfo))
{
- phaseShift.AddVisibleMapId(visibleMapInfo->Id, visibleMapInfo);
- for (uint32 uiWorldMapAreaIdSwap : visibleMapInfo->UiWorldMapAreaIDSwaps)
- phaseShift.AddUiWorldMapAreaIdSwap(uiWorldMapAreaIdSwap);
+ if (visibleMapPair.first == object->GetMapId())
+ phaseShift.AddVisibleMapId(visibleMapInfo->Id, visibleMapInfo);
+
+ // ui map is visible on all maps
+ for (uint32 uiMapPhaseId : visibleMapInfo->UiMapPhaseIDs)
+ phaseShift.AddUiMapPhaseId(uiMapPhaseId);
}
else
suppressedPhaseShift.AddVisibleMapId(visibleMapInfo->Id, visibleMapInfo);
@@ -317,8 +320,8 @@ void PhasingHandler::OnConditionChange(WorldObject* object)
if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, itr->first, srcInfo))
{
newSuppressions.AddVisibleMapId(itr->first, itr->second.VisibleMapInfo, itr->second.References);
- for (uint32 uiWorldMapAreaIdSwap : itr->second.VisibleMapInfo->UiWorldMapAreaIDSwaps)
- changed = phaseShift.RemoveUiWorldMapAreaIdSwap(uiWorldMapAreaIdSwap).Erased || changed;
+ for (uint32 uiMapPhaseId : itr->second.VisibleMapInfo->UiMapPhaseIDs)
+ changed = phaseShift.RemoveUiMapPhaseId(uiMapPhaseId).Erased || changed;
itr = phaseShift.VisibleMapIds.erase(itr);
}
@@ -331,8 +334,8 @@ void PhasingHandler::OnConditionChange(WorldObject* object)
if (sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, itr->first, srcInfo))
{
changed = phaseShift.AddVisibleMapId(itr->first, itr->second.VisibleMapInfo, itr->second.References) || changed;
- for (uint32 uiWorldMapAreaIdSwap : itr->second.VisibleMapInfo->UiWorldMapAreaIDSwaps)
- changed = phaseShift.AddUiWorldMapAreaIdSwap(uiWorldMapAreaIdSwap) || changed;
+ for (uint32 uiMapPhaseId : itr->second.VisibleMapInfo->UiMapPhaseIDs)
+ changed = phaseShift.AddUiMapPhaseId(uiMapPhaseId) || changed;
itr = suppressedPhaseShift.VisibleMapIds.erase(itr);
}
@@ -403,9 +406,9 @@ void PhasingHandler::SendToPlayer(Player const* player, PhaseShift const& phaseS
phaseShiftChange.VisibleMapIDs.reserve(phaseShift.VisibleMapIds.size());
std::transform(phaseShift.VisibleMapIds.begin(), phaseShift.VisibleMapIds.end(), std::back_inserter(phaseShiftChange.VisibleMapIDs),
[](PhaseShift::VisibleMapIdContainer::value_type const& visibleMapId) { return visibleMapId.first; });
- phaseShiftChange.UiWorldMapAreaIDSwaps.reserve(phaseShift.UiWorldMapAreaIdSwaps.size());
- std::transform(phaseShift.UiWorldMapAreaIdSwaps.begin(), phaseShift.UiWorldMapAreaIdSwaps.end(), std::back_inserter(phaseShiftChange.UiWorldMapAreaIDSwaps),
- [](PhaseShift::UiWorldMapAreaIdSwapContainer::value_type const& uiWorldMapAreaIdSwap) { return uiWorldMapAreaIdSwap.first; });
+ phaseShiftChange.UiMapPhaseIDs.reserve(phaseShift.UiMapPhaseIds.size());
+ std::transform(phaseShift.UiMapPhaseIds.begin(), phaseShift.UiMapPhaseIds.end(), std::back_inserter(phaseShiftChange.UiMapPhaseIDs),
+ [](PhaseShift::UiMapPhaseIdContainer::value_type const& uiWorldMapAreaIdSwap) { return uiWorldMapAreaIdSwap.first; });
player->SendDirectMessage(phaseShiftChange.Write());
}
@@ -545,10 +548,10 @@ void PhasingHandler::PrintToChat(ChatHandler* chat, PhaseShift const& phaseShift
chat->PSendSysMessage(LANG_PHASESHIFT_VISIBLE_MAP_IDS, visibleMapIds.str().c_str());
}
- if (!phaseShift.UiWorldMapAreaIdSwaps.empty())
+ if (!phaseShift.UiMapPhaseIds.empty())
{
std::ostringstream uiWorldMapAreaIdSwaps;
- for (PhaseShift::UiWorldMapAreaIdSwapContainer::value_type const& uiWorldMapAreaIdSwap : phaseShift.UiWorldMapAreaIdSwaps)
+ for (PhaseShift::UiMapPhaseIdContainer::value_type const& uiWorldMapAreaIdSwap : phaseShift.UiMapPhaseIds)
uiWorldMapAreaIdSwaps << uiWorldMapAreaIdSwap.first << ',' << ' ';
chat->PSendSysMessage(LANG_PHASESHIFT_UI_WORLD_MAP_AREA_SWAPS, uiWorldMapAreaIdSwaps.str().c_str());