diff options
Diffstat (limited to 'src/server/game/Handlers/ItemHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 54 |
1 files changed, 48 insertions, 6 deletions
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index cb8662fee80..976a3d4bd55 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -34,12 +34,19 @@ void WorldSession::HandleSplitItemOpcode(WorldPacket& recvData) { + uint32 itemCount = recvData.ReadBits(2); + + if (itemCount) + { + TC_LOG_ERROR("network", "WORLD: HandleSplitItemOpcode - Invalid itemCount (%u)", itemCount); + return; + } //TC_LOG_DEBUG("network", "WORLD: CMSG_SPLIT_ITEM"); uint8 srcbag, srcslot, dstbag, dstslot; uint32 count; recvData >> srcbag >> srcslot >> dstbag >> dstslot >> count; - //TC_LOG_DEBUG("STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u, dstslot = %u, count = %u", srcbag, srcslot, dstbag, dstslot, count); + TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u, dstslot = %u, count = %u", srcbag, srcslot, dstbag, dstslot, count); uint16 src = ((srcbag << 8) | srcslot); uint16 dst = ((dstbag << 8) | dstslot); @@ -67,11 +74,25 @@ void WorldSession::HandleSplitItemOpcode(WorldPacket& recvData) void WorldSession::HandleSwapInvItemOpcode(WorldPacket& recvData) { + uint32 itemCount = recvData.ReadBits(2); + + if (itemCount != 2) + { + TC_LOG_ERROR("network", "WORLD: HandleSwapInvItemOpcode - Invalid itemCount (%u)", itemCount); + return; + } + + for (uint32 i = 0; i < itemCount; ++i) + { + recvData.read_skip<uint8>(); // bag + recvData.read_skip<uint8>(); // slot + } + //TC_LOG_DEBUG("network", "WORLD: CMSG_SWAP_INV_ITEM"); uint8 srcslot, dstslot; recvData >> dstslot >> srcslot; - //TC_LOG_DEBUG("STORAGE: receive srcslot = %u, dstslot = %u", srcslot, dstslot); + TC_LOG_DEBUG("network", "STORAGE: receive srcslot = %u, dstslot = %u", srcslot, dstslot); // prevent attempt swap same item to current position generated by client at special checting sequence if (srcslot == dstslot) @@ -135,10 +156,17 @@ void WorldSession::HandleSwapItem(WorldPacket& recvData) TC_LOG_ERROR("network", "WORLD: HandleSwapItem - Invalid itemCount (%u)", itemCount); return; } + + for (uint32 i = 0; i < itemCount; ++i) + { + recvData.read_skip<uint8>(); + recvData.read_skip<uint8>(); + } + //TC_LOG_DEBUG("network", "WORLD: CMSG_SWAP_ITEM"); - uint8 dstbag, dstslot, srcbag, srcslot, slotA, slotB; + uint8 dstbag, dstslot, srcbag, srcslot; - recvData >> dstbag >> dstslot >> srcbag >> srcslot >> slotA >> slotB; + recvData >> dstbag >> srcbag >> dstslot >> srcslot; TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u, dstslot = %u", srcbag, srcslot, dstbag, dstslot); uint16 src = ((srcbag << 8) | srcslot); @@ -701,11 +729,25 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) void WorldSession::HandleAutoStoreBagItemOpcode(WorldPacket& recvData) { + uint32 itemCount = recvData.ReadBits(2); + + if (itemCount) + { + TC_LOG_ERROR("network", "WORLD: HandleAutoStoreBagItemOpcode - Invalid itemCount (%u)", itemCount); + return; + } + + /*for (uint32 i = 0; i < itemCount; ++i) + { + recvData.read_skip<uint8>(); + recvData.read_skip<uint8>(); + }*/ + //TC_LOG_DEBUG("network", "WORLD: CMSG_AUTOSTORE_BAG_ITEM"); uint8 srcbag, srcslot, dstbag; - recvData >> srcbag >> srcslot >> dstbag; - //TC_LOG_DEBUG("STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u", srcbag, srcslot, dstbag); + recvData >> srcbag >> dstbag >> srcslot; + TC_LOG_DEBUG("network", "STORAGE: receive srcbag = %u, srcslot = %u, dstbag = %u", srcbag, srcslot, dstbag); Item* pItem = _player->GetItemByPos(srcbag, srcslot); if (!pItem) |