From 8c54f034a288168cc191410b366889f37255ab21 Mon Sep 17 00:00:00 2001 From: Fate Date: Sat, 1 Nov 2008 23:56:14 +0000 Subject: * Report unmapped skill names as `Mystery Skill' (rather than random characters) --- src/gui/skill.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/gui/skill.cpp b/src/gui/skill.cpp index c753ee1a..116e1860 100644 --- a/src/gui/skill.cpp +++ b/src/gui/skill.cpp @@ -81,14 +81,22 @@ public: virtual void update(void) { + static const SkillInfo fakeSkillInfo = { "Mystery Skill", false }; + mEntriesNr = mDialog->getSkills().size(); resize(); for (int i = 0; i < mEntriesNr; i++) { SKILL *skill = mDialog->getSkills()[i]; - SkillInfo *info = &skill_db[skill->id]; + SkillInfo const *info; char tmp[128]; + if (skill->id >= 0 + && (unsigned int) skill->id < skill_db.size()) + info = &skill_db[skill->id]; + else + info = &fakeSkillInfo; + sprintf(tmp, "%c%s", info->modifiable? ' ' : '*', info->name.c_str()); gcn::Label *name_label = new gcn::Label(std::string(tmp)); @@ -189,9 +197,19 @@ void SkillDialog::update() int selectedSkill = mTable.getSelectedRow(); - mIncButton->setEnabled(selectedSkill > -1 - && skill_db[mSkillList[selectedSkill]->id].modifiable - && player_node->mSkillPoint > 0); + if (selectedSkill >= 0) { + int skillId = mSkillList[selectedSkill]->id; + bool modifiable; + + if (skillId >= 0 && (unsigned int) skillId < skill_db.size()) + modifiable = skill_db[skillId].modifiable; + else + modifiable = false; + + mIncButton->setEnabled(modifiable + && player_node->mSkillPoint > 0); + } else + mIncButton->setEnabled(false); mTableModel->update(); } -- cgit v1.2.3-60-g2f50