void SpecialDB::readSpecialSetNode(xmlNodePtr node, const std::string &filename) { std::string setName = XML::getProperty(node, "name", "Actions"); for_each_xml_child_node(special, node) { if (xmlStrEqual(special->name, BAD_CAST "special")) { SpecialInfo *info = new SpecialInfo(); int id = XML::getProperty(special, "id", 0); info->id = id; info->set = setName; info->name = XML::getProperty(special, "name", ""); info->icon = XML::getProperty(special, "icon", ""); info->targetMode = targetModeFromString(XML::getProperty(special, "target", "being")); info->rechargeable = XML::getBoolProperty(special, "rechargeable", true); info->rechargeNeeded = 0; info->rechargeCurrent = 0; if (mSpecialInfos.find(id) != mSpecialInfos.end()) { logger->log("SpecialDB: Duplicate special ID %d in %s, ignoring", id, filename.c_str()); } else { mSpecialInfos[id] = info; } } } }
void SpecialDB::load() { if (mLoaded) unload(); logger->log("Initializing special database..."); XML::Document doc("specials.xml"); XmlNodePtr root = doc.rootNode(); if (!root || !xmlNameEqual(root, "specials")) { logger->log("Error loading specials file specials.xml"); return; } std::string setName; for_each_xml_child_node(set, root) { if (xmlNameEqual(set, "set")) { setName = XML::getProperty(set, "name", "Actions"); for_each_xml_child_node(special, set) { if (xmlNameEqual(special, "special")) { SpecialInfo *info = new SpecialInfo(); int id = XML::getProperty(special, "id", 0); info->id = id; info->set = setName; info->name = XML::getProperty(special, "name", ""); info->icon = XML::getProperty(special, "icon", ""); info->isActive = XML::getBoolProperty( special, "active", false); info->targetMode = targetModeFromString(XML::getProperty( special, "target", "self")); info->level = XML::getProperty(special, "level", -1); info->hasLevel = info->level > -1; info->hasRechargeBar = XML::getBoolProperty(special, "recharge", false); info->rechargeNeeded = 0; info->rechargeCurrent = 0; if (mSpecialInfos.find(id) != mSpecialInfos.end()) { logger->log("SpecialDB: Duplicate special ID" " %d (ignoring)", id); } else { mSpecialInfos[id] = info; } } } } }