实战用法
has_country_flag 常用于追踪玩家或 AI 已完成某个关键决策/事件分支的状态,例如防止同一事件链重复触发、记录外交协议达成等。在 focus/decision 的 available 块中判断前置条件是否满足,或在事件 trigger 中检查某段历史是否已经发生,是它最典型的用途。
# 只有在之前通过事件设置过 signed_pact_flag 的情况下,该决策才可用
available = {
has_country_flag = {
flag = signed_pact_flag
days > 30 # 该 flag 设置至少 30 天后才开放
}
}
配合关系
[clr_country_flag](/wiki/effect/clr_country_flag):设置 flag 完成其使命后,用此命令清除,防止"一次性"逻辑被重复触发,两者构成"写入→检查→清除"完整闭环。
[country_event](/wiki/effect/country_event):在确认 flag 存在后,触发对应的后续事件,常用于事件链的跳转控制。
[has_completed_focus](/wiki/trigger/has_completed_focus):与 has_country_flag 搭配双重校验,既确认国策已完成,又验证事件链内部状态,避免仅靠国策判断带来的漏洞。
[has_decision](/wiki/trigger/has_decision):与 flag 联合使用,区分"正在执行决策中"和"决策已完成并留下 flag"两种不同阶段的逻辑分支。
常见坑
- 忘记
flag = 关键字:简写形式 has_country_flag = my_flag 与块形式 { flag = my_flag ... } 不能混用附加字段——一旦需要加 days > 或 value <,必须使用块形式,否则解析报错或字段被静默忽略。
- Flag 作用域写错:
has_country_flag 只在 COUNTRY scope 下有效;如果当前 scope 是 STATE 或 CHARACTER,需要先用 ROOT/FROM 等跳回国家 scope,否则 flag 永远读取不到,条件静默返回 false 且不报错,极难排查。