fix: 肉鸽解析Vision失败

This commit is contained in:
uye
2024-04-07 15:14:19 +08:00
parent ddf3222f4f
commit c3c4fa4a71

View File

@@ -16,14 +16,25 @@ bool asst::RoguelikeStageEncounterConfig::parse(const json::value& json)
event.name = event_json.at("name").as_string();
event.option_num = event_json.get("option_num", 0);
event.default_choose = event_json.get("choose", 0);
if (auto choice_require_opt = event_json.find("choices"); choice_require_opt && choice_require_opt->is_array()) {
if (auto choice_require_opt = event_json.find("choices");
choice_require_opt && choice_require_opt->is_array()) {
for (const auto& requirement_json : choice_require_opt->as_array()) {
ChoiceRequire requirement;
requirement.name = requirement_json.at("name").as_string();
requirement.choose = requirement_json.get("choose", -1);
if (auto vision_opt = requirement_json.find("Vision")) {
requirement.vision.value = vision_opt->get("value", "");
requirement.vision.type = parse_comparison_type(vision_opt->get("type", ""));
if (auto vision_opt = requirement_json.find("requirements")) {
switch (vision_opt->get("name", "")) {
case "Vision":
requirement.vision.value = vision_opt->get("value", "");
requirement.vision.type =
parse_comparison_type(vision_opt->get("type", ""));
break;
case "Relic":
// not supported
break;
default:
break;
}
}
event.choice_require.emplace_back(std::move(requirement));
}
@@ -33,11 +44,17 @@ bool asst::RoguelikeStageEncounterConfig::parse(const json::value& json)
return true;
}
asst::RoguelikeStageEncounterConfig::ComparisonType asst::RoguelikeStageEncounterConfig::parse_comparison_type(
const std::string& type_str)
asst::RoguelikeStageEncounterConfig::ComparisonType
asst::RoguelikeStageEncounterConfig::parse_comparison_type(const std::string& type_str)
{
if (type_str == ">") return ComparisonType::GreaterThan;
if (type_str == "<") return ComparisonType::LessThan;
if (type_str == "=") return ComparisonType::Equal;
if (type_str == ">") {
return ComparisonType::GreaterThan;
}
if (type_str == "<") {
return ComparisonType::LessThan;
}
if (type_str == "=") {
return ComparisonType::Equal;
}
return ComparisonType::Unsupported;
}