From 68481094c0d02ba127bcab6c692801b01a27f21b Mon Sep 17 00:00:00 2001 From: Erik Schilling Date: Wed, 8 May 2013 00:06:32 +0200 Subject: [Abilities] Added abilities to monsters Monsters can now either receive abilities at lifetime via scripts, or via the node in the monsters node. --- src/game-server/monstermanager.cpp | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/game-server/monstermanager.cpp') diff --git a/src/game-server/monstermanager.cpp b/src/game-server/monstermanager.cpp index df8c6906..19e196e2 100644 --- a/src/game-server/monstermanager.cpp +++ b/src/game-server/monstermanager.cpp @@ -216,6 +216,50 @@ void MonsterManager::readMonsterNode(xmlNodePtr node, const std::string &filenam } } + else if (xmlStrEqual(subnode->name, BAD_CAST "attribute")) + { + const int id = XML::getProperty(subnode, "id", 0); + auto *attributeInfo = attributeManager->getAttributeInfo(id); + + if (!attributeInfo) + { + LOG_WARN(filename + << ": Invalid attribute id " << id + << " for monster Id: " << id + << ". Skipping!"); + continue; + } + + const double value = XML::getFloatProperty(subnode, "value", 0.0); + + monster->setAttribute(id, value); + } + else if (xmlStrEqual(subnode->name, BAD_CAST "ability")) + { + const std::string idText = XML::getProperty(subnode, "id", + std::string()); + AbilityManager::AbilityInfo *info = 0; + if (utils::isNumeric(idText)) + { + const int id = utils::stringToInt(idText); + info = abilityManager->getAbilityInfo(id); + } + else + { + info = abilityManager->getAbilityInfo(idText); + } + + if (!info) + { + LOG_WARN(filename + << ": Invalid ability id " << idText + << " for monster id: " << id + << " Skipping!"); + continue; + } + + monster->addAbility(info); + } else if (xmlStrEqual(subnode->name, BAD_CAST "exp")) { xmlChar *exp = subnode->xmlChildrenNode->content; -- cgit v1.2.3-70-g09d2