classic: fix SMSG_CREATURE_QUERY_RESPONSE — no iconName field in 1.12

Classic 1.12 SMSG_CREATURE_QUERY_RESPONSE has no iconName CString between
subName and typeFlags.  The TBC/WotLK parser was reading the typeFlags
uint32 bytes as the iconName string, then reading the remaining bytes as
typeFlags — producing garbage creature type/family/rank values and
corrupting target frame display for all creatures on Classic servers.

Add ClassicPacketParsers::parseCreatureQueryResponse without the iconName
read, and route the game handler through virtual dispatch so the override
is called.
This commit is contained in:
Kelsi 2026-03-09 21:44:07 -07:00
parent 6d21f77d32
commit 1b2c7f595e
3 changed files with 47 additions and 1 deletions

View file

@ -127,6 +127,13 @@ public:
return NameQueryResponseParser::parse(packet, data);
}
// --- Creature Query ---
/** Parse SMSG_CREATURE_QUERY_RESPONSE */
virtual bool parseCreatureQueryResponse(network::Packet& packet, CreatureQueryResponseData& data) {
return CreatureQueryResponseParser::parse(packet, data);
}
// --- Item Query ---
/** Build CMSG_ITEM_QUERY_SINGLE */
@ -339,6 +346,8 @@ public:
bool parseCastFailed(network::Packet& packet, CastFailedData& data) override;
bool parseMessageChat(network::Packet& packet, MessageChatData& data) override;
bool parseGameObjectQueryResponse(network::Packet& packet, GameObjectQueryResponseData& data) override;
// Classic 1.12 SMSG_CREATURE_QUERY_RESPONSE lacks the iconName string that TBC/WotLK include
bool parseCreatureQueryResponse(network::Packet& packet, CreatureQueryResponseData& data) override;
bool parseGossipMessage(network::Packet& packet, GossipMessageData& data) override;
bool parseGuildRoster(network::Packet& packet, GuildRosterData& data) override;
bool parseGuildQueryResponse(network::Packet& packet, GuildQueryResponseData& data) override;