实战用法
has_state_flag 常用于追踪某地区是否已触发过特定事件或完成过特定操作,例如判断某州是否已经历过"叛乱爆发"或"重建完成"等自定义阶段标记。在抵抗运动、占领事件链或区域发展 mod 中尤为常见,可配合可选参数精确控制标志的值范围或存续时间。
# 仅当该州已被标记为"重建完成"且标记设置超过 30 天后,才允许触发下一阶段事件
available = {
has_state_flag = {
flag = reconstruction_done
days > 30
}
}
配合关系
[set_state_flag](/wiki/effect/set_state_flag):最直接的配对关系,先用 set_state_flag 写入标志,再用 has_state_flag 在后续条件中读取,构成"写→读"闭环。
[clr_state_flag](/wiki/effect/clr_state_flag):在条件满足并执行完相应逻辑后,调用 clr_state_flag 清除标志,防止同一事件链重复触发。
[modify_state_flag](/wiki/effect/modify_state_flag):当需要对标志做累计计数(value 递增)时,配合 has_state_flag 的 value < 参数检测当前计数阈值,实现多阶段进度追踪。
[has_dynamic_modifier](/wiki/trigger/has_dynamic_modifier):两者常同时出现在同一 limit 块中,共同约束某个动态修正器只在特定旗帜与动态修正器同时存在时才生效。
常见坑
- Scope 写错位置:
has_state_flag 必须在 STATE scope 下调用,新手有时在 COUNTRY scope 的 limit 中直接写该 trigger,导致脚本报错或永远返回假——需要先用 any_neighbor_state / capital_scope 等切换到 STATE scope 再判断。
- 忽略标志未被设置时的默认行为:如果对应标志从未被
set_state_flag 写入,has_state_flag 直接返回假而不会报错,容易让开发者误以为条件逻辑正确,实则标志名拼写错误(大小写或下划线不一致)导致标志始终不存在。