diff options
-rw-r--r-- | src/defaults.cpp | 1 | ||||
-rw-r--r-- | src/gui/skilldialog.cpp | 16 | ||||
-rw-r--r-- | src/gui/skilldialog.h | 4 | ||||
-rw-r--r-- | src/net/ea/skillhandler.cpp | 9 | ||||
-rw-r--r-- | src/net/tmwa/questhandler.cpp | 3 |
5 files changed, 30 insertions, 3 deletions
diff --git a/src/defaults.cpp b/src/defaults.cpp index 30cb22a63..04c2d19cb 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -384,6 +384,7 @@ DefaultsData* getPathsDefaults() AddDEF("afkEffectId", -1); AddDEF("newQuestEffectId", -1); AddDEF("completeQuestEffectId", -1); + AddDEF("skillLevelUpEffectId", -1); AddDEF("minimaps", "graphics/minimaps/"); AddDEF("maps", "maps/"); diff --git a/src/gui/skilldialog.cpp b/src/gui/skilldialog.cpp index 11b11ba8e..b0e3d8e91 100644 --- a/src/gui/skilldialog.cpp +++ b/src/gui/skilldialog.cpp @@ -22,10 +22,11 @@ #include "gui/skilldialog.h" +#include "configuration.h" +#include "effectmanager.h" #include "itemshortcut.h" #include "localplayer.h" #include "playerinfo.h" -#include "configuration.h" #include "gui/setup.h" #include "gui/shortcutwindow.h" @@ -668,6 +669,19 @@ void SkillDialog::updateQuest(const int var, const int val) } } +void SkillDialog::playUpdateEffect(const int id) +{ + const int effectId = paths.getIntValue("skillLevelUpEffectId"); + if (!effectManager || effectId == -1) + return; + const SkillMap::const_iterator it = mSkills.find(id); + if (it != mSkills.end()) + { + if (it->second) + effectManager->trigger(effectId, player_node); + } +} + SkillInfo::SkillInfo() : level(0), skillLevelWidth(0), id(0), modifiable(false), visible(false), model(nullptr), progress(0.0f), range(0) diff --git a/src/gui/skilldialog.h b/src/gui/skilldialog.h index cf2b518e2..968e171d9 100644 --- a/src/gui/skilldialog.h +++ b/src/gui/skilldialog.h @@ -32,7 +32,7 @@ #include <vector> const int SKILL_MIN_ID = 200000; -const int SKILL_VAR_MIN_ID = 1000000; +const unsigned int SKILL_VAR_MIN_ID = 1000000; class Button; class Label; @@ -148,6 +148,8 @@ class SkillDialog final : public Window, public gcn::ActionListener void updateQuest(const int var, const int val); + void playUpdateEffect(const int id); + private: typedef std::map<int, SkillInfo*> SkillMap; SkillMap mSkills; diff --git a/src/net/ea/skillhandler.cpp b/src/net/ea/skillhandler.cpp index 45177f7e6..5a7268a6e 100644 --- a/src/net/ea/skillhandler.cpp +++ b/src/net/ea/skillhandler.cpp @@ -81,6 +81,7 @@ 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++) { @@ -92,7 +93,9 @@ void SkillHandler::processPlayerSkills(Net::MessageIn &msg) const int range = msg.readInt16(); msg.skip(24); // 0 unused const int up = msg.readInt8(); - + const int oldLevel = PlayerInfo::getStatBase(skillId); + if (oldLevel && oldLevel != level) + updateSkill = skillId; PlayerInfo::setStatBase(skillId, level); if (skillDialog) { @@ -100,6 +103,8 @@ void SkillHandler::processPlayerSkills(Net::MessageIn &msg) skillDialog->addSkill(skillId, level, range, up); } } + if (updateSkill && skillDialog) + skillDialog->playUpdateEffect(updateSkill); } void SkillHandler::processPlayerSkillUp(Net::MessageIn &msg) @@ -110,6 +115,8 @@ void SkillHandler::processPlayerSkillUp(Net::MessageIn &msg) const int range = msg.readInt16(); const int up = msg.readInt8(); + if (skillDialog && PlayerInfo::getStatBase(skillId) != level) + skillDialog->playUpdateEffect(skillId); PlayerInfo::setStatBase(skillId, level); if (skillDialog) { diff --git a/src/net/tmwa/questhandler.cpp b/src/net/tmwa/questhandler.cpp index f819dfc16..1a64e95f7 100644 --- a/src/net/tmwa/questhandler.cpp +++ b/src/net/tmwa/questhandler.cpp @@ -80,7 +80,10 @@ void QuestHandler::processSetQuestVar(Net::MessageIn &msg A_UNUSED) questsWindow->rebuild(true); } if (skillDialog) + { skillDialog->updateQuest(var, val); + skillDialog->playUpdateEffect(var + SKILL_VAR_MIN_ID); + } } void QuestHandler::processPlayerQuests(Net::MessageIn &msg A_UNUSED) |