作用域(英文:scope)是一个术语,用于指定条件或指令的作用范围。 作用域是克劳塞维茨引擎脚本的核心概念,其地位堪比高级编程语言中的对象。它不只是代码段落、流程控制,还是各种指令操作的主体和客体。通过灵活地转换作用域范围(相当于显式的数据类型转换),能够在国家域中操作省份,也能修改省份所属国家。
为了行文方便在此强调:文中的效果等同于指令,触发(器)等同于条件。
概述
所有脚本作用域都操作于两个内部域之一: country 或 province。用于国家的作用域,当被用于省份域的时候不会正确地起作用。
另外,所有脚本作用域都操作在两种类型域之一: effect 或 trigger。在触发器域内部使用一个效果域不会工作,反之亦然。也有一些作用域操作于两种类型之内。
哪种基本作用域是 effect 而哪种是 trigger 依赖于你正制做的Mod特性。举个例子,在一个决议中:potential = { }
和 allow = { }
是 trigger 作用域,反之effect = { }
是一个 effect 作用域。这在大多数情况下通常是不言自明的。
动态作用域
有四种独特脚本作用域,它们会依据它们所用的位置改变它们的上下文。它们都能被用于 effect 和 trigger 作用域。 动态作用域(Dynamic scopes),类似于对象别名。
作用域 | 描述 | 示例 | 注释 |
---|---|---|---|
ROOT | 基础作用域(base scope)。 | ROOT 作用域在一个国家事件中是该事件发起的国家。 | |
FROM | 调用作用域(calling scope)。 | FROM 作用域在一个国家事件中可能是调用的它的另一个事件的 ROOT 作用域(通过country_event = {} 效果)。
|
|
PREV | 前一作用域(previous scope)。 | 如果你先改变作用域到FRA = { } 然后再改变作用域到其中的capital_scope = { } ,那么 PREV 作用域就是FRA = { } 。
|
|
THIS | 当前作用域(current scope)。 | 如果你先改变作用域到FRA = { } 然后 THIS 作用域就是FRA = { } ,当它被用在 FRA = { } 作用域之内时。
|
这对于效果和触发器很有用,当你想要指明一个作用域不是 ROOT 作用域而无需更多作用域切换的时候。 |
逻辑作用域
有三种触发器作用域被用于改变触发条件或者触发集合的布尔值。它们是AND、OR 和 NOT,也就是“与或非”。 逻辑作用域(Logic scopes),类似于逻辑运算符。
AND作用域把一个集合的触发器组合在一起,然后返回真,只在如果嵌套其中的所有触发器都返回真的时候。这个作用域是缺省作用域,对于所有触发器作用域而言,所以你在大多数时候不需要显式地使用 AND 作用域。
AND = { tag = FRA stability = 1 }
OR 作用域分开多个触发器集合,返回真,如果嵌套其中的触发器集合之一返回真。这个作用域用于让触发器在状态1 或 状态2 或 状态3,等等返回有效。OR 和 AND 作用域经常被一起用在多个触发器组合之中。
stability = 1 OR = { tag = FRA tag = CAS }
NOT 作用域反转返回的触发器的真值。这允许你检查所有触发器的反面实例而无需一个不同的触发器去这么做。它也反转触发器中的数字 x 或是更大的行为,使它少于 x。
NOT = { stability = 1 } # 如果稳定度小于1返回真
没有“逻辑蕴含(implication)”作用域。如果你需要表达一个蕴含关系(例如,P → Q,“如果P成立那么Q成立”),用或和否定构造的等价逻辑代替它(¬P ∨ Q,“(非 P) 或 Q”)。 举个例子,游戏编码的条件之一,用于各种宗教CB——“如果DLC《战争艺术》被激活而且进攻方和防御方都是神圣罗马帝国成员:威斯特伐利亚和约尚未发生”——就像下面这样:
OR = { NOT = { has_dlc = "Art of War" } is_part_of_hre = no FROM = { is_part_of_hre = no } hre_religion_treaty = no }
子作用域
很多作用域返回多个子作用域(multiple subscopes)。举个例子,every_owned_province = { }
返回每一个拥有的省份作用域。这意味着在这个作用域内的任何效果都将在每一个省份子域中执行。对于触发器作用域也是同样的,只是把执行效果换成了比较真值。
子作用域(subscopes),类似于子对象或者实例。
关于哪个作用域如此操作的快速参考:
作用域前缀 | 类型 | 描述 |
---|---|---|
all_<scope> | 触发器 | 需要有效的触发器匹配 所有 子作用域。 |
any_<scope> | 触发器 | 需要有效的触发器匹配 一个 在此集合中的子作用域。 |
every_<scope> | 效果 | 应用效果到 所有 子作用域。 |
random_<scope> | 效果 | 应用效果到 一个 随机子作用域。 |
限制作用域
对于所有效果作用域,你都能嵌套一个limit = { }
来过滤返回的子域。
限制作用域(Limit scopes),类似于过滤器或者筛选器。
举个例子,下列返回的国家子域有3稳定度:
every_country = { limit = { stability = 3 } }
触发器作用域本来就用于过滤筛选,所以不需要限制作用域。
贸易节点作用域
理论上贸易节点作用域是省份作用域。但是,在实际上你需要在一个贸易节点作用域内,使用贸易节点效果和触发器域。 也就是先要把国家域切换成贸易节点省,而不是普通省,然后才能进行贸易节点域的省份的判断和操作,因为那些操作对于普通省份域无效。 贸易节点作用域(Tradenode scopes),类似于派生类。
这意味着你不能这么做:
ROOT = { every_privateering_country = { } }
相反,你需要这样做:
ROOT = { random_active_trade_node = { every_privateering_country = { } } }
双重作用域
双重作用域(Dual scopes)能被用于 效果 和 触发器 两种上下文。然而它们在两种上下文中操作迥异。或者,可以说双重域在两种上下文中仅仅是拼写相同。
在一个效果域中,双重域将会像 every_<scope>
那样行动并且应用效果指令到 所有 子域。
在一个触发器域中,双重域将会像 any_<scope>
那样行动并且(按条件)匹配 一个 集合中的子域。
你能改变这一点,让双重域返回多于一个子域,通过包含 type = all
这行到双重域之中。这将会使双重域匹配 所有 子域。
<region> = { type = all }
国家和省份
国家
省份
贸易节点
名称 | 示例 | 描述 | 多个子域 | 改变作用域到 | 添加版本 |
---|---|---|---|---|---|
most_province_trade_power | most_province_trade_power = { }
|
在该贸易节点中从省份产生最多贸易力量的国家。 | 国家 | 1.1 | |
strongest_trade_power | strongest_trade_power = { }
|
在该节点有最多贸易力量的国家。 | 国家 | 1.1 |
效果作用域
所有效果作用域(effect scopes)都可能匹配多个子域,加上if
,能被其中的limit = { }
限定。举个例子:
every_country = { limit = { <triggers> } <effects> }
作用域能选择随机的子作用域(例如random_owned_province
)作为它们应用限定条件后的选择。
国家
用在国家作用域里——例如,FRA = { }
省份
用在省份作用域里——例如,capital_scope = { }
。这些一般只选择陆地省份。
贸易节点
用在贸易节点作用域里——例如,random_active_trade_node = { }
单位
用在单位作用域里
任务
只可用于在/Europa Universalis IV/missions找到的任务。
名称 | 示例 | 描述 | 多个子域 | 改变作用域到 | 添加版本 |
---|---|---|---|---|---|
every_target_province | every_target_province = { }
|
检查域内 所有 省份,在指定为任务中的目标的省份之中。 | 省份 | 1.1 | |
random_target_province | random_target_province = { }
|
检查域内 一个 省份,在指定为任务中的目标的省份之中。 | 省份 | 1.1 |
触发器作用域
国家
用在国家作用域里——例如,FRA = { }
省份
用在省份作用域里——例如,capital_scope = { }
贸易节点
用在贸易节点作用域里——例如,any_active_trade_node = { }
任务
只可用于在/Europa Universalis IV/missions找到的任务。
名称 | 示例 | 描述 | 多个子域 | 改变作用域到 | 添加版本 |
---|---|---|---|---|---|
all_target_province | all_target_province = { }
|
检查域内 所有 指定为任务中的目标的省份。 | 省份 | 1.1 | |
any_target_province | any_target_province = { }
|
检查域内 一个 指定为任务中的目标的省份。 | 省份 | 1.1 |
参考资料
文档 | 效果指令 • 触发条件 • 修正 • 作用域 • 变量 • 本地化 • 可定制的本地化 |
脚本 | 顾问 • 时代 • 书签 • 建筑 • 宣战理由 • 殖民区域 • 新建国家 • 文化 • 决议 • 定义 • 外交行动 • 灾难 • 阶层• 事件 • 派系 • 政府 • 政府互动(1.35) • 伟大工程 • 历史 • 理念组 • 思潮 • 任务树 • 修正 • 自定义国家 • 政策 • 宗教 • 叛军 • 附属国类型 • 科技 • 贸易公司 • 商品 • 单位 • 旗舰 |
地图 | 地图 • Map Modding Quick Reference• 随机新世界 • 贸易节点 |
图形 | 3D模型 • 界面 • 贴图库 • 字体 • 粒子特效 • 着色器 • 兵模 |
音频 | 音乐 • 音效 |
其它 | 控制台指令 • 校验码 • JoroDox模组制作工具 • Mod文件结构 • Mod错误调试 • 验证器 • 运行文件 |
教程 | 添加省份 • 成就修改 • On actions • 模组制作 |