From a09b3062b06c400a0774f02ae1b784da5108f783 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 4 Aug 2016 21:39:09 +0300 Subject: Add support for attr attributes in stats.xml --- src/resources/db/statdb.cpp | 59 ++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 17 deletions(-) (limited to 'src/resources/db/statdb.cpp') diff --git a/src/resources/db/statdb.cpp b/src/resources/db/statdb.cpp index 0e7175310..ac5aed781 100644 --- a/src/resources/db/statdb.cpp +++ b/src/resources/db/statdb.cpp @@ -22,6 +22,8 @@ #include "configuration.h" +#include "enums/being/attributesstrings.h" + #include "utils/checkutils.h" #include "resources/beingcommon.h" @@ -102,17 +104,29 @@ static void loadBasicStats(const XmlNodePtr rootNode) if (xmlNameEqual(node, "stat")) { const std::string name = XML::getProperty(node, "name", ""); - const int id = XML::getProperty(node, "id", 0); - if (id <= 0 || id >= maxAttr) + const std::string attr = XML::getProperty(node, "attr", ""); + if (attr.empty() || AttributesEnum::find(attr) == false) + { + const int id = XML::getProperty(node, "id", 0); + if (id <= 0 || id >= maxAttr) + { + reportAlways("Wrong attr or id for basic " + "stat with name %s", + name.c_str()); + continue; + } + const std::string tag = XML::getProperty(node, "tag", ""); + mBasicStats.push_back(BasicStat(static_cast(id), + tag, + name)); + } + else { - reportAlways("Wrong id for basic stat with name %s", - name.c_str()); - continue; + const std::string tag = XML::getProperty(node, "tag", ""); + mBasicStats.push_back(BasicStat(AttributesEnum::get(attr), + tag, + name)); } - const std::string tag = XML::getProperty(node, "tag", ""); - mBasicStats.push_back(BasicStat(static_cast(id), - tag, - name)); } } } @@ -128,16 +142,27 @@ static void loadStats(const XmlNodePtr rootNode, if (xmlNameEqual(node, "stat")) { const std::string name = XML::getProperty(node, "name", ""); - const int id = XML::getProperty(node, "id", 0); - if (id <= 0 || id >= maxAttr) + const std::string attr = XML::getProperty(node, "attr", ""); + if (attr.empty() || AttributesEnum::find(attr) == false) + { + const int id = XML::getProperty(node, "id", 0); + if (id <= 0 || id >= maxAttr) + { + reportAlways("Wrong attr or id for extended " + "stat with name %s", + name.c_str()); + continue; + } + stats.push_back(BasicStat(static_cast(id), + std::string(), + name)); + } + else { - reportAlways("Wrong id for extended stat with name %s", - name.c_str()); - continue; + stats.push_back(BasicStat(AttributesEnum::get(attr), + std::string(), + name)); } - stats.push_back(BasicStat(static_cast(id), - std::string(), - name)); } } } -- cgit v1.2.3-70-g09d2