From 2583661703fd07f57c809014151bedac688912cd Mon Sep 17 00:00:00 2001 From: Rat Date: Thu, 30 Oct 2014 23:08:23 +0100 Subject: [PATCH] Core/Phases: - fixed packet structure, thanks to Shauren for the notice - fixed .mod phase command - implemented world map area swaps for swapped terrain --- src/server/game/Entities/Object/Object.cpp | 11 ----------- src/server/game/Entities/Player/Player.cpp | 10 +++++++++- src/server/game/Handlers/MiscHandler.cpp | 2 +- src/server/scripts/Commands/cs_debug.cpp | 11 +++++++++-- src/server/scripts/Commands/cs_modify.cpp | 11 +++++++---- 5 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index beb8a13ed4b..0b01da98b45 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2940,15 +2940,4 @@ void WorldObject::RebuildTerrainSwaps() _terrainSwaps.insert(swap); } } - - // Now insert the map terrain swaps - std::list& mapSwaps = sObjectMgr->GetMapTerrainSwaps(GetMapId()); - - for (auto swap : mapSwaps) - { - conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, swap); - - if (sConditionMgr->IsObjectMeetToConditions(this, conditions)) - _terrainSwaps.insert(swap); - } } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9788f5ef438..e811cfcee30 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -27993,7 +27993,15 @@ void Player::SendUpdatePhasing() if (!IsInWorld()) return; - std::set worldAreaSwaps; // @ToDo + std::set worldAreaSwaps; + + for (uint32 terrain : GetTerrainSwaps()) + { + for (uint32 map : sObjectMgr->GetMapTerrainSwaps(terrain)) + { + worldAreaSwaps.insert(map); + } + } GetSession()->SendSetPhaseShift(GetPhases(), GetTerrainSwaps(), worldAreaSwaps); } diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index a149d066a05..8f43bb09ff1 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1787,7 +1787,7 @@ void WorldSession::SendSetPhaseShift(std::set const& phaseIds, std::set< data.WriteByteSeq(guid[7]); data.WriteByteSeq(guid[4]); - data << uint32(worldMapAreaSwaps.size()); + data << uint32(worldMapAreaSwaps.size()) * 2; for (auto mapSwap : worldMapAreaSwaps) data << uint16(mapSwap); // WorldMapArea.dbc id (controls map display) diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index b5e2214505b..49f13ac6c56 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -958,6 +958,7 @@ public: char* t = strtok((char*)args, " "); char* p = strtok(NULL, " "); + char* m = strtok(NULL, " "); if (!t) return false; @@ -966,10 +967,16 @@ public: std::set phaseId; std::set worldMapSwap; - terrainswap.insert((uint32)atoi(t)); + if (uint32 ut = (uint32)atoi(t)) + terrainswap.insert(ut); if (p) - phaseId.insert((uint32)atoi(p)); + if (uint32 up = (uint32)atoi(p)) + phaseId.insert(up); + + if (m) + if (uint32 um = (uint32)atoi(m)) + worldMapSwap.insert(um); handler->GetSession()->SendSetPhaseShift(phaseId, terrainswap, worldMapSwap); return true; diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index d88e1670a09..b9a0fe18eb3 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -1277,10 +1277,13 @@ public: uint32 phase = (uint32)atoi((char*)args); Unit* target = handler->getSelectedUnit(); - if (target) - target->SetInPhase(phase, true, !target->IsInPhase(phase)); - else - handler->GetSession()->GetPlayer()->SetInPhase(phase, true, !handler->GetSession()->GetPlayer()->IsInPhase(phase)); + if (!target) + target = handler->GetSession()->GetPlayer(); + + target->SetInPhase(phase, true, !target->IsInPhase(phase)); + + if (target->GetTypeId() == TYPEID_PLAYER) + target->ToPlayer()->SendUpdatePhasing(); return true; }