void LootManager::loadLootTables() { std::vector<std::string> filenames = mods->list("loot", !ModManager::LIST_FULL_PATHS); for (unsigned i=0; i<filenames.size(); i++) { FileParser infile; if (!infile.open(filenames[i], FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) continue; std::vector<EventComponent> *ec_list = &loot_tables[filenames[i]]; EventComponent *ec = NULL; bool skip_to_next = false; while (infile.next()) { if (infile.section == "") { if (infile.key == "loot") { ec_list->push_back(EventComponent()); ec = &ec_list->back(); parseLoot(infile.val, ec, ec_list); } } else if (infile.section == "loot") { if (infile.new_section) { ec_list->push_back(EventComponent()); ec = &ec_list->back(); ec->type = EventComponent::LOOT; skip_to_next = false; } if (skip_to_next || ec == NULL) continue; if (infile.key == "id") { ec->s = infile.val; if (ec->s == "currency") ec->c = eset->misc.currency_id; else if (Parse::toInt(ec->s, -1) != -1) ec->c = Parse::toInt(ec->s); else { skip_to_next = true; infile.error("LootManager: Invalid item id for loot."); } } else if (infile.key == "chance") { if (infile.val == "fixed") ec->f = 0; else ec->f = Parse::toFloat(infile.val); } else if (infile.key == "quantity") { ec->a = std::max(Parse::popFirstInt(infile.val), 1); ec->b = std::max(Parse::popFirstInt(infile.val), ec->a); } } } infile.close(); } }
void LootManager::loadLootTables() { std::vector<std::string> filenames = mods->list("loot", false); for (unsigned i=0; i<filenames.size(); i++) { FileParser infile; if (!infile.open(filenames[i])) continue; std::vector<Event_Component> *ec_list = &loot_tables[filenames[i]]; Event_Component *ec = NULL; bool skip_to_next = false; while (infile.next()) { if (infile.section == "") { if (infile.key == "loot") { ec_list->push_back(Event_Component()); ec = &ec_list->back(); parseLoot(infile.val, ec, ec_list); } } else if (infile.section == "loot") { if (infile.new_section) { ec_list->push_back(Event_Component()); ec = &ec_list->back(); ec->type = EC_LOOT; skip_to_next = false; } if (skip_to_next || ec == NULL) continue; if (infile.key == "id") { ec->s = infile.val; if (ec->s == "currency") ec->c = CURRENCY_ID; else if (toInt(ec->s, -1) != -1) ec->c = toInt(ec->s); else { skip_to_next = true; infile.error("LootManager: Invalid item id for loot."); } } else if (infile.key == "chance") { if (infile.val == "fixed") ec->z = 0; else ec->z = toInt(infile.val); } else if (infile.key == "quantity") { ec->a = std::max(popFirstInt(infile.val), 1); ec->b = std::max(popFirstInt(infile.val), ec->a); } } } infile.close(); } }