实战用法
has_character_flag 常用于追踪某个角色是否已触发过特定事件或完成过某个流程,例如限制同一将领只能接受一次特殊训练奖励,或在任务链中判断角色是否已进入下一阶段。结合 days 参数还可实现"冷却期"逻辑,例如某个 buff 上次施加后需要等待一定天数才能再次触发。
# 确保某将领未曾获得过特殊奖励,且上次授予已超过 180 天
limit = {
NOT = {
has_character_flag = {
flag = received_special_training
days > 180
}
}
}
配合关系
[set_character_flag](/wiki/effect/set_character_flag):最直接的搭档——先用该 effect 打上旗标,再用 has_character_flag 检测它是否存在,构成完整的"写入→读取"闭环。
[clr_character_flag](/wiki/effect/clr_character_flag):当条件满足、流程结束后清除旗标,配合 has_character_flag 可实现可重置的状态机逻辑。
[modify_character_flag](/wiki/effect/modify_character_flag):用于对旗标的数值进行累加,与 has_character_flag 的 value < 参数组合,可实现计数器式的多阶段判断。
[has_unit_leader_flag](/wiki/trigger/has_unit_leader_flag):功能几乎相同但作用于单位指挥官旗标,当不确定角色是否同时担任指挥官时,常需与 has_character_flag 并列检查以避免遗漏。
常见坑
- 忘记 flag 字段是 mandatory:新手常直接写
has_character_flag = my_flag(模仿简写形式),而该 trigger 的块语法要求必须用 flag = <name> 显式声明,否则解析器会报错或静默失败,导致条件永远不成立。
- 混淆
days > 的语义方向:days > 30 表示旗标被设置后已超过 30 天,很多人误以为是"30 天内有效"而写反逻辑;若要表达"旗标设置后 30 天内",需配合 NOT 包裹。