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.
This commit is contained in:
Kelsi 2026-03-10 00:42:52 -07:00
parent 8014f2650c
commit d3ec230cec

View file

@ -13310,10 +13310,11 @@ void GameHandler::handlePartyMemberStats(network::Packet& packet, bool isFull) {
packet.readUInt8(); packet.readUInt8();
} }
// WotLK uses packed GUID; TBC/Classic use full uint64 // WotLK and Classic/Vanilla use packed GUID; TBC uses full uint64
const bool pmsTbcLike = isClassicLikeExpansion() || isActiveExpansion("tbc"); // (Classic uses ObjectGuid::WriteAsPacked() = packed format, same as WotLK)
if (remaining() < (pmsTbcLike ? 8u : 1u)) return; const bool pmsTbc = isActiveExpansion("tbc");
uint64_t memberGuid = pmsTbcLike if (remaining() < (pmsTbc ? 8u : 1u)) return;
uint64_t memberGuid = pmsTbc
? packet.readUInt64() : UpdateObjectParser::readPackedGuid(packet); ? packet.readUInt64() : UpdateObjectParser::readPackedGuid(packet);
if (remaining() < 4) return; if (remaining() < 4) return;
uint32_t updateFlags = packet.readUInt32(); uint32_t updateFlags = packet.readUInt32();