diff options
Diffstat (limited to 'src/server/game/Handlers/QueryHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/QueryHandler.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index d15f21f4ad3..03782481ef7 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -131,8 +131,15 @@ void WorldSession::HandleCreatureQueryOpcode(WorldPacket& recvData) data << float(ci->ModHealth); // dmg/hp modifier data << float(ci->ModMana); // dmg/mana modifier data << uint8(ci->RacialLeader); - for (uint32 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i) - data << uint32(ci->questItems[i]); // itemId[6], quest drop + + CreatureQuestItemList const* items = sObjectMgr->GetCreatureQuestItemList(entry); + if (items) + for (size_t i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i) + data << (i < items->size() ? uint32((*items)[i]) : uint32(0)); + else + for (size_t i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i) + data << uint32(0); + data << uint32(ci->movementId); // CreatureMovementInfo.dbc SendPacket(&data); TC_LOG_DEBUG("network", "WORLD: Sent SMSG_CREATURE_QUERY_RESPONSE"); @@ -188,8 +195,15 @@ void WorldSession::HandleGameObjectQueryOpcode(WorldPacket& recvData) data << info->unk1; // 2.0.3, string data.append(info->raw.data, MAX_GAMEOBJECT_DATA); data << float(info->size); // go size - for (uint32 i = 0; i < MAX_GAMEOBJECT_QUEST_ITEMS; ++i) - data << uint32(info->questItems[i]); // itemId[6], quest drop + + GameObjectQuestItemList const* items = sObjectMgr->GetGameObjectQuestItemList(entry); + if (items) + for (size_t i = 0; i < MAX_GAMEOBJECT_QUEST_ITEMS; ++i) + data << (i < items->size() ? uint32((*items)[i]) : uint32(0)); + else + for (size_t i = 0; i < MAX_GAMEOBJECT_QUEST_ITEMS; ++i) + data << uint32(0); + SendPacket(&data); TC_LOG_DEBUG("network", "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE"); } |