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();
}
// 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();