载入中...
搜索中...
未找到
SettlementRuleJson.cpp
浏览该文件的文档.
20 return invalid<const eve::Value::Object*>(eve::DiagnosticCode::TypeMismatch, "expected object", path);
49eve::Result<double> numberValue(const eve::Value::Object& object, std::string_view field, const std::string& path) {
58eve::Result<std::vector<std::string>> stringsValue(const eve::Value& value, const std::string& path) {
61 return invalid<std::vector<std::string>>(eve::DiagnosticCode::TypeMismatch, "expected string array", path);
77 if (value == "source_modifiers") return eve::Result<StageKind>::success(StageKind::SourceModifiers);
78 if (value == "target_mitigation") return eve::Result<StageKind>::success(StageKind::TargetMitigation);
84 return invalid<StageKind>(eve::DiagnosticCode::InvalidArgument, "unknown settlement rule stage", std::move(path));
90 if (value == "resist_flat") return eve::Result<RuleOperation>::success(RuleOperation::ResistFlat);
91 if (value == "resist_percent") return eve::Result<RuleOperation>::success(RuleOperation::ResistPercent);
92 if (value == "absorb_flat") return eve::Result<RuleOperation>::success(RuleOperation::AbsorbFlat);
93 if (value == "clamp_maximum") return eve::Result<RuleOperation>::success(RuleOperation::ClampMaximum);
98 return invalid<RuleOperation>(eve::DiagnosticCode::InvalidArgument, "unknown settlement rule operation",
126 if (priority.value() < std::numeric_limits<int>::min() || priority.value() > std::numeric_limits<int>::max())
127 return invalid<SettlementRule>(eve::DiagnosticCode::InvalidArgument, "priority is out of range",
137 auto filter = objectWithFields(object.value()->at("filter"), {"excludedTags", "kinds", "requiredTags"},
141 auto required = stringsValue(filter.value()->at("requiredTags"), path + ".filter.requiredTags");
142 auto excluded = stringsValue(filter.value()->at("excludedTags"), path + ".filter.excludedTags");
176 auto root = objectWithFields(parsed.value(), {"conditionLanguageVersion", "rules", "schema", "version"},
186 return invalid<void>(eve::DiagnosticCode::InvalidArgument, "unexpected settlement rules schema",
189 return invalid<void>(eve::DiagnosticCode::UnknownVersion, "unsupported settlement rules version",
192 return invalid<void>(eve::DiagnosticCode::UnknownVersion, "unsupported condition language version",
196 return invalid<void>(eve::DiagnosticCode::TypeMismatch, "expected rule array", "document.rules");
Declarative, domain-neutral rules for buffs and gameplay effects.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
static Result< Value > fromJson(std::string_view json)
Parse one strict JSON value into an owning Value.
Definition Value.cpp:57
Validated immutable-style rule collection installable into pipelines.
Definition SettlementRules.h:77
eve::Result< void > configureJson(std::string_view json)
Atomically decode and replace a strict versioned JSON rule document.
Definition SettlementRuleJson.cpp:173
static constexpr std::uint32_t schemaVersion() noexcept
Stable schema version used by canonical rule-set identity.
Definition SettlementRules.h:80
eve::Result< void > configure(std::vector< SettlementRule > rules)
Atomically replace all rules after validating ids, operands and phases.
Definition SettlementRules.cpp:831
static eve::Result< SettlementRuleSet > fromJson(std::string_view json)
Decode and compile a strict versioned JSON rule document without mutating an existing rule set.
Definition SettlementRuleJson.cpp:165
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
const EditorValue * field(const EditorValue &value, const char *name)
Definition RoadNetworkEditTarget.cpp:15
NodeDesc when(bool cond, NodeDesc child)
Conditional: include child only when cond is true (empty group otherwise).
Definition NodeDesc.cpp:234
Definition Settlement.cpp:10
@ Critical
@ ClampMaximum
@ ResistPercent
@ AbsorbFlat
@ ResistFlat
@ Lifesteal
@ Multiply
@ SourceModifiers
@ TargetMitigation
@ Decision
@ Validate
@ Trigger
@ ArmorShield
@ InvalidArgument
@ TypeMismatch
A stable reference resolved to a different canonical domain type.
@ UnknownVersion
@ Applied
@ Object
Definition Container.h:602