diff options
-rw-r--r-- | src/net/eathena/packetsin.inc | 15 | ||||
-rw-r--r-- | src/net/eathena/skillrecv.cpp | 18 | ||||
-rw-r--r-- | src/net/eathena/skillrecv.h | 1 |
3 files changed, 33 insertions, 1 deletions
diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc index 263ca4a1e..928d6eeab 100644 --- a/src/net/eathena/packetsin.inc +++ b/src/net/eathena/packetsin.inc @@ -1036,11 +1036,23 @@ if (packetVersion >= 20170502) } // 20170315 -if (packetVersion == 20170315) +if (packetVersion >= 20170315) { packet(SMSG_CHANGE_MAP_SERVER, 0x0ac7, 156, &CharServerRecv::processChangeMapServer, 20170315); } +// 20170419 re +if (packetVersionRe >= 20170419) +{ + packet(SMSG_SKILL_WARP_POINT, 0x0abe, -1, &SkillRecv::processSkillWarpPoint2, 20170419); +} + +// 20170502 main +if (packetVersionMain >= 20170502) +{ + packet(SMSG_SKILL_WARP_POINT, 0x0abe, -1, &SkillRecv::processSkillWarpPoint2, 20170502); +} + // 20170830 packet(SMSG_PLAYER_STAT_UPDATE_7, 0x0acb, 12, &PlayerRecv::processPlayerStatUpdate7, 20170830); packet(SMSG_PLAYER_GET_EXP2, 0x0acc, 18, &PlayerRecv::processPlayerGetExp2, 20170830); @@ -1050,6 +1062,7 @@ if (packets_zero == true) { packet(SMSG_ITEM_DROPPED, 0x0add, 22, &ItemRecv::processItemDropped, 20171018); packet(SMSG_ITEM_MOVE_FAILED, 0x0aa7, 6, &InventoryRecv::processItemMoveFailed, 20171018); + packet(SMSG_SKILL_WARP_POINT, 0x0abe, -1, &SkillRecv::processSkillWarpPoint2, 20171018); } // 20171207 diff --git a/src/net/eathena/skillrecv.cpp b/src/net/eathena/skillrecv.cpp index 6307cb3ab..3f22d02bd 100644 --- a/src/net/eathena/skillrecv.cpp +++ b/src/net/eathena/skillrecv.cpp @@ -442,6 +442,24 @@ void SkillRecv::processSkillWarpPoint(Net::MessageIn &msg) dialog->addText(msg.readString(16, "map name")); } +void SkillRecv::processSkillWarpPoint2(Net::MessageIn &msg) +{ + const int count = (msg.readInt16("len") - 6) / 16; + const int skillId = msg.readInt16("skill id"); + + TextSelectDialog *const dialog = CREATEWIDGETR(TextSelectDialog, + // TRANSLATORS: warp select window name + _("Select warp target"), + // TRANSLATORS: warp select button + _("Warp"), + AllowQuit_false); + skillWarpListener.setDialog(dialog); + skillWarpListener.setSkill(skillId); + dialog->addActionListener(&skillWarpListener); + for (int f = 0; f < count; f ++) + dialog->addText(msg.readString(16, "map name")); +} + void SkillRecv::processSkillMemoMessage(Net::MessageIn &msg) { const int type = msg.readUInt8("type"); diff --git a/src/net/eathena/skillrecv.h b/src/net/eathena/skillrecv.h index 1aaa30514..d9b2c1b5e 100644 --- a/src/net/eathena/skillrecv.h +++ b/src/net/eathena/skillrecv.h @@ -42,6 +42,7 @@ namespace EAthena void processSkillUpdate2(Net::MessageIn &msg); void processSkillDelete(Net::MessageIn &msg); void processSkillWarpPoint(Net::MessageIn &msg); + void processSkillWarpPoint2(Net::MessageIn &msg); void processSkillMemoMessage(Net::MessageIn &msg); void processSkillProduceMixList(Net::MessageIn &msg); void processSkillProduceEffect(Net::MessageIn &msg); |