diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-04-02 19:34:24 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-04-02 19:34:51 +0300 |
commit | 9a3120e7c3d89c3d35d5032114b387e49d462154 (patch) | |
tree | d5e516b5f5b3e23071e10c957ee228d470d890a2 /src/net/eathena | |
parent | 568c267f26da3e4b183c0190dd048102f4d933c9 (diff) | |
download | plus-9a3120e7c3d89c3d35d5032114b387e49d462154.tar.gz plus-9a3120e7c3d89c3d35d5032114b387e49d462154.tar.bz2 plus-9a3120e7c3d89c3d35d5032114b387e49d462154.tar.xz plus-9a3120e7c3d89c3d35d5032114b387e49d462154.zip |
Sort more packets. Add version checks inside packets.
Diffstat (limited to 'src/net/eathena')
-rw-r--r-- | src/net/eathena/beingrecv.cpp | 32 | ||||
-rw-r--r-- | src/net/eathena/beingrecv.h | 1 | ||||
-rw-r--r-- | src/net/eathena/packetsin.inc | 11 |
3 files changed, 40 insertions, 4 deletions
diff --git a/src/net/eathena/beingrecv.cpp b/src/net/eathena/beingrecv.cpp index 7eaf601e3..057617a1c 100644 --- a/src/net/eathena/beingrecv.cpp +++ b/src/net/eathena/beingrecv.cpp @@ -1761,6 +1761,38 @@ void BeingRecv::processGraffiti(Net::MessageIn &msg) dstBeing->setCreatorId(creatorId); } +void BeingRecv::processSkillDamage(Net::MessageIn &msg) +{ + BLOCK_START("BeingRecv::processSkillDamage") + if (!actorManager) + { + BLOCK_END("BeingRecv::processSkillDamage") + return; + } + + const int id = msg.readInt16("skill id"); + Being *const srcBeing = actorManager->findBeing( + msg.readBeingId("src being id")); + Being *const dstBeing = actorManager->findBeing( + msg.readBeingId("dst being id")); + msg.readInt32("tick"); + msg.readInt32("src speed"); + msg.readInt32("dst speed"); + int param1; + if (msg.getVersion() >= 3) + param1 = msg.readInt32("damage"); + else + param1 = msg.readInt16("damage"); + const int level = msg.readInt16("skill level"); + msg.readInt16("div"); + msg.readUInt8("skill hit/type?"); + if (srcBeing) + srcBeing->handleSkill(dstBeing, param1, id, level); + if (dstBeing) + dstBeing->takeDamage(srcBeing, param1, AttackType::SKILL, id, level); + BLOCK_END("BeingRecv::processSkillDamage") +} + void BeingRecv::applyPlayerAction(Net::MessageIn &msg, Being *const being, const uint8_t type) diff --git a/src/net/eathena/beingrecv.h b/src/net/eathena/beingrecv.h index 4932232ba..c8f26d1fd 100644 --- a/src/net/eathena/beingrecv.h +++ b/src/net/eathena/beingrecv.h @@ -110,6 +110,7 @@ namespace EAthena void processSkillCancel(Net::MessageIn &msg); void processSolveCharName(Net::MessageIn &msg); void processGraffiti(Net::MessageIn &msg); + void processSkillDamage(Net::MessageIn &msg); Being *createBeing2(Net::MessageIn &msg, const BeingId id, const int16_t job, diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc index 7f128eca2..0816a976f 100644 --- a/src/net/eathena/packetsin.inc +++ b/src/net/eathena/packetsin.inc @@ -28,9 +28,14 @@ packet(SMSG_PLAYER_STATUS_CHANGE, 0x0119, 13, &BeingRecv::processPlaye packet(SMSG_PLAYER_STORAGE_ADD, 0x00f4, 21, &InventoryRecv::processPlayerStorageAdd, 1); packet(SMSG_QUEST_LIST, 0x02b1, -1, &QuestRecv::processAddQuests, 1); packet(SMSG_SKILL_CASTING, 0x013e, 24, &BeingRecv::processSkillCasting, 1); +packet(SMSG_SKILL_DAMAGE, 0x0114, 31, &BeingRecv::processSkillDamage, 1); // 3 -packet(SMSG_PLAYER_INVENTORY_USE, 0x01c8, 13, &Ea::InventoryRecv::processPlayerInventoryUse, 3); +if (packetVersion >= 3) +{ + packet(SMSG_PLAYER_INVENTORY_USE, 0x01c8, 13, &Ea::InventoryRecv::processPlayerInventoryUse, 3); + packet(SMSG_SKILL_DAMAGE, 0x01de, 33, &BeingRecv::processSkillDamage, 3); +} // 4 packet(SMSG_BEING_CHANGE_LOOKS2, 0x01d7, 11, &BeingRecv::processBeingChangeLook2, 4); @@ -578,11 +583,9 @@ packet(SMSG_SCRIPT_MESSAGE, 0x08b3, -1, &ChatRecv::processScript packet(SMSG_SERVER_PING, 0x007f, 6, &GameRecv::processServerTick, 0); packet(SMSG_SKILL_ARROW_CREATE_LIST, 0x01ad, -1, &SkillRecv::processSkillArrowCreateList, 0); packet(SMSG_SKILL_AUTO_CAST, 0x0147, 39, &BeingRecv::processSkillAutoCast, 0); +packet(SMSG_SKILL_CAST_CANCEL, 0x01b9, 6, &BeingRecv::processSkillCancel, 0); // 20150000 or near -packet(SMSG_SKILL_CAST_CANCEL, 0x01b9, 6, &BeingRecv::processSkillCancel, 0); -packet(SMSG_SKILL_DAMAGE, 0x01de, 33, &Ea::BeingRecv::processSkillDamage, 0); -packet(SMSG_SKILL_DAMAGE_OUTDATED, 0x0114, 31, nullptr, 0); packet(SMSG_SKILL_DEVOTION_EFFECT, 0x01cf, 28, &SkillRecv::processSkillDevotionEffect, 0); packet(SMSG_SKILL_ENTRY, 0x09ca, -1, &BeingRecv::processSkillEntry, 0); packet(SMSG_SKILL_FAILED, 0x0110, 10, &SkillRecv::processSkillFailed, 0); |