From dbc90e69531c5ae8fddfcfbd6adeaca0ad144f34 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 19 Sep 2014 20:56:49 +0300 Subject: eathena: add partial support for packet SMSG_MERCENARY_SKILLS 0x029d. --- src/net/eathena/mercenaryhandler.cpp | 21 +++++++++++++++++++++ src/net/eathena/mercenaryhandler.h | 2 ++ src/net/eathena/packets.h | 2 +- src/net/eathena/protocol.h | 1 + 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/net/eathena/mercenaryhandler.cpp b/src/net/eathena/mercenaryhandler.cpp index 6aa424682..b48a6b39b 100644 --- a/src/net/eathena/mercenaryhandler.cpp +++ b/src/net/eathena/mercenaryhandler.cpp @@ -41,6 +41,7 @@ MercenaryHandler::MercenaryHandler() : { SMSG_MERCENARY_UPDATE, SMSG_MERCENARY_INFO, + SMSG_MERCENARY_SKILLS, 0 }; handledMessages = _messages; @@ -59,6 +60,10 @@ void MercenaryHandler::handleMessage(Net::MessageIn &msg) processMercenaryInfo(msg); break; + case SMSG_MERCENARY_SKILLS: + processMercenarySkills(msg); + break; + default: break; } @@ -96,4 +101,20 @@ void MercenaryHandler::processMercenaryInfo(Net::MessageIn &msg) msg.readInt16("attack range"); } +void MercenaryHandler::processMercenarySkills(Net::MessageIn &msg) +{ + // +++ need create if need mercenary being and update stats + const int count = (msg.readInt16("len") - 4) / 37; + for (int f = 0; f < count; f ++) + { + msg.readInt16("skill id"); + msg.readInt32("inf"); + msg.readInt16("level"); + msg.readInt16("sp"); + msg.readInt16("attack range"); + msg.readString(24, "name"); + msg.readUInt8("upgradable"); + } +} + } // namespace EAthena diff --git a/src/net/eathena/mercenaryhandler.h b/src/net/eathena/mercenaryhandler.h index 1b3749f01..8a1ea03d9 100644 --- a/src/net/eathena/mercenaryhandler.h +++ b/src/net/eathena/mercenaryhandler.h @@ -43,6 +43,8 @@ class MercenaryHandler final : public MessageHandler, void processMercenaryUpdate(Net::MessageIn &msg); void processMercenaryInfo(Net::MessageIn &msg); + + void processMercenarySkills(Net::MessageIn &msg); }; } // namespace EAthena diff --git a/src/net/eathena/packets.h b/src/net/eathena/packets.h index 75c7bc891..73d6c4dcb 100644 --- a/src/net/eathena/packets.h +++ b/src/net/eathena/packets.h @@ -94,7 +94,7 @@ int16_t packet_lengths[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // #0x0280 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, + 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, -1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 107, 6, -1, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, // #0x02C0 diff --git a/src/net/eathena/protocol.h b/src/net/eathena/protocol.h index 0f26a5ca9..6708da931 100644 --- a/src/net/eathena/protocol.h +++ b/src/net/eathena/protocol.h @@ -250,6 +250,7 @@ #define SMSG_MERCENARY_UPDATE 0x02a2 #define SMSG_MERCENARY_INFO 0x029b +#define SMSG_MERCENARY_SKILLS 0x029d /********************************** * Packets from client to server * -- cgit v1.2.3-60-g2f50