命令百科

trigger · has_character_flag

Definition

  • Supported scope:CHARACTER
  • Supported target:any

Description

has a character flag been setCheck flag val date set and days since set.
Example: has_unit_leader_flag = test_flag
has_character_flag = { 
	flag = <name> (mandatory)
	value < <int> (optional)
	date > <date> (optional)
	days > <int> (optional)
}

实战 · 配合 · 坑

实战内容由 AI 生成,并已对照 vanilla 命令词表校验 —— 请当作起点而非权威依据。上方的定义节才是游戏自带文档原文。

实战用法

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_flagvalue < 参数组合,可实现计数器式的多阶段判断。
  • [has_unit_leader_flag](/wiki/trigger/has_unit_leader_flag):功能几乎相同但作用于单位指挥官旗标,当不确定角色是否同时担任指挥官时,常需与 has_character_flag 并列检查以避免遗漏。

常见坑

  1. 忘记 flag 字段是 mandatory:新手常直接写 has_character_flag = my_flag(模仿简写形式),而该 trigger 的块语法要求必须用 flag = <name> 显式声明,否则解析器会报错或静默失败,导致条件永远不成立。
  2. 混淆 days > 的语义方向days > 30 表示旗标被设置后已超过 30 天,很多人误以为是"30 天内有效"而写反逻辑;若要表达"旗标设置后 30 天内",需配合 NOT 包裹。