void QuestsWindow::loadQuest(const int var, const XmlNodePtr node) { QuestItem *const quest = new QuestItem(); // TRANSLATORS: quests window quest name quest->name = XML::langProperty(node, "name", _("unknown")); quest->group = XML::getProperty(node, "group", ""); std::string incompleteStr = XML::getProperty(node, "incomplete", ""); std::string completeStr = XML::getProperty(node, "complete", ""); if (incompleteStr.empty() && completeStr.empty()) { logger->log("complete flags incorrect"); delete quest; return; } splitToIntSet(quest->incomplete, incompleteStr, ','); splitToIntSet(quest->complete, completeStr, ','); if (quest->incomplete.empty() && quest->complete.empty()) { logger->log("complete flags incorrect"); delete quest; return; } if (quest->incomplete.empty() || quest->complete.empty()) quest->broken = true; for_each_xml_child_node(dataNode, node) { if (!xmlTypeEqual(dataNode, XML_ELEMENT_NODE)) continue; const char *const data = reinterpret_cast<const char*>( xmlNodeGetContent(dataNode)); if (!data) continue; std::string str = translator->getStr(data); if (xmlNameEqual(dataNode, "text")) quest->texts.push_back(QuestItemText(str, QuestType::TEXT)); else if (xmlNameEqual(dataNode, "name")) quest->texts.push_back(QuestItemText(str, QuestType::NAME)); else if (xmlNameEqual(dataNode, "reward")) quest->texts.push_back(QuestItemText(str, QuestType::REWARD)); } mQuests[var].push_back(quest); }
void QuestsWindow::loadEffect(const int var, const XmlNodePtr node) { QuestEffect *const effect = new QuestEffect; effect->map = XML::getProperty(node, "map", ""); effect->id = XML::getProperty(node, "npc", -1); effect->effectId = XML::getProperty(node, "effect", -1); const std::string values = XML::getProperty(node, "value", ""); splitToIntSet(effect->values, values, ','); if (effect->map.empty() || effect->id == -1 || effect->effectId == -1 || values.empty()) { delete effect; return; } effect->var = var; mAllEffects.push_back(effect); }
static void loadEffect(const int var, XmlNodeConstPtr node) { QuestEffect *const effect = new QuestEffect; effect->map = XML::getProperty(node, "map", ""); effect->id = fromInt(XML::getProperty(node, "npc", -1), BeingTypeId); effect->effectId = XML::getProperty(node, "effect", -1); const std::string values = XML::getProperty(node, "value", ""); splitToIntSet(effect->values, values, ','); if (effect->map.empty() || effect->id == BeingTypeId_negOne || effect->effectId == -1 || values.empty()) { delete effect; return; } effect->var = var; mAllEffects.push_back(effect); }
static void loadQuest(const int var, XmlNodeConstPtr node) { if (node == nullptr) return; QuestItem *const quest = new QuestItem; // TRANSLATORS: quests window quest name quest->name = XML::langProperty(node, "name", _("unknown")); quest->group = XML::getProperty(node, "group", ""); std::string incompleteStr = XML::getProperty(node, "incomplete", ""); std::string completeStr = XML::getProperty(node, "complete", ""); if (incompleteStr.empty() && completeStr.empty()) { logger->log("complete flags incorrect"); delete quest; return; } splitToIntSet(quest->incomplete, incompleteStr, ','); splitToIntSet(quest->complete, completeStr, ','); if (quest->incomplete.empty() && quest->complete.empty()) { logger->log("complete flags incorrect"); delete quest; return; } if (quest->incomplete.empty() || quest->complete.empty()) quest->broken = true; for_each_xml_child_node(dataNode, node) { if (!xmlTypeEqual(dataNode, XML_ELEMENT_NODE)) continue; XmlChar *const data = reinterpret_cast<XmlChar*>( XmlNodeGetContent(dataNode)); if (data == nullptr) continue; std::string str = translator->getStr(data); XmlFree(data); for (int f = 1; f < 100; f ++) { const std::string key = strprintf("text%d", f); const std::string val = XML::getProperty(dataNode, key.c_str(), ""); if (val.empty()) break; const std::string param = strprintf("{@@%d}", f); replaceAll(str, param, val); } replaceItemLinks(str); if (xmlNameEqual(dataNode, "text")) { quest->texts.push_back(QuestItemText(str, QuestType::TEXT, std::string(), std::string())); } else if (xmlNameEqual(dataNode, "name")) { quest->texts.push_back(QuestItemText(str, QuestType::NAME, std::string(), std::string())); } else if (xmlNameEqual(dataNode, "reward")) { quest->texts.push_back(QuestItemText(str, QuestType::REWARD, std::string(), std::string())); } else if (xmlNameEqual(dataNode, "questgiver") || xmlNameEqual(dataNode, "giver")) { quest->texts.push_back(QuestItemText(str, QuestType::GIVER, std::string(), std::string())); } else if (xmlNameEqual(dataNode, "coordinates")) { const std::string str1 = toString(XML::getIntProperty( dataNode, "x", 0, 1, 1000)); const std::string str2 = toString(XML::getIntProperty( dataNode, "y", 0, 1, 1000)); quest->texts.push_back(QuestItemText(str, QuestType::COORDINATES, str1, str2)); } else if (xmlNameEqual(dataNode, "npc")) { quest->texts.push_back(QuestItemText(str, QuestType::NPC, std::string(), std::string())); } } quest->var = var; mQuests[var].push_back(quest); }