aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp27
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h15
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
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);