summaryrefslogtreecommitdiff
path: root/src/game-server/skillmanager.cpp
diff options
context:
space:
mode:
authorPhilipp Sehmisch <crush@themanaworld.org>2009-12-28 01:10:45 +0100
committerPhilipp Sehmisch <crush@themanaworld.org>2009-12-28 01:10:45 +0100
commit52263656c564e1d4e21184c5a33e26d5b9327c39 (patch)
treef952d89a378e1175566c6dd51414dd0d6bb09411 /src/game-server/skillmanager.cpp
parent61420bdc4aa951e6b57a1b6bec37729e1cb1824e (diff)
downloadmanaserv-52263656c564e1d4e21184c5a33e26d5b9327c39.tar.gz
manaserv-52263656c564e1d4e21184c5a33e26d5b9327c39.tar.bz2
manaserv-52263656c564e1d4e21184c5a33e26d5b9327c39.tar.xz
manaserv-52263656c564e1d4e21184c5a33e26d5b9327c39.zip
Added parser for mana-skills.xml
Diffstat (limited to 'src/game-server/skillmanager.cpp')
-rw-r--r--src/game-server/skillmanager.cpp61
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)