diff options
author | Erik Schilling <ablu.erikschilling@googlemail.com> | 2011-09-03 04:03:29 +0800 |
---|---|---|
committer | Yohann Ferreira <yohann.ferreira@orange.fr> | 2011-09-05 16:12:46 +0800 |
commit | fbd91b3538eb486df428f48fb9c47b7c5596ec73 (patch) | |
tree | 5567d767e18d22f3b58424c89278d11ee67eb6d7 /src/game-server/mapreader.cpp | |
parent | 2599996dd2a0962eab6d0559d5170a021bdbeb62 (diff) | |
download | manaserv-fbd91b3538eb486df428f48fb9c47b7c5596ec73.tar.gz manaserv-fbd91b3538eb486df428f48fb9c47b7c5596ec73.tar.bz2 manaserv-fbd91b3538eb486df428f48fb9c47b7c5596ec73.tar.xz manaserv-fbd91b3538eb486df428f48fb9c47b7c5596ec73.zip |
Added possibility for using monster name in SPAWN map objects.
Diffstat (limited to 'src/game-server/mapreader.cpp')
-rw-r--r-- | src/game-server/mapreader.cpp | 55 |
1 files changed, 41 insertions, 14 deletions
diff --git a/src/game-server/mapreader.cpp b/src/game-server/mapreader.cpp index 462105f2..0fe5a53b 100644 --- a/src/game-server/mapreader.cpp +++ b/src/game-server/mapreader.cpp @@ -198,7 +198,7 @@ Map* MapReader::readMap(xmlNodePtr node, const std::string &path, } else if (utils::compareStrI(objType, "SPAWN") == 0) { - int monsterId = -1; + MonsterClass *monster; int maxBeings = 10; // Default value int spawnRate = 10; // Default value @@ -213,33 +213,60 @@ Map* MapReader::readMap(xmlNodePtr node, const std::string &path, { if (xmlStrEqual(propertyNode->name, BAD_CAST "property")) { - std::string value = XML::getProperty(propertyNode, "name", std::string()); + std::string value = XML::getProperty( + propertyNode, + "name", + std::string()); value = utils::toUpper(value); if (utils::compareStrI(value, "MONSTER_ID") == 0) { - monsterId = getObjectProperty(propertyNode, monsterId); + std::string monsterName = + getObjectProperty(propertyNode, + std::string()); + int monsterId = utils::stringToInt(monsterName); + if (monsterId) + { + monster = monsterManager->getMonster( + monsterId); + if (!monster) + { + LOG_WARN("Couldn't find monster ID " + << monsterId << + " for spawn area"); + } + } + else + { + monster = monsterManager-> + getMonsterByName(monsterName); + if (!monster) + { + LOG_WARN("Couldn't find monster " + << monsterName << + " for spawn area"); + } + } } - else if (utils::compareStrI(value, "MAX_BEINGS") == 0) + else if (utils::compareStrI(value, + "MAX_BEINGS") == 0) { - maxBeings = getObjectProperty(propertyNode, maxBeings); + maxBeings = getObjectProperty(propertyNode, + maxBeings); } - else if (utils::compareStrI(value, "SPAWN_RATE") == 0) + else if (utils::compareStrI(value, + "SPAWN_RATE") == 0) { - spawnRate = getObjectProperty(propertyNode, spawnRate); + spawnRate = getObjectProperty(propertyNode, + spawnRate); } } } } - MonsterClass *monster = monsterManager->getMonster(monsterId); if (monster) { - things.push_back(new SpawnArea(composite, monster, rect, maxBeings, spawnRate)); - } - else - { - LOG_WARN("Couldn't find monster ID " << monsterId << - " for spawn area"); + things.push_back(new SpawnArea(composite, monster, rect, + maxBeings, spawnRate)); } } else if (utils::compareStrI(objType, "NPC") == 0) |