summaryrefslogtreecommitdiff
path: root/src/game-server/mapreader.cpp
diff options
context:
space:
mode:
authorErik Schilling <ablu.erikschilling@googlemail.com>2011-09-03 04:03:29 +0800
committerErik Schilling <ablu.erikschilling@googlemail.com>2011-09-04 14:50:34 +0800
commit4a9de81c1911c747f9ecff695de58b12d0dc4a71 (patch)
treece188171b681e9dc564caaa635447f72fd56df19 /src/game-server/mapreader.cpp
parent31970d5255e43de6f06ef6ae4c67d781632ecd1f (diff)
downloadmanaserv-4a9de81c1911c747f9ecff695de58b12d0dc4a71.tar.gz
manaserv-4a9de81c1911c747f9ecff695de58b12d0dc4a71.tar.bz2
manaserv-4a9de81c1911c747f9ecff695de58b12d0dc4a71.tar.xz
manaserv-4a9de81c1911c747f9ecff695de58b12d0dc4a71.zip
Added possibility for using monster name in SPAWN map objects.
Reviewed-by: Bertram.
Diffstat (limited to 'src/game-server/mapreader.cpp')
-rw-r--r--src/game-server/mapreader.cpp55
1 files changed, 41 insertions, 14 deletions
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)