diff options
author | Philipp Sehmisch <crush@themanaworld.org> | 2009-12-28 01:10:45 +0100 |
---|---|---|
committer | Philipp Sehmisch <crush@themanaworld.org> | 2009-12-28 01:10:45 +0100 |
commit | 52263656c564e1d4e21184c5a33e26d5b9327c39 (patch) | |
tree | f952d89a378e1175566c6dd51414dd0d6bb09411 /src | |
parent | 61420bdc4aa951e6b57a1b6bec37729e1cb1824e (diff) | |
download | manaserv-52263656c564e1d4e21184c5a33e26d5b9327c39.tar.gz manaserv-52263656c564e1d4e21184c5a33e26d5b9327c39.tar.bz2 manaserv-52263656c564e1d4e21184c5a33e26d5b9327c39.tar.xz manaserv-52263656c564e1d4e21184c5a33e26d5b9327c39.zip |
Added parser for mana-skills.xml
Diffstat (limited to 'src')
-rw-r--r-- | src/game-server/skillmanager.cpp | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/src/game-server/skillmanager.cpp b/src/game-server/skillmanager.cpp index 8cf88e55..686231b8 100644 --- a/src/game-server/skillmanager.cpp +++ b/src/game-server/skillmanager.cpp @@ -20,7 +20,10 @@ #include "game-server/skillmanager.hpp" +#include "game-server/resourcemanager.hpp" #include "utils/string.hpp" // for the toupper function +#include "utils/logger.h" +#include "utils/xml.hpp" #include <map> @@ -36,9 +39,65 @@ void SkillManager::initialize(const std::string &file) void SkillManager::reload() { - //... + /* skillMap["UNARMED"] = 100; skillMap["KNIFE"] = 101; + */ + + int size; + char *data = ResourceManager::loadFile(skillReferenceFile, size); + + if (!data) { + LOG_ERROR("Item Manager: Could not find " << skillReferenceFile << "!"); + free(data); + return; + } + + xmlDocPtr doc = xmlParseMemory(data, size); + free(data); + + if (!doc) + { + LOG_ERROR("Skill Manager: Error while parsing skill database (" + << skillReferenceFile << ")!"); + return; + } + + xmlNodePtr node = xmlDocGetRootElement(doc); + if (!node || !xmlStrEqual(node->name, BAD_CAST "skills")) + { + LOG_ERROR("Skill Manager: " << skillReferenceFile + << " is not a valid database file!"); + xmlFreeDoc(doc); + return; + } + + LOG_INFO("Loading skill reference..."); + + for_each_xml_child_node(setnode, node) + { + if (xmlStrEqual(setnode->name, BAD_CAST "set")) + // we don't care about sets server-sided (yet?) + for_each_xml_child_node(skillnode, setnode) + { + if (xmlStrEqual(skillnode->name, BAD_CAST "skill")) + { + std::string name = XML::getProperty(skillnode, "name", std::string()); + name = utils::toupper(name); + int id = XML::getProperty(skillnode, "id", 0); + if (id && !name.empty()) + { + skillMap[utils::toupper(name)] = id; + } + } + } + } + + LOG_DEBUG("skill map:"); + for (SkillMap::iterator i = skillMap.begin(); i != skillMap.end(); i++) + { + LOG_DEBUG(" "<<i->first<<" : "<<i->second); + } } int SkillManager::getIdFromString(std::string name) |