实战用法
scope_exists 常用于专题研究(Special Project)或角色系统中,判断某个可选 scope 是否真实存在后再执行后续逻辑,避免对空 scope 进行无效判断。例如检查某个特殊项目是否已分配科学家,再决定是否显示特定 UI 提示或触发事件:
sp:sp_super_weapon = {
character = {
scope_exists = yes
# 科学家存在时才检查其属性
has_variable = my_scientist_flag
}
}
配合关系
[has_variable](/wiki/trigger/has_variable):在确认 scope 存在之后,再检查该 scope 上是否挂载了特定变量,避免对不存在的 scope 读取变量时产生意外行为。
[any_of_scopes](/wiki/trigger/any_of_scopes):遍历一组潜在 scope 时,内层可用 scope_exists 过滤掉其中无效的成员,确保只对有效 scope 进行判断。
[if](/wiki/trigger/if):将 scope_exists 作为 if 的限定条件,使整段条件块只在 scope 有效时才被评估,逻辑更清晰。
[custom_trigger_tooltip](/wiki/trigger/custom_trigger_tooltip):包裹含 scope_exists 的判断,向玩家显示友好提示,说明某功能因关联 scope(如科学家)未存在而不可用。
常见坑
- 混淆
scope_exists 与 country_exists:新手常用 country_exists 来判断角色或项目关联的 scope 是否有效,但 country_exists 检查的是国家标签在游戏中是否存在,而非当前进入的 scope 本身是否成立,两者语义完全不同,在非国家 scope(如 character、sp: 等)中必须使用 scope_exists。
- 在变量 scope 上多余使用:对
var: 类型的变量 scope 使用 scope_exists 永远返回 yes,因为变量 scope 始终合法,真正需要判断的应该是变量是否被赋值(用 [has_variable](/wiki/trigger/has_variable)),在这里加 scope_exists 不起任何过滤作用。