diff options
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 15 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
3 files changed, 43 insertions, 1 deletions
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; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index a254c32854b..5c844f1e3aa 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1522,7 +1522,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_STABLE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_TAME_FAILURE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_UNLEARNED_SPELLS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PHASE_SHIFT_CHANGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PHASE_SHIFT_CHANGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYED_TIME, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_BOUND, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SAVE_GUILD_EMBLEM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); |
