实战用法
meta_effect 适合需要动态拼接执行目标或数值的场景,例如根据变量决定向哪个国家执行某操作,或将同一套逻辑复用于不同参数而避免大量重复代码。常见于通用事件框架、动态联盟系统、或需要把脚本变量里存储的国家标签直接当作 scope 执行的场合。
# 将某个存在变量 target_country 中的国家标签添加政治点数
meta_effect = {
text = {
[TARGET] = {
add_political_power = [AMOUNT]
}
}
TARGET = "var:target_country"
AMOUNT = "var:bonus_pp"
debug = no
}
配合关系
[set_variable](/wiki/effect/set_variable) / [set_temp_variable](/wiki/effect/set_temp_variable):在调用 meta_effect 前先把目标标签或数值写入变量,再通过 var: 引用传入,是最常见的前置步骤。
[hidden_effect](/wiki/effect/hidden_effect):将 meta_effect 包裹在 hidden_effect 内,避免将调试过程或中间步骤暴露给玩家 tooltip,保持 UI 整洁。
[if](/wiki/effect/if):在 meta_effect 外层加条件判断,确保拼接的变量已经被赋值且合法,防止向空标签执行操作导致报错。
[has_variable](/wiki/trigger/has_variable):作为 if 的条件,验证传入 meta_effect 的变量确实存在后再执行,避免因变量未定义引发的静默失败。
常见坑
var: 引用的变量必须存储的是字符串形式的国家/State 标签,而非数字 ID;如果变量里存的是数值型 ID(如 42),直接作为 scope 传入会无法正确解析,需要提前用 set_variable 将正确的字符串标签赋值进去。
text 块中的占位符必须与外层键名完全一致(区分大小写),例如 [COUNTRY] 对应外层必须写 COUNTRY = "...",拼写或大小写不匹配时游戏不会报显式错误,而是静默跳过整段 effect,非常难以排查,建议开发期间始终保持 debug = yes。