diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-09-01 23:12:05 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-09-06 01:18:55 +0300 |
commit | a65ebfceea7e708adef3dd62a01c25b52800e572 (patch) | |
tree | 1e4f84c9b71710493b1269dcc74cdae443413bee /src/net/eathena | |
parent | 34f1d92ebe54d22a3bee4308eae3fc9620c27b67 (diff) | |
download | manaplus-a65ebfceea7e708adef3dd62a01c25b52800e572.tar.gz manaplus-a65ebfceea7e708adef3dd62a01c25b52800e572.tar.bz2 manaplus-a65ebfceea7e708adef3dd62a01c25b52800e572.tar.xz manaplus-a65ebfceea7e708adef3dd62a01c25b52800e572.zip |
Move processPlayerSkills from ea namespace into tmwa and eathena.
Diffstat (limited to 'src/net/eathena')
-rw-r--r-- | src/net/eathena/skillhandler.cpp | 34 | ||||
-rw-r--r-- | src/net/eathena/skillhandler.h | 3 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/net/eathena/skillhandler.cpp b/src/net/eathena/skillhandler.cpp index 34b44e9f1..673bcd136 100644 --- a/src/net/eathena/skillhandler.cpp +++ b/src/net/eathena/skillhandler.cpp @@ -22,6 +22,10 @@ #include "net/eathena/skillhandler.h" +#include "being/playerinfo.h" + +#include "gui/windows/skilldialog.h" + #include "net/eathena/messageout.h" #include "net/eathena/protocol.h" @@ -94,4 +98,34 @@ void SkillHandler::useMap(const int id, const std::string &map) const outMsg.writeString(map, 16); } +void SkillHandler::processPlayerSkills(Net::MessageIn &msg) +{ + msg.readInt16(); // length + const int skillCount = (msg.getLength() - 4) / 37; + int updateSkill = 0; + + for (int k = 0; k < skillCount; k++) + { + const int skillId = msg.readInt16(); + msg.readInt16(); // target type + msg.skip(2); // skill pool flags + const int level = msg.readInt16(); + msg.readInt16(); // sp + const int range = msg.readInt16(); + msg.skip(24); // 0 unused + const int up = msg.readUInt8(); + const int oldLevel = PlayerInfo::getSkillLevel(skillId); + if (oldLevel && oldLevel != level) + updateSkill = skillId; + PlayerInfo::setSkillLevel(skillId, level); + if (skillDialog) + { + if (!skillDialog->updateSkill(skillId, range, up)) + skillDialog->addSkill(skillId, level, range, up); + } + } + if (updateSkill && skillDialog) + skillDialog->playUpdateEffect(updateSkill); +} + } // namespace EAthena diff --git a/src/net/eathena/skillhandler.h b/src/net/eathena/skillhandler.h index 3b63bcfc5..c33971245 100644 --- a/src/net/eathena/skillhandler.h +++ b/src/net/eathena/skillhandler.h @@ -46,6 +46,9 @@ class SkillHandler final : public MessageHandler, public Ea::SkillHandler const int x, const int y) const override final; void useMap(const int id, const std::string &map) const override final; + + protected: + void processPlayerSkills(Net::MessageIn &msg); }; } // namespace EAthena |