From d3ec230cecaf8d6326f21606daae37df833cc663 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Tue, 10 Mar 2026 00:42:52 -0700 Subject: [PATCH] game: fix Classic 1.12 packed GUID for SMSG_PARTY_MEMBER_STATS Classic/Vanilla uses ObjectGuid::WriteAsPacked() for party member stats packets (same packed format as WotLK), not full uint64 as TBC does. Reading 8 fixed bytes for the GUID over-read the packed GUID field, misaligning updateFlags and all subsequent stat fields, breaking party frame HP/mana display in Classic. --- src/game/game_handler.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index ba9ef3eb..9e1aa3cd 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -13310,10 +13310,11 @@ void GameHandler::handlePartyMemberStats(network::Packet& packet, bool isFull) { packet.readUInt8(); } - // WotLK uses packed GUID; TBC/Classic use full uint64 - const bool pmsTbcLike = isClassicLikeExpansion() || isActiveExpansion("tbc"); - if (remaining() < (pmsTbcLike ? 8u : 1u)) return; - uint64_t memberGuid = pmsTbcLike + // WotLK and Classic/Vanilla use packed GUID; TBC uses full uint64 + // (Classic uses ObjectGuid::WriteAsPacked() = packed format, same as WotLK) + const bool pmsTbc = isActiveExpansion("tbc"); + if (remaining() < (pmsTbc ? 8u : 1u)) return; + uint64_t memberGuid = pmsTbc ? packet.readUInt64() : UpdateObjectParser::readPackedGuid(packet); if (remaining() < 4) return; uint32_t updateFlags = packet.readUInt32();