Core/PacketIO: Updated & enabled CMSG_AUTO_EQUIP_ITEM_SLOT

This commit is contained in:
Shauren
2015-04-11 00:07:38 +02:00
parent 0473b5371a
commit 4ced9a4480
6 changed files with 30 additions and 13 deletions

View File

@@ -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*/)
{
}

View File

@@ -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)

View File

@@ -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

View File

@@ -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:

View File

@@ -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 );

View File

@@ -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);