aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/ItemHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/ItemHandler.cpp')
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp54
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)