From 5d2bc9503d107743b5aab4c9b2a89a7389e565e6 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Tue, 10 Mar 2026 00:06:11 -0700 Subject: [PATCH] game: fix expansion-gated GUID for FORCE_MOVE_ROOT/UNROOT --- src/game/game_handler.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index f15b4e3d..0f120d31 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -11093,10 +11093,13 @@ void GameHandler::handleForceRunSpeedChange(network::Packet& packet) { void GameHandler::handleForceMoveRootState(network::Packet& packet, bool rooted) { // Packet is server movement control update: - // packedGuid + uint32 counter + [optional unknown field(s)]. + // WotLK: packed GUID + uint32 counter + [optional unknown field(s)] + // TBC/Classic: full uint64 + uint32 counter // We always ACK with current movement state, same pattern as speed-change ACKs. - if (packet.getSize() - packet.getReadPos() < 2) return; - uint64_t guid = UpdateObjectParser::readPackedGuid(packet); + const bool rootTbc = isClassicLikeExpansion() || isActiveExpansion("tbc"); + if (packet.getSize() - packet.getReadPos() < (rootTbc ? 8u : 2u)) return; + uint64_t guid = rootTbc + ? packet.readUInt64() : UpdateObjectParser::readPackedGuid(packet); if (packet.getSize() - packet.getReadPos() < 4) return; uint32_t counter = packet.readUInt32();