diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-01-18 20:02:27 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-01-18 20:02:27 +0300 |
commit | fb5d0e7762f692948dddebd3deb38a0bd20de5f2 (patch) | |
tree | afe2c0d8cf75738fd847af37dc166e0c338f7493 /src/resources/db/petdb.cpp | |
parent | 8a5603e487f682f5f67bc2cedae81249aa138f5b (diff) | |
parent | e9e343366fbfbe9a6343089ff113354524f3f306 (diff) | |
download | mv-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.cpp | 37 |
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() |