summaryrefslogtreecommitdiff
path: root/src/resources/db/petdb.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-01-18 20:02:27 +0300
committerAndrei Karas <akaras@inbox.ru>2014-01-18 20:02:27 +0300
commitfb5d0e7762f692948dddebd3deb38a0bd20de5f2 (patch)
treeafe2c0d8cf75738fd847af37dc166e0c338f7493 /src/resources/db/petdb.cpp
parent8a5603e487f682f5f67bc2cedae81249aa138f5b (diff)
parente9e343366fbfbe9a6343089ff113354524f3f306 (diff)
downloadmv-fb5d0e7762f692948dddebd3deb38a0bd20de5f2.tar.gz
mv-fb5d0e7762f692948dddebd3deb38a0bd20de5f2.tar.bz2
mv-fb5d0e7762f692948dddebd3deb38a0bd20de5f2.tar.xz
mv-fb5d0e7762f692948dddebd3deb38a0bd20de5f2.zip
Merge branch 'master' into stable
Diffstat (limited to 'src/resources/db/petdb.cpp')
-rw-r--r--src/resources/db/petdb.cpp37
1 files changed, 27 insertions, 10 deletions
diff --git a/src/resources/db/petdb.cpp b/src/resources/db/petdb.cpp
index c235200a6..c9f3bdbeb 100644
--- a/src/resources/db/petdb.cpp
+++ b/src/resources/db/petdb.cpp
@@ -47,33 +47,52 @@ void PETDB::load()
unload();
logger->log1("Initializing PET database...");
+ loadXmlFile(paths.getStringValue("petsFile"));
+ loadXmlFile(paths.getStringValue("petsPatchFile"));
+ loadXmlDir("petsPatchDir", loadXmlFile);
+ mLoaded = true;
+}
- XML::Document doc(paths.getStringValue("petsFile"));
- const XmlNodePtr rootNode = doc.rootNode();
+void PETDB::loadXmlFile(const std::string &fileName)
+{
+ XML::Document doc(fileName);
+ const XmlNodePtrConst rootNode = doc.rootNode();
if (!rootNode || !xmlNameEqual(rootNode, "pets"))
{
logger->log("PET Database: Error while loading %s!",
- paths.getStringValue("petsFile").c_str());
- mLoaded = true;
+ fileName.c_str());
return;
}
// iterate <pet>s
for_each_xml_child_node(petNode, rootNode)
{
- if (!xmlNameEqual(petNode, "pet"))
+ if (xmlNameEqual(petNode, "include"))
+ {
+ const std::string name = XML::getProperty(petNode, "name", "");
+ if (!name.empty())
+ loadXmlFile(name);
+ continue;
+ }
+ else if (!xmlNameEqual(petNode, "pet"))
+ {
continue;
+ }
- const int id = XML::getProperty(petNode, "id", 0);
- if (id == 0)
+ const int id = XML::getProperty(petNode, "id", -1);
+ if (id == -1)
{
logger->log("PET Database: PET with missing ID in %s!",
paths.getStringValue("petsFile").c_str());
continue;
}
- BeingInfo *const currentInfo = new BeingInfo;
+ BeingInfo *currentInfo = nullptr;
+ if (mPETInfos.find(id) != mPETInfos.end())
+ currentInfo = mPETInfos[id];
+ if (!currentInfo)
+ currentInfo = new BeingInfo;
currentInfo->setName(XML::langProperty(petNode,
// TRANSLATORS: unknown info name
@@ -151,8 +170,6 @@ void PETDB::load()
mPETInfos[id] = currentInfo;
}
-
- mLoaded = true;
}
void PETDB::unload()