变量

变量(在《欧陆风云IV》中)是持久存在的数值,与特定的国家或省份相关联。

使用变量

变量可以在国家和省份作用域中,以及效果和触发条件环境中使用,不过两种环境下所用的命令和条件有所不同。

例如,如果我们想记录某个国家触发某事件的次数,就需要使用变量。

注意1 :变量所能容纳的数字有最大值。超过2,147,484的数值会溢出为负数。

注意2 :变量不能用作右侧参数(例如在效果部分中),宗教和文化除外(见下文事件作用域值一节)。

设置变量

要将变量与某个国家(或省份)关联,首先需要设置该变量。

set_variable = {
    which = myCountingVariable
    value = 0
}

通常你会希望在初始化事件中完成这件事,即仅在游戏开始时触发一次的事件。使用on_startup触发时点和一个事件即可轻松做到:该事件检查has_country_flag,并在immediate部分中设置它。

增加变量

设置好变量后,就可以使用变量运算效果了。因此,在这个假设的事件中,我们会在immediate部分加入以下内容:

immediate = {
    change_variable = {
        which = myCountingVariable
        value = 1
    }
}

这会使myCountingVariable增加1。变量是定点小数(精确到千分位),这意味着你也可以用小数来增加。

所有变量运算效果如下:

change_variable             # Add
subtract_variable           # Subtract
divide_variable             # Divide
multiply_variable           # Multiply

检查变量

现在我们可以追踪该事件的发生次数了,接下来希望在变量达到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作用域。此处的本地化命令使用与ROOT关联的myCountingVariable,并显示本地化字符串(通过GetName)以及ROOT的当前值(通过GetValue)。

注意:变量名不能以三个(或更多)大写字母开头,因为游戏可能会将其与国家标签混淆。这样GetName会显示国家名称,而GetValue会向error.log输出类似Unknown text property '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 = {
        # Is moneyToGive greater than moneyAvailable
        check_variable = {
            which = moneyToGive
            which = moneyAvailable
        }
    }
    
    # Set moneyToGive to moneyAvailable's value, as moneyToGive was greater than moneyAvailable
    set_variable = {
        which = moneyToGive 
        which = moneyAvailable 
    }
}

然后在事件选项中,根据moneyToGive的值加入按比例变化的add_treasury:

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 }
    }
}

效果

与变量相关的效果:

注意:语法which = <var> / <scope>并不支持所有类型的作用域。ROOT和PREV似乎可用,但标签似乎不可用。不过who = <scope>支持标签。

set_variable = {            
    which = <var>
    value = <number>
    which = <var> / <scope>     # Used in place of value, sets the first <var> to the second <var>'s value / <scope>'s value of <var>
}
change_variable = {            
    which = <var>
    value = <number>
    which = <var> / <scope>     # Used in place of value, adds the second <var> to the first <var> / <scope>'s value of <var> to the current scope's <var>
}
subtract_variable = {            
    which = <var>
    value = <number>
    which = <var> / <scope>     # Used in place of value, subtracts the second <var> from the first <var> / <scope>'s value of <var> from the current scope's <var>
}
divide_variable = {            
    which = <var>
    value = <number>
    which = <var> / <scope>     # Used in place of value, divides the first <var> by the second <var> / <scope>'s value of <var>
}
multiply_variable = {            
    which = <var>
    value = <number>
    which = <var> / <scope>     # Used in place of value, multiplies the first <var> with the second <var> / <scope>'s value of <var>
}
round_variable = {
    which = <name>
    value = <float>
    # If value < 0 round down
    # If value = 0 round
    # If value > 0 round up
}
sqrt_variable = {
    which = <name>
}
random_variable = {
    which = <var>
    value = <number>
    which = <var> / <scope>     # Used in place of value, sets the first <var> to a random float between 0 and the second <var> / <scope>'s value of <var>
}
modulo_variable = {
    which = <var>
    value = <number>
    which = <var> / <scope>     # Used in place of value, takes the remainder of dividing the first <var> with the second <var> / <scope>'s value of <var>
}
export_to_variable = {
    which = <var>               # e.g., stabilityVar
    variable_name = <var>       # same as which, alternative declaration
    value = <string>            # e.g., stability
    who = <scope>               # Who to grab the value from
    
    # Supports exporting trigger limit values. Works for int, float and boolean triggers
    value = trigger_value:<trigger>
}

触发条件

与变量相关的触发条件:

check_variable = {
    which = <var>
    value = <number>
    which = <var> / <scope>       # Used in place of value, checks if the first <var> is equal or higher than the second <var> / <scope>'s value of <var>
}

is_variable_equal = {
    which = <string1>
    which = <string2>
}

变量运算触发条件

在触发条件作用域内使用,用于在触发条件中导出变量。

下面是一个常见的例子:

variable_arithmetic_trigger = {
    custom_tooltip = <string>
    
    # Exports must be done before triggers
    export_to_variable = {
        variable_name = <string1>
        value = <var>
    }
    
    export_to_variable = {
        variable_name = <string2>
        value = <var>
    }
    
    # Normal triggers are valid here
    <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
    }
}

事件作用域值

事件作用域值用于将变量的索引对应到某个文化或宗教。当你使用export_to_variable导出文化或宗教时就会出现这种情况。

虽然变量的实际值仍是一个数字,但这个数字是该文化或宗教在各自列表中位置的索引。与某些效果和触发条件配合使用时,该索引会被转换为正确的文化或宗教。

要为此导出变量,需要使用以下语法:

export_to_variable = {
    variable_name = myVarName
    value = <export value>
}

要在效果或触发条件中使用该变量,需要使用以下语法:

set_heir_culture = variable:myVarName

该语法支持FROM,这意味着你可以将作用域切换到某个省份,并内联使用FROM来指向导出该变量的国家。

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>语法适用于返回整数、小数或布尔值的触发条件。更复杂的触发条件不适用。
威望
war_exhaustion
腐败度
稳定度
国库
重商主义
通货膨胀
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_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 现任统治者行政能力
DIP 现任统治者外交能力
MIL 现任统治者军事能力
consort_adm
consort_dip
consort_mil
heir_adm
heir_dip
heir_mil
monarch_age
consort_age 如果不存在配偶,则返回当前游戏年份减1。
heir_age 如果不存在继承人,则返回当前游戏年份减1。
patriarch_authority
虔诚度
religious_unity
tolerance_to_this 指真正信仰的宽容度
宗教 返回索引值,例如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>才能正常工作。
关系 需要在export_to_variable中使用who = <scope>才能正常工作。
信任 需要在export_to_variable中使用who = <scope>才能正常工作。
ruler_consort_marriage_length

省份

数值 备注
modifier:<province modifier> modifier:<modifier>语法适用于任何省份修正。
trigger_value:<trigger> trigger_value:<trigger>语法适用于返回整数、小数或布尔值的触发条件。更复杂的触发条件不适用。
base_tax
base_production
base_manpower
开发度
动乱
民族主义
local_autonomy
province_trade_power
tolerance_to_this 指真正信仰的宽容度
文化 返回索引值,例如1代表英格兰,2代表法兰西,等等。与正确的效果和触发条件配合使用时,该值会被转换为相应的文化。
宗教 返回索引值,例如1代表天主教,2代表新教,等等。与正确的效果和触发条件配合使用时,该值会被转换为相应的宗教。
文档 效果 • 触发条件 • 修正列表 • 作用域 • 变量 • 本地化 • 可自定义本地化 • 运行文件 • 事件图片列表
脚本 脚本函数 • 顾问 • 时代 • 开局设定 • 建筑 • 宣战理由 • 殖民区域 • 国家创建 • 文化 • 决议 • Defines • 外交行动 • 灾难 • 中华帝国 • 阶层 • 事件 • 派系 • 政府 • 政府互动 • 伟大工程 • 历史 • 神圣罗马帝国 • 理念组 • 思潮 • 佣兵 • 任务树 • 修正 • On Actions • 议会 • 和约 • 君主性格 • 政策 • 叛军类型 • 宗教 • 附属国类型 • 科技 • 贸易公司 • 商品 • 单位
地图 地图 • 地图修改速查 • 随机新世界 • 贸易节点
图形 3D模型 • 界面 • 贴图库 • 字体 • 单位模型
音频 音乐 • 音效
其他 控制台命令 • 校验和 • 模组结构 • 故障排查 • 运行文件
工具 克劳塞维茨开局编辑器 • EU4模组编辑工具 • JoroDox模组制作工具 • The Validator
指南 省份 • 地图修改速查 • 存档编辑 • 脚本教程