修正(Modifiers)与触发式修正
修正键、静态修正、add_modifier 与触发式修正
修正是什么
修正(modifier)是一组“键 = 数值”,挂在某个对象上持续改变它的属性,例如:
planet_max_districts_add = -1 # 最大区划数 -1
category_archaeostudies_research_speed_mult = 0.25 # 远古学研究速度 +25%
country_resource_max_add = 2000 # 资源储存上限 +2000几个要点:
- 修正键不能自己发明。可用的键由游戏决定,完整列表用控制台
script_docs导出到logs\script_documentation\modifiers.log(见调试),每个键还标了类别(Pops、Planets、Countries……)。 - 命名上,
_add结尾的是加减固定值,_mult结尾的是百分比(0.25即 +25%)。 - 部分修正是由资源和经济类别自动生成的;原版
common/economic_categories/99_README_ECONOMIC_CATEGORIES.txt说明了如何用generate_mult_modifiers等为新的经济类别生成修正。
修正挂在哪类对象上,就影响哪类对象。modifiers.log 开头特别说明:人口类(Pops)修正一般也可以挂在行星或国家上,此时作用于该对象下属的所有人口;类别只是“建议用在哪里”的标签,实际行为看具体实现。
静态修正:可以随时加上、移除的修正
common/static_modifiers/ 里定义的修正有名字、图标,可以被事件添加或移除。原版 00_static_modifiers.txt 里的例子:
migrating_forests_2 = {
icon = "gfx/interface/icons/planet_modifiers/pm_lush.dds"
planet_max_districts_add = -1
}修正也可以只有图标、不带任何数值,纯粹当作一个可见的“标签”。
在事件里添加和移除(摘自原版 events/colony_events_1.txt):
add_modifier = {
modifier = "migrating_forests"
days = -1
}remove_modifier = "migrating_forests"add_modifier 的参数(据 effects.log):
| 参数 | 说明 |
|---|---|
modifier | 静态修正的名字 |
days / months / years | 持续时间,-1(默认)表示永久 |
multiplier | 可选,把修正的所有数值乘以这个数或变量 |
它能用于国家、行星、殖民地、舰船、舰队、人口组、星港等多种作用域。
本地化
静态修正的名字和说明分别用修正名和 修正名_desc 两个本地化键:
l_simp_chinese:
migrating_forests: "迁徙森林"
migrating_forests_desc: "这个世界的迁徙森林频繁集体迁移到新的地区,破坏建设好的道路,输电线路和其他基础设施。"修正键本身在提示框里显示的文字,原版用 MOD_<大写键名> 或 mod_<键名> 作本地化键,例如 MOD_PLANET_MAX_DISTRICTS_ADD: "最大区划数"。
注意
00_static_modifiers.txt开头注明:其中的名字被代码引用,不能删除或改名。你可以修改它们的数值,但别动名字。
对象自带的修正块
很多对象直接内嵌修正块。原版建筑示例文件 common/buildings/00_example.txt 列出了建筑可用的几种:
planet_modifier = {
planet_housing_add = 300
}
country_modifier = {
country_resource_max_add = 2000
}
army_modifier = {
army_damage_mult = 0.1
}
system_modifier = {
psionic_aura_resistance_mult = 0.5
}这类修正在对象存在期间一直生效,不需要事件添加。
触发式修正(triggered modifier)
想让修正“满足条件时才生效”,就用触发式修正。原版 common/buildings/05_research_buildings.txt 中的真实写法:
triggered_country_modifier = {
potential = {
exists = owner
owner = {
has_ascension_perk = ap_archaeoengineers
}
}
country_resource_max_minor_artifacts_add = 3000
}
triggered_country_modifier = {
potential = {
is_planet_class = pc_relic
}
category_archaeostudies_research_speed_mult = 0.25
}potential 是触发器块,成立时下面的修正生效。原版 common/README_TRIGGERED_MODIFIERS.txt 列出了可用字段:
| 字段 | 说明 |
|---|---|
key | 修正名称使用的本地化键 |
potential | 决定是否生效的触发器 |
modifier | 生效时施加的修正 |
mult / multiplier | 修正数值的乘数 |
show_if_not_potential = yes | 条件不成立时也在提示框里显示(灰色);目前只对领袖特质和银河议会决议有效 |
not_potential_override_text_key | 配合上一项,用这段本地化代替触发器的显示 |
README 还说明:其他未列出的键都会被当作修正,所以修正可以像上面的例子那样直接写在块里,而不必包进 modifier = { }。
有哪些 triggered_*_modifier
不同对象支持的名字不同。按原版中的出现次数,常见的有 triggered_planet_modifier、triggered_country_modifier、triggered_district_planet_modifier、triggered_station_modifier、triggered_modifier、triggered_councilor_modifier、triggered_pop_group_modifier、triggered_sector_modifier。某个对象能用哪一种,请看它所在文件夹的原版写法或 README。
提示 触发式修正的
potential会被反复评估。条件写得越简单越好,避免在里面做大范围遍历。
选择哪种方式
- 事件带来的、有时限的效果 → 静态修正 +
add_modifier。 - 某个对象自带的固定加成 → 对象里的
planet_modifier、country_modifier等。 - 某个对象自带、但要看条件的加成 →
triggered_*_modifier。