diff options
-rw-r--r-- | src/net/eathena/inventoryrecv.cpp | 80 | ||||
-rw-r--r-- | src/net/eathena/inventoryrecv.h | 1 |
2 files changed, 74 insertions, 7 deletions
diff --git a/src/net/eathena/inventoryrecv.cpp b/src/net/eathena/inventoryrecv.cpp index 8e713ae9b..bb2a129b3 100644 --- a/src/net/eathena/inventoryrecv.cpp +++ b/src/net/eathena/inventoryrecv.cpp @@ -455,7 +455,7 @@ void InventoryRecv::processPlayerInventory(Net::MessageIn &msg) void InventoryRecv::processPlayerStorage(Net::MessageIn &msg) { BLOCK_START("InventoryRecv::processPlayerInventory") - Ea::InventoryRecv::mStorageItems.clear(); +// Ea::InventoryRecv::mStorageItems.clear(); msg.readInt16("len"); @@ -1127,7 +1127,7 @@ void InventoryRecv::processPlayerCartEquip(Net::MessageIn &msg) void InventoryRecv::processPlayerCartItems(Net::MessageIn &msg) { BLOCK_START("InventoryRecv::processPlayerCartItems") - Ea::InventoryRecv::mStorageItems.clear(); +// Ea::InventoryRecv::mStorageItems.clear(); msg.readInt16("len"); @@ -1581,15 +1581,81 @@ void InventoryRecv::processInventoryStartContinue(const NetInventoryTypeT type, void InventoryRecv::processInventoryEnd1(Net::MessageIn &msg) { - UNIMPLEMENTEDPACKET; - msg.readUInt8("flag"); + const uint8_t flag = msg.readUInt8("flag"); + if (flag != 0) + { + UNIMPLEMENTEDPACKET; + return; + } + processInventoryEndContinue(NetInventoryType::Storage); } void InventoryRecv::processInventoryEnd2(Net::MessageIn &msg) { - UNIMPLEMENTEDPACKET; - msg.readUInt8("type"); - msg.readUInt8("flag"); + const NetInventoryTypeT invType = static_cast<NetInventoryTypeT>( + msg.readUInt8("type")); + const uint8_t flag = msg.readUInt8("flag"); + if (flag != 0) + { + UNIMPLEMENTEDPACKET; + return; + } + processInventoryEndContinue(invType); +} + +void InventoryRecv::processInventoryEndContinue(const NetInventoryTypeT invType) +{ + switch (invType) + { + case NetInventoryType::Inventory: + break; + case NetInventoryType::Cart: + // insert data in handler processCartInfo + return; + case NetInventoryType::Storage: + case NetInventoryType::GuildStorage: + // insert data in processPlayerStorageStatus + return; + default: + return; + } + Inventory *inventory = PlayerInfo::getInventory(); + if (PlayerInfo::getEquipment() != nullptr) + { + Ea::InventoryRecv::mEquips.clear(); + PlayerInfo::getEquipment()->setBackend( + &Ea::InventoryRecv::mEquips); + } + if (inventory == nullptr) + return; + + inventory->clear(); + FOR_EACH (Ea::InventoryItems::const_iterator, it, mInventoryItems) + { + const int index = (*it).slot; + const int equipIndex = (*it).equipIndex; + inventory->setItem(index, + (*it).id, + (*it).type, + (*it).quantity, + (*it).refine, + (*it).color, + (*it).identified, + (*it).damaged, + (*it).favorite, + (*it).equip, + Equipped_false); + inventory->setCards(index, (*it).cards, maxCards); + if ((*it).options) + inventory->setOptions(index, (*it).options); + if (equipIndex > 0) + { + Ea::InventoryRecv::mEquips.setEquipment( + InventoryRecv::getSlot(equipIndex), + index); + } + } + mInventoryItems.clear(); } void InventoryRecv::processPlayerCombinedInventory1(Net::MessageIn &msg) diff --git a/src/net/eathena/inventoryrecv.h b/src/net/eathena/inventoryrecv.h index 9d1bbb819..a7af54a75 100644 --- a/src/net/eathena/inventoryrecv.h +++ b/src/net/eathena/inventoryrecv.h @@ -108,6 +108,7 @@ namespace EAthena void processInventoryStartContinue(const NetInventoryTypeT type, const std::string &name); + void processInventoryEndContinue(const NetInventoryTypeT invType); } // namespace InventoryRecv } // namespace EAthena |