aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-04-11 00:07:38 +0200
committerShauren <shauren.trinity@gmail.com>2015-04-11 00:07:38 +0200
commit4ced9a44807de77c542cdd1dde8f75a4eb8cdc1b (patch)
tree918ec57bf6cd6b62bb15c27d5b1b7fb390872d54 /src
parent0473b5371aa93f5c198cb88a5076c673b2cd5143 (diff)
Core/PacketIO: Updated & enabled CMSG_AUTO_EQUIP_ITEM_SLOT
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp2
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp17
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h12
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h3
6 files changed, 30 insertions, 13 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 95ee38590d6..bb3700c9423 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -628,7 +628,7 @@ void AchievementMgr<Guild>::SaveToDB(SQLTransaction& trans)
}
}
template<class T>
-void AchievementMgr<T>::LoadFromDB(PreparedQueryResult achievementResult, PreparedQueryResult criteriaResult)
+void AchievementMgr<T>::LoadFromDB(PreparedQueryResult /*achievementResult*/, PreparedQueryResult /*criteriaResult*/)
{
}
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index c03aee9dd5a..1ec4e134126 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -112,23 +112,20 @@ void WorldSession::HandleSwapInvItemOpcode(WorldPackets::Item::SwapInvItem& swap
_player->SwapItem(src, dst);
}
-void WorldSession::HandleAutoEquipItemSlotOpcode(WorldPacket& recvData)
+void WorldSession::HandleAutoEquipItemSlotOpcode(WorldPackets::Item::AutoEquipItemSlot& autoEquipItemSlot)
{
- ObjectGuid itemguid;
- uint8 dstslot;
- recvData >> itemguid >> dstslot;
-
// cheating attempt, client should never send opcode in that case
- if (!Player::IsEquipmentPos(INVENTORY_SLOT_BAG_0, dstslot))
+ if (autoEquipItemSlot.Inv.Items.size() != 1 || !Player::IsEquipmentPos(INVENTORY_SLOT_BAG_0, autoEquipItemSlot.ItemDstSlot))
return;
- Item* item = _player->GetItemByGuid(itemguid);
- uint16 dstpos = dstslot | (INVENTORY_SLOT_BAG_0 << 8);
+ Item* item = _player->GetItemByGuid(autoEquipItemSlot.Item);
+ uint16 dstPos = autoEquipItemSlot.ItemDstSlot | (INVENTORY_SLOT_BAG_0 << 8);
+ uint16 srcPos = autoEquipItemSlot.Inv.Items[0].Slot | (uint32(autoEquipItemSlot.Inv.Items[0].ContainerSlot) << 8);
- if (!item || item->GetPos() == dstpos)
+ if (!item || item->GetPos() != srcPos || srcPos == dstPos)
return;
- _player->SwapItem(item->GetPos(), dstpos);
+ _player->SwapItem(srcPos, dstPos);
}
void WorldSession::HandleSwapItem(WorldPackets::Item::SwapItem& swapItem)
diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp
index 57620737190..52d4eb2f770 100644
--- a/src/server/game/Server/Packets/ItemPackets.cpp
+++ b/src/server/game/Server/Packets/ItemPackets.cpp
@@ -266,6 +266,13 @@ void WorldPackets::Item::AutoEquipItem::Read()
>> Slot;
}
+void WorldPackets::Item::AutoEquipItemSlot::Read()
+{
+ _worldPacket >> Inv
+ >> Item
+ >> ItemDstSlot;
+}
+
void WorldPackets::Item::AutoStoreBagItem::Read()
{
_worldPacket >> Inv
diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h
index 45d59144d2f..6c98742c2f5 100644
--- a/src/server/game/Server/Packets/ItemPackets.h
+++ b/src/server/game/Server/Packets/ItemPackets.h
@@ -233,6 +233,18 @@ namespace WorldPackets
uint8 PackSlot = 0;
};
+ class AutoEquipItemSlot final : public ClientPacket
+ {
+ public:
+ AutoEquipItemSlot(WorldPacket&& packet) : ClientPacket(CMSG_AUTO_EQUIP_ITEM_SLOT, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Item;
+ uint8 ItemDstSlot = 0;
+ InvUpdate Inv;
+ };
+
class AutoStoreBagItem final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index a3e268e5069..fd1dbcb8cee 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -180,7 +180,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_AUTOSTORE_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Bank::AutoStoreBankItem, &WorldSession::HandleAutoStoreBankItemOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTOSTORE_BANK_REAGENT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::AutoEquipItem, &WorldSession::HandleAutoEquipItemOpcode);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_AUTO_EQUIP_ITEM_SLOT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoEquipItemSlotOpcode );
+ DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::AutoEquipItemSlot, &WorldSession::HandleAutoEquipItemSlotOpcode);
DEFINE_HANDLER(CMSG_AUTO_STORE_BAG_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Item::AutoStoreBagItem, &WorldSession::HandleAutoStoreBagItemOpcode);
DEFINE_HANDLER(CMSG_BANKER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleBankerActivateOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_BATTLEFIELD_LEAVE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleBattlefieldLeaveOpcode );
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 0efd326236c..df01abfc0c7 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -253,6 +253,7 @@ namespace WorldPackets
namespace Item
{
class AutoEquipItem;
+ class AutoEquipItemSlot;
class AutoStoreBagItem;
class BuyItem;
class BuyBackItem;
@@ -1159,7 +1160,7 @@ class WorldSession
void HandleListInventoryOpcode(WorldPackets::NPC::Hello& packet);
void HandleAutoStoreBagItemOpcode(WorldPackets::Item::AutoStoreBagItem& packet);
void HandleReadItem(WorldPacket& recvPacket);
- void HandleAutoEquipItemSlotOpcode(WorldPacket& recvPacket);
+ void HandleAutoEquipItemSlotOpcode(WorldPackets::Item::AutoEquipItemSlot& autoEquipItemSlot);
void HandleSwapItem(WorldPackets::Item::SwapItem& swapItem);
void HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet);
void HandleWrapItemOpcode(WorldPacket& recvPacket);