diff options
Diffstat (limited to 'src')
-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) |