变量(英文: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 • 模组制作 |