diff options
author | Andrei Karas <akaras@inbox.ru> | 2013-02-24 01:30:46 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2013-02-24 01:32:02 +0300 |
commit | 3da7fa61442364be6713359690a35f89aa8e613a (patch) | |
tree | 48a941dbbb0234b897478aa50518112407d08e5b /src | |
parent | 470aaad15a0f9a08dd12ab34c8602cd93fc57b76 (diff) | |
download | manaplus-3da7fa61442364be6713359690a35f89aa8e613a.tar.gz manaplus-3da7fa61442364be6713359690a35f89aa8e613a.tar.bz2 manaplus-3da7fa61442364be6713359690a35f89aa8e613a.tar.xz manaplus-3da7fa61442364be6713359690a35f89aa8e613a.zip |
Add support for show quest variables in skills window (evol only)
This allow use pseudo skills controlled by quest variables.
Diffstat (limited to 'src')
-rw-r--r-- | src/actorspritemanager.cpp | 6 | ||||
-rw-r--r-- | src/gui/chatwindow.cpp | 3 | ||||
-rw-r--r-- | src/gui/skilldialog.cpp | 63 | ||||
-rw-r--r-- | src/gui/skilldialog.h | 5 | ||||
-rw-r--r-- | src/gui/statuswindow.cpp | 38 | ||||
-rw-r--r-- | src/localplayer.cpp | 10 | ||||
-rw-r--r-- | src/net/ea/playerhandler.cpp | 120 | ||||
-rw-r--r-- | src/net/ea/playerhandler.h | 4 | ||||
-rw-r--r-- | src/net/ea/specialhandler.cpp | 6 | ||||
-rw-r--r-- | src/net/playerhandler.h | 5 | ||||
-rw-r--r-- | src/net/tmwa/questhandler.cpp | 5 | ||||
-rw-r--r-- | src/playerinfo.cpp | 36 | ||||
-rw-r--r-- | src/playerinfo.h | 20 | ||||
-rw-r--r-- | src/spellmanager.cpp | 7 |
14 files changed, 155 insertions, 173 deletions
diff --git a/src/actorspritemanager.cpp b/src/actorspritemanager.cpp index 4a36d6e1d..899f51088 100644 --- a/src/actorspritemanager.cpp +++ b/src/actorspritemanager.cpp @@ -1144,10 +1144,8 @@ void ActorSpriteManager::heal(const Being *const target) const } } // magic levels < 2 - else if (PlayerInfo::getStatEffective( - static_cast<PlayerInfo::Attribute>(340)) < 2 - || PlayerInfo::getStatEffective( - static_cast<PlayerInfo::Attribute>(341)) < 2) + else if (PlayerInfo::getStatEffective(340) < 2 + || PlayerInfo::getStatEffective(341) < 2) { if (PlayerInfo::getAttribute(PlayerInfo::MP) >= 6) { diff --git a/src/gui/chatwindow.cpp b/src/gui/chatwindow.cpp index 705ef6e61..78ffde880 100644 --- a/src/gui/chatwindow.cpp +++ b/src/gui/chatwindow.cpp @@ -998,8 +998,7 @@ void ChatWindow::processEvent(Channels channel, const DepricatedEvent &event) if (id == Net::getPlayerHandler()->getJobLocation()) { const std::pair<int, int> exp - = PlayerInfo::getStatExperience( - static_cast<PlayerInfo::Attribute>(id)); + = PlayerInfo::getStatExperience(id); if (event.getInt("oldValue1") > exp.first || !event.getInt("oldValue2")) { diff --git a/src/gui/skilldialog.cpp b/src/gui/skilldialog.cpp index 053bcbd1b..ee248562a 100644 --- a/src/gui/skilldialog.cpp +++ b/src/gui/skilldialog.cpp @@ -277,6 +277,7 @@ SkillDialog::SkillDialog() : setupWindow->registerWindowForReset(this); mUseButton->setEnabled(false); + mIncreaseButton->setEnabled(false); place(0, 0, mTabs, 5, 5); place(0, 5, mPointsLabel, 4); @@ -316,7 +317,7 @@ void SkillDialog::action(const gcn::ActionEvent &event) if (const SkillInfo *const info = tab->getSelectedInfo()) { mUseButton->setEnabled(info->range > 0); - + mIncreaseButton->setEnabled(info->id < SKILL_VAR_MIN_ID); const int num = itemShortcutWindow->getTabIndex(); if (num >= 0 && num < static_cast<int>(SHORTCUT_TABS) && itemShortcut[num]) @@ -328,6 +329,7 @@ void SkillDialog::action(const gcn::ActionEvent &event) else { mUseButton->setEnabled(false); + mIncreaseButton->setEnabled(false); } } } @@ -471,14 +473,20 @@ void SkillDialog::loadSkills() { if (xmlNameEqual(node, "skill")) { - const int id = atoi(XML::getProperty( - node, "id", "-1").c_str()); + int id = XML::getIntProperty(node, "id", -1, -1, 1000000); + if (id == -1) + { + id = XML::getIntProperty(node, "var", -1, -1, 100000); + if (id == -1) + continue; + id += SKILL_VAR_MIN_ID; + } SkillInfo *skill = getSkill(id); if (!skill) { skill = new SkillInfo; - skill->id = static_cast<short unsigned>(id); + skill->id = static_cast<unsigned int>(id); skill->modifiable = false; skill->visible = false; skill->model = model; @@ -497,8 +505,16 @@ void SkillDialog::loadSkills() data->name = name; data->setIcon(icon); - data->dispName = strprintf("%s, %d", - name.c_str(), skill->id); + if (skill->id < SKILL_VAR_MIN_ID) + { + data->dispName = strprintf("%s, %d", + name.c_str(), skill->id); + } + else + { + data->dispName = strprintf("%s, (%d)", + name.c_str(), skill->id - SKILL_VAR_MIN_ID); + } data->shortName = XML::langProperty(node, "shortName", name.substr(0, 3)); data->description = XML::langProperty( @@ -558,7 +574,7 @@ void SkillDialog::addSkill(const int id, const int level, const int range, if (mDefaultModel) { SkillInfo *const skill = new SkillInfo; - skill->id = static_cast<short unsigned>(id); + skill->id = static_cast<unsigned int>(id); skill->data->name = "Unknown skill Id: " + toString(id); skill->data->dispName = "Unknown skill Id: " + toString(id); skill->data->description.clear(); @@ -624,9 +640,31 @@ void SkillDialog::updateTabSelection() if (tab) { if (const SkillInfo *const info = tab->getSelectedInfo()) + { mUseButton->setEnabled(info->range > 0); + mIncreaseButton->setEnabled(info->id < SKILL_VAR_MIN_ID); + } else + { mUseButton->setEnabled(false); + } + } +} + +void SkillDialog::updateQuest(const int var, const int val) +{ + const int id = var + SKILL_VAR_MIN_ID; + const SkillMap::const_iterator it = mSkills.find(id); + + if (it != mSkills.end()) + { + SkillInfo *const info = it->second; + if (info) + { + PlayerInfo::setStatBase(id, val); + info->level = val; + info->update(); + } } } @@ -647,13 +685,9 @@ SkillInfo::~SkillInfo() void SkillInfo::update() { - const int baseLevel = PlayerInfo::getStatBase( - static_cast<PlayerInfo::Attribute>(id)); - const int effLevel = PlayerInfo::getStatEffective( - static_cast<PlayerInfo::Attribute>(id)); - - const std::pair<int, int> exp = PlayerInfo::getStatExperience( - static_cast<PlayerInfo::Attribute>(id)); + const int baseLevel = PlayerInfo::getStatBase(id); + const int effLevel = PlayerInfo::getStatEffective(id); + const std::pair<int, int> exp = PlayerInfo::getStatExperience(id); if (!modifiable && baseLevel == 0 && effLevel == 0 && exp.second == 0) { @@ -663,7 +697,6 @@ void SkillInfo::update() if (model) model->updateVisibilities(); } - return; } diff --git a/src/gui/skilldialog.h b/src/gui/skilldialog.h index 396718310..cf2b518e2 100644 --- a/src/gui/skilldialog.h +++ b/src/gui/skilldialog.h @@ -32,6 +32,7 @@ #include <vector> const int SKILL_MIN_ID = 200000; +const int SKILL_VAR_MIN_ID = 1000000; class Button; class Label; @@ -68,7 +69,7 @@ struct SkillInfo final int level; std::string skillLevel; int skillLevelWidth; - unsigned short id; + unsigned int id; bool modifiable; bool visible; SkillModel *model; @@ -145,6 +146,8 @@ class SkillDialog final : public Window, public gcn::ActionListener void updateTabSelection(); + void updateQuest(const int var, const int val); + private: typedef std::map<int, SkillInfo*> SkillMap; SkillMap mSkills; diff --git a/src/gui/statuswindow.cpp b/src/gui/statuswindow.cpp index 019d136d4..3e34b088d 100644 --- a/src/gui/statuswindow.cpp +++ b/src/gui/statuswindow.cpp @@ -373,12 +373,10 @@ void StatusWindow::processEvent(Channels channel A_UNUSED, { if (mJobLvlLabel) { - int lvl = PlayerInfo::getStatBase( - static_cast<PlayerInfo::Attribute>(id)); - + int lvl = PlayerInfo::getStatBase(id); const int oldExp = event.getInt("oldValue1"); - const std::pair<int, int> exp = PlayerInfo::getStatExperience( - static_cast<PlayerInfo::Attribute>(id)); + const std::pair<int, int> exp + = PlayerInfo::getStatExperience(id); if (!lvl) { @@ -392,8 +390,7 @@ void StatusWindow::processEvent(Channels channel A_UNUSED, { lvl = (exp.second - 20000) / 150; blocked = true; - PlayerInfo::setStatBase( - static_cast<PlayerInfo::Attribute>(id), lvl); + PlayerInfo::setStatBase(id, lvl); blocked = false; } } @@ -404,10 +401,8 @@ void StatusWindow::processEvent(Channels channel A_UNUSED, lvl ++; blocked = true; PlayerInfo::setStatExperience( - static_cast<PlayerInfo::Attribute>(id), - exp.first, 20000 + lvl * 150); - PlayerInfo::setStatBase( - static_cast<PlayerInfo::Attribute>(id), lvl); + id, exp.first, 20000 + lvl * 150); + PlayerInfo::setStatBase(id, lvl); blocked = false; } @@ -589,8 +584,7 @@ void StatusWindow::updateJobBar(ProgressBar *const bar, const bool percent) void StatusWindow::updateProgressBar(ProgressBar *const bar, const int id, const bool percent) const { - const std::pair<int, int> exp = PlayerInfo::getStatExperience( - static_cast<PlayerInfo::Attribute>(id)); + const std::pair<int, int> exp = PlayerInfo::getStatExperience(id); updateProgressBar(bar, exp.first, exp.second, percent); } @@ -783,10 +777,8 @@ AttrDisplay::~AttrDisplay() std::string AttrDisplay::update() { - const int base = PlayerInfo::getStatBase( - static_cast<PlayerInfo::Attribute>(mId)); - const int bonus = PlayerInfo::getStatMod( - static_cast<PlayerInfo::Attribute>(mId)); + const int base = PlayerInfo::getStatBase(mId); + const int bonus = PlayerInfo::getStatMod(mId); std::string value = toString(base + bonus); if (bonus) value += strprintf("=%d%+d", base, bonus); @@ -872,10 +864,8 @@ void ChangeDisplay::action(const gcn::ActionEvent &event) PlayerInfo::CHAR_POINTS) + 1; PlayerInfo::setAttribute(PlayerInfo::CHAR_POINTS, newpoints); - const int newbase = PlayerInfo::getStatBase( - static_cast<PlayerInfo::Attribute>(mId)) - 1; - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - mId), newbase); + const int newbase = PlayerInfo::getStatBase(mId) - 1; + PlayerInfo::setStatBase(mId, newbase); Net::getPlayerHandler()->decreaseAttribute(mId); } @@ -893,10 +883,8 @@ void ChangeDisplay::action(const gcn::ActionEvent &event) PlayerInfo::CHAR_POINTS) - cnt; PlayerInfo::setAttribute(PlayerInfo::CHAR_POINTS, newpoints); - const int newbase = PlayerInfo::getStatBase( - static_cast<PlayerInfo::Attribute>(mId)) + cnt; - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - mId), newbase); + const int newbase = PlayerInfo::getStatBase(mId) + cnt; + PlayerInfo::setStatBase(mId, newbase); for (unsigned f = 0; f < mInc->getClickCount(); f ++) { diff --git a/src/localplayer.cpp b/src/localplayer.cpp index b4c31b33a..f7a95625f 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -1697,8 +1697,8 @@ void LocalPlayer::processEvent(Channels channel, const int id = event.getInt("id"); if (id == Net::getPlayerHandler()->getJobLocation()) { - const std::pair<int, int> exp = PlayerInfo::getStatExperience( - static_cast<PlayerInfo::Attribute>(id)); + const std::pair<int, int> exp + = PlayerInfo::getStatExperience(id); if (event.getInt("oldValue1") > exp.first || !event.getInt("oldValue2")) { @@ -3272,10 +3272,8 @@ void LocalPlayer::tryMagic(const std::string &spell, const int baseMagic, if (!chatWindow) return; - if (PlayerInfo::getStatEffective(static_cast<PlayerInfo::Attribute>( - 340)) >= baseMagic - && PlayerInfo::getStatEffective(static_cast<PlayerInfo::Attribute>( - 342)) >= schoolMagic) + if (PlayerInfo::getStatEffective(340) >= baseMagic + && PlayerInfo::getStatEffective(342) >= schoolMagic) { if (PlayerInfo::getAttribute(PlayerInfo::MP) >= mana) { diff --git a/src/net/ea/playerhandler.cpp b/src/net/ea/playerhandler.cpp index f46a2241b..81bc373f3 100644 --- a/src/net/ea/playerhandler.cpp +++ b/src/net/ea/playerhandler.cpp @@ -360,60 +360,48 @@ void PlayerHandler::processPlayerStatUpdate1(Net::MessageIn &msg) break; case 0x0029: - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - EA_ATK), value); + PlayerInfo::setStatBase(EA_ATK, value); PlayerInfo::updateAttrs(); break; case 0x002a: - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>( - EA_ATK), value); + PlayerInfo::setStatMod(EA_ATK, value); PlayerInfo::updateAttrs(); break; case 0x002b: - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - EA_MATK), value); + PlayerInfo::setStatBase(EA_MATK, value); break; case 0x002c: - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>( - EA_MATK), value); + PlayerInfo::setStatMod(EA_MATK, value); break; case 0x002d: - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - EA_DEF), value); + PlayerInfo::setStatBase(EA_DEF, value); break; case 0x002e: - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>( - EA_DEF), value); + PlayerInfo::setStatMod(EA_DEF, value); break; case 0x002f: - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - EA_MDEF), value); + PlayerInfo::setStatBase(EA_MDEF, value); break; case 0x0030: - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>( - EA_MDEF), value); + PlayerInfo::setStatMod(EA_MDEF, value); break; case 0x0031: - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - EA_HIT), value); + PlayerInfo::setStatBase(EA_HIT, value); break; case 0x0032: - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - EA_FLEE), value); + PlayerInfo::setStatBase(EA_FLEE, value); break; case 0x0033: - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>( - EA_FLEE), value); + PlayerInfo::setStatMod(EA_FLEE, value); break; case 0x0034: - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - EA_CRIT), value); + PlayerInfo::setStatBase(EA_CRIT, value); break; case 0x0035: @@ -424,8 +412,7 @@ void PlayerHandler::processPlayerStatUpdate1(Net::MessageIn &msg) break; case 0x0037: - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - EA_JOB), value); + PlayerInfo::setStatBase(EA_JOB, value); break; case 500: @@ -460,10 +447,8 @@ void PlayerHandler::processPlayerStatUpdate2(Net::MessageIn &msg) PlayerInfo::setAttribute(PlayerInfo::EXP, msg.readInt32()); break; case 0x0002: - PlayerInfo::setStatExperience(static_cast<PlayerInfo::Attribute>( - EA_JOB), msg.readInt32(), - PlayerInfo::getStatExperience(static_cast<PlayerInfo::Attribute>( - EA_JOB)).second); + PlayerInfo::setStatExperience(EA_JOB, msg.readInt32(), + PlayerInfo::getStatExperience(EA_JOB).second); break; case 0x0014: { @@ -487,10 +472,8 @@ void PlayerHandler::processPlayerStatUpdate2(Net::MessageIn &msg) PlayerInfo::setAttribute(PlayerInfo::EXP_NEEDED, msg.readInt32()); break; case 0x0017: - PlayerInfo::setStatExperience(static_cast<PlayerInfo::Attribute>( - EA_JOB), PlayerInfo::getStatExperience( - static_cast<PlayerInfo::Attribute>(EA_JOB)).first, - msg.readInt32()); + PlayerInfo::setStatExperience(EA_JOB, PlayerInfo::getStatExperience( + EA_JOB).first, msg.readInt32()); break; default: logger->log("QQQQ PLAYER_STAT_UPDATE_2 " + toString(type)); @@ -504,10 +487,8 @@ void PlayerHandler::processPlayerStatUpdate3(Net::MessageIn &msg) const int base = msg.readInt32(); const int bonus = msg.readInt32(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - type), base, false); - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>( - type), bonus); + PlayerInfo::setStatBase(type, base, false); + PlayerInfo::setStatMod(type, bonus); if (type == EA_ATK || type == PlayerInfo::ATTACK_DELAY) PlayerInfo::updateAttrs(); } @@ -520,15 +501,14 @@ void PlayerHandler::processPlayerStatUpdate4(Net::MessageIn &msg) if (ok != 1) { - const int oldValue = PlayerInfo::getStatBase( - static_cast<PlayerInfo::Attribute>(type)); + const int oldValue = PlayerInfo::getStatBase(type); int points = PlayerInfo::getAttribute(PlayerInfo::CHAR_POINTS); points += oldValue - value; PlayerInfo::setAttribute(PlayerInfo::CHAR_POINTS, points); SERVER_NOTICE(_("Cannot raise skill!")) } - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(type), value); + PlayerInfo::setStatBase(type, value); } void PlayerHandler::processPlayerStatUpdate5(Net::MessageIn &msg) @@ -536,80 +516,69 @@ void PlayerHandler::processPlayerStatUpdate5(Net::MessageIn &msg) PlayerInfo::setAttribute(PlayerInfo::CHAR_POINTS, msg.readInt16()); int val = msg.readInt8(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_STR), val); + PlayerInfo::setStatBase(EA_STR, val); if (statusWindow) statusWindow->setPointsNeeded(EA_STR, msg.readInt8()); else msg.readInt8(); val = msg.readInt8(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_AGI), val); + PlayerInfo::setStatBase(EA_AGI, val); if (statusWindow) statusWindow->setPointsNeeded(EA_AGI, msg.readInt8()); else msg.readInt8(); val = msg.readInt8(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_VIT), val); + PlayerInfo::setStatBase(EA_VIT, val); if (statusWindow) statusWindow->setPointsNeeded(EA_VIT, msg.readInt8()); else msg.readInt8(); val = msg.readInt8(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_INT), val); + PlayerInfo::setStatBase(EA_INT, val); if (statusWindow) statusWindow->setPointsNeeded(EA_INT, msg.readInt8()); else msg.readInt8(); val = msg.readInt8(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_DEX), val); + PlayerInfo::setStatBase(EA_DEX, val); if (statusWindow) statusWindow->setPointsNeeded(EA_DEX, msg.readInt8()); else msg.readInt8(); val = msg.readInt8(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_LUK), val); + PlayerInfo::setStatBase(EA_LUK, val); if (statusWindow) statusWindow->setPointsNeeded(EA_LUK, msg.readInt8()); else msg.readInt8(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_ATK), - msg.readInt16(), false); - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>(EA_ATK), - msg.readInt16()); + PlayerInfo::setStatBase(EA_ATK, msg.readInt16(), false); + PlayerInfo::setStatMod(EA_ATK, msg.readInt16()); PlayerInfo::updateAttrs(); val = msg.readInt16(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_MATK), - val, false); + PlayerInfo::setStatBase(EA_MATK, val, false); val = msg.readInt16(); - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>(EA_MATK), val); + PlayerInfo::setStatMod(EA_MATK, val); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_DEF), - msg.readInt16(), false); - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>(EA_DEF), - msg.readInt16()); + PlayerInfo::setStatBase(EA_DEF, msg.readInt16(), false); + PlayerInfo::setStatMod(EA_DEF, msg.readInt16()); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_MDEF), - msg.readInt16(), false); - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>(EA_MDEF), - msg.readInt16()); + PlayerInfo::setStatBase(EA_MDEF, msg.readInt16(), false); + PlayerInfo::setStatMod(EA_MDEF, msg.readInt16()); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_HIT), - msg.readInt16()); + PlayerInfo::setStatBase(EA_HIT, msg.readInt16()); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_FLEE), - msg.readInt16(), false); - PlayerInfo::setStatMod(static_cast<PlayerInfo::Attribute>(EA_FLEE), - msg.readInt16()); + PlayerInfo::setStatBase(EA_FLEE, msg.readInt16(), false); + PlayerInfo::setStatMod(EA_FLEE, msg.readInt16()); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>(EA_CRIT), - msg.readInt16()); + PlayerInfo::setStatBase(EA_CRIT, msg.readInt16()); msg.readInt16(); // manner } @@ -667,18 +636,17 @@ void PlayerHandler::processPlayerArrowMessage(Net::MessageIn &msg) bool PlayerHandler::canUseMagic() const { - return PlayerInfo::getStatEffective(static_cast<PlayerInfo::Attribute>( - EA_MATK)) > 0; + return PlayerInfo::getStatEffective(EA_MATK) > 0; } -PlayerInfo::Attribute PlayerHandler::getJobLocation() const +int PlayerHandler::getJobLocation() const { - return static_cast<PlayerInfo::Attribute>(EA_JOB); + return EA_JOB; } -PlayerInfo::Attribute PlayerHandler::getAttackLocation() const +int PlayerHandler::getAttackLocation() const { - return static_cast<PlayerInfo::Attribute>(EA_ATK); + return EA_ATK; } } // namespace Ea diff --git a/src/net/ea/playerhandler.h b/src/net/ea/playerhandler.h index 6df4cc237..016b29782 100644 --- a/src/net/ea/playerhandler.h +++ b/src/net/ea/playerhandler.h @@ -49,9 +49,9 @@ class PlayerHandler : public Net::PlayerHandler Vector getDefaultWalkSpeed() const A_WARN_UNUSED; - PlayerInfo::Attribute getJobLocation() const A_WARN_UNUSED; + int getJobLocation() const A_WARN_UNUSED; - PlayerInfo::Attribute getAttackLocation() const A_WARN_UNUSED; + int getAttackLocation() const A_WARN_UNUSED; void processWalkResponse(Net::MessageIn &msg); diff --git a/src/net/ea/specialhandler.cpp b/src/net/ea/specialhandler.cpp index ba805e261..6f9b346a3 100644 --- a/src/net/ea/specialhandler.cpp +++ b/src/net/ea/specialhandler.cpp @@ -93,8 +93,7 @@ void SpecialHandler::processPlayerSkills(Net::MessageIn &msg) msg.skip(24); // 0 unused const int up = msg.readInt8(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - skillId), level); + PlayerInfo::setStatBase(skillId, level); if (skillDialog) { if (!skillDialog->updateSkill(skillId, range, up)) @@ -111,8 +110,7 @@ void SpecialHandler::processPlayerSkillUp(Net::MessageIn &msg) const int range = msg.readInt16(); const int up = msg.readInt8(); - PlayerInfo::setStatBase(static_cast<PlayerInfo::Attribute>( - skillId), level); + PlayerInfo::setStatBase(skillId, level); if (skillDialog) { if (!skillDialog->updateSkill(skillId, range, up)) diff --git a/src/net/playerhandler.h b/src/net/playerhandler.h index dab32836f..01ab732e3 100644 --- a/src/net/playerhandler.h +++ b/src/net/playerhandler.h @@ -66,10 +66,9 @@ class PlayerHandler virtual bool canCorrectAttributes() const = 0; - virtual PlayerInfo::Attribute getJobLocation() const A_WARN_UNUSED = 0; + virtual int getJobLocation() const A_WARN_UNUSED = 0; - virtual PlayerInfo::Attribute getAttackLocation() - const A_WARN_UNUSED = 0; + virtual int getAttackLocation() const A_WARN_UNUSED = 0; virtual Vector getDefaultWalkSpeed() const A_WARN_UNUSED = 0; diff --git a/src/net/tmwa/questhandler.cpp b/src/net/tmwa/questhandler.cpp index b0910cf7c..f819dfc16 100644 --- a/src/net/tmwa/questhandler.cpp +++ b/src/net/tmwa/questhandler.cpp @@ -22,6 +22,7 @@ #include "localplayer.h" +#include "gui/skilldialog.h" #include "gui/questswindow.h" #include "net/tmwa/protocol.h" @@ -78,6 +79,8 @@ void QuestHandler::processSetQuestVar(Net::MessageIn &msg A_UNUSED) questsWindow->updateQuest(var, val); questsWindow->rebuild(true); } + if (skillDialog) + skillDialog->updateQuest(var, val); } void QuestHandler::processPlayerQuests(Net::MessageIn &msg A_UNUSED) @@ -89,6 +92,8 @@ void QuestHandler::processPlayerQuests(Net::MessageIn &msg A_UNUSED) const int val = msg.readInt32(); // value if (questsWindow) questsWindow->updateQuest(var, val); + if (skillDialog) + skillDialog->updateQuest(var, val); } if (questsWindow) questsWindow->rebuild(false); diff --git a/src/playerinfo.cpp b/src/playerinfo.cpp index 5721d2d67..b54f6c671 100644 --- a/src/playerinfo.cpp +++ b/src/playerinfo.cpp @@ -89,7 +89,7 @@ void triggerStat(const int id, const std::string &changed, // --- Attributes ------------------------------------------------------------- -int getAttribute(const Attribute id) +int getAttribute(const int id) { const IntMap::const_iterator it = mData.mAttributes.find(id); if (it != mData.mAttributes.end()) @@ -98,7 +98,7 @@ int getAttribute(const Attribute id) return 0; } -void setAttribute(const Attribute id, const int value, const bool notify) +void setAttribute(const int id, const int value, const bool notify) { const int old = mData.mAttributes[id]; mData.mAttributes[id] = value; @@ -108,7 +108,7 @@ void setAttribute(const Attribute id, const int value, const bool notify) // --- Stats ------------------------------------------------------------------ -int getStatBase(const Attribute id) +int getStatBase(const int id) { const StatMap::const_iterator it = mData.mStats.find(id); if (it != mData.mStats.end()) @@ -117,7 +117,7 @@ int getStatBase(const Attribute id) return 0; } -void setStatBase(const Attribute id, const int value, const bool notify) +void setStatBase(const int id, const int value, const bool notify) { const int old = mData.mStats[id].base; mData.mStats[id].base = value; @@ -125,7 +125,7 @@ void setStatBase(const Attribute id, const int value, const bool notify) triggerStat(id, "base", old); } -int getStatMod(const Attribute id) +int getStatMod(const int id) { const StatMap::const_iterator it = mData.mStats.find(id); if (it != mData.mStats.end()) @@ -134,7 +134,7 @@ int getStatMod(const Attribute id) return 0; } -void setStatMod(const Attribute id, const int value, const bool notify) +void setStatMod(const int id, const int value, const bool notify) { const int old = mData.mStats[id].mod; mData.mStats[id].mod = value; @@ -142,7 +142,7 @@ void setStatMod(const Attribute id, const int value, const bool notify) triggerStat(id, "mod", old); } -int getStatEffective(const Attribute id) +int getStatEffective(const int id) { const StatMap::const_iterator it = mData.mStats.find(id); if (it != mData.mStats.end()) @@ -151,7 +151,7 @@ int getStatEffective(const Attribute id) return 0; } -std::pair<int, int> getStatExperience(const Attribute id) +std::pair<int, int> getStatExperience(const int id) { const StatMap::const_iterator it = mData.mStats.find(id); int a, b; @@ -168,7 +168,7 @@ std::pair<int, int> getStatExperience(const Attribute id) return std::pair<int, int>(a, b); } -void setStatExperience(const Attribute id, const int have, +void setStatExperience(const int id, const int have, const int need, const bool notify) { Stat &stat = mData.mStats[id]; @@ -299,21 +299,15 @@ void updateAttrs() const int attr = Net::getPlayerHandler()->getAttackLocation(); if (attr != -1 && getStatBase(ATTACK_DELAY)) { - setStatBase(static_cast<PlayerInfo::Attribute>(ATTACK_SPEED), - getStatBase(static_cast<PlayerInfo::Attribute>(attr)) - * 1000 / getStatBase( - static_cast<PlayerInfo::Attribute>(ATTACK_DELAY)), false); - setStatMod(static_cast<PlayerInfo::Attribute>(ATTACK_SPEED), - getStatMod(static_cast<PlayerInfo::Attribute>(attr)) - * 1000 / getStatBase( - static_cast<PlayerInfo::Attribute>(ATTACK_DELAY)), true); + setStatBase(ATTACK_SPEED, getStatBase(attr) * 1000 + / getStatBase(ATTACK_DELAY), false); + setStatMod(ATTACK_SPEED, getStatMod(attr) * 1000 + / getStatBase(ATTACK_DELAY), true); } else { - setStatBase(static_cast<PlayerInfo::Attribute>( - ATTACK_SPEED), 0, false); - setStatMod(static_cast<PlayerInfo::Attribute>( - ATTACK_SPEED), 0, true); + setStatBase(ATTACK_SPEED, 0, false); + setStatMod(ATTACK_SPEED, 0, true); } } diff --git a/src/playerinfo.h b/src/playerinfo.h index 09699bd6d..8bb3a6f1d 100644 --- a/src/playerinfo.h +++ b/src/playerinfo.h @@ -103,12 +103,12 @@ namespace PlayerInfo /** * Returns the value of the given attribute. */ - int getAttribute(const Attribute id) A_WARN_UNUSED; + int getAttribute(const int id) A_WARN_UNUSED; /** * Changes the value of the given attribute. */ - void setAttribute(const Attribute id, const int value, + void setAttribute(const int id, const int value, const bool notify = true); // --- Stats ------------------------------------------------------------------ @@ -116,45 +116,45 @@ namespace PlayerInfo /** * Returns the base value of the given stat. */ - int getStatBase(const Attribute id) A_WARN_UNUSED; + int getStatBase(const int id) A_WARN_UNUSED; /** * Changes the base value of the given stat. */ - void setStatBase(const Attribute id, const int value, + void setStatBase(const int id, const int value, const bool notify = true); /** * Returns the modifier for the given stat. */ - int getStatMod(const Attribute id) A_WARN_UNUSED; + int getStatMod(const int id) A_WARN_UNUSED; /** * Changes the modifier for the given stat. */ - void setStatMod(const Attribute id, const int value, + void setStatMod(const int id, const int value, const bool notify = true); /** * Returns the current effective value of the given stat. Effective is base * + mod */ - int getStatEffective(const Attribute id) A_WARN_UNUSED; + int getStatEffective(const int id) A_WARN_UNUSED; /** * Changes the level of the given stat. */ - void setStatLevel(Attribute id, int value, bool notify = true); + void setStatLevel(int id, int value, bool notify = true); /** * Returns the experience of the given stat. */ - std::pair<int, int> getStatExperience(const Attribute id) A_WARN_UNUSED; + std::pair<int, int> getStatExperience(const int id) A_WARN_UNUSED; /** * Changes the experience of the given stat. */ - void setStatExperience(const Attribute id, const int have, + void setStatExperience(const int id, const int have, const int need, const bool notify = true); // --- Inventory / Equipment -------------------------------------------------- diff --git a/src/spellmanager.cpp b/src/spellmanager.cpp index 27b6f45e7..93480fb63 100644 --- a/src/spellmanager.cpp +++ b/src/spellmanager.cpp @@ -135,11 +135,10 @@ void SpellManager::invoke(const int spellId) if (spell->getCommandType() == TEXT_COMMAND_TEXT || (Net::getPlayerHandler()->canUseMagic() - && PlayerInfo::getStatEffective(static_cast<PlayerInfo::Attribute>( - SKILL_MAGIC)) >= static_cast<signed>(spell->getBaseLvl()) + && PlayerInfo::getStatEffective(SKILL_MAGIC) + >= static_cast<signed>(spell->getBaseLvl()) && PlayerInfo::getStatEffective( - static_cast<PlayerInfo::Attribute>(spell->getSchool())) - >= static_cast<signed>(spell->getSchoolLvl()) + spell->getSchool()) >= static_cast<signed>(spell->getSchoolLvl()) && PlayerInfo::getAttribute(PlayerInfo::MP) >= spell->getMana())) { const Being *const target = player_node->getTarget(); |