summaryrefslogtreecommitdiff
path: root/src/gui/windows
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-09-26 19:22:28 +0300
committerAndrei Karas <akaras@inbox.ru>2016-09-26 19:22:28 +0300
commit020bb7c43135289a801f411f75c8c588e94ff31b (patch)
treed4d6f97d11351b00485711efa0bc57ef3f6d4378 /src/gui/windows
parent52fdc7544c117b058fb1321a24795d64fe3d3887 (diff)
downloadmanaplus-020bb7c43135289a801f411f75c8c588e94ff31b.tar.gz
manaplus-020bb7c43135289a801f411f75c8c588e94ff31b.tar.bz2
manaplus-020bb7c43135289a801f411f75c8c588e94ff31b.tar.xz
manaplus-020bb7c43135289a801f411f75c8c588e94ff31b.zip
Add support for quest fields in quests window.
Quest attributes: {@@var1}, {@@var2}, {@@var3}, {@@time}
Diffstat (limited to 'src/gui/windows')
-rw-r--r--src/gui/windows/questswindow.cpp51
-rw-r--r--src/gui/windows/questswindow.h12
-rw-r--r--src/gui/windows/skilldialog.cpp2
-rw-r--r--src/gui/windows/skilldialog.h2
4 files changed, 44 insertions, 23 deletions
diff --git a/src/gui/windows/questswindow.cpp b/src/gui/windows/questswindow.cpp
index 308d38da5..9e07285d8 100644
--- a/src/gui/windows/questswindow.cpp
+++ b/src/gui/windows/questswindow.cpp
@@ -189,7 +189,7 @@ void QuestsWindow::loadXmlFile(const std::string &fileName,
const int id = XML::getProperty(varNode, "id", 0);
if (id < 0)
continue;
- mVars[id] = 0;
+ mVars[id] = QuestVar();
for_each_xml_child_node(questNode, varNode)
{
if (xmlNameEqual(questNode, "quest"))
@@ -298,6 +298,7 @@ void QuestsWindow::loadQuest(const int var, const XmlNodePtr node)
std::string()));
}
}
+ quest->var = var;
mQuests[var].push_back(quest);
}
@@ -338,11 +339,11 @@ void QuestsWindow::action(const ActionEvent &event)
void QuestsWindow::updateQuest(const int var,
const int val1,
- const int val2 A_UNUSED,
- const int val3 A_UNUSED,
- const int time A_UNUSED)
+ const int val2,
+ const int val3,
+ const int time1)
{
- mVars[var] = val1;
+ mVars[var] = QuestVar(val1, val2, val3, time1);
}
void QuestsWindow::rebuild(const bool playSound)
@@ -357,10 +358,10 @@ void QuestsWindow::rebuild(const bool playSound)
int updatedQuest = -1;
int newCompleteStatus = -1;
- FOR_EACH (IntMapCIter, it, mVars)
+ FOR_EACH (NpcQuestVarMapCIter, it, mVars)
{
const int var = (*it).first;
- const int val = (*it).second;
+ const QuestVar &val = (*it).second;
const std::vector<QuestItem*> &quests = mQuests[var];
FOR_EACH (std::vector<QuestItem*>::const_iterator, it2, quests)
{
@@ -368,14 +369,20 @@ void QuestsWindow::rebuild(const bool playSound)
continue;
QuestItem *const quest = *it2;
// complete quest
- if (quest->complete.find(val) != quest->complete.end())
+ if (quest->complete.find(val.var1) != quest->complete.end())
+ {
complete.push_back(quest);
+ }
// incomplete quest
- else if (quest->incomplete.find(val) != quest->incomplete.end())
+ else if (quest->incomplete.find(val.var1) != quest->incomplete.end())
+ {
incomplete.push_back(quest);
+ }
// hidden quest
else
+ {
hidden.push_back(quest);
+ }
}
}
@@ -465,39 +472,49 @@ void QuestsWindow::showQuest(const QuestItem *const quest)
return;
const std::vector<QuestItemText> &texts = quest->texts;
+ const QuestVar &var = mVars[quest->var];
+ const std::string var1 = toString(var.var1);
+ const std::string var2 = toString(var.var2);
+ const std::string var3 = toString(var.var3);
+ const std::string timeStr = timeDiffToString(var.time1).c_str();
mText->clearRows();
FOR_EACH (std::vector<QuestItemText>::const_iterator, it, texts)
{
const QuestItemText &data = *it;
+ std::string text = data.text;
+ replaceAll(text, "{@@var1}", var1);
+ replaceAll(text, "{@@var2}", var2);
+ replaceAll(text, "{@@var3}", var3);
+ replaceAll(text, "{@@time}", timeStr);
switch (data.type)
{
case QuestType::TEXT:
default:
- mText->addRow(data.text);
+ mText->addRow(text);
break;
case QuestType::NAME:
- mText->addRow(std::string("[").append(data.text).append("]"));
+ mText->addRow(std::string("[").append(text).append("]"));
break;
case QuestType::REWARD:
mText->addRow(std::string(
// TRANSLATORS: quest reward
_("Reward:")).append(
" ").append(
- data.text));
+ text));
break;
case QuestType::GIVER:
mText->addRow(std::string(
// TRANSLATORS: quest giver name
_("Quest Giver:")).append(
" ").append(
- data.text));
+ text));
break;
case QuestType::NPC:
mText->addRow(std::string(
// TRANSLATORS: quest npc name
_("Npc:")).append(
" ").append(
- data.text));
+ text));
break;
case QuestType::COORDINATES:
mText->addRow(std::string(
@@ -506,7 +523,7 @@ void QuestsWindow::showQuest(const QuestItem *const quest)
_("Coordinates:"),
data.data1.c_str(),
data.data2.c_str(),
- data.text.c_str())));
+ text.c_str())));
break;
}
}
@@ -543,11 +560,11 @@ void QuestsWindow::updateEffects()
const QuestEffect *const effect = *it;
if (effect)
{
- const IntMapCIter varIt = mVars.find(effect->var);
+ const NpcQuestVarMapCIter varIt = mVars.find(effect->var);
if (varIt != mVars.end())
{
const std::set<int> &vals = effect->values;
- if (vals.find(mVars[effect->var]) != vals.end())
+ if (vals.find(mVars[effect->var].var1) != vals.end())
mNpcEffects[effect->id] = effect;
}
}
diff --git a/src/gui/windows/questswindow.h b/src/gui/windows/questswindow.h
index 08ef852d9..78e5b609c 100644
--- a/src/gui/windows/questswindow.h
+++ b/src/gui/windows/questswindow.h
@@ -27,10 +27,12 @@
#include "gui/widgets/window.h"
+#include "listeners/actionlistener.h"
+
#include "utils/intmap.h"
#include "utils/xml.h"
-#include "listeners/actionlistener.h"
+#include "resources/questvar.h"
class Being;
class Button;
@@ -46,6 +48,8 @@ struct QuestItem;
typedef std::map<BeingTypeId, const QuestEffect*> NpcQuestEffectMap;
typedef NpcQuestEffectMap::const_iterator NpcQuestEffectMapCIter;
+typedef std::map<int, QuestVar> NpcQuestVarMap;
+typedef NpcQuestVarMap::const_iterator NpcQuestVarMapCIter;
class QuestsWindow final : public Window,
public ActionListener
@@ -63,7 +67,7 @@ class QuestsWindow final : public Window,
const int val1,
const int val2,
const int val3,
- const int time);
+ const int time1);
void rebuild(const bool playSound);
@@ -92,8 +96,8 @@ class QuestsWindow final : public Window,
Button *mCloseButton A_NONNULLPOINTER;
Image *mCompleteIcon;
Image *mIncompleteIcon;
- // quest variables: var, value
- IntMap mVars;
+ // quest variables: var, (val1, val2, val3, time)
+ NpcQuestVarMap mVars;
// quests: var, quests
std::map<int, std::vector<QuestItem*> > mQuests;
std::vector<QuestEffect*> mAllEffects;
diff --git a/src/gui/windows/skilldialog.cpp b/src/gui/windows/skilldialog.cpp
index 6aa4c8afb..7e474a982 100644
--- a/src/gui/windows/skilldialog.cpp
+++ b/src/gui/windows/skilldialog.cpp
@@ -686,7 +686,7 @@ void SkillDialog::updateQuest(const int var,
const int val1,
const int val2 A_UNUSED,
const int val3 A_UNUSED,
- const int time A_UNUSED)
+ const int time1 A_UNUSED)
{
const int id = var + SKILL_VAR_MIN_ID;
const SkillMap::const_iterator it = mSkills.find(id);
diff --git a/src/gui/windows/skilldialog.h b/src/gui/windows/skilldialog.h
index 3bd5f1d4a..5a4a89afe 100644
--- a/src/gui/windows/skilldialog.h
+++ b/src/gui/windows/skilldialog.h
@@ -128,7 +128,7 @@ class SkillDialog final : public Window,
const int val1,
const int val2,
const int val3,
- const int time);
+ const int time1);
void playUpdateEffect(const int id) const;