summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/skilldialog.cpp31
-rw-r--r--src/gui/skilldialog.h6
-rw-r--r--src/net/tmwa/specialhandler.cpp10
3 files changed, 43 insertions, 4 deletions
diff --git a/src/gui/skilldialog.cpp b/src/gui/skilldialog.cpp
index fa4d5bdb2..b80f4b335 100644
--- a/src/gui/skilldialog.cpp
+++ b/src/gui/skilldialog.cpp
@@ -236,6 +236,7 @@ SkillDialog::SkillDialog():
mTabs = new TabbedArea();
mPointsLabel = new Label("0");
mIncreaseButton = new Button(_("Up"), "inc", this);
+ mDefaultModel = 0;
place(0, 0, mTabs, 5, 5);
place(0, 5, mPointsLabel, 4);
@@ -336,6 +337,9 @@ void SkillDialog::loadSkills(const std::string &file)
if (Net::getNetworkType() == ServerInfo::TMWATHENA)
{
SkillModel *model = new SkillModel();
+ if (!mDefaultModel)
+ mDefaultModel = model;
+
SkillInfo *skill = new SkillInfo;
skill->id = 1;
skill->name = "basic";
@@ -374,6 +378,8 @@ void SkillDialog::loadSkills(const std::string &file)
strprintf(_("Skill Set %d"), setCount));
SkillModel *model = new SkillModel();
+ if (!mDefaultModel)
+ mDefaultModel = model;
for_each_xml_child_node(node, set)
{
@@ -416,7 +422,7 @@ void SkillDialog::loadSkills(const std::string &file)
update();
}
-void SkillDialog::setModifiable(int id, bool modifiable)
+bool SkillDialog::setModifiable(int id, bool modifiable)
{
SkillMap::iterator it = mSkills.find(id);
@@ -428,6 +434,29 @@ void SkillDialog::setModifiable(int id, bool modifiable)
info->modifiable = modifiable;
info->update();
}
+ return true;
+ }
+ return false;
+}
+
+void SkillDialog::addSkill(int id, int level, bool modifiable)
+{
+ if (mDefaultModel)
+ {
+ SkillInfo *skill = new SkillInfo;
+ skill->id = static_cast<short unsigned>(id);
+ skill->name = "Unknown skill Id: " + toString(id);
+ skill->setIcon("");
+ skill->modifiable = modifiable;
+ skill->visible = false;
+ skill->model = mDefaultModel;
+ skill->skillLevel = level;
+ skill->update();
+
+ mDefaultModel->addSkill(skill);
+
+ mSkills[id] = skill;
+ mDefaultModel->updateVisibilities();
}
}
diff --git a/src/gui/skilldialog.h b/src/gui/skilldialog.h
index 4ba4afe8e..188cf76d5 100644
--- a/src/gui/skilldialog.h
+++ b/src/gui/skilldialog.h
@@ -37,6 +37,7 @@ class Button;
//class Image;
class Label;
class ScrollArea;
+class SkillModel;
class Tab;
class TabbedArea;
@@ -71,7 +72,9 @@ class SkillDialog : public Window, public gcn::ActionListener
void loadSkills(const std::string &file);
- void setModifiable(int id, bool modifiable);
+ bool setModifiable(int id, bool modifiable);
+
+ void addSkill(int id, int level, bool modifiable);
SkillInfo* getSkill(int id);
@@ -84,6 +87,7 @@ class SkillDialog : public Window, public gcn::ActionListener
TabbedArea *mTabs;
Label *mPointsLabel;
Button *mIncreaseButton;
+ SkillModel *mDefaultModel;
};
extern SkillDialog *skillDialog;
diff --git a/src/net/tmwa/specialhandler.cpp b/src/net/tmwa/specialhandler.cpp
index d502cc85f..95478d5bf 100644
--- a/src/net/tmwa/specialhandler.cpp
+++ b/src/net/tmwa/specialhandler.cpp
@@ -110,7 +110,10 @@ void SpecialHandler::handleMessage(Net::MessageIn &msg)
PlayerInfo::setStatBase(skillId, level);
if (skillDialog)
- skillDialog->setModifiable(skillId, up);
+ {
+ if (!skillDialog->setModifiable(skillId, up))
+ skillDialog->addSkill(skillId, level, up);
+ }
}
break;
}
@@ -124,7 +127,10 @@ void SpecialHandler::handleMessage(Net::MessageIn &msg)
PlayerInfo::setStatBase(skillId, level);
if (skillDialog)
- skillDialog->setModifiable(skillId, up);
+ {
+ if (!skillDialog->setModifiable(skillId, up))
+ skillDialog->addSkill(skillId, level, up);
+ }
}
break;