summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-04-03 00:35:10 +0300
committerAndrei Karas <akaras@inbox.ru>2016-04-03 00:35:10 +0300
commit04d36b4ef7abcc768472dad3f3fa2529714288ce (patch)
tree4cb00a2661e642e55893c56db937e71450479c16
parentff938a161709b376a09f4310b984d7f0e30a7e8f (diff)
downloadmv-04d36b4ef7abcc768472dad3f3fa2529714288ce.tar.gz
mv-04d36b4ef7abcc768472dad3f3fa2529714288ce.tar.bz2
mv-04d36b4ef7abcc768472dad3f3fa2529714288ce.tar.xz
mv-04d36b4ef7abcc768472dad3f3fa2529714288ce.zip
Sort more packets. Add version checks inside packets.
-rw-r--r--src/net/eathena/inventoryrecv.cpp55
-rw-r--r--src/net/eathena/packetsin.inc4
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);
}