自游戏版本 1.35 起,政府互动可在 common/government_mechanics 中完全通过脚本定义。其中一些功能(例如范围修正,以及为缩放修正定义范围)直到 1.35.4 才加入。
一个政府互动必须具有唯一的名称,并且可以包含任意数量的权力和互动。此外,一个政府互动还可以包含以下内容:
- 一个精灵类型,以及该精灵类型中的某一帧,用于在可以使用某个互动时显示提醒
- 一个用于判定该机制是否可用的触发条件
互动必须在政府改革的 government_abilities = { } 部分中启用。
通用格式
定义
通用格式如下:
<government_mechanic_name> = {
alert_icon_gfx = <sprite_type_name>
alert_icon_index = <integer>
available = {
# 触发条件
}
powers = {
# 权力
}
interactions = {
# 互动
}
}
基础游戏示例代码
prussian_militarization_mechanic_1 = {
alert_icon_gfx = GFX_alerticons_government_mechanics
alert_icon_index = 10
available = {
has_dlc = "Domination"
tag = PRU
NOT = { has_country_flag = enable_second_mil_level_flag }
NOT = { has_country_flag = enable_third_mil_level_flag }
}
powers = {
prussian_militarized_society_1 = {
max = 100
scaled_modifier = {
modifier = {
discipline = 0.05
manpower_recovery_speed = 0.1
land_maintenance_modifier = -0.2
monthly_prussian_militarized_society_1 = -0.1
}
}
}
}
interactions = {
boost_militarization = {
gui = prussian_militarization_gov_mech_1_2
cost_type = prussian_militarized_society_1
center = no
trigger = {
mil_power = 50
not = {
has_government_power = {
mechanic_type = prussian_militarization_mechanic_1
power_type = prussian_militarized_society_1
value = 100
}
}
}
effect = {
add_government_power = {
mechanic_type = prussian_militarization_mechanic_1
power_type = prussian_militarized_society_1
value = 10
}
add_mil_power = -50
}
cooldown_years = 0
ai_chance = {
factor = 0
modifier = {
factor = 10
not = {
has_government_power = {
mechanic_type = prussian_militarization_mechanic_1
power_type = prussian_militarized_society_1
value = 90
}
}
mil_power = 500
}
}
}
}
}
本地化
每个政府互动的名称都必须进行本地化。字符串格式如下:
ability_<government_mechanic_name>: "名称"
。
该本地化文本会显示在启用该机制的政府改革的提示框中,显示为 Enables <name> Ability(启用 <name> 能力)。
提醒图标
定义
在互动中,提醒图标的精灵和帧按如下方式指定:
alert_icon_gfx = <sprite_type_name> alert_icon_index = <number>
界面定义
精灵类型可以在 interface 文件夹中的 .gfx 文件里按如下方式定义:
spriteTypes = {
spriteType = {
name = "GFX_alerticons_government_mechanics"
texturefile = "gfx//interface//alerticons_government_mechanics.dds"
noOfFrames = 17
loadType = "INGAME"
alwaystransparent = yes
}
}
可用条件
必须满足该触发条件,政府互动才可用。请注意,该机制仍然必须由某个政府改革启用!这些触发条件只会在选择政府改革时检查。另请注意,即使该机制的触发条件未满足,改革的提示框中仍然会写明它启用了该机制。
available = {
# 在此填写触发条件
}
权力
定义
powers 部分可以包含任意数量的权力。权力遵循如下格式:
powers = {
<government_power_name> = {
gui = <string> # 指向 interface 文件夹中某个 .gui 文件内的 windowType [可选]
min = <integer> # 定义权力的最小值(进度条左侧)[可选,默认为 0]
max = <integer> # 定义权力的最大值(进度条右侧)
default = <integer> # 定义初始值,同时也是在新统治者即位时重置所用的值 [可选,默认为 0]
reset_on_new_ruler = <yes/no> # 设定每当选出新统治者时权力值是否重置 [可选,默认为 no]
base_monthly_growth = <float> # 定义权力每月的基础变化量 [可选,默认为 0]
development_scaled_monthly_growth = <float> # 定义随国家总发展度而变化的权力每月变化量 [可选,默认为 0]
monarch_power = <adm/mil/dip> # 定义权力是否会从三种统治者能力之一中获得增长 [可选]
show_before_interactions = <yes/no> # 定义权力条在界面中显示于互动的上方还是下方 [可选,默认为 no]
# scaled_modifier 的工作方式如下:
# 修正 * (当前值与 end_value 之间的距离)/100 [例如,当前值为 -50 且 end_value 为 -100 时,此处的值为 50]
# 你可以添加任意数量的 scaled_modifier 部分
# [可选]
scaled_modifier = {
start_value = <float> # 设定缩放的起始值 [可选,默认为最小值]
end_value = <float> # 设定缩放的结束值 [可选,默认为最大值]
extend_beyond_value = <yes/no> # 定义缩放修正是否也适用于该范围之外(此时使用所定义范围的最大/最小值)[可选,默认为 yes]
trigger = {
# 在此填写触发条件
}
modifier = {
# 在此填写修正
}
}
# reverse_scaled_modifier 的工作方式如下:
# 修正 * (当前值与 end_value 之间的距离)/100 [例如,当前值为 -50 且 end_value 为 0 时,此处的值为 50]
# 你可以添加任意数量的 reverse_scaled_modifier 部分
# [可选]
reverse_scaled_modifier = {
start_value = <float> # 设定缩放的起始值 [可选,默认为最小值]
end_value = <float> # 设定缩放的结束值 [可选,默认为最大值]
extend_beyond_value = <yes/no> # 定义缩放修正是否也适用于该范围之外(此时使用所定义范围的最大/最小值)[可选,默认为 yes]
trigger = {
# 在此填写触发条件
}
modifier = {
# 在此填写修正
}
}
# range_modifier 在指定范围内且触发条件满足时生效;与 scaled_modifier 和 reverse_scaled_modifier 不同,range_modifier 按所定义的数值原样生效,不会进行缩放
# 你可以添加任意数量的 range_modifier 部分
# [可选]
range_modifier = {
start_value = <float> # 设定修正开始生效的值 [可选,默认为最小值]
end_value = <float> # 设定修正停止生效的值 [可选,默认为最大值]
trigger = {
# 在此填写触发条件
}
modifier = {
# 在此填写修正
}
}
# on_max_reached 是当权力达到最大值时执行的效果部分 [可选]
on_max_reached = {
# 在此填写效果
}
# on_min_reached 是当权力达到最小值时执行的效果部分 [可选]
on_min_reached = {
# 在此填写效果
}
is_good = <yes/no> # 定义权力增长修正以绿色还是红色显示 [可选,默认为 yes]
}
}
你为 development_scaled_monthly_growth 设定的值,会乘以该国的发展度再除以 600[1]。
修正
游戏会为每个权力创建两个修正,可在任何国家和省份(作用于所有者)的修正部分中使用:
monthly_<government_power_name> # 加法,用于增加权力的每月变化量 <government_power_name>_gain_modifier # 乘法,影响增加权力的效果
你还必须为它们各自添加本地化以及图标。本地化字符串和图标名称与修正名称相同。图标必须放入 gfx/interface/ideas_EU4 文件夹中。
本地化
每个权力有两个本地化字符串,分别是名称和描述:
<government_power_name>: "名称" <government_power_name>_desc: "描述"
描述中可以使用可自定义本地化和本地化方括号命令,使其更具动态性。
在触发条件中的用法
有两个与政府权力相关的触发条件。 检查一个国家是否拥有指定数量的权力时,使用以下触发条件:
has_government_power = {
mechanic_type = <government_mechanic_name>
power_type = <government_power_name>
value = <float>
}
检查一个国家的指定权力是否被冻结时,使用以下触发条件:
government_power_frozen = {
mechanic_type = <government_mechanic_name>
power_type = <government_power_name>
}
在效果中的用法
有五个与政府权力相关的效果。 要改变权力值,可以使用以下效果:
add_government_power = { # 增加指定数量的权力
mechanic_type = <government_mechanic_name>
power_type = <government_power_name>
value = <float>
}
add_government_power_scaled_to_seats = { # 增加指定数量的权力,并按该国拥有的议会席位数进行缩放
mechanic_type = <government_mechanic_name>
power_type = <government_power_name>
value = <float>
}
set_government_power = { # 将权力设为指定数量
mechanic_type = <government_mechanic_name>
power_type = <government_power_name>
value = <float>
}
要冻结权力(即该权力不能再被效果、每月修正或统治者更替重置所改变)或解除冻结,可以使用以下效果:
freeze_government_power = {
mechanic_type = <government_mechanic_name>
power_type = <government_power_name>
}
unfreeze_government_power = {
mechanic_type = <government_mechanic_name>
power_type = <government_power_name>
}
互动
定义
interactions 部分内可以包含任意数量的互动。互动遵循如下格式:
interactions = {
<government_mechanic_interaction_name> = {
gui = <string> # 指向 interface 文件夹中某个 .gui 文件内的 windowType [可选]
center = <yes/no> # 定义按钮 gui 的起始位置(随后还会受 gui 内元素位置的进一步影响)[可选,默认为 yes]
icon = <sprite_type_name> # 定义按钮图标所用的精灵类型 [可选,默认使用 gui 中定义的精灵]
cost_type = <government_power_name> # 定义以哪种权力作为花费 [可选]
cost = <integer> # 使用该互动所需的指定权力数量,使用互动时会扣除这么多的指定权力 [可选]
# 看见该按钮所必须满足的触发条件 [可选]
# 即使不可见,它仍会占据界面中的位置,也就是说无论按钮是否可见,界面的表现都是一样的
potential = {
# 在此填写触发条件
}
# 能够点击该按钮所必须满足的触发条件 [可选]
trigger = {
# 在此填写触发条件
}
# 点击按钮时执行的效果
effect = {
# 在此填写效果
}
cooldown_years = <integer> # 定义该互动的冷却时间,单位为年 [可选]
cooldown_token = <string> # 定义用于冷却的标记,在你希望多个行动共享同一冷却时使用 [可选,默认每个行动有各自独立的冷却]
cooldown_desc = <string> # 定义一个本地化字符串,会插入到冷却提示框的开头 [可选]
ai_chance = { # AI 每天都会检查自己能否使用这些互动中的任何一个。如果有多个可用,则选择 ai_chance 最高的那个。
factor = <float>
modifier = {
factor = <float>
# 在此填写触发条件
}
# ...
}
}
}
本地化
每个互动有两个本地化字符串,分别是名称和描述:
<government_mechanic_interaction>: "名称" <government_mechanic_interaction>_desc: "描述"
GUI 设置
概述
为权力和互动指定一个 gui 容器是可选的,但这样做可以实现更多的自定义。gui 代码需写在 interface 文件夹中的 .gui 文件里(也可以放在其中的子文件夹内,例如 government_mechanics)。
能否为某个权力分配 gui,取决于你的互动是如何设置的。在以下情况下,你可以为权力分配 gui:
- 不存在任何互动
- 没有任何互动将该权力用作
cost_type - 至少有两个互动将该权力用作
cost_type
如果不属于上述情况,则该权力本身无法被分配 gui,此时分配给互动的 gui 也会包含该权力的 gui 元素。
这三个 gui 元素必须存在于各自的 windowType 中,同时你也可以自由添加额外的元素,例如额外的图标或文本。但请注意,这些额外元素不能是动态的,只能用来显示固定文本等。由于每个互动都可以分配不同的 gui,因此你可以借此为不同的互动设置不同的按钮文本等。
windowTypes 的 size 属性决定了两件事:
- 内部元素在被裁切之前可用的空间大小
- 后续元素的定位
对于第 2 点,这意味着第二个互动的起始位置由第一个互动所用 windowType 的 size 决定。例如,如果 size 的 x 值为 100,那么第二个互动按钮会位于第一个按钮右侧 100 像素处。y 值则决定垂直方向的偏移。这同样适用于权力的起始位置。
请注意,每行始终有三个按钮。你无法在少于或多于三个按钮之后另起一行!
权力与互动的合并 GUI
当权力和互动使用合并的 gui 时,windowType 必须包含全部三个必需的 gui 元素:
guiTypes = {
windowType = {
name = "prussian_militarization_gov_mech_1_2"
size = { x = 300 y = 82 }
moveable = 0
# 与此互动关联的权力类型的进度条和边框(如果它仅属于该互动;否则这些元素会被隐藏)
iconType = {
name = "government_power_bar"
spriteType = "GFX_prussian_militarization_power_bar"
position = { x = 16 y = 49 }
}
# 边框
iconType = {
name = "government_power_bar_frame"
spriteType = "GFX_prussian_militarization_frame"
position = { x = 0 y = 0 }
alwaystransparent = yes
}
### 互动按钮
guiButtonType = {
name = "government_interaction_button"
quadTextureSprite = "GFX_prussian_militarization_upgrade"
position = { x = 10 y = 5 }
buttonFont = "vic_18"
clicksound = back_click
}
}
}
windowType 的名称可以自由选择,并用于政府互动文件中的 gui 属性。两个 iconType 以及 guiButtonType 的名称必须与上文所示一致,因为它们与硬编码的函数相关联,由这些函数将正确的互动和权力应用到它们上。
权力的独立 GUI
如果为权力使用独立的 gui,则只包含两个 iconTypes,而不包含 guiButtonType。
guiTypes = {
windowType = {
name = "prussian_militarization_gov_mech_3_power"
size = { x = 300 y = 72 }
moveable = 0
# 背景 / 那只鹰
iconType = {
name = "government_power_bar"
spriteType = "GFX_prussian_militarization_power_bar"
position = { x = 16 y = 49 }
}
# 边框
iconType = {
name = "government_power_bar_frame"
spriteType = "GFX_prussian_militarization_frame"
position = { x = 0 y = 0 }
alwaystransparent = yes
}
}
}
互动的独立 GUI
如果为互动使用独立的 gui,则只包含 guiButtonType。
guiTypes = {
windowType = {
name = "prussian_militarization_gov_mech_3_interaction"
size = { x = 100 y = 50 }
moveable = 0
# 互动按钮,其图形会被互动图标设定所替换
guiButtonType = {
name = "government_interaction_button"
quadTextureSprite = "GFX_russian_ability_ADM"
buttonFont = "vic_18"
clicksound = back_click
}
}
}
进度条的精灵类型
如果你打算为权力制作 gui,可能会希望使用一个外观独特的进度条。 进度条的精灵类型按如下方式定义:
spriteTypes = {
progressbartype = {
name = "GFX_prussian_militarization_power_bar"
color = { 1.0 0.0 0.0 }
colortwo = { 1.0 1.0 1.0 }
textureFile1 = "gfx/interface/government_mechanics/prussian_militarization/prussian_progress_bar.dds"
textureFile2 = "gfx/interface/government_mechanics/prussian_militarization/prussian_progress_bar_empty.dds"
size = { x = 260 y = 20 }
effectFile = "gfx/FX/progress.lua"
}
}
name 用于 gui 图标中的精灵类型,两个 textureFiles 分别定义进度条及其背景的贴图。size 定义其在界面中的尺寸,因此也决定了进度每增加 1% 对应进度条的多少像素。该 size 通常应与实际图像尺寸保持一致。
参考资料
| 文档 | 效果 • 触发条件 • 修正列表 • 作用域 • 变量 • 本地化 • 可自定义本地化 • 运行文件 • 事件图片列表 |
| 脚本 | 脚本函数 • 顾问 • 时代 • 开局设定 • 建筑 • 宣战理由 • 殖民区域 • 国家创建 • 文化 • 决议 • Defines • 外交行动 • 灾难 • 中华帝国 • 阶层 • 事件 • 派系 • 政府 • 政府互动 • 伟大工程 • 历史 • 神圣罗马帝国 • 理念组 • 思潮 • 佣兵 • 任务树 • 修正 • On Actions • 议会 • 和约 • 君主性格 • 政策 • 叛军类型 • 宗教 • 附属国类型 • 科技 • 贸易公司 • 商品 • 单位 |
| 地图 | 地图 • 地图修改速查 • 随机新世界 • 贸易节点 |
| 图形 | 模型 • 界面 • 贴图库 • 字体 • 单位模型 |
| 音频 | 音乐 • 音效 |
| 其他 | 控制台命令 • 校验和 • 模组结构 • 故障排查 • 运行文件 |
| 工具 | 克劳塞维茨开局编辑器 • EU4模组编辑工具 • JoroDox模组制作工具 • The Validator |
| 指南 | 省份 • 地图修改速查 • 存档编辑 • 脚本教程 |