政府互动修改

自游戏版本 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 属性决定了两件事:

  1. 内部元素在被裁切之前可用的空间大小
  2. 后续元素的定位

对于第 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 通常应与实际图像尺寸保持一致。

参考资料

  1. ↑ 该值在 Defines 中的 COUNTRY_DEVELOPMENT_SCALE 一行定义
文档 效果 • 触发条件 • 修正列表 • 作用域 • 变量 • 本地化 • 可自定义本地化 • 运行文件 • 事件图片列表
脚本 脚本函数 • 顾问 • 时代 • 开局设定 • 建筑 • 宣战理由 • 殖民区域 • 国家创建 • 文化 • 决议 • Defines • 外交行动 • 灾难 • 中华帝国 • 阶层 • 事件 • 派系 • 政府 • 政府互动 • 伟大工程 • 历史 • 神圣罗马帝国 • 理念组 • 思潮 • 佣兵 • 任务树 • 修正 • On Actions • 议会 • 和约 • 君主性格 • 政策 • 叛军类型 • 宗教 • 附属国类型 • 科技 • 贸易公司 • 商品 • 单位
地图 地图 • 地图修改速查 • 随机新世界 • 贸易节点
图形 模型 • 界面 • 贴图库 • 字体 • 单位模型
音频 音乐 • 音效
其他 控制台命令 • 校验和 • 模组结构 • 故障排查 • 运行文件
工具 克劳塞维茨开局编辑器 • EU4模组编辑工具 • JoroDox模组制作工具 • The Validator
指南 省份 • 地图修改速查 • 存档编辑 • 脚本教程