diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2015-04-11 21:05:41 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2015-04-11 21:05:41 +0200 |
commit | 3f0a54378c4c3b6c49810ed50f4c213b1279d6cf (patch) | |
tree | a5d6b677f9ffff9963902ad197b249e22fb9f06f /src | |
parent | af62ebe765fe45ceb8b4275f5ed69a9b19cad914 (diff) |
Core/PacketIO: Updated & enabled CMSG_READ_ITEM/SMSG_READ_ITEM_RESULT_OK
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 31 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ItemPackets.cpp | 22 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ItemPackets.h | 33 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
5 files changed, 76 insertions, 19 deletions
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 1ec4e134126..335bb9ce48c 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -310,31 +310,32 @@ void WorldSession::HandleDestroyItemOpcode(WorldPackets::Item::DestroyItem& dest _player->DestroyItem(destroyItem.ContainerId, destroyItem.SlotNum, true); } -void WorldSession::HandleReadItem(WorldPacket& recvData) +void WorldSession::HandleReadItem(WorldPackets::Item::ReadItem& readItem) { - uint8 bag, slot; - recvData >> bag >> slot; - - Item* pItem = _player->GetItemByPos(bag, slot); - - if (pItem && pItem->GetTemplate()->GetPageText()) + Item* item = _player->GetItemByPos(readItem.PackSlot, readItem.Slot); + if (item && item->GetTemplate()->GetPageText()) { - WorldPacket data; - - InventoryResult msg = _player->CanUseItem(pItem); + InventoryResult msg = _player->CanUseItem(item); if (msg == EQUIP_ERR_OK) { - data.Initialize(SMSG_READ_ITEM_RESULT_OK, 8); + WorldPackets::Item::ReadItemResultOK packet; + packet.Item = item->GetGUID(); + SendPacket(packet.Write()); + TC_LOG_INFO("network", "STORAGE: Item page sent"); } else { - data.Initialize(SMSG_READ_ITEM_RESULT_FAILED, 8); + /// @todo: 6.x research new values + /*WorldPackets::Item::ReadItemResultFailed packet; + packet.Item = item->GetGUID(); + packet.Subcode = ??; + packet.Delay = ??; + SendPacket(packet.Write());*/ + TC_LOG_INFO("network", "STORAGE: Unable to read item"); - _player->SendEquipError(msg, pItem, NULL); + _player->SendEquipError(msg, item, NULL); } - data << pItem->GetGUID(); - SendPacket(&data); } else _player->SendEquipError(EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL); diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index ed1d3e1dda2..10aa2435541 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -325,3 +325,25 @@ WorldPacket const* WorldPackets::Item::ItemPushResult::Write() return &_worldPacket; } + +void WorldPackets::Item::ReadItem::Read() +{ + _worldPacket >> PackSlot; + _worldPacket >> Slot; +} + +WorldPacket const* WorldPackets::Item::ReadItemResultFailed::Write() +{ + _worldPacket << Item; + _worldPacket << Delay; + _worldPacket.WriteBits(Subcode, 3); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Item::ReadItemResultOK::Write() +{ + _worldPacket << Item; + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index 538ecd28ffe..9b171317dd9 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -307,6 +307,39 @@ namespace WorldPackets bool IsBonusRoll = false; }; + class ReadItem final : public ClientPacket + { + public: + ReadItem(WorldPacket&& packet) : ClientPacket(CMSG_READ_ITEM, std::move(packet)) { } + + void Read() override; + + uint8 PackSlot = 0; + uint8 Slot = 0; + }; + + class ReadItemResultFailed final : public ServerPacket + { + public: + ReadItemResultFailed() : ServerPacket(SMSG_READ_ITEM_RESULT_FAILED, 16 + 1 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid Item; + uint8 Subcode = 0; + uint32 Delay = 0; + }; + + class ReadItemResultOK final : public ServerPacket + { + public: + ReadItemResultOK() : ServerPacket(SMSG_READ_ITEM_RESULT_OK, 16) { } + + WorldPacket const* Write() override; + + ObjectGuid Item; + }; + ByteBuffer& operator>>(ByteBuffer& data, InvUpdate& invUpdate); } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index da9bb3d8edb..39db8a46370 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -653,7 +653,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER_OLD(CMSG_QUEUED_MESSAGES_END, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_HANDLER(CMSG_RANDOM_ROLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::RandomRollClient, &WorldSession::HandleRandomRollOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_READY_CHECK_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - DEFINE_OPCODE_HANDLER_OLD(CMSG_READ_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleReadItem ); + DEFINE_HANDLER(CMSG_READ_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::ReadItem, &WorldSession::HandleReadItem); DEFINE_HANDLER(CMSG_RECLAIM_CORPSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::ReclaimCorpse, &WorldSession::HandleReclaimCorpse); DEFINE_OPCODE_HANDLER_OLD(CMSG_RECRUIT_A_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER_OLD(CMSG_REDEEM_WOW_TOKEN_CONFIRM, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -1542,8 +1542,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_STARTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_OK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_OK, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_QUERY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_SPLIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index c087bbcd462..be0fcd026a2 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -260,6 +260,7 @@ namespace WorldPackets class DestroyItem; class GetItemPurchaseData; class RepairItem; + class ReadItem; class SellItem; class SplitItem; class SwapInvItem; @@ -1159,7 +1160,7 @@ class WorldSession void HandleBuyItemOpcode(WorldPackets::Item::BuyItem& packet); void HandleListInventoryOpcode(WorldPackets::NPC::Hello& packet); void HandleAutoStoreBagItemOpcode(WorldPackets::Item::AutoStoreBagItem& packet); - void HandleReadItem(WorldPacket& recvPacket); + void HandleReadItem(WorldPackets::Item::ReadItem& readItem); void HandleAutoEquipItemSlotOpcode(WorldPackets::Item::AutoEquipItemSlot& autoEquipItemSlot); void HandleSwapItem(WorldPackets::Item::SwapItem& swapItem); void HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet); |