From 4a9de81c1911c747f9ecff695de58b12d0dc4a71 Mon Sep 17 00:00:00 2001 From: Erik Schilling Date: Sat, 3 Sep 2011 04:03:29 +0800 Subject: Added possibility for using monster name in SPAWN map objects. Reviewed-by: Bertram. --- src/game-server/mapreader.cpp | 55 ++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 14 deletions(-) (limited to 'src/game-server/mapreader.cpp') diff --git a/src/game-server/mapreader.cpp b/src/game-server/mapreader.cpp index 462105f2..8438c82c 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 = 0; 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) -- cgit v1.2.3-70-g09d2