diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-12-28 20:47:06 +0100 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-12-28 20:47:06 +0100 |
commit | 5c3762e1eeec4fb404a402d8f534084945ac4c43 (patch) | |
tree | 6b949cfa3dc84c636b6c820c56629f11e83e17f2 /src | |
parent | fe3772df740b8023c7c047f676f6798c99db8cf8 (diff) |
Core/Packets: Fix SMSG_GAMEOBJECT_QUERY_RESPONSE data size calculation
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/QueryHandler.cpp | 1 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QueryPackets.cpp | 36 | ||||
-rw-r--r-- | src/server/game/Server/Packets/QueryPackets.h | 6 |
3 files changed, 24 insertions, 19 deletions
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 6cd8acf08dd..ce4a9fa4e66 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -158,7 +158,6 @@ void WorldSession::HandleGameObjectQueryOpcode(WorldPackets::Query::QueryGameObj stats.Size = gameObjectInfo->size; stats.Type = gameObjectInfo->type; stats.UnkString = gameObjectInfo->unk1; - stats.UnkInt32 = gameObjectInfo->unkInt32; stats.Expansion = 0; } else diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 84792b3c21e..e80312c7adb 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -235,29 +235,31 @@ WorldPacket const* WorldPackets::Query::QueryGameObjectResponse::Write() if (Allow) { - _worldPacket << Stats.UnkInt32; - if (Stats.UnkInt32 == 0) - return &_worldPacket; + uint32 dataSize = Stats.GetDataSize(); - _worldPacket << Stats.Type; - _worldPacket << Stats.DisplayID; - for (int8 i = 0; i < 4; i++) - _worldPacket << Stats.Name[i]; + _worldPacket << uint32(dataSize); + if (dataSize) + { + _worldPacket << Stats.Type; + _worldPacket << Stats.DisplayID; + for (int8 i = 0; i < 4; i++) + _worldPacket << Stats.Name[i]; - _worldPacket << Stats.IconName; - _worldPacket << Stats.CastBarCaption; - _worldPacket << Stats.UnkString; + _worldPacket << Stats.IconName; + _worldPacket << Stats.CastBarCaption; + _worldPacket << Stats.UnkString; - for (uint32 i = 0; i < MAX_GAMEOBJECT_DATA; i++) - _worldPacket << Stats.Data[i]; + for (uint32 i = 0; i < MAX_GAMEOBJECT_DATA; i++) + _worldPacket << Stats.Data[i]; - _worldPacket << Stats.Size; + _worldPacket << Stats.Size; - _worldPacket << uint8(Stats.QuestItems.size()); - for (int32 questItem : Stats.QuestItems) - _worldPacket << questItem; + _worldPacket << uint8(Stats.QuestItems.size()); + for (int32 questItem : Stats.QuestItems) + _worldPacket << questItem; - _worldPacket << Stats.Expansion; + _worldPacket << Stats.Expansion; + } } return &_worldPacket; diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index 749ff1343a2..211f0cbf46b 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -227,13 +227,17 @@ namespace WorldPackets std::string IconName; std::string CastBarCaption; std::string UnkString; - int32 UnkInt32 = 0; uint32 Type = 0; uint32 DisplayID = 0; uint32 Data[MAX_GAMEOBJECT_DATA]; float Size = 0.0f; std::vector<int32> QuestItems; uint32 Expansion = 0; + + size_t GetDataSize() const + { + return sizeof(Type) + sizeof(DisplayID) + (Name->length() + (4 * 1)) + (IconName.size() + 1) + (CastBarCaption.size() + 1) + (UnkString.size() + 1) + sizeof(Data) + sizeof(Size) + sizeof(uint8) + (QuestItems.size() * sizeof(uint32)) + sizeof(Expansion); + } }; class QueryGameObjectResponse final : public ServerPacket |