diff options
author | Shauren <shauren.trinity@gmail.com> | 2018-09-25 21:08:38 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2018-09-26 23:08:22 +0200 |
commit | a6fb448b44b5c7e64e6ea960bf951ccf0a8dd0c9 (patch) | |
tree | b0e24d187f2ba39d3258e08410cfb7becc1676e0 /src/server/game/Phasing | |
parent | f46314c8cec6c741273b37f77fef378c619a6263 (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.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Phasing/PhaseShift.h | 14 | ||||
-rw-r--r-- | src/server/game/Phasing/PhasingHandler.cpp | 41 |
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()); |