diff options
author | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-08-31 06:44:06 +0000 |
---|---|---|
committer | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-08-31 06:44:06 +0000 |
commit | 4b43c8653a267ff3ac7224805f4522a94be9fab7 (patch) | |
tree | add08caeb5778cef86fccf8272a8e86c29ee3aaf /src/game-server/monstermanager.cpp | |
parent | 9f930eb2a24dd811633a9f6f7eb3a36310ebc8d5 (diff) | |
download | manaserv-4b43c8653a267ff3ac7224805f4522a94be9fab7.tar.gz manaserv-4b43c8653a267ff3ac7224805f4522a94be9fab7.tar.bz2 manaserv-4b43c8653a267ff3ac7224805f4522a94be9fab7.tar.xz manaserv-4b43c8653a267ff3ac7224805f4522a94be9fab7.zip |
Implemented "reload" remote command.
Diffstat (limited to 'src/game-server/monstermanager.cpp')
-rw-r--r-- | src/game-server/monstermanager.cpp | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/src/game-server/monstermanager.cpp b/src/game-server/monstermanager.cpp index 36ee1eef..31c00ad0 100644 --- a/src/game-server/monstermanager.cpp +++ b/src/game-server/monstermanager.cpp @@ -23,25 +23,34 @@ #include <map> +#include "game-server/monstermanager.hpp" + #include "defines.h" #include "resourcemanager.h" #include "game-server/itemmanager.hpp" #include "game-server/monster.hpp" -#include "game-server/monstermanager.hpp" #include "utils/logger.h" #include "utils/xml.hpp" typedef std::map< int, MonsterClass * > MonsterClasses; static MonsterClasses monsterClasses; /**< Monster reference */ +static std::string monsterReferenceFile; void MonsterManager::initialize(std::string const &file) { + monsterReferenceFile = file; + reload(); +} + +void MonsterManager::reload() +{ ResourceManager *resman = ResourceManager::getInstance(); int size; - char *data = (char *)resman->loadFile(file, size); + char *data = (char *)resman->loadFile(monsterReferenceFile, size); if (!data) { - LOG_ERROR("Monster Manager: Could not find " << file << "!"); + LOG_ERROR("Monster Manager: Could not find " + << monsterReferenceFile << "!"); free(data); return; } @@ -52,14 +61,14 @@ void MonsterManager::initialize(std::string const &file) if (!doc) { LOG_ERROR("Monster Manager: Error while parsing item database (" - << file << ")!"); + << monsterReferenceFile << ")!"); return; } xmlNodePtr node = xmlDocGetRootElement(doc); if (!node || !xmlStrEqual(node->name, BAD_CAST "monsters")) { - LOG_ERROR("Monster Manager: " << file + LOG_ERROR("Monster Manager: " << monsterReferenceFile << " is not a valid database file!"); xmlFreeDoc(doc); return; @@ -79,10 +88,22 @@ void MonsterManager::initialize(std::string const &file) if (id == 0) { LOG_WARN("Monster Manager: There is a monster without ID in " - << file << "! It has been ignored."); + << monsterReferenceFile << "! It has been ignored."); continue; } + MonsterClass *monster; + MonsterClasses::iterator i = monsterClasses.find(id); + if (i == monsterClasses.end()) + { + monster = new MonsterClass(id); + monsterClasses[id] = monster; + } + else + { + monster = i->second; + } + MonsterDrops drops; for (xmlNodePtr subnode = node->xmlChildrenNode; subnode != NULL; @@ -100,13 +121,12 @@ void MonsterManager::initialize(std::string const &file) } } - MonsterClass *monster = new MonsterClass(id); monster->setDrops(drops); - monsterClasses[id] = monster; ++nbMonsters; } - LOG_INFO("Loaded " << nbMonsters << " monsters from " << file << '.'); + LOG_INFO("Loaded " << nbMonsters << " monsters from " + << monsterReferenceFile << '.'); xmlFreeDoc(doc); } |