diff options
-rw-r--r-- | src/net/eathena/inventoryrecv.cpp | 55 | ||||
-rw-r--r-- | src/net/eathena/packetsin.inc | 4 |
2 files changed, 46 insertions, 13 deletions
diff --git a/src/net/eathena/inventoryrecv.cpp b/src/net/eathena/inventoryrecv.cpp index 0887dfbeb..d313c8c7c 100644 --- a/src/net/eathena/inventoryrecv.cpp +++ b/src/net/eathena/inventoryrecv.cpp @@ -606,19 +606,32 @@ void InventoryRecv::processPlayerStorageEquip(Net::MessageIn &msg) { BLOCK_START("InventoryRecv::processPlayerStorageEquip") msg.readInt16("len"); - int sz; - if ((serverVersion >= 8 || serverVersion == 0) && - msg.getVersion() >= 20150226) + + int packetLen = 2 + 2 + 1 + 1 + 8; + if (msg.getVersion() >= 20120925) + packetLen += 4 + 4 + 1; + else + packetLen += 1 + 2 + 2 + 1; + if (msg.getVersion() >= 20071002) + packetLen += 4; + if (msg.getVersion() >= 20080102) + packetLen += 2; + if (msg.getVersion() >= 20100629) + packetLen += 2; + if (msg.getVersion() >= 20150226) + packetLen += 26; + + int number; + if (msg.getVersion() >= 20120925) { - sz = 57; + msg.readString(24, "storage name"); + number = (msg.getLength() - 4 - 24) / packetLen; } else { - sz = 31; + number = (msg.getLength() - 4) / packetLen; } - const int number = (msg.getLength() - 4 - 24) / sz; - msg.readString(24, "storage name"); for (int loop = 0; loop < number; loop++) { const int index = msg.readInt16("index") - STORAGE_OFFSET; @@ -626,15 +639,28 @@ void InventoryRecv::processPlayerStorageEquip(Net::MessageIn &msg) const ItemTypeT itemType = static_cast<ItemTypeT>( msg.readUInt8("item type")); const int amount = 1; - msg.readInt32("location"); - msg.readInt32("wear state"); + if (msg.getVersion() >= 20120925) + { + msg.readInt32("location"); + msg.readInt32("wear state"); + } + else + { + msg.readUInt8("identified"); + msg.readInt16("location"); + msg.readInt16("wear state"); + msg.readUInt8("is damaged"); + } const uint8_t refine = msg.readUInt8("refine level"); int cards[maxCards]; for (int f = 0; f < maxCards; f++) cards[f] = msg.readInt16("card"); - msg.readInt32("hire expire date"); - msg.readInt16("bind on equip"); - msg.readInt16("sprite"); + if (msg.getVersion() >= 20071002) + msg.readInt32("hire expire date"); + if (msg.getVersion() >= 20080102) + msg.readInt16("bind on equip"); + if (msg.getVersion() >= 20100629) + msg.readInt16("sprite"); if ((serverVersion >= 8 || serverVersion == 0) && msg.getVersion() >= 20150226) { @@ -648,7 +674,10 @@ void InventoryRecv::processPlayerStorageEquip(Net::MessageIn &msg) } ItemFlags flags; - flags.byte = msg.readUInt8("flags"); + if (msg.getVersion() >= 20120925) + flags.byte = msg.readUInt8("flags"); + else + flags.byte = 0; Ea::InventoryRecv::mInventoryItems.push_back(Ea::InventoryItem( index, diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc index 6a061978b..4ec165b88 100644 --- a/src/net/eathena/packetsin.inc +++ b/src/net/eathena/packetsin.inc @@ -25,6 +25,7 @@ packet(SMSG_BEING_FAKE_NAME, 0x0078, 54, &BeingRecv::processBeing packet(SMSG_WHISPER, 0x0097, -1, &ChatRecv::processWhisper, 1); packet(SMSG_WHISPER_RESPONSE, 0x0098, 3, &ChatRecv::processWhisperResponse, 1); packet(SMSG_PLAYER_EQUIPMENT, 0x00a4, -1, &InventoryRecv::processPlayerEquipment, 1); +packet(SMSG_PLAYER_STORAGE_EQUIP, 0x00a6, -1, &InventoryRecv::processPlayerStorageEquip, 1); packet(SMSG_BEING_CHANGE_LOOKS_OUTDATED, 0x00c3, 8, nullptr, 1); packet(SMSG_TRADE_REQUEST, 0x00e5, 26, &TradeRecv::processTradeRequest, 1); packet(SMSG_TRADE_ITEM_ADD, 0x00e9, 19, &TradeRecv::processTradeItemAdd, 1); @@ -423,6 +424,7 @@ if (packetVersion >= 20071002) packet(SMSG_PLAYER_INVENTORY, 0x01ee, -1, &InventoryRecv::processPlayerInventory, 20071002); packet(SMSG_PLAYER_CART_ITEMS, 0x01ef, -1, &InventoryRecv::processPlayerCartItems, 20071002); packet(SMSG_PLAYER_STORAGE_ITEMS, 0x0295, -1, &InventoryRecv::processPlayerStorage, 20071002); + packet(SMSG_PLAYER_STORAGE_EQUIP, 0x0296, -1, &InventoryRecv::processPlayerStorageEquip, 20071002); packet(SMSG_PLAYER_CART_EQUIP, 0x0297, -1, &InventoryRecv::processPlayerCartEquip, 20071002); packet(SMSG_PARTY_ITEM_PICKUP, 0x02b8, 22, &PartyRecv::processPartyItemPickup, 20071002); packet(SMSG_PLAYER_INVENTORY_ADD, 0x02d4, 29, &InventoryRecv::processPlayerInventoryAdd, 20071002); @@ -445,6 +447,7 @@ packet(SMSG_BEING_ACTION2, 0x02e1, 33, &BeingRecv::processBeing if (packetVersion >= 20080102) { packet(SMSG_PLAYER_EQUIPMENT, 0x02d0, -1, &InventoryRecv::processPlayerEquipment, 20080102); + packet(SMSG_PLAYER_STORAGE_EQUIP, 0x02d1, -1, &InventoryRecv::processPlayerStorageEquip, 20080102); packet(SMSG_PLAYER_CART_EQUIP, 0x02d2, -1, &InventoryRecv::processPlayerCartEquip, 20080102); packet(SMSG_PLAYER_INVENTORY, 0x02e8, -1, &InventoryRecv::processPlayerInventory, 20080102); packet(SMSG_PLAYER_CART_ITEMS, 0x02e9, -1, &InventoryRecv::processPlayerCartItems, 20080102); @@ -564,6 +567,7 @@ if (packetVersion >= 20100608) if (packetVersion >= 20100629) { packet(SMSG_PLAYER_EQUIPMENT, 0x02d0, -1, &InventoryRecv::processPlayerEquipment, 20100629); + packet(SMSG_PLAYER_STORAGE_EQUIP, 0x02d1, -1, &InventoryRecv::processPlayerStorageEquip, 20100629); packet(SMSG_PLAYER_CART_EQUIP, 0x02d2, -1, &InventoryRecv::processPlayerCartEquip, 20100629); } |