summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2019-02-12 00:26:43 +0300
committerAndrei Karas <akaras@inbox.ru>2019-02-12 00:26:43 +0300
commitbb23068616794bb6e581f5f2dde8332c7049fe7a (patch)
tree1d31122a70c29a1bb13ff6f9d50700849c987bfc
parent195f88a1da4c3e7860d1995aac579b1ecc07e6db (diff)
downloadmv-bb23068616794bb6e581f5f2dde8332c7049fe7a.tar.gz
mv-bb23068616794bb6e581f5f2dde8332c7049fe7a.tar.bz2
mv-bb23068616794bb6e581f5f2dde8332c7049fe7a.tar.xz
mv-bb23068616794bb6e581f5f2dde8332c7049fe7a.zip
Add packet SMSG_SKILL_CASTING 0x0b1a
-rw-r--r--src/net/eathena/beingrecv.cpp50
-rw-r--r--src/net/eathena/beingrecv.h2
-rw-r--r--src/net/eathena/packetsin.inc20
3 files changed, 64 insertions, 8 deletions
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,
@@ -1022,6 +1020,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");
const BeingId dstId = msg.readBeingId("dst 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<SkillType2::SkillType2>(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);