From bb23068616794bb6e581f5f2dde8332c7049fe7a Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 12 Feb 2019 00:26:43 +0300 Subject: Add packet SMSG_SKILL_CASTING 0x0b1a --- src/net/eathena/beingrecv.cpp | 50 +++++++++++++++++++++++++++++++++++++++---- src/net/eathena/beingrecv.h | 2 ++ src/net/eathena/packetsin.inc | 20 +++++++++++++---- 3 files changed, 64 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/net/eathena/beingrecv.cpp b/src/net/eathena/beingrecv.cpp index d415acea3..981dd9ef1 100644 --- a/src/net/eathena/beingrecv.cpp +++ b/src/net/eathena/beingrecv.cpp @@ -1005,10 +1005,8 @@ void BeingRecv::processSkillCasting(Net::MessageIn &msg) const int dstX = msg.readInt16("dst x"); const int dstY = msg.readInt16("dst y"); const int skillId = msg.readInt16("skill id"); - msg.readInt32("property"); // can be used to trigger effect + msg.readInt32("element"); // +++ use different effects const int castTime = msg.readInt32("cast time"); - if (msg.getVersion() >= 20091124) - msg.readInt8("dispossable"); processSkillCastingContinue(msg, srcId, dstId, @@ -1021,6 +1019,49 @@ void BeingRecv::processSkillCasting(Net::MessageIn &msg) } void BeingRecv::processSkillCasting2(Net::MessageIn &msg) +{ + const BeingId srcId = msg.readBeingId("src id"); + const BeingId dstId = msg.readBeingId("dst id"); + const int dstX = msg.readInt16("dst x"); + const int dstY = msg.readInt16("dst y"); + const int skillId = msg.readInt16("skill id"); + msg.readInt32("element"); // +++ use different effects + const int castTime = msg.readInt32("cast time"); + msg.readInt8("dispossable"); + + processSkillCastingContinue(msg, + srcId, dstId, + dstX, dstY, + skillId, + 1, + 0, + SkillType2::Unknown, + castTime); +} + +void BeingRecv::processSkillCasting3(Net::MessageIn &msg) +{ + const BeingId srcId = msg.readBeingId("src id"); + const BeingId dstId = msg.readBeingId("dst id"); + const int dstX = msg.readInt16("dst x"); + const int dstY = msg.readInt16("dst y"); + const int skillId = msg.readInt16("skill id"); + msg.readInt32("element"); // +++ use different effects + const int castTime = msg.readInt32("cast time"); + msg.readInt8("dispossable"); + msg.readInt32("unknown"); + + processSkillCastingContinue(msg, + srcId, dstId, + dstX, dstY, + skillId, + 1, + 0, + SkillType2::Unknown, + castTime); +} + +void BeingRecv::processSkillCastingEvol(Net::MessageIn &msg) { msg.readInt16("len"); // for now unused const BeingId srcId = msg.readBeingId("src id"); @@ -1029,11 +1070,12 @@ void BeingRecv::processSkillCasting2(Net::MessageIn &msg) const int dstY = msg.readInt16("dst y"); const int skillId = msg.readInt16("skill id"); const int skillLevel = msg.readInt16("skill level"); - msg.readInt32("property"); // can be used to trigger effect + msg.readInt32("element"); // +++ use different effects const int castTime = msg.readInt32("cast time"); const int range = msg.readInt32("skill range"); const SkillType2::SkillType2 inf2 = static_cast(msg.readInt32("inf2")); + // +++ add new unknown field processSkillCastingContinue(msg, srcId, dstId, diff --git a/src/net/eathena/beingrecv.h b/src/net/eathena/beingrecv.h index 62c1adebe..d2e0e5929 100644 --- a/src/net/eathena/beingrecv.h +++ b/src/net/eathena/beingrecv.h @@ -57,6 +57,8 @@ namespace EAthena void processMapType(Net::MessageIn &msg); void processSkillCasting(Net::MessageIn &msg); void processSkillCasting2(Net::MessageIn &msg); + void processSkillCasting3(Net::MessageIn &msg); + void processSkillCastingEvol(Net::MessageIn &msg); void processBeingStatusChange(Net::MessageIn &msg); void processBeingMove2(Net::MessageIn &msg); void processBeingAction2(Net::MessageIn &msg); diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc index 938049fa6..0689708d4 100644 --- a/src/net/eathena/packetsin.inc +++ b/src/net/eathena/packetsin.inc @@ -50,7 +50,6 @@ packet(SMSG_PLAYER_CART_ITEMS, 0x0123, -1, &InventoryRecv::processP packet(SMSG_PLAYER_CART_ADD, 0x0124, 21, &InventoryRecv::processPlayerCartAdd, 1); packet(SMSG_VENDING_ITEMS_LIST, 0x0133, -1, &VendingRecv::processItemsList, 1); packet(SMSG_VENDING_OPEN, 0x0136, -1, &VendingRecv::processOpen, 1); -packet(SMSG_SKILL_CASTING, 0x013e, 24, &BeingRecv::processSkillCasting, 1); packet(SMSG_BEING_STATUS_CHANGE, 0x0196, 9, &BeingRecv::processBeingStatusChange, 1); packet(SMSG_QUEST_LIST, 0x02b1, -1, &QuestRecv::processAddQuests, 1); packet(SMSG_BEING_VIEW_EQUIPMENT, 0x02d7, -1, &BeingRecv::processBeingViewEquipment, 1); @@ -512,6 +511,7 @@ if (packetVersionRe >= 20080827) { packet(SMSG_MVP_EXP, 0x010b, 6, &ChatRecv::processMVPExp, 20080827); packet(SMSG_HOMUNCULUS_INFO, 0x022e, 71, &HomunculusRecv::processHomunculusInfo1, 20080827); + packet(SMSG_SKILL_CASTING, 0x013e, 24, &BeingRecv::processSkillCasting, 20080827); } // 20080827 @@ -548,12 +548,18 @@ packet(SMSG_BEING_STATUS_CHANGE, 0x043f, 25, &BeingRecv::processBeing // 20090218 packet(SMSG_QUEST_NPC_EFFECT, 0x0446, 14, &QuestRecv::processNpcQuestEffect, 20090218); -// 20090401 main +// 20090401 re if (packetVersionRe >= 20090401) { packet(SMSG_MVP_EXP, 0x010b, 6, &ChatRecv::processMVPExp, 20090401); } +// 20090406 main +if (packetVersionRe >= 20090406) +{ + packet(SMSG_SKILL_CASTING, 0x013e, 24, &BeingRecv::processSkillCasting, 20090406); +} + // all re if (packets_re == true) { @@ -605,7 +611,7 @@ packet(SMSG_PLAYER_INVENTORY_REMOVE2, 0x07fa, 8, &InventoryRecv::processP // 20091124 if (packetVersion >= 20091124) { - packet(SMSG_SKILL_CASTING, 0x07fb, 25, &BeingRecv::processSkillCasting, 20091124); + packet(SMSG_SKILL_CASTING, 0x07fb, 25, &BeingRecv::processSkillCasting2, 20091124); } // 20091201 @@ -939,7 +945,7 @@ if (serverVersion > 0) packet2(SMSG_MAP_SET_TILES_TYPE, 0x0b1b, 34, &Ea::MapRecv::processSetTilesType, 0); packet2(SMSG_NPC_SKIN, 0x0b1c, -1, &NpcRecv::processNpcSkin, 0); packet2(SMSG_PLAYER_KILLED_BY, 0x0b1d, 6, &PlayerRecv::processKilledBy, 0); - packet2(SMSG_SKILL_CASTING2, 0x0b1e, -1, &BeingRecv::processSkillCasting2, 0); + packet2(SMSG_SKILL_CASTING2, 0x0b1e, -1, &BeingRecv::processSkillCastingEvol, 0); packet2(SMSG_PLAYER_ADD_SKILL2, 0x0b1f, -1, &SkillRecv::processSkillAdd2, 0); packet2(SMSG_PLAYER_UPDATE_SKILL2, 0x0b20, -1, &SkillRecv::processSkillUpdate2, 0); packet2(SMSG_WALK_ERROR, 0x0b21, 10, &PlayerRecv::processWalkError, 0); @@ -1575,6 +1581,12 @@ if (packetVersionRe >= 20190116) packet(SMSG_NPC_BARTER_OPEN, 0x0b0e, -1, &BarterRecv::processOpenShop, 20190116); } +// 20190130 zero +if (packetVersionRe >= 20190130) +{ + packet(SMSG_SKILL_CASTING, 0x0b1a, 29, &BeingRecv::processSkillCasting3, 20190130); +} + // 0 // evol always packets packet(SMSG_SERVER_VERSION_RESPONSE, 0x7531, -1, &LoginRecv::processServerVersion, 0); -- cgit v1.2.3-60-g2f50