diff options
-rw-r--r-- | sql/updates/characters/2015_03_29_00_characters.sql (renamed from sql/updates/characters/2015_03_15_00_characters.sql) | 0 | ||||
-rw-r--r-- | sql/updates/world/2015_03_29_01_world.sql (renamed from sql/updates/world/2015_03_15_00_world.sql) | 0 | ||||
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 33 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 15 |
5 files changed, 49 insertions, 26 deletions
diff --git a/sql/updates/characters/2015_03_15_00_characters.sql b/sql/updates/characters/2015_03_29_00_characters.sql index b9bb746c2f7..b9bb746c2f7 100644 --- a/sql/updates/characters/2015_03_15_00_characters.sql +++ b/sql/updates/characters/2015_03_29_00_characters.sql diff --git a/sql/updates/world/2015_03_15_00_world.sql b/sql/updates/world/2015_03_29_01_world.sql index 3eee1cae11a..3eee1cae11a 100644 --- a/sql/updates/world/2015_03_15_00_world.sql +++ b/sql/updates/world/2015_03_29_01_world.sql diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 7d0236fe9eb..e8e6febbe34 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1399,32 +1399,13 @@ void WorldSession::HandleUITimeRequest(WorldPackets::Misc::UITimeRequest& /*requ void WorldSession::SendSetPhaseShift(std::set<uint32> const& phaseIds, std::set<uint32> const& terrainswaps, std::set<uint32> const& worldMapAreaSwaps) { - WorldPacket data(SMSG_PHASE_SHIFT_CHANGE, 1 + 8 + 4 + 4 + 4 + 4 + 2 * phaseIds.size() + 4 + terrainswaps.size() * 2); - - data << _player->GetGUID(); // Client - data << uint32(phaseIds.size() ? 0 : 8); // PhaseShiftFlags - - data << uint32(phaseIds.size()); // PhaseShiftCount - data << _player->GetGUID(); // PersonalGUID - for (std::set<uint32>::const_iterator itr = phaseIds.begin(); itr != phaseIds.end(); ++itr) - { - data << uint16(1); // PhaseFlags - data << uint16(*itr); // Id - } - - data << uint32(terrainswaps.size()) * 2; // Active terrain swaps - for (std::set<uint32>::const_iterator itr = terrainswaps.begin(); itr != terrainswaps.end(); ++itr) - data << uint16(*itr); - - data << uint32(0); // Inactive terrain swaps - //for (uint8 i = 0; i < inactiveSwapsCount; ++i) - // data << uint16(0); - - data << uint32(worldMapAreaSwaps.size()) * 2; - for (auto mapSwap : worldMapAreaSwaps) - data << uint16(mapSwap); // WorldMapArea.dbc id (controls map display) - - SendPacket(&data); + WorldPackets::Misc::PhaseShift phaseShift; + phaseShift.ClientGUID = _player->GetGUID(); + phaseShift.PersonalGUID = _player->GetGUID(); + phaseShift.PhaseShifts = phaseIds; + phaseShift.VisibleMapIDs = terrainswaps; + phaseShift.UiWorldMapAreaIDSwaps = worldMapAreaSwaps; + SendPacket(phaseShift.Write()); } // Battlefield and Battleground diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 1905ab3e3ce..009f1d901d5 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -379,3 +379,30 @@ WorldPacket const* WorldPackets::Misc::RandomRoll::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::Misc::PhaseShift::Write() +{ + _worldPacket << ClientGUID; // CLientGUID + _worldPacket << uint32(PhaseShifts.size() ? 0 : 8); // PhaseShiftFlags + _worldPacket << uint32(PhaseShifts.size()); // PhaseShiftCount + _worldPacket << PersonalGUID; // PersonalGUID + for (uint32 phase : PhaseShifts) + { + _worldPacket << uint16(1); // PhaseFlags + _worldPacket << uint16(phase); // PhaseID + } + + _worldPacket << uint32(VisibleMapIDs.size() * 2); // Active terrain swaps size + for (uint32 map : VisibleMapIDs) + _worldPacket << uint16(map); // Active terrain swap map id + + _worldPacket << uint32(PreloadMapIDs.size() * 2); // Inactive terrain swaps size + for (uint32 map : PreloadMapIDs) + _worldPacket << uint16(map); // Inactive terrain swap map id + + _worldPacket << uint32(UiWorldMapAreaIDSwaps.size() * 2); // UI map swaps size + for (uint32 map : UiWorldMapAreaIDSwaps) + _worldPacket << uint16(map); // UI map id, WorldMapArea.dbc, controls map display + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 15dd164f994..b41e1cb8b50 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -538,6 +538,21 @@ namespace WorldPackets WorldPacket const* Write() override { return &_worldPacket; } }; + + class PhaseShift final : public ServerPacket + { + public: + PhaseShift() : ServerPacket(SMSG_PHASE_SHIFT_CHANGE, 4) { } + + WorldPacket const* Write() override; + + ObjectGuid ClientGUID; + ObjectGuid PersonalGUID; + std::set<uint32> PhaseShifts; + std::set<uint32> PreloadMapIDs; + std::set<uint32> UiWorldMapAreaIDSwaps; + std::set<uint32> VisibleMapIDs; + }; } } |