summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2017-01-31 21:27:52 +0300
committerAndrei Karas <akaras@inbox.ru>2017-01-31 21:27:52 +0300
commit35481061f62111f916a39ce3cac6a314579418f9 (patch)
treeecf73b207a78f9e35bb47f8ed1067931733090b7
parentaea9e7f8c26644ba38db5eb9dbf412195f9851b2 (diff)
downloadmanaverse-35481061f62111f916a39ce3cac6a314579418f9.tar.gz
manaverse-35481061f62111f916a39ce3cac6a314579418f9.tar.bz2
manaverse-35481061f62111f916a39ce3cac6a314579418f9.tar.xz
manaverse-35481061f62111f916a39ce3cac6a314579418f9.zip
Load currency names for each npc from npcs.xml.
-rw-r--r--src/client.cpp2
-rw-r--r--src/resources/beinginfo.cpp1
-rw-r--r--src/resources/beinginfo.h7
-rw-r--r--src/resources/db/npcdb.cpp12
-rw-r--r--src/resources/db/unitsdb.cpp12
-rw-r--r--src/resources/db/unitsdb.h2
6 files changed, 35 insertions, 1 deletions
diff --git a/src/client.cpp b/src/client.cpp
index 1739b8468..d45353c7b 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -1374,13 +1374,13 @@ int Client::gameExec()
AvatarDB::load();
BadgesDB::load();
WeaponsDB::load();
+ UnitsDb::loadUnits();
NPCDB::load();
NpcDialogDB::load();
PETDB::load();
EmoteDB::load();
// ModDB::load();
StatusEffectDB::load();
- UnitsDb::loadUnits();
EquipmentWindow::prepareSlotNames();
ActorSprite::load();
diff --git a/src/resources/beinginfo.cpp b/src/resources/beinginfo.cpp
index e4be68fce..466a5832d 100644
--- a/src/resources/beinginfo.cpp
+++ b/src/resources/beinginfo.cpp
@@ -59,6 +59,7 @@ BeingInfo::BeingInfo() :
mAttacks(),
mMenu(),
mStrings(),
+ mCurrency(),
mBlockWalkMask(BlockMask::WALL |
BlockMask::AIR |
BlockMask::WATER |
diff --git a/src/resources/beinginfo.h b/src/resources/beinginfo.h
index 2e7bc1743..a68e7ca7b 100644
--- a/src/resources/beinginfo.h
+++ b/src/resources/beinginfo.h
@@ -339,6 +339,12 @@ class BeingInfo final
std::string getString(const int idx) const A_WARN_UNUSED;
+ std::string getCurrency() const A_WARN_UNUSED
+ { return mCurrency; }
+
+ void setCurrency(const std::string &name)
+ { mCurrency = name; }
+
static void init();
static void clear();
@@ -352,6 +358,7 @@ class BeingInfo final
Attacks mAttacks;
std::vector<BeingMenuItem> mMenu;
std::map<int, std::string> mStrings;
+ std::string mCurrency;
unsigned char mBlockWalkMask;
BlockTypeT mBlockType;
const std::map <ItemColor, ColorDB::ItemColorData> *mColors;
diff --git a/src/resources/db/npcdb.cpp b/src/resources/db/npcdb.cpp
index 55ca39c99..4e5fd35fe 100644
--- a/src/resources/db/npcdb.cpp
+++ b/src/resources/db/npcdb.cpp
@@ -27,6 +27,8 @@
#include "resources/beingcommon.h"
#include "resources/beinginfo.h"
+#include "resources/db/unitsdb.h"
+
#include "resources/sprite/spritereference.h"
#include "utils/checkutils.h"
@@ -115,6 +117,16 @@ void NPCDB::loadXmlFile(const std::string &fileName,
currentInfo->setAllowDelete(XML::getBoolProperty(npcNode,
"allowDelete", true));
+ const std::string currency = XML::getProperty(npcNode,
+ "currency", "default");
+ if (UnitsDb::existsCurrency(currency) == false)
+ {
+ reportAlways("Not found currency '%s' for npc %d",
+ currency.c_str(),
+ CAST_S32(id));
+ }
+ currentInfo->setCurrency(currency);
+
SpriteDisplay display;
for_each_xml_child_node(spriteNode, npcNode)
{
diff --git a/src/resources/db/unitsdb.cpp b/src/resources/db/unitsdb.cpp
index 3001ccb7b..94d055ffd 100644
--- a/src/resources/db/unitsdb.cpp
+++ b/src/resources/db/unitsdb.cpp
@@ -214,11 +214,18 @@ void UnitsDb::loadXmlFile(const std::string &fileName,
const std::string type = XML::getProperty(node, "type", "");
UnitDescription ud = loadUnit(node);
if (type == "weight")
+ {
defaultWeight = ud;
+ }
else if (type == "currency")
+ {
defaultCurrency = ud;
+ mCurrencies["default"] = ud;
+ }
else
+ {
logger->log("Error unknown unit type: %s", type.c_str());
+ }
}
else if (xmlNameEqual(node, "currency"))
{
@@ -318,6 +325,11 @@ std::string UnitsDb::formatWeight(const int value)
return formatUnit(value, defaultWeight);
}
+bool UnitsDb::existsCurrency(const std::string &name)
+{
+ return mCurrencies.find(name) != mCurrencies.end();
+}
+
static std::string splitNumber(std::string str,
const std::string &separator)
{
diff --git a/src/resources/db/unitsdb.h b/src/resources/db/unitsdb.h
index b8c81cfc3..7a913cc16 100644
--- a/src/resources/db/unitsdb.h
+++ b/src/resources/db/unitsdb.h
@@ -51,6 +51,8 @@ class UnitsDb final
* Formats the given number in the correct weight/mass format.
*/
static std::string formatWeight(const int value) A_WARN_UNUSED;
+
+ static bool existsCurrency(const std::string &name) A_WARN_UNUSED;
};
#endif // RESOURCES_DB_UNITSDB_H