变量(英文:Variable),(在欧陆风云4中)是那些与特定的国家或省份相关联的持久值。
基本上,变量只能用于脚本中的判断,而不能直接把运算结果赋值到游戏中。
使用变量
变量能运算在 国家 和 省份 作用域,而且能在 效果 和 触发 两种上下文,尽管指令和条件在两种上下文用法迥异。
例如,如果我们想要跟踪一个事件对某个国家发生的次数,我们应该要用个变量。
注意1: 变量所能保存的浮点数有最大值。数值超过 2,147,484 将会溢出为负数。
注意2: 变量不能作为右侧参数使用(譬如在一个效果段落中),除非用于宗教和文化(见下文 #事件域值 段落)。这一点极大限制了变量的灵活性,当然,也从反面提高了Mod的健壮性。
设置变量
要关联一个变量和一个国家(或者省份),你首先需要设置这个变量。
set_variable = {
which = myCountingVariable
value = 0
}
典型地你会想要在一个设置事件里这么做,比如一个只在游戏开始时发生一次的事件。你能相当容易地这么做,通过使用 on_startup 在活动(action)和检查 has_country_flag 的事件,并且在 immediate 段落中设置它。
递增变量
设置完你的变量,你现在能使用该变量运算效果。这样,在这个假设的事件中,我们可以添加下列代码到 immediate 段落:
immediate = {
change_variable = {
which = myCountingVariable
value = 1
}
}
这会把 myCountingVariable 增加1。变量是浮点数,意味着你也能用非整数值做加法。
所有变量运算效果:
change_variable # 加法 subtract_variable # 减法 divide_variable # 除法 multiply_variable # 乘法
检查变量
现在我们能跟踪这个事件的发生,当变量达到5时我们想要执行一个不同的事件。要做到这个,我们必须在事件的触发段落运用变量比较触发器。
这里是你该如何检查变量值是5或者更多:
check_variable = {
which = myCountingVariable
value = 5
}
要检查变量是否 精确地 是5,你得要包含另一个反向的 check_variable:
check_variable = {
which = myCountingVariable
value = 5
}
NOT = {
check_variable = {
which = myCountingVariable
value = 6
}
}
本地化变量
我们能本地化变量,这样它就显示为我们定义的字符串,而不是变量脚本名。
myCountingVariable: "My Counting Variable"
在一个不同的事件,我们可能想要给玩家在事件描述中显示这个变量。要这么做,你能包含下列本地化命令:
event_desc: "[Root.myCountingVariable.GetName] [Root.myCountingVariable.GetValue]"
这里的 Root 引用该事件的 ROOT 作用域。这里的本地化命令使用 myCountingVariable 与 ROOT 相关联,并且显示本地字符串(用GetName)和 ROOT 的当前值(用GetValue)。
导出到变量
变量能被导出的内部值填充(能用内部数值给变量赋值)。这意味着游戏数值诸如 monthly_income 能被导出到一个变量并且以各种方式使用。此外,变量可以与其他变量进行比较,当它们包含导出的值时那相当有用,允许比较其它方法不可能的数据。
比如说我们想要做一个事件,花钱送礼依据该国的月收入,但是不超过该国的国库。要做这个我们先要导出两个变量在这个事件的 immediate 段落:
export_to_variable = {
which = moneyToGive
value = monthly_income
who = ROOT
}
export_to_variable = {
which = moneyAvailable
value = treasury
who = ROOT
}
然后我们想把国家的收入乘上六倍达到我们的礼物数额:
multiply_variable = {
which = moneyToGive
value = 6
}
为了确保礼物的规模不会大于国家的国库,我们要限制礼物规模到国家的当前国库数额,如果礼物规模比它更大的话:
if = {
limit = {
# 是 moneyToGive 比 moneyAvailable 更大吗
check_variable = {
which = moneyToGive
which = moneyAvailable
}
}
# 设置 moneyToGive 为 moneyAvailable 的值,因为 moneyToGive 比 moneyAvailable 更大
set_variable = {
which = moneyToGive
which = moneyAvailable
}
}
然后在事件选项添加成比例的 add_treasury,根据 moneyToGive 值:
option = {
if = {
limit = {
NOT = { check_variable = { which = moneyToGive value = 25 } }
}
add_treasury = -10
FRA = { add_treasury = 10 }
}
if = {
limit = {
check_variable = { which = money_to_give value = 25 }
NOT = { check_variable = { which = moneyToGive value = 50 } }
}
add_treasury = -25
FRA = { add_treasury = 25 }
}
if = {
limit = {
check_variable = { which = money_to_give value = 50 }
NOT = { check_variable = { which = moneyToGive value = 100 } }
}
add_treasury = -50
FRA = { add_treasury = 50 }
}
}
效果
效果相关的变量:
set_variable = {
which = <var>
value = <float>
which = <var> / <scope> # 用于替代值,把 <var> 变成第二个<var>或者<scope>的<var>值
}
change_variable = {
which = <var>
value = <float>
which = <var> / <scope> # 用于替代值,把第二个<var>值加入到第一个 <var>值上或者把 <scope>的<var>值加到当前scope的<var>值上
}
subtract_variable = {
which = <var>
value = <float>
which = <var> / <scope> # 用于替代值,把第一个<var>值减去第二个 <var>值或者把 <scope>的<var>值减入到当前scope的<var>值上
}
divide_variable = {
which = <var>
value = <float>
which = <var> / <scope> # 用于替代值,将第一个<var>值除以第二个<var>值或者除以<scope>的<var>值
}
multiply_variable = {
which = <var>
value = <float>
which = <var> / <scope> #用于替代值,将第一个<var>值乘以第二个<var>值或者乘以<scope>的<var>值
}
export_to_variable = {
which = <var> # 例如 stabilityVar
variable_name = <var> # 和 which 相同,另一种声明方式
value = <string> # 例如 stability
who = <scope> # 从谁抓取该值
# 支持导出触发限制值。工作于整数、浮点和布尔值触发器
value = trigger_value:<trigger>
}
触发器
触发相关的变量:
check_variable = {
which = <var>
value = <float>
which = <var> # 用于替代<value>一句,检查第一个 <var> 值相对于第二个 <var> 的值
}
is_variable_equal = {
which = <string1>
which = <string2>
}
变量算术触发器
在触发器内用于导出变量,同时在一个触发器作用域内(比较)。
这是一个通用的例子:
variable_arithmetic_trigger = {
custom_tooltip = <string>
# 导出必须在触发器之前完成
export_to_variable = {
variable_name = <string1>
value = <var>
}
export_to_variable = {
variable_name = <string2>
value = <var>
}
# 普通的触发条件在这里有效
<triggers>
# Var1 == Var2
is_variable_equal = {
which = <string1>
which = <string2>
}
# Var1 >= Var2
check_variable = {
which = <string1>
which = <string2>
}
}
这很有用,如果你想要比较特定的触发器和另一个。举个例子,假如说你想要检查你的统治者是否比一个外国继承人更老。我们有 ruler_age 和 heir_age 触发器,但是你不能这么做: ruler_age > FROM = { heir_age }。
不过,一个变量算数触发器让你能做到这点。
variable_arithmetic_trigger = {
custom_tooltip = HAS_OLDER_RULER_THAN_THEIR_HEIR
export_to_variable = {
variable_name = my_age
value = trigger_value:ruler_age
}
export_to_variable = {
variable_name = their_age
value = trigger_value:heir_age
who = FROM
}
ruler_age = 0
FROM = {
heir_age = 0
}
check_variable = {
which = my_age
which = their_age
}
}
事件域值
事件域值(Event scope values)用于对一个文化或宗教引用变量索引值。这发生在当你用 export_to_variable 导出一个文化或者宗教时。
其实,该变量的真实值仍然是一个数字,这个数字是一个文化或者宗教的、在它们各自的列表中的位置的索引值。当使用在特定的效果和触发时,这个索引值被转换为正确的文化或者宗教。
要为此导出变量,你需要用这个语法:
export_to_variable = {
variable_name = myVarName
value = <export value>
}
要把改变量用于效果或触发,你要用这个语法:
set_heir_culture = variable:myVarName
这个语法支持 FROM,意味着你能转换定义域到一个省份,并且用 FROM 内联切换定义域到(inline to scope to)该变量被导出的国家。
any_owned_province = {
culture = variable:From::myVarName
}
另外,在触发器里你能用这个语法抓取导出值用于比较:
religion_group = new_variable:ruler_religion
这允许你在触发器内检查导出值(因为 export_to_variable 是效果)。
支持的效果指令:
change_religion change_culture change_primary_culture set_ruler_culture set_ruler_religion set_consort_culture set_consort_religion set_heir_culture set_heir_religion
支持的触发条件:
ruler_culture consort_culture heir_culture ruler_religion consort_religion heir_religion culture religion
可导出变量
国家
| 值 | 注释 |
|---|---|
| modifier:<country modifier> | modifier:<modifier> 语法对于任何国家修正都工作。
|
| trigger_value:<trigger> | trigger_value:<trigger> 语法对于触发器工作,然后返回整数、浮点数或布尔值。更复杂的触发器不工作。
|
| prestige | 威望 |
| war_exhaustion | |
| corruption | 腐败 |
| stability | 稳定 |
| treasury | 国库 |
| mercantilism | 重商主义 |
| inflation | 通货膨胀 |
| num_of_cities | 城市数量 |
| num_of_ports | 港口数量 |
| adm_tech | 行政科技 |
| dip_tech | 外交科技 |
| mil_tech | 军事科技 |
| years_of_income | 年收入 |
| monthly_income | 月收入 |
| trade_income_percentage | 贸易收入占比 |
| states_development | 发展度相关 |
| total_development | 发展度相关 |
| average_autonomy | 自治度相关 |
| average_home_autonomy | 自治度相关 |
| manpower | 人力 |
| manpower_percentage | 人力(百分比) |
| max_manpower | 最大人力 |
| land_forcelimit | 陆军上限 |
| naval_forcelimit | 海军上限 |
| army_tradition | 陆军传统 |
| navy_tradition | 海军传统 |
| army_size | 陆军规模 |
| navy_size | 海军规模 |
| average_unrest | |
| average_autonomy_above_min | |
| average_effective_unrest | |
| num_of_rebel_armies | 叛军军队数量 |
| num_of_rebel_controlled_provinces | 叛军控制省份数量 |
| overextension_percentage | |
| ADM | 当前统治者 ADM 技能 |
| DIP | 当前统治者 DIP 技能 |
| MIL | 当前统治者 MIL 技能 |
| consort_adm | 配偶政治(ADM)能力 |
| consort_dip | 配偶外交(DIP)能力 |
| consort_mil | 配偶军事(MIL)能力 |
| heir_adm | |
| heir_dip | |
| heir_mil | |
| monarch_age | |
| consort_age | |
| heir_age | 如果没有继承人存在,返回当前游戏内年份减1。 |
| patriarch_authority | |
| piety | |
| religious_unity | 宗教统一 |
| tolerance_to_this | 引用正统信仰容忍。 |
| religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
| dominant_religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
| secondary_religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
| ruler_religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
| heir_religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
| consort_religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
| adm_advisor_religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
| dip_advisor_religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
| mil_advisor_religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
| primary_culture | 返回一个索引值,例如:1是英格兰,2是法兰西,等等。当使用正确的效果和触发器时,数值被转换为特定的文化。 |
| dominant_culture | 返回一个索引值,例如:1是英格兰,2是法兰西,等等。当使用正确的效果和触发器时,数值被转换为特定的文化。 |
| ruler_culture | 返回一个索引值,例如:1是英格兰,2是法兰西,等等。当使用正确的效果和触发器时,数值被转换为特定的文化。 |
| heir_culture | 返回一个索引值,例如:1是英格兰,2是法兰西,等等。当使用正确的效果和触发器时,数值被转换为特定的文化。 |
| consort_culture | 返回一个索引值,例如:1是英格兰,2是法兰西,等等。当使用正确的效果和触发器时,数值被转换为特定的文化。 |
| adm_advisor_culture | 返回一个索引值,例如:1是英格兰,2是法兰西,等等。当使用正确的效果和触发器时,数值被转换为特定的文化。 |
| dip_advisor_culture | 返回一个索引值,例如:1是英格兰,2是法兰西,等等。当使用正确的效果和触发器时,数值被转换为特定的文化。 |
| mil_advisor_culture | 返回一个索引值,例如:1是英格兰,2是法兰西,等等。当使用正确的效果和触发器时,数值被转换为特定的文化。 |
| border_distance | 需要在 export_to_variable 里使用 who = <scope> 才能正确地工作。边境距离
|
| capital_distance | 需要在 export_to_variable 里使用 who = <scope> 才能正确地工作。首都距离
|
| opinion | 需要在 export_to_variable 里使用 who = <scope> 才能正确地工作。观点
|
| trust | 需要在 export_to_variable 里使用 who = <scope> 才能正确地工作。信任
|
省份
| 值 | 注释 |
|---|---|
| modifier:<province modifier> | modifier:<modifier> 语法对于任何省份修正都工作。
|
| trigger:<trigger> | trigger:<trigger> 语法对于触发器工作,然后返回整数、浮点数或布尔值。更复杂的触发器不工作。
|
| base_tax | 基础税收 |
| base_production | 基础生产 |
| base_manpower | 基础人力 |
| development | 发展 |
| unrest | 叛乱 |
| nationalism | 分离主义 |
| local_autonomy | 省份自治度 |
| province_trade_power | 省份贸易力量 |
| tolerance_to_this | 引用正统信仰容忍。 |
| culture | 返回一个索引值,例如:1是英格兰,2是法兰西,等等。当使用正确的效果和触发器时,数值被转换为特定的文化。 |
| religion | 返回一个索引值,例如:1是天主教,2是新教,等等。当使用正确的效果和触发器时,数值被转换为特定的宗教。 |
参考资料
| 文档 | 效果指令 • 触发条件 • 修正 • 作用域 • 变量 • 本地化 • 可定制的本地化 |
| 脚本 | 顾问 • 时代 • 书签 • 建筑 • 宣战理由 • 殖民区域 • 新建国家 • 文化 • 决议 • 定义 • 外交行动 • 灾难 • 阶层• 事件 • 派系 • 政府 • 政府互动(1.35) • 伟大工程 • 历史 • 理念组 • 思潮 • 任务树 • 修正 • 自定义国家 • 政策 • 宗教 • 叛军 • 附属国类型 • 科技 • 贸易公司 • 商品 • 单位 • 旗舰 |
| 地图 | 地图 • Map Modding Quick Reference• 随机新世界 • 贸易节点 |
| 图形 | 3D模型 • 界面 • 贴图库 • 字体 • 粒子特效 • 着色器 • 兵模 |
| 音频 | 音乐 • 音效 |
| 其它 | 控制台指令 • 校验码 • JoroDox模组制作工具 • Mod文件结构 • Mod错误调试 • 验证器 • 运行文件 |
| 教程 | 添加省份 • 成就修改 • On actions • 模组制作 |