diff options
-rw-r--r-- | src/net/eathena/beingrecv.cpp | 54 | ||||
-rw-r--r-- | src/net/eathena/beingrecv.h | 1 | ||||
-rw-r--r-- | src/net/eathena/packetsin.inc | 69 |
3 files changed, 72 insertions, 52 deletions
diff --git a/src/net/eathena/beingrecv.cpp b/src/net/eathena/beingrecv.cpp index 3a1438c15..b52bd698e 100644 --- a/src/net/eathena/beingrecv.cpp +++ b/src/net/eathena/beingrecv.cpp @@ -823,37 +823,16 @@ void BeingRecv::processBeingStatusChange(Net::MessageIn &msg) const BeingId id = msg.readBeingId("being id"); const Enable flag = fromBool( msg.readUInt8("flag: 0: stop, 1: start"), Enable); - msg.readInt32("total"); - msg.readInt32("left"); - msg.readInt32("val1"); - msg.readInt32("val2"); - msg.readInt32("val3"); - - Being *const dstBeing = actorManager->findBeing(id); - if (dstBeing) - dstBeing->setStatusEffect(status, flag); - BLOCK_END("BeingRecv::processBeingStatusChange") -} - -void BeingRecv::processBeingStatusChange2(Net::MessageIn &msg) -{ - BLOCK_START("BeingRecv::processBeingStatusChange") - if (!actorManager) + if (msg.getVersion() >= 20120618) + msg.readInt32("total"); + if (msg.getVersion() >= 20090121) { - BLOCK_END("BeingRecv::processBeingStatusChange") - return; + msg.readInt32("left"); + msg.readInt32("val1"); + msg.readInt32("val2"); + msg.readInt32("val3"); } - // Status change - const uint16_t status = msg.readInt16("status"); - const BeingId id = msg.readBeingId("being id"); - const Enable flag = fromBool( - msg.readUInt8("flag: 0: stop, 1: start"), Enable); - msg.readInt32("left"); - msg.readInt32("val1"); - msg.readInt32("val2"); - msg.readInt32("val3"); - Being *const dstBeing = actorManager->findBeing(id); if (dstBeing) dstBeing->setStatusEffect(status, flag); @@ -1327,14 +1306,26 @@ void BeingRecv::processBeingRemoveSkill(Net::MessageIn &msg) void BeingRecv::processBeingFakeName(Net::MessageIn &msg) { + uint16_t x, y; + uint8_t dir; + if (msg.getVersion() < 20071106) + { + msg.readBeingId("npc id"); + msg.skip(8, "unused"); + msg.readInt16("class?"); // 111 + msg.skip(30, "unused"); + msg.readCoordinates(x, y, dir, "position"); + msg.readUInt8("sx"); + msg.readUInt8("sy"); + msg.skip(3, "unused"); + return; + } const BeingType::BeingType type = static_cast<BeingType::BeingType>( msg.readUInt8("object type")); const BeingId id = msg.readBeingId("npc id"); msg.skip(8, "unused"); const uint16_t job = msg.readInt16("class?"); // 111 msg.skip(30, "unused"); - uint16_t x, y; - uint8_t dir; msg.readCoordinates(x, y, dir, "position"); msg.readUInt8("sx"); msg.readUInt8("sy"); @@ -1585,7 +1576,8 @@ void BeingRecv::processBeingViewEquipment(Net::MessageIn &msg) msg.readInt16("accessory"); msg.readInt16("accessory2"); msg.readInt16("accessory3"); - msg.readInt16("robe"); + if (msg.getVersion() >= 20101124) + msg.readInt16("robe"); msg.readInt16("hair color"); msg.readInt16("body color"); msg.readUInt8("gender"); diff --git a/src/net/eathena/beingrecv.h b/src/net/eathena/beingrecv.h index d0cb1b907..004ca22b0 100644 --- a/src/net/eathena/beingrecv.h +++ b/src/net/eathena/beingrecv.h @@ -59,7 +59,6 @@ namespace EAthena void processMapType(Net::MessageIn &msg); void processSkillCasting(Net::MessageIn &msg); void processBeingStatusChange(Net::MessageIn &msg); - void processBeingStatusChange2(Net::MessageIn &msg); void processBeingMove2(Net::MessageIn &msg); void processBeingAction2(Net::MessageIn &msg); void processMonsterHp(Net::MessageIn &msg); diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc index 683c8d5fa..1a0362656 100644 --- a/src/net/eathena/packetsin.inc +++ b/src/net/eathena/packetsin.inc @@ -20,6 +20,13 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +// very outdated packets +packet(SMSG_BEING_CHANGE_LOOKS_OUTDATED, 0x00c3, 8, nullptr, 0); +packet(SMSG_BEING_FAKE_NAME, 0x0078, 54, &BeingRecv::processBeingFakeName, 0); + +// 4 +packet(SMSG_BEING_CHANGE_LOOKS2, 0x01d7, 11, &BeingRecv::processBeingChangeLook2, 4); + // 5 packet(SMSG_PLAYER_STORAGE_ADD, 0x01c4, 22, &InventoryRecv::processPlayerStorageAdd, 5); packet(SMSG_PLAYER_CART_ADD, 0x01c5, 22, &InventoryRecv::processPlayerCartAdd, 5); @@ -43,31 +50,68 @@ packet(SMSG_AUCTION_CLOSE, 0x025d, 4, &AuctionRecv::processAuc // 20051024 packet(SMSG_AUCTION_OPEN_WINDOW, 0x025f, 6, &AuctionRecv::processOpenWindow, 20051024); +// 20060424 +packet(SMSG_BEING_SPECIAL_EFFECT_NUM, 0x0284, 14, &BeingRecv::processBeingSpecialEffectNum, 20060424); + +// 20070227 +packet(SMSG_BATTLE_CHAT_MESSAGE, 0x02dc, -1, &ChatRecv::processBattleChatMessage, 20070227); +packet(SMSG_BATTLE_EMBLEM, 0x02dd, 32, &BattleGroundRecv::processBattleEmblem, 20070227); +packet(SMSG_BATTLE_UPDATE_SCORE, 0x02de, 6, &BattleGroundRecv::processBattleUpdateScore, 20070227); +packet(SMSG_BATTLE_UPDATE_COORDS, 0x02df, 36, &BattleGroundRecv::processBattleUpdateCoords, 20070227); + +if (packetVersion >= 20071106) +{ + packet(SMSG_BEING_FAKE_NAME, 0x0078, 55, &BeingRecv::processBeingFakeName, 20071106); +} + // 20071113 packet(SMSG_BEING_ACTION2, 0x02e1, 33, &BeingRecv::processBeingAction2, 20071113); // 20080102 packet(SMSG_MAP_LOGIN_SUCCESS, 0x02eb, 14, &GameRecv::processMapLogin, 20080102); +packet(SMSG_BEING_FONT, 0x02ef, 8, &BeingRecv::processBeingFont, 20080102); // 20081210 packet(SMSG_AUTOSHADOW_SPELL_LIST, 0x0442, -1, &PlayerRecv::processPlayerAutoShadowSpellList, 20081210); +// 20081217 +packet(SMSG_BEING_MILLENIUM_SHIELD, 0x0440, 10, &BeingRecv::processBeingMilleniumShield, 20081217); + +// 20090121 +packet(SMSG_BEING_STATUS_CHANGE, 0x043f, 25, &BeingRecv::processBeingStatusChange, 20090121); + // 20090603 packet(SMSG_PLAYER_SHORTCUTS, 0x07d9, 269, &PlayerRecv::processPlayerShortcuts, 20090603); +// 20091201 +packet(SMSG_BATTLE_PLAY, 0x07fe, 26, &BattleGroundRecv::processBattlePlay, 20091201); + // 20100223 packet(SMSG_TRADE_ITEM_ADD, 0x080f, 20, &TradeRecv::processTradeItemAdd, 20100223); +// 20101124 +packet(SMSG_BEING_VIEW_EQUIPMENT, 0x0859, -1, &BeingRecv::processBeingViewEquipment, 20101124); + // 20120221 packet(SMSG_BEING_VISIBLE, 0x0915, -1, &BeingRecv::processBeingVisible, 20120221); packet(SMSG_BEING_MOVE, 0x0914, -1, &BeingRecv::processBeingMove, 20120221); packet(SMSG_BEING_SPAWN, 0x090f, -1, &BeingRecv::processBeingSpawn, 20120221); +// 20120410 +packet(SMSG_BEING_CHARM, 0x08cf, 10, &BeingRecv::processBeingCharm, 20120410); + +// 20120618 +if (packetVersion >= 20120618) +{ + packet(SMSG_BEING_STATUS_CHANGE, 0x0983, 29, &BeingRecv::processBeingStatusChange, 20120618); +} + // 20120925 -packet(SMSG_PLAYER_EQUIPMENT, 0x0992, -1, &InventoryRecv::processPlayerEquipment, 20120925); packet(SMSG_PLAYER_INVENTORY_ADD, 0x0990, 31, &InventoryRecv::processPlayerInventoryAdd, 20120925); -packet(SMSG_PLAYER_STORAGE_EQUIP, 0x0996, -1, &InventoryRecv::processPlayerStorageEquip, 20120925); +packet(SMSG_PLAYER_EQUIPMENT, 0x0992, -1, &InventoryRecv::processPlayerEquipment, 20120925); packet(SMSG_PLAYER_CART_EQUIP, 0x0994, -1, &InventoryRecv::processPlayerCartEquip, 20120925); +packet(SMSG_PLAYER_STORAGE_EQUIP, 0x0996, -1, &InventoryRecv::processPlayerStorageEquip, 20120925); +packet(SMSG_BEING_VIEW_EQUIPMENT, 0x0997, -1, &BeingRecv::processBeingViewEquipment, 20120925); // 20130724 packet(SMSG_BANK_STATUS, 0x09a6, 12, &BankRecv::processBankStatus, 20130724); @@ -88,27 +132,14 @@ packet(SMSG_PLAYER_SHORTCUTS, 0x0a00, 269, &PlayerRecv::processPlay packet(SMSG_ADMIN_GET_LOGIN_ACK, 0x01e0, 30, &AdminRecv::processAdminGetLoginAck, 0); packet(SMSG_ADMIN_KICK_ACK, 0x00cd, 6, &Ea::AdminRecv::processKickAck, 0); packet(SMSG_ADMIN_SET_TILE_TYPE, 0x0192, 24, &AdminRecv::processSetTileType, 0); - -// 20150000 or near packet(SMSG_BATTLE_BEGINS, 0x08df, 50, &BattleGroundRecv::processBattleBegins, 0); -packet(SMSG_BATTLE_CHAT_MESSAGE, 0x02dc, -1, &ChatRecv::processBattleChatMessage, 0); -packet(SMSG_BATTLE_EMBLEM, 0x02dd, 32, &BattleGroundRecv::processBattleEmblem, 0); packet(SMSG_BATTLE_JOINED, 0x08d9, 30, &BattleGroundRecv::processBattleJoined, 0); packet(SMSG_BATTLE_NOTICE_DELETE, 0x08db, 27, &BattleGroundRecv::processBattleNoticeDelete, 0); -packet(SMSG_BATTLE_PLAY, 0x07fe, 26, &BattleGroundRecv::processBattlePlay, 0); packet(SMSG_BATTLE_QUEUE_ACK, 0x08d8, 27, &BattleGroundRecv::processBattleQueueAck, 0); -packet(SMSG_BATTLE_UPDATE_COORDS, 0x02df, 36, &BattleGroundRecv::processBattleUpdateCoords, 0); -packet(SMSG_BATTLE_UPDATE_SCORE, 0x02de, 6, &BattleGroundRecv::processBattleUpdateScore, 0); packet(SMSG_BEING_ACTION, 0x008a, 29, &Ea::BeingRecv::processBeingAction, 0); packet(SMSG_BEING_CHANGE_DIRECTION, 0x009c, 9, &BeingRecv::processBeingChangeDirection, 0); -packet(SMSG_BEING_CHANGE_LOOKS2, 0x01d7, 11, &BeingRecv::processBeingChangeLook2, 0); -packet(SMSG_BEING_CHANGE_LOOKS_OUTDATED, 0x00c3, 8, nullptr, 0); -packet(SMSG_BEING_CHARM, 0x08cf, 10, &BeingRecv::processBeingCharm, 0); packet(SMSG_BEING_CHAT, 0x008d, -1, &ChatRecv::processBeingChat, 0); packet(SMSG_BEING_EMOTION, 0x00c0, 7, &Ea::BeingRecv::processBeingEmotion, 0); -packet(SMSG_BEING_FAKE_NAME, 0x0078, 55, &BeingRecv::processBeingFakeName, 0); -packet(SMSG_BEING_FONT, 0x02ef, 8, &BeingRecv::processBeingFont, 0); -packet(SMSG_BEING_MILLENIUM_SHIELD, 0x0440, 10, &BeingRecv::processBeingMilleniumShield, 0); packet(SMSG_BEING_MOVE2, 0x0086, 16, &BeingRecv::processBeingMove2, 0); packet(SMSG_BEING_NAME_RESPONSE, 0x0095, 30, &Ea::BeingRecv::processNameResponse, 0); packet(SMSG_BEING_REMOVE, 0x0080, 7, &Ea::BeingRecv::processBeingRemove, 0); @@ -118,11 +149,9 @@ packet(SMSG_BEING_SELFEFFECT, 0x019b, 10, &BeingRecv::processBeing packet(SMSG_BEING_SLIDE, 0x01ff, 10, &BeingRecv::processBeingSlide, 0); packet(SMSG_BEING_SOUND_EFFECT, 0x01d3, 35, &BeingRecv::processBeingSoundEffect, 0); packet(SMSG_BEING_SPECIAL_EFFECT, 0x01f3, 10, &BeingRecv::processBeingSpecialEffect, 0); -packet(SMSG_BEING_SPECIAL_EFFECT_NUM, 0x0284, 14, &BeingRecv::processBeingSpecialEffectNum, 0); -packet(SMSG_BEING_STATUS_CHANGE, 0x0983, 29, &BeingRecv::processBeingStatusChange, 0); -packet(SMSG_BEING_STATUS_CHANGE2, 0x043f, 25, &BeingRecv::processBeingStatusChange2, 0); packet(SMSG_BEING_STAT_UPDATE_1, 0x01ab, 12, &BeingRecv::processBeingStatUpdate1, 0); -packet(SMSG_BEING_VIEW_EQUIPMENT, 0x0997, -1, &BeingRecv::processBeingViewEquipment, 0); + +// 20150000 or near packet(SMSG_BIND_ITEM, 0x02d3, 4, &InventoryRecv::processBindItem, 0); packet(SMSG_BLACKSMITH_RANKS_LIST, 0x0219, 282, &BeingRecv::processBlacksmithRanksList, 0); packet(SMSG_BLADE_STOP, 0x01d1, 14, &BeingRecv::processBladeStop, 0); @@ -492,7 +521,7 @@ if ((serverVersion >= 8 || serverVersion == 0) && packetVersion >= 20150226) packet(SMSG_PLAYER_EQUIPMENT, 0x0a0d, -1, &InventoryRecv::processPlayerEquipment, 20150226); packet(SMSG_PLAYER_CART_EQUIP, 0x0a0f, -1, &InventoryRecv::processPlayerCartEquip, 20150226); packet(SMSG_PLAYER_STORAGE_EQUIP, 0x0a10, -1, &InventoryRecv::processPlayerStorageEquip, 20150226); - packet(SMSG_BEING_VIEW_EQUIPMENT, 0x0a2d, -1, &BeingRecv::processBeingViewEquipment, 0); + packet(SMSG_BEING_VIEW_EQUIPMENT, 0x0a2d, -1, &BeingRecv::processBeingViewEquipment, 20150226); } // partial implimentation for future use |