命令百科

trigger · has_variable

Definition

  • Supported scope:any
  • Supported target:any

Description

Checks if a variable exists in a scope

实战 · 配合 · 坑

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

实战用法

has_variable 常用于检查某个 scope 上是否已经通过 set_variableadd_to_variable 写入过自定义变量,避免在变量不存在时直接读取导致脚本报错或产生意外行为。典型场景包括:在国家事件链中判断玩家是否已经完成了某个前置步骤(用变量作标记),或在 on_action 触发的 effect 里安全地访问动态生成的数值。

# 仅当该国已记录过"改革进度"变量时才允许选项可用
available = {
    has_variable = reform_progress
}

配合关系

  • [check_variable](/wiki/trigger/check_variable)has_variable 先确认变量存在,再用 check_variable 比较其具体值,两者几乎总是成对出现,防止对空变量做数值判断。
  • [set_variable](/wiki/effect/set_variable):在 effect 侧写入变量后,trigger 侧用 has_variable 验证写入是否已经发生,构成完整的"写—检"流程。
  • [if](/wiki/trigger/if):将 has_variable 作为 iflimit 条件,实现"变量存在才执行后续逻辑"的分支保护。
  • [clear_variable](/wiki/effect/clear_variable):清除变量后,has_variable 会返回假,可利用这一特性做"重置状态"判断,而无需额外设置布尔标记变量。

常见坑

  1. 直接用 check_variable 代替本触发器:新手常省略 has_variable 的前置检查,直接对可能不存在的变量做数值比较。若变量尚未被赋值,check_variable 的行为可能不符合预期(通常视为 0),在复杂事件链中容易产生隐蔽的逻辑错误。
  2. 变量名拼写不一致has_variable 的参数是字符串形式的变量名,与赋值时使用的名称必须完全一致(包括大小写)。跨文件引用时因命名不统一导致检查永远返回假是常见的调试陷阱。