AI modding:修订间差异

本页面适用于最新的版本(1.14)。
无编辑摘要
无编辑摘要
 
(未显示2个用户的8个中间版本)
第1行: 第1行:
{{version|1.5}}
{{version|1.14}}
 
{{需要翻译|译者=霜泽图书馆}}
 钢铁雄 心4 的 AI 可以在 许多方面 修改. 以下文件 主要处理 AI:
  钢铁雄 心IV》 的AI能够操纵国家 许多方面 的事物。其包括变更国家的国策或科技走向,决定国家应该生产多少单位或建筑,以及国家应该生产什么样的模板,应该集中力量在哪里,决定使用哪些模板或变体等等。
 以下 是AI的mod 文件 路径:


* {{path|common/ai_areas}}
* {{path|common/ai_areas}}
第14行: 第15行:
 许多其他给玩家提供选择的地方应附有 AI 倾向来表达 AI 对各选项的权衡,这些地方使用'''ai_will_do。'''
 许多其他给玩家提供选择的地方应附有 AI 倾向来表达 AI 对各选项的权衡,这些地方使用'''ai_will_do。'''


== AI 倾向 ==
__TOC__
{{SVersion|1.8}}
 
== MTTH 代码块 ==
{{anchor|ai_will_do}}
{{anchor|ai_will_do}}
  如在 许多文 件中 看到 那样 '''ai_will_do''' mb 是一个 为 AI 提供决策时权重 数。在 功能上它与 [[Event_modding#Mean_time_to_happen_2|mean_time_to_happen]]  非常 使用相 修正系统 ,尽管 它对 ''base''  ''factor'' 有不 同的解释
{{anchor|AI_will_do}}
{{anchor|AI_chance}}
{{SVersion|Timeless}}
MTTH 块,在游戏内命名为 {{path|common/mtth/}},是一种为某些块分配动态值的方法,无论是 [[National focus modding#Focus tree|country = { ... } in a focus tree to assign which countries can get it]],动态变化的变量值( 如在 {{path|common/mtth/}} 中),还是事 的[[Event modding#Triggering|mean-time-to-happen value for an event]]值等。由于 MTTH 块分布在整个游戏 ,了解其工作原理极为重要。然而,它最常见的应用是为数据库条目(例如国策或科研)分配基本 AI 权重。
 
大多数情况下 它会被标记为 ai_will_do ,游戏采用的方法 生成 一个 介于 0 和 ai_will_do 块的值之间 十进制 字,然后选择具有最高值的条目 。在 ai_will_do 值之后还可以应用其他修正,例如在 [[#AI strategy plans|AI strategy plans]]  中针对国策和科研应用的修正值。或{{hover|When modifying defines, never copy over the entire 00_defines.lua file, but use overrides as specified within the corresponding article. Otherwise may lead to crashes, as even 'minor' updates commonly add new defines which'll not be in the mod if the entire file is copied.|the ones that get defined within [[Defines]]}}。它会与已经获值进行 这可以包括不同的 `ai_will_do` 值,例如 国家领袖特质以及 使用 这些特质的idea或角色 关的内容。<br/>
事件选项则使用 `ai_chance`。即[[wp:Sampling_(statistics)#Probability-proportional-to-size_sampling|probability-proportional-to-size sampling]]。它采用与大小成比例的概率抽样,用一个虚拟的 d00 掷骰结果作为最终决定因素。因此,最终事件选项的概率不能不是 1/100  倍数 ,尽管 每个选项权重的总 可以与 100 很大区别。换句话说,如果一个选项的值为 1,而另一个选项的值为 999,则第一个选项被选择的概率将是 1%,而 是 0.1%


  注意:AI  个参数 的运算结果不 是完全 遵从 的, 而通常与 [[wp:Sampling_(statistics)#Probability-proportional-to-size_sampling|probability-proportional-to-size sampling]]  类似
MTTH 块的初始值为 1。从该值出发进行进一步操作。这里可以 值进行 参数 更改,分别 : <code>add</code>, <code>base</code> 和 <code>factor</code>,例:可以这样<code>factor = 0.3</code>, <code>base = 10</code>, or <code>add = 5</code>。 <code>add</code>将指定参数加到该值上,<code>factor</code>乘以该值,而 <code>base</code> 通常在任何更改之前进行,建议将其设置为 完全 不同的参数,如乘以 0 并加上这个数。
为了使操作条件适用,使用 <code>modifier = { ... }</code> block。其起到的作用于 [[conditions|trigger block]]相似,默认作用域下(因此也是 ROOT)是评估 MTTH 块 国家。根据 MTTH 块 , [[Decision modding#Targeted decisions|there may be additional scopes marked with FROM]] [[#AI peace|or FROM.FROM other than the default.]] 可能还有其他标记为 FROM 的范围或 FROM.FROM 以外的默认范围。值修改参数作为常规参数使用(值修改参数和普通参数一样,拥有相同的使用方式和特性。这种设计可以使得函数在处理输入时具有更大的灵活性。),可以几乎没有区别的放置在 <code>modifier = { ... }</code> block中的任何位置,无论是在结束时、开始时,还是在trigger触发块之间


==== base ====
[[Variables]] 也可以 修改 中使用 如果使用在 <code>modifier = { ... }</code> 触发块中定义的临时变量,为了变量能够按定义 应用 ,那么修正值 值修改参 必须放在变量定义之后。变量也可以在 <code>modifier = { ... }</code> 块之外使用 也可直接放在 MTTH 块内部。
''(Type: scoped variable, default: 1)'' 应用其他 修改 前的基础
==== factor ====
''(Type: number (with 3 decimal places), default: 1)'' 应用 于计算 数,


=== 例 ===
===  例 ===
<pre>
<pre>
ai_will_do = {
ai_will_do = {
    base = 10.5 # may also be a variable
    base = 10.5
  
 
    # If the country is Germany, set the value to 0,
    # If the country is Germany, set the value to 0,
    # causing an early end of the evaluation.
    # causing an early end of the evaluation.
    modifier = { tag = GER factor = 0 }
    modifier = { tag = GER factor = 0 }
    modifier = { is_major = yes add = 1 }
    modifier = { is_major = yes add = 1 }
    modifier = {
    modifier = {
      factor = 3
      factor = 3
第42行: 第46行:
      tag = FRA
      tag = FRA
    }
    }
   factor = 2


    factor = 2
    modifier = {
     set_temp_variable = { t = num_of_civilian_factories }
     add_to_temp_variable = { t = num_of_military_factories }
     divide_temp_variable = { t = 10 }
     round_temp_variable = t
     add = t
   }
}</pre>
}</pre>
 假 设正常计算 对于GER( 德国) 结果为0,对于FRA( 法国) 结果为74,对于 主要国家为23 ,对于次 要国家 为21。
 假 设GER和FRA是主要国家 结果是
== AI  区域 ==
德国 为0 即<math>10.5 \cdot 0 = 0</math>
{{SVersion|1.8}}
* 法国 是74 即<math>((10.5 + 1) \cdot 3 + 2.5) \cdot 2 = 74</math>
{{path|common/ai_areas}} 直接控制了陆地[[province|省份]]在有命名 AI 区域的分配 但它们只被下文定义的 AI 策略 <code>area_priority</code> 使用。 每个省份只被分配到一个 AI 区域 并且是第一个匹配 区域。没必要将每个省份都分给 AI 区域 但未被分配的不能被 <code>area_priority</code> 策略调用
主要国家为23 即<math>(10.5 + 1) \cdot 2 = 23</math>
* 其他非主 要国家为21 即<math>10.5 \cdot 2 = 21</math>
计算出该值后,该国民用和军用工厂的总数除以10并四舍五入,将计入得分。例如,如果法国在开局游戏中总共有43家民用和军用工厂,那么这将导致在之前的数值74基础上增加4,总共78
 
== AI  策略 ==
{{SVersion|1.11}}
AI strategies,AI策略,是为了让AI更愿意或更讨厌去采取某些行动。比如开战、保独、志愿军等外交行动,海陆军军事力量的战略部署权重,建造和生产的队列分配,以及{{icon|lar|1}} DLC中情报系统 运用 。<br/>
AI strategies中的 value (值)可正可负 正值会增加AI采取行动 倾向 反之则会减少


 在 省份的 debug tooltip 可以 看到 AI 域。
  一般的AI策略存储 {{path|common/ai_strategy/*.txt}} 文件中,但是AI策略也 可以 在该文件夹之外定义。比如[[Effect#add_ai_strategy|add_ai_strategy effect]] 语句可以在任何效果 中添加永久ai策略, [[#AI strategy plans|AI strategy plans]]中也包含着自己内部定义的AI策略 总之,{{path|common/ai_strategy/*.txt}} 文件中定义/描述的AI策略可以通过满足或不满足条件来自动启用或关闭<br/>


 这是一个 通用 示例:
{{path|common/ai_strategy/*.txt}} 文件中的每个条目都是一个具有 AI 策略名称的域,就像Effect作用域或Trigger条件域一样。条目名称可以任意定义(但为了防止重复,建议在词条后加一个ai_strategy之类的后缀),甚至允许重复定义: 只会出现在 AI dumps的后台中,玩家是看不到的。如果某个 AI 策略修改了 AI 选择与玩家进行外交行为的权重几率,那么当玩家将鼠标悬停在选项上时,会显示该外交行为的影响因素如下: <code>COUNTRY has strategic reasons to be ...</code>。以下 是一个 名为 BHR_invade_qatar 的 AI 策略 示例
<pre>
<pre>BHR_invade_qatar = {
<area name> = {
   allowed = {
    # Used to add continents
     original_tag = BHR
    continents = {
   }
      <continent>
   enable = {
     country_exists = QAT
    }
    abort = {
      has_war_with = QAT
    }
    }
    
    abort_when_not_enabled = yes
    # Used to add specific strategic regions
    ai_strategy = {
   strategic_regions = {
     type = invade
      <strategic region ids>
     id = QAT
      value = 200
    }
    }
}
}</pre>
</pre>


== AI 国策 ==
=== 参数说明 ===
 参 考 [[AI focuses#Modding]]
  以下是针对 {{path|common/ai_strategy/*.txt}} 条目(而非其中的 AI 策略条目)的 数说明。


== AI 和平策略 ==
<code>allowed = { ... }</code>是启用域, 该allowed域'''仅在游戏开始前'''进行检查,用于永久性地允许或禁止某个 AI  策略。通常这只用于国家检查(例 <code>tag = OMA</code>)或 DLC 检查,这些检查一旦满足就永远不 失效
{{SVersion|1.5}}
{{path|common/ai_peace}} 中的文件控制了 AI 如 何完成和平


There are five types of peace behaviour一共有 5 AI  和平 策略:
<code>enable = { ... }</code> 是可用域,必须满足该条件才能启用 AI 策略 。默认情况下,即使不满足该条件,也 不会 取消 AI 策略。可以通过使用 <code>abort_when_not_enabled = yes</code> 作为单独的参数来改变其是否可用。与 allowed 不同的是,这个条件会被实时判断。


* 内战
<code>abort = { ... }</code> 是一个条件域,满足该条件就能禁用当前 AI 策略。即使不满足该条件,也会阻止该AI策略在游戏开始时被添加。
* 民主主义
* 共产主义
* 法西斯主义
* 默认


  和平会议一共有 5 种和平行动:
<code>ai_strategy = { ... }</code> 内部是要生效的 AI 策略。AI 策略的形式是 <code>type = <AI strategy type></code>。[[#Types|The rest depends on the AI strategy]。


* 吞并国家
  此外,还有 AI 策略的反转参数。用于有 <code>id = TAG</code> 条件的 AI 策略,以针对特定TAG:该 AI 策略将为满足 <code>enable = { ... }</code> 判断条件的 国家 启用。并依靠 <code>reversed = yes</code>来生效。 <code>enable_reverse = { ... }</code>意为需要满足域内条件才能反转。反转参数无默认条件域,所以需要条件域具体到某个TAG。
* 解放国家
* 傀儡 国家
* 获取土地
* 改变政府(原版民主主义专属)


  这是一个通用示 :
  反转 AI 策略的 子如下:
<pre>
<pre>BHR_support_neutrals = {
<type>_peace = {
   allowed = {
    # Determines when this peace AI is used by the AI (ROOT is taker, FROM is giver)
     NOT = { original_tag = BHR }
    }
    enable = {
    enable = {
      <triggers>
      has_government = neutrality
   }
   enable_reverse = {
     BHR = { has_government = neutrality }
   }
   reversed = yes
   abort_when_not_enabled = yes
   ai_strategy = {
     type = support
     id = BHR
     value = 100
   }
}</pre> 如果没有 <code>reversed = yes</code>,该例这将使每个 {{icon|non-aligned|1}} 国家支持 BHR。由于该参数的存在,策略被反转:BHR 将支持每个 {{icon|non-aligned|1}} 国家。
 
=== Types === 
{{SVersion|1.11}} 
此列表可能已过时。有关每种人工智能策略的列表可以在原版游戏的 {{path|common/ai_strategy/documentation.info}} 文件中找到。<br/>
{| class="wikitable sortable mw-collapsible mw-collapsed" style="display: inline-block; padding: 5px" width="100%" 
|+ style="text-align: center;" width = "100%" |{{nowrap|与外交行动相关的AI策略:}} 
! width="10%" |名称 
! width="25%" |参数 
! width="25%" |示例 
! width="20%" |描述 
! width="20%" |备注 
|-id="alliance" 
|结盟 
|<code>value = <int></code><br/>策略的权重。<br/> 
<code>id = <country></code><br/>策略的目标。 
|<pre>ai_strategy = { 
   type = alliance 
   id = USA 
   value = -100 
}</pre> 
|AI会尝试与一个国家结盟,如有可能,将加入同一阵营。 
|-id="antagonize" 
|对抗 
|<code>value = <int></code><br/>策略的权重。<br/> 
<code>id = <country></code><br/>策略的目标。 
|<pre>ai_strategy = { 
   type = antagonize 
   id = USA 
   value = -100 
}</pre> 
|AI将会与一个国家对抗,拒绝与其进行大多数的外交行动。 
|-id="asking_foreign_garrison" 
|请求外国驻军 
|<code>value = <int></code><br/>策略的权重。<br/> 
<code>id = <country></code><br/>策略的目标。 
|<pre>ai_strategy = { 
   type = asking_foreign_garrison 
   id = USA 
   value = 100 
}</pre>
|AI将会按照权重请求外国人力支援以满足驻军需求,如果指明了特定国家。
|如果未指定<code>id</code>,则将适用于其他所有国家。
|-id="befriend"
|交好
|<code>value = <int></code><br/>此策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = befriend
   id = USA
   value = 100
}</pre>
|AI将会与某国家建立友好关系,接受大多数与该国的外交行动。
|
|-id="conquer"
|征服
|<code>value = <int></code><br/>此策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = conquer
   id = USA
   value = 100
}</pre>
|AI将会试图征服某国家,更有可能为之正当化战争目标并宣战。
|这并''不''改变AI在与其进行战争时对前线的控制方式。
|-id="consider_weak"
|视为弱国
|<code>value = <int></code><br/>此策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = consider_weak
   id = USA
   value = 100
}</pre>
|AI会将某国视为弱国,减少对其宣战前的踌躇不前,或使与该国结盟的可能性降低。
|
|-id="contain"
|遏制
|<code>value = <int></code><br/>此策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = contain
   id = USA
   value = 100
}</pre>
|AI将会遏制某个国家,保护他免受任何可能与其敌对国家的侵略。
|
|-id="declare_war"
|宣战
|<code>value = <int></code><br/>此策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = declare_war
   id = USA
   value = 100
}</pre>
|AI将会在已有正当化后的宣战借口的情况下对战争目标宣战。
|
|-id="diplo_action_acceptance"
|外交行动接受
|<code>value = <int></code><br/>此策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。<br/>
<code>target = <diplomatic action></code><br/>要修改的外交行动。
|<pre>ai_strategy = {
   type = diplo_action_acceptance
   id = USA
   value = 100
   target = join_allies
}</pre>
|若其他国家请求,AI将接受某项外交行动。
|AI被提议不会影响其原有的态度。外交行动的名称通常可以通过用于标题的本地化键找到,大部分情况下位于{{path|localisation/english/diplomacy_l_english.yml}}  文件中:<code>DIPLOMACY_SEND_VOLUNTEERS_TITLE:0 "派遣志愿军"</code>表示派遣志愿军的外交行动名称为<code>send_volunteers</code>。
|-id="diplo_action_desire"
|外交行动愿望
|<code>value = <int></code><br/>此策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。<br/>
<code>target = <diplomatic action></code><br/>要修改的外交行动。
|<pre>ai_strategy = {
  type = diplo_action_desire
   id = USA
   value = 100
   target = call_allies
}</pre>
|AI将会向指定国家请求某项外交行动。
|AI不会因为被提议而更改原有态度。外交行动的名称通常可以通过用于标题的本地化键找到,大部分情况下位于{{path|localisation/english/diplomacy_l_english.yml}}文件中:<code>DIPLOMACY_SEND_VOLUNTEERS_TITLE:0 "派遣志愿军"</code>表示派遣志愿军的外交行动名称为<code>send_volunteers</code>。
|-id="dont_join_wars_with"
|不与...一起参战
|<code>value = <int></code><br/>此策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。<br/>
<code>target_country = <country></code><br/>与之参战的国家。
|<pre>ai_strategy = {
   type = dont_join_wars_with
   id = USA
   value = 100
   target_country = BHR
}</pre>
|AI将更不可能与指定国家联合对某一特定国家参战。
|并不减少AI因“其他”国家召唤导致对目标国家宣战的可能性,即使这会导致与被指定国家一起与目标国家作战。
|-id="ignore"
|无视
|<code>value = <int></code><br/>此策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = ignore
   id = USA
   value = 100
}</pre>
|AI将更不可能接受或主动与目标国进行任何形式的外交行动。
|
|-id="ignore_claim"
|无视宣称
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = ignore_claim
   id = USA
   value = 1
}</pre>
|AI将忽视指定国家发起的外交活动。
|值为布尔型,仅设定为1。
|-id="protect"
|保护
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = protect
   id = USA
   value = 100
}</pre>
|AI将保护某一国家,对其进行保障独立或将其拉入同一阵营。
|若值为负(综合考虑所有AI策略值)将导致AI不会保障该国家。
|-id="support"
|支持
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = support
   id = USA
   value = 100
}</pre>
|AI将在战争中通过起草租借法案、派遣志愿军或远征军支持指定国家。
|
|-id="send_lend_lease_desire"
|起草租借法案
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = send_lend_lease_desire
   id = USA
   value = 100
}</pre>
|AI将向指定国家起草租借法案。
|
|-id="send_volunteers_desire"
|发送志愿军的意愿
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = send_volunteers_desire
   id = USA
   value = 100
}</pre>
|AI将向指定国家派遣志愿军。
|
|}
{| class="wikitable sortable mw-collapsible mw-collapsed" style="display: inline-block; padding: 5px" width="100%"
|+ style="text-align: center;" width = "100%" |{{nowrap|与陆军管理相关的AI策略:}}
! width="10%" |名称
! width="25%" |参数
! width="25%" |示例
! width="20%" |描述
! width="20%" |备注
|-id="invade"
|登陆侵略
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = invade
   id = USA
   value = -100
}</pre>
|AI将对指定国家进行海军入侵。
|
|-id="naval_invasion_focus"
|海军入侵重点
|<code>value = <int></code><br/>策略的权重。
|<pre>ai_strategy = {
   type = naval_invasion_focus
   value = 100
}</pre>
|AI将会发起海军入侵。
|-id="prepare_for_war"
|准备战争
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = prepare_for_war
   id = USA
   value = 100
}</pre>
|AI将准备对指定国家的战争,并将部队移动到其边界。
|
|-id="area_priority"
|区域优先级
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <AI area></code><br/>要优先考虑的[[#AI areas|AI area]]。
|<pre>ai_strategy = {
   type = area_priority
   id = europe
   value = 100
}</pre>
|推动AI在指定区域内放置更多单位。
|
|-id="dont_defend_ally_borders"
|不防守盟友边界
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = dont_defend_ally_borders
   id = POL
   value = 10
}</pre>
|使AI永远不在指定国家与与其交战的国家之间的边界上部署部队。
|数值必须是二进制的。如果总值(考虑到每个AI策略)为正,AI将永远不会在边界上放置任何部队。
|-id="force_defend_ally_borders"
|强制防守盟友边界
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>策略的目标国家。
|<pre>ai_strategy = {
   type = force_defend_ally_borders
   id = FRA
   value = 100
}</pre>
|AI将在指定国家与其他国家之间的边界上部署部队。
| 与之交战的国家。 |
| 还接受<code>id</code>中的[[#AI areas|AI areas]。 |
|-id="front_armor_score" 
|前线装甲分配权重
|<code>value = <int></code><br/>策略的权重。<br/> 
<code>id = <country></code><br/>策略的目标国家。 
|<pre>ai_strategy = {
   type = front_armor_score
   id = POL
   value = 100
}</pre> 
|AI将为进攻指定国家部署更多装甲单位。 
|-id="front_control" 
|前线控制 
|<code>state = <state></code><br/>目标州。<br/> 
<code>tag = <country></code><br/>目标国家。<br/> 
<code>strategic_region = <ID></code><br/>目标战略区域。<br/> 
<code>area = <state></code><br/>目标[[#AI areas|AI area]]。<br/> 
<code>country_trigger = { ... }</code><br/>目标国家的触发条件块。<br/> 
<code>state_trigger = { ... }</code><br/>目标省份的触发条件块。 
<code>ratio = <decimal></code><br/>指定前线必须具备的前线比例 '''以启用策略的要求'''. 默认为0。<br/> 
<code>priority = <integer></code><br/>设置此前线控制策略的优先级。如果存在矛盾的前线控制策略,将遵循优先级更高的策略。<br/> 
<code>ordertype = <front|invasion></code><br/>如果设置,将使AI策略仅适用于陆地前线或海军入侵。<br/> 
<code>execution_type = <careful|balanced|rush|rush_weak></code><br/>如果设置,这将使AI的前线计划拥有设置的执行类型。仅适用于前线。<br/> 
<code>execute_order = <bool></code><br/>如果设置,将使AI强制执行前线命令或强制不执行。<br/> 
<code>manual_attack = <bool></code><br/>如果设置为false,防止AI进行不属于前线计划的小规模交战。默认为true,仅适用于前线。 
|<pre>ai_strategy = {
   type = front_control
   state_trigger = {
     industrial_complex > 1
     is_owned_by = ENG
    }
    }
    
    ratio = 0.1
    # Random factors applied to AI decision making when determining which
    ordertype = front
    # peace option to use.
    execution_type = rush
    annex_randomness = <int>
    manual_attack = no
    liberate_randomness = <int>
}</pre>
   puppet_randomness = <int>
<pre>ai_strategy = {
   take_states_randomness = <int>
   type = front_control
   force_government_randomness = <int>
    area = suez
  
   priority = 1
   # Weighting towards the option. (ROOT is taker, FROM is giver)
   ratio = 0.2
   <peace option> = {
   ordertype = invasion
     factor = <float>
   execute_order = yes
    
}</pre>
     <triggers>
| 修改AI在指定前线给师团的命令。 
    
| 可以同时使用多个目标类型,在这种情况下,必须满足每一个。这只改变分配给已经存在的前线的命令,不会改变分配给任何特定前线的单位数量,也不会强制创建任何单位。 
     modifier = {
|-id="front_unit_request" 
       factor = <float>
|前线单位请求 
      
|<code>state = <state></code><br/>目标省份。<br/>
       <triggers>
<code>tag = <country></code><br/>目标国家。<br/>
      }
<code>strategic_region = <ID></code><br/>目标战略区域。<br/>
<code>area = <state></code><br/>目标[[#AI areas|AI area]]。<br/> 
<code>country_trigger = { ... }</code><br/>目标国家的触发条件块。<br/> 
<code>state_trigger = { ... }</code><br/>目标省份的触发条件块。 
<code>value = <int></code><br/>策略的权重。 
|<pre>ai_strategy = {
   type = front_unit_request
   tag = POL
   value = 100
}</pre>
<pre>ai_strategy = {
   type = front_unit_request
   country_trigger = {
      original_tag = SPR
     has_government = fascism
    }
    }
   value = 100
}</pre>
| 让AI在指定的陆地前线上部署更多单位。
| 可以同时使用多个目标类型,在这种情况下,必须满足每一个。
|-id="invasion_unit_request"
|入侵单位请求
|<code>state = <state></code><br/>目标州。<br/>
<code>tag = <country></code><br/>目标国家。<br/>
<code>strategic_region = <ID></code><br/>目标战略区域。<br/>
<code>area = <state></code><br/>目标[[#AI areas|AI area]]。<br/>
<code>country_trigger = { ... }</code><br/>目标国家的触发条件块。<br/>
<code>state_trigger = { ... }</code><br/>目标省份的触发条件块。 
<code>value = <int></code><br/>策略的权重。 
|<pre>ai_strategy = {
   type = invasion_unit_request
   state = 123
   value = 100
}</pre> 
<pre>ai_strategy = {
   type = invasion_unit_request
   strategic_region = 42
   value = 100
}</pre> 
| 让AI在进行对指定目标的海军入侵中部署更多单位。
| 可以同时使用多个目标类型,在这种情况下,必须满足每一个。
|-id="garrison"
|驻军
|<code>value = <int></code><br/>策略的权重。 
|<pre>ai_strategy = {
   type = garrison
   value = 10
}</pre> 
| 控制用于防守胜利点和港口的单位数量,而不是让这些单位在前线活动。
|
|-id="garrison_reinforcement_priority"
|驻军增援优先级
|<code>value = <int></code><br/>策略的权重。 
|<pre>ai_strategy = {
   type = garrison_reinforcement_priority
   value = 100
}
}
</pre>
让AI优先增强驻军单位 ,以保护 胜利点 海军基地
 
== AI 策略 ==
{{SVersion|1.8}}
AI 策略影响在特定策略考量 ('''types''') 中,其他 AI 组件中的决策形成 这也可 是定向的。例如一个国家可以在策略上对 保护 另一国家有兴趣,而不考虑当前外交与同盟关系;或者它更倾向于训练某一特定类型的师。
 
在结构层面,一个 AI 策略只有 4 个参数:<code>type</code>,<code>value</code>,<code>id</code>,以及 <code>target</code> 。只有部分类型的 AI 策略使用了 <code>id</code> /或 <code>target</code>。本来,4 个参数都是整型,但如果 <code>type</code>先被指定,那么<code>id</code>参数可以用名字来调用对应的值(参考下文表格) <code>target_country</code> 是另一种设置 <code>target</code>的方式。它接受一个国家下标或国家 Tag,并会检查其是否指向了一个可用的国家。
 
AI 会自己生成动态策略,但想添加静态策略也是可行的。静态策略的主要被{{path|common/ai_strategy}}中的 '''AI 策略条目''' 或 '''AI 策略计划''' 定义(见下文)。领导人特质({{path|common/country_leader}}中)可以修改 AI 策略,当特质携带者成为国家领导人时。独立的策略也可以用'''add_ai_strategy'''命令直接添加(例如事件·,国策中,等等)。
 
一个国家有效的 AI 策略保存在保存文件中,作为该国的<code>ai</code>属性。
 
=== 类型 ===
定义 '''ai_strategy''' 时, 类型决定了 AI 策略改变的方面。
抵抗运动 dlc 中新增的 AI 策略可以在 common/ai_strategy/default.txt 中找到。
 
{| class="wikitable sortable mw-collapsible"
|-
! scope = "col" | Type ID
! scope = "col" | Type
! scope = "col" | ID
! scope = "col" class = "unsortable" | Description
|-
| 45
| added_military_to_civilian_factory_ratio
|
|
| Alters the Military-to-Civilian factory ratio.
|-id="ignore_army_incompetence"
|-
|忽略军队无能
| 28
|<code>value = <int></code><br/>策略的权重。 
| air_factory_balance
|<pre>ai_strategy = {
   type = ignore_army_incompetence
   value = 100
}</pre> 
| 让AI在计算中忽略因师级缺乏经验而给予的修正值,从而让AI认为优势在我。
|
|
| Alters the Air factory ratio.
|-id="put_unit_buffers"
|-
| 布置单位缓冲区
| 8
|<code>ratio = <decimal></code><br/>用于缓冲单位的数量。<br/>
| alliance
<code>order_id = 2</code><br/如果两个布置单位缓冲区策略使用相同的ID,它们的比率将共享,而不是相加。<br/>
| <tag>
<code>states = { ... }</code><br/> 可缓冲单位的省份列表。<br/>
| Nudges diplomatic AI towards forming an alliance with another specified country.
<code>area = <AI area></code><br/> 用于缓冲单位的AI区域。<br/>
|-
<code>subtract_invasions_from_need = yes</code><br/> 如果为真,区域内的海军入侵将不计入比率,即不防守海军入侵。默认为假。<br/>
| 3
<code>subtract_fronts_from_need = yes</code><br/> 如果为真,区域内的陆地前线将不计入比率,即不防守前线。默认为假。
| antagonize
|<pre>ai_strategy = {
| <tag>
   type = put_unit_buffers
| Nudges diplomatic AI towards being meaner to another specified country.
   ratio = 0.2
|-
   states = {
| 33
     123
| area_priority
     124
| [[AI_modding#AI_area|<ai_area>]]
     125
| Encourages the military AI to target specified AI area.
     126
|-
   }
| 4
   subtract_fronts_from_need = yes
| befriend
}</pre>
| <tag>
| 让AI在指定区域保持一定比例的师级以进行驻军任务。
| Nudges diplomatic AI towards being nicer to another specified country.
|-
| 10 || build_airplane || || Unused.
|-
| 11
| build_army
| <unit role>
| Orders the AI to build a type of division or equipment (as in air planes or ships) that belong to the specified unit role.
|-
| 12
| build_building
| <building>
| Orders the AI to build a specific building in a specific location. Uses '''target''' to specify the state location.
|-
| 9 || build_ship || || Unused.
|-
| 56
| building_target
| <building>
| Orders the AI to build towards specified amount of <building>. This includes those already owned and acquired by trade (Civilian Factory).
|-
| 1 || colonize || || Unused.
|-
| 0
| conquer
| <tag>
| Encourages the military AI to target specified tag.
|-
| 6
| consider_weak
| <tag>
| Nudges the AI disposition towards considering the specified tag weak.
|-
| 17
| contain
| <tag>
| Nudges the diplomatic AI towards taking actions against another country, such as guaranteeing their future potential enemies.
|-
| 41
| declare_war
| <tag>
| Nudges the AI disposition towards declaring war against the specified tag.
|-
| 48
| dockyard_to_military_factory_ratio
|
|
| Alters the Dockyard-to-Military factory ratio.
|-id="spare_unit_factor"
|-
| 备用单位因子
| 49
|<code>value = <int></code><br/>策略的权重。 
| dont_defend_ally_borders
|<pre>ai_strategy = {
| <tag>
   type = spare_unit_factor
| Nudges the AI disposition towards not defending the specified ally's borders.
| AI 将使用更多单位来协防盟友。
|-
|-id="theatre_distribution_demand_increase"
| 44
| 战区分配需求增加
| dont_join_wars_with
|<code>value = <int></code><br/>策略的权重。<br/>
| <tag>
<code>id = <state></code><br/>策略的目标州。<br/>
| Nudges the AI disposition towards not defending the target country when the specified tag is involved. Uses '''target_country''' to define the target country.
|<pre>ai_strategy = {
|-
   type = theatre_distribution_demand_increase
| 29
   value = 10
| equipment_production_factor
   id = 123
| <unit type>
}</pre> 
| Alters the equipment production disposition for the specified unit type.
| 让AI在指定省份的战区中投入更多单位。
|-
| 值为1表示1个单位。
| 31
|}
| equipment_production_min_factories
{| class="wikitable sortable mw-collapsible mw-collapsed" style="display: inline-block; padding: 5px" width="100%"
| <unit type>
|+ style="text-align: center;" width = "100%" |{{nowrap|与海军管理相关的 AI 策略:}}
| Sets the minimum factory count needed to start equipment production for the specified unit type.
! width="10%" | 名称
|-
! width="25%" | 参数
| 26
! width="25%" | 示例
| equipment_stockpile_surplus_ratio
! width="20%" | 描述
! width="20%" | 备注
|-id="naval_avoid_region"
|naval_avoid_region
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <战略区域></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = naval_avoid_region
   id = 23
   value = 100
}</pre>
| AI 将在特定战略区域禁止航行。
|
|
| Sets the base equipment stockpile surplus value.
|-id="naval_convoy_raid_region"
|-
|naval_convoy_raid_region
| 30
|<code>value = <int></code><br/>策略的权重。<br/>
| equipment_variant_production_factor
<code>id = <战略区域></code><br/> 策略的目标。
| <equipment>
|<pre>ai_strategy = {
| Alters the equipment variant production disposition for the specified equipment.
   type = naval_convoy_raid_region
|-
   id = 23
| 2 || explore ||  || Unused.
   value = 100
|-
}</pre>
| 46
|AI将在指定战略区域内袭击运输船与护航舰队。
| factory_build_score_factor
|
|
| Modifies the AI build disposition for a state. Uses '''target''' to specific the target state.
|-id="naval_mission_threshold"
|-
|naval_mission_threshold
| 50
|<code>value = <int></code><br/>策略的权重。<br/>
| force_defend_ally_borders || || Unused.
<code>id = <任务></code><br/>要改变阈值的任务。
|-
  |<pre>ai_strategy = {
| 15 || garrison || <integer> (scale of 100) || Used in ai_strategies/SOV.txt, USA.txt, ENG.txt how much of the army should be kept on garrison duty
   type = naval_mission_threshold
|-
   id = MISSION_CONVOY_RAIDING
| 32
   value = -100
| ignore
}</pre>
| <tag>
| 使 AI 对执行海军任务的欲望有更高的阈值。
| Nudges the AI disposition towards ignoring the specified tag.
| 较高的数值意味着 AI 不太可能执行该任务。任务的名称可以在 {{path|localisation/english/core_l_english.yml}} 中找到,其中 <code>NAVAL_MISSION_NAME_CONVOY_RAIDING</code> 的本地化键表示该任务称为 <code>MISSION_CONVOY_RAIDING</code>。
|-
|-id="strike_force_home_base"
| 42
|strike_force_home_base
| ignore_army_incompetence
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <strategic region></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = strike_force_home_base
   id = 18
   value = 70
}</pre>
| 促使 AI 在指定的战略区域内执行打击舰队任务。
|
|
| Sets the AI disposition towards ignoring army incompetence.
|}
|-
{| class="wikitable sortable mw-collapsible mw-collapsed" style="display: inline-block; padding: 5px" width="100%"
| 47
|+ style="text-align: center;" width = "100%" |{{nowrap|与情报相关的 AI 策略:}}
| ignore_claim
! width="10%" | 名称
| <tag>
! width="25%" | 参数
| Sets AI ignorance of claims against the specified tag. Accepts 1 as a value.
! width="25%" | 示例
|-
! width="20%" | 描述
| 7 || influence || || Unused.
! width="20%" | 备注
|-
|-id="agency_ai_base_num_factories_factor"
| 18
|agency_ai_base_num_factories_factor
| invade
|<code>value = <int></code><br/>策略的权重。
| <tag>
|<pre>ai_strategy = {
| Nudges the AI disposition towards invading the specified tag.
   type = agency_ai_base_num_factories_factor
|-
   value = 70
| 21 || land_xp_spend_priority || || Unused.
}</pre>
|-
| 更改AI用于情报系统升级的基准权重。
| 37
| 值为 1 等于相对于 [[Defines]] 中规定的基准增加 1%。
| naval_avoid_region
|-id="agency_ai_per_upgrade_factories_factor"
| <strategic region>
|agency_ai_per_upgrade_factories_factor
| Alters AI avoidance of the specified strategic region navally.
|<code>value = <int></code><br/>策略的权重。
|-
|<pre>ai_strategy = {
| 35
   type = agency_ai_per_upgrade_factories_factor
| occupation_policy
   value = 70
| <tag>
}</pre>
| Determines the occupation policy towards the specified tag. Accepts values 0 to 3.
| 调整用于计算AI情报机构升级所需的工厂数量。
|-
| 值为 1 等于相对于 [[Defines]] 的基线增加 1%。
| 40
|-id="intelligence_agency_branch_desire_factor"
| pp_spend_amount
|intelligence_agency_branch_desire_factor
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <分支></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = intelligence_agency_branch_desire_factor
   id = branch_crypto
   value = 70
}</pre>
| 修改用于计算 AI 进行情报机构升级所需的工厂数量。
|分支定义在 {{path|common/intelligence_agency_upgrades/*.txt}} 文件中。
|-id="intelligence_agency_usable_factories"
|intelligence_agency_usable_factories
|<code>value = <int></code><br/>策略的权重。
|<pre>ai_strategy = {
   type = intelligence_agency_usable_factories
   value = 8
}</pre>
| 修改 AI 为情报机构使用的工厂数量。
|
|
* admiral
|-id="operation_equipment_priority"
* relation
|operation_equipment_priority
* guarantee
|<code>value = <int></code><br/>策略的权重。
* decision
|<pre>ai_strategy = {
* etc.
   type = operation_equipment_priority
| Sets the amount allowed for spending Political Power on the specified action.
   value = 80
|-
}</pre>
| 22
| 让 AI 优先为当下特勤行动提供足够的军事装备。
| pp_spend_priority
|
|
* admiral
|-id="operative_mission"
* relation
|operative_mission
* guarantee
|<code>value = <int></code><br/>策略的权重。<br/>
* decision
<code>mission = <mission></code><br/>优先执行的任务<br/>
* etc.
<code>mission_target = <country></code><br/>目标国家<br/>
| Sets the priority for spending Political Power on the specified action.
<code>state = <state></code><br/>如果有效,则优先考虑目标国内的状态。可选。<br/>
|-
<code>priority = <int></code><br/>如果定义了矛盾的 AI 策略,则选择优先级最高的策略。
| 38
|<pre>ai_strategy = {
| prepare_for_war
   type = operative_mission
| <tag>
   value = 80
|it nudges the AI to plan an attack ahead of time for a possible war with target
   mission = quiet_intel_network
|-
   state = 123
| 5
   state = 321
| protect
   mission_target = ENG
| <tag>
}</pre>
| Nudges the diplomatic AI of a country to try to defend another specified country.
|使 AI 对目标执行指定的任务。
|-
| 可以定义多个状态,导致其中一个状态被优先考虑。任务名称可以在 {{path|localisation/english/operatives_l_english.yml}} 中查看。例如,<code>OPERATIVE_MISSION_BOOST_IDEOLOGY_TITLE:0 "Boost Ideology"</code> 表示增强意识形态的任务为 boost_ideology。
| 13
|-id="operative_operation"
| research_tech
|operative_operation
| <technology>
|<code>value = <int></code><br/>策略的权重。<br/>
| Orders the AI to research a specific technology, if possible.
<code>operation = <mission></code><br/>优先执行的任务<br/>
|-
<code>operation_target = <country></code><br/>目标国家<br/>
| 20
<code>state = <state></code><br/>如果有效,则优先考虑目标国内的状态。可选。<br/>
| role_ratio
<code>region = <strategic region></code><br/>如果有效,则优先考虑目标国内的战略区域。可选。<br/>
| <unit role>
<code>priority = <int></code><br/>如果定义了矛盾的 AI 策略,则选择优先级最高的策略。
| Out of the entire army, this is the ratio (in %) of that unit role that the army should have. Roles can be defined arbitrarily in ''ai_templates''.
|<pre>ai_strategy = {
|-
   type = operative_operation
| 39
   value = 80
| save_equipment
   operation = heavy_water_raid
| <equipment>
   operation_target = ENG
| Makes the AI save equipment of the specified type to the set value.
}</pre>
|-
| 促使 AI 在目标上执行指定的操作。
| 34
|可以定义多个状态,并使其中一个状态被优先考虑。操作在 {{path|common/operations/*.txt}} 文件中定义。
| send_volunteers_desire
|}
| <tag>
{| class="wikitable sortable mw-collapsible mw-collapsed" style="display: inline-block; padding: 5px" width="100%"
| Alters AI disposition towards sending volunteers to the specified tag.
|+ style="text-align: center;" width = "100%" |{{nowrap|与生产、建设和招聘相关的 AI 策略:}}
|-
! width="10%" |名称
| 43
! width="25%" |参数
| spare_unit_factor
! width="25%" |示例
! width="20%" |描述
! width="20%" |备注
|-id="added_military_to_civilian_factory_ratio"
|added_military_to_civilian_factory_ratio
|<code>value = <int></code><br/>策略的权重。
|<pre>ai_strategy = {
   type = added_military_to_civilian_factory_ratio
   value = 50
}</pre>
| AI 希望保持的军事与民用工厂比例进行修改。
|正值意味着更多的军事工厂。
|-id="air_factory_balance"
|air_factory_balance
|<code>value = <int></code><br/>策略的权重。
|<pre>ai_strategy = {
   type = air_factory_balance
   value = 50
}</pre>
| AI 希望保持的空军生产与现有工厂的比例进行修改。
|正值意味着更多的空军。
|-id="dockyard_to_military_factory_ratio"
|dockyard_to_military_factory_ratio
|<code>value = <int></code><br/>策略的权重。
|<pre>ai_strategy = {
   type = dockyard_to_military_factory_ratio
   value = 50
}</pre>
| 对 AI 希望保持的船坞与军事工厂的比例进行修改。
|正值意味着更多的船坞。
|-id="railway_gun_divisions_ratio"
|railway_gun_divisions_ratio
|<code>value = <int></code><br/>策略的权重。
|<pre>ai_strategy = {
   type = railway_gun_divisions_ratio
   value = 5
}</pre>
| 对AI 希望保持的列车炮与师的比例进行修改。
|基本比例为 [[Defines]] 中的 RAILWAY_GUN_PRODUCTION_BASE_DIVISIONS_RATIO_PERCENT,默认值为 0。这将在 0-100 的比例上进行累加。
|-id="build_building"
|build_building
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <building></code><br/>策略的目标。<br/>
<code>target = <state></code><br/>用于建设的省份。
|<pre>ai_strategy = {
   type = build_building
   id = industrial_complex
   target = 803
   value = 1
}</pre>
|AI 将会在指定省份内建造特定建筑。
|值决定了 AI 希望在该省份内同时建造多少座建筑。
|-id="building_target"
|building_target
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <building></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = building_target
   id = industrial_complex
   value = 30
}</pre>
| 使 AI 保持对指定建筑更高的期望目标。
|
|
| Sets the spare unit factor. Used to encourage AI to send more units off to assist in allied fronts and not garrison their home territory.
|-id="factory_build_score_factor"
|-
|factory_build_score_factor
| 36
|<code>value = <int></code><br/>策略的权重。<br/>
| support
<code>target = <state></code><br/> 用于建设的省份。
| <tag>
|<pre>ai_strategy = {
| Alters AI disposition towards supporting the specified tag against partisans.
   type = factory_build_score_factor
|-
   target = 365
| 23
   value = 1
| template_prio
}</pre>
| <unit type>
| 让AI 在指定省份内建造建筑。
| Sets the template priority of the specified unit type for the AI.
|-
| 24
| template_xp_reserve
|
|
| Sets the XP reserved needed for the AI to consider template changes.
|-id="equipment_production_factor"
|-
|equipment_production_factor
| 61
|<code>value = <int></code><br/>策略的权重。<br/>
| force_build_armies
<code>id = <equipment archetype type></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = equipment_production_factor
   id = armor
   value = 30
}</pre>
|AI 将生产指定类型的装备。
|每种装备原型的类型在 {{path|common/units/equipment/*.txt}} 文件中的 <code>types = { ... }</code> 中定义。
|-id="equipment_production_min_factories"
|equipment_production_min_factories
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <equipment archetype type></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = equipment_production_min_factories
   id = artillery
   value = 3
}</pre>
|促使 AI 在指定类型的装备生产线上保持更多的工厂。
|值为 1 对应于 1 个军事工厂。每种装备原型的类型在 {{path|common/units/equipment/*.txt}} 文件中的 <code>types = { ... }</code> 中定义。
|-id="equipment_variant_production_factor"
|equipment_variant_production_factor
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <equipment archetype></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = equipment_variant_production_factor
   id = light_tank_chassis
   value = -100
}</pre>
| AI 将生产更多指定的军事装备。
|军事装备在 {{path|common/units/equipment/*.txt}} 文件中定义。
|-id="equipment_stockpile_surplus_ratio"
|equipment_stockpile_surplus_ratio
|<code>value = <int></code><br/>策略的权重。
|<pre>ai_strategy = {
   type = equipment_stockpile_surplus_ratio
   value = 30
}</pre>
|改变 AI 在库存中保存的装备比例,这将不会使AI立即使用这些装备。
|
|
| Added in 1.6.2, to force AI build armies... Mainly used for China to prepare for war against Japan
|-id="build_army"
|-
|build_army
| 19
|<code>value = <int></code><br/>策略的权重。<br/>
| unit_ratio
<code>id = <equipment archetype></code><br/>策略的目标。
| <[[Unit modding|unit type]]>
|<pre>ai_strategy = {
| Out of the entire army, this is the ratio (in %) of that unit type that the army should have.
   type = build_army
|-
   id = suppression
| 25
   value = -1000
| equipment_design_priority
}</pre>
| 修改 AI 所需的军队编制数量。
| 使用的目标是[[#AI templates|AI templates]].中的角色。
|-id="force_build_armies"
|force_build_armies
|<code>value = <int></code><br/>策略的权重。
|<pre>ai_strategy = {
   type = force_build_armies
   value = 30
}</pre>
| 这将强制使 AI 建立超过所需数量的师级单位。
|
|
|-id="production_upgrade_desire_offset"
|production_upgrade_desire_offset
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <equipment type></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = production_upgrade_desire_offset
   id = artillery_equipment_2
   value = -50
}</pre>
|将使AI升级生产线至指定的装备类型。
|设备类型在 {{path|common/units/equipment/*.txt}} 文件中定义。
|-id="role_ratio"
|<code>value = <int></code><br/>策略的权重。
|role_ratio 
|<code>value = <int></code><br/>策略的权重。<br/> 
<code>id = <role></code><br/>策略的目标。 
|<pre>ai_strategy = { 
   type = role_ratio 
   id = paratroopers 
   value = 30 
}</pre> 
|修改AI为指定职能制作的编制数量。 
|职能在[[#AI templates|AI templates] 中定义,用于单位编制,而 [[#AI equipment|AI equipment] 中定义船只和坦克变体。 
|-id="unit_ratio" 
|unit_ratio 
|<code>value = <int></code><br/>策略的权重。<br/> 
<code>id = <unit></code><br/>策略的目标。 
|<pre>ai_strategy = { 
   type = unit_ratio 
   id = cas 
   value = 30 
}</pre> 
|修改AI使用特种单位编成的编制的数量上限。 
|单位在 {{path|common/units/*.txt}} 文件中定义,包括空军和海军以及陆军。 
|-id="min_wanted_supply_trains" 
|min_wanted_supply_trains 
|<code>value = <int></code><br/>策略的权重。 
|<pre>ai_strategy = { 
   type = min_wanted_supply_trains 
   value = 300 
}</pre> 
|对AI所需的最低补给火车数量进行更改。
|
|
|-
|-id="min_wanted_supply_trucks"
| 58
|min_wanted_supply_trucks
| production_upgrade_desire_offset
|<code>value = <int></code><br/>The weight of the strategy.
| <equipment>
|<pre>ai_strategy = {
   type = min_wanted_supply_trucks
   value = 30
}</pre>
|AI 总体上所需卡车的最低数量。
|
|
|}
{| class="wikitable sortable mw-collapsible mw-collapsed" style="display: inline-block; padding: 5px" width="100%"
|+ style="text-align: center;" width = "100%" |{{nowrap|其他 AI 策略:}}
! width="10%" |名称
! width="25%" |参数
! width="25%" |例子
! width="20%" |描述
! width="20%" |备注
|-id="scorched_earth_prio"
|scorched_earth_prio
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <country></code><br/>使用焦土政策的国家所有者。<br/>
<code>states = { ... }</code><br/> 使用焦土政策的省份列表。
|<pre>ai_strategy = {
   type = scorched_earth_prio
   value = 100
   id = ENG
   states = {
     123
     124
     125
     126
   }
}</pre>
| AI 将会在指定省份使用焦土政策。
|
|
|-
|-id="land_xp_spend_priority"
|land_xp_spend_priority
| put_unit_buffers
|<code>value = <int></code><br/>策略的权重。<br/>
| See ai_strategy/default.txt
<code>id = <type></code><br/>策略的目标。
| Used to tell AI to garrison certain states
|<pre>ai_strategy = {
   type = land_xp_spend_priority
   id = division_template
   value = 30
}</pre>
|修改 AI 花费陆军经验的优先顺序。
|原版游戏使用包括 <code>division_template</code> 和 <code>upgrade_xp_cutoff</code>。
|-id="pp_spend_amount"
|pp_spend_amount
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <type></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = pp_spend_amount
   id = idea
   value = 100
}</pre>
| AI 将保留的政治点数。
|原版游戏使用包括 <code>idea</code> 和 <code>decision</code>。
|-id="pp_spend_priority"
|pp_spend_priority
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <type></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = pp_spend_priority
   id = relation
   value = 100
}</pre>
|对AI 花费政治点数的方向进行更改。
|原版游戏使用包括以下内容:
* <code>admiral</code>
* <code>guarantee</code>
* <code>relation</code>
* <code>decision</code>
|-id="research_weight_factor"
|research_weight_factor
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <type></code><br/>策略的目标。
|<pre>ai_strategy = {
   type = research_weight_factor
   id = radio_detection
   value = 2000
}</pre>
|修改 AI 对科研项目研发的权重(分数)。
|value = 50 意味着增加 50%的增速,-30 意味着 30%的减速,等等。
|}
|}


=== AI  策略条目 ===
== AI  区域 ==
  一个 策略 条目包含了 一个 个 AI 策略 并定义了应用的时机和方 在一个 国家检查 一个 条目 时候 只有 在<code>enable</code>  为真以及<code>abort</code>  为空或假时才会激活这 条目 条目将在<code>abort</code非空且 真时,或者填写了<code>abort_when_not_enabled</code> <code>enable</code>为 假时被废除
{{SVersion|1.11}}
AI区域在 {{path|common/ai_areas/*.txt}} 文件中定义。这些区域''仅''用于多种之前列出的AI 策略 ,例如 [[#area_priority|area_priority]]。 一个 省可能属于 个AI区域 也可能不属于任何区域。启用debug调试模 后,鼠标悬停 在一个 省上将提供该省所属的AI区域的信息(如果有的话)。
 
每个AI区域在文件中都是 一个 单独 块的名称即为区域的名称。 这些块中,可以添加两项内容:<br/>
<code>continents = { ... }</code>  是构成该AI区域的地理区划列表。这在 {{path|map/continent.txt}} 中定义,并在  [[Map modding#Provinces|their definitions]中分配给省份,位置在 {{path|map/definition.csv}}。在AI区域的定义中应使用大陆的全名,而不是省份定义中使用的 ID。<br/>
<code>strategic_regions = { ... }</code>  是根据其 ID 号码构成该AI区域的战略区域列表。
 
如果定义了多个ai区域,省份必须属于其中'''任何(any)'''一 个。
 
一个AI区域的代码示例如下:
<pre>my_ai_area = {
   continents = {
     europe
     africa
   }
   strategic_regions = {
     53  # Caribbean
     189 # Burma
   }
}</pre>
 
== AI 焦点 ==
{{Main|AI focuses}}
AI焦点,定义在{{path|common/ai_focuses/*.txt}}文件,用于让游戏AI根据当前设置目标的焦点选择点哪些科技和国策。
 
== AI 和平谈判 ==
{{SVersion|1.11}}
{{VisibleCollapse|1=
AI的和平谈判行 在 {{path|common/peace_conference/ai_peace/*.txt}} 文件中定义。<br/> 在定义国家使用的和谈AI时,游戏会选择第一个满足前提条件的定义。在这种情况下,文件是根据其文件名按顺序加载的,使用 [[wp:ASCII#Printable characters|ASCII character IDs]]。
 
在评估和平会议时,使用 ROOT(默认作用域)表示当前评估的赢家,使用 FROM 表示当前评估的输家。此外,存在以下 [[Variables|temporary variables]]:
* taken_states@TAG 是一个数组,包含作为和谈中一部分被国家 TAG 吞并的省份。
* taken_by@123 是占领指定省份的国家,在此情况下为 123。
* current_states@TAG 是一个数组,包含在和谈中尚未决定的、处于赢得战争的 TAG 控制下的省份。
* subject_states@TAG 是一个数组,包含在和谈中设置为转移给被 TAG 统治的国家的省份。
* subject_countries@TAG 是一个数组,包含在和谈中被设置为受 TAG 统治的国家。
* subjected_by@123 是设定在和谈中拥有指定省份的国家的宗主国,在此情况下为 123。
* subjected_by@TAG 是一个数组,包含以 TAG 作为宗主国的国家。
* liberate_states@TAG 是一个数组,包含将要转移给被 TAG 解放的国家的省份。
* liberate_countries@TAG 是一个数组,包含被 TAG解放的国家。
 
<code>enable {{=}} { ... }</code> 触发块用于确定AI是否应启用。如果为真且没有其他先前加载的和平会议AI 真,则选择该AI


  一个'''逆'''('''reversed)''' 条目工作的方法却不同 如果条目在<code>ai_strategy</code>中作为<code>id</code>引用且<code>enable_reverse</code>为空或真,条目将对源 国家 激活 然后此条目将对目标 国家 检查 如果<code>target_array</code>和/或<code>targets</code> 有设置,它们将用 可能的目标;否则,所有 国家 作为 能的 目标 <code>enable</code> <code>abort</code> 触发器将对每个目标检查 如果一个 国家 通过了检查 那么条目中所 <code>ai_strategy</code> 将对源 国家 激活 同时从目标 移除他们 <code>id</code>
  游戏中使用的和平选项如下:
* annex - 国家 FROM 被 ROOT 完全吞并 这仅评估 国家。
* liberate -  国家 FROM 被 ROOT 解放
* puppet - 国家 FROM 被 ROOT 为傀儡。
* puppet_all -  国家 FROM 被 ROOT  作为 傀儡 ''并且''  够保留其全部 省份
* puppet_state - ROOT的省份 被转移到 FROM。FROM,该省份在 平会议中成为 FROM 的一部分。
* take_states -  FROM 的省份被 ROOT 吞并
* force_government -  国家 FROM 的意识形态被 ROOT 强制更改。
在评估和谈时 若给定省份的控制者与会议开始原本拥 该地块 的国家 相同 则所有者则是原所有者。
每个和平会议选项都是文件定义 中的 一个 [[#MTTH blocks|MTTH block]]


==== 属性/参数 ====
代码示例:{{Collapse|
* allowed: ''(type: AND [[trigger]])'' 在游戏开始时只评估一次,因此条件应该是静态的 (例如 <code>tag = GER</code> 或 <code>is_historical_focus_on = yes</code>). 如果未通过条目,它将不再被检查以提高性能。
<pre>my_peace_conference = {
* enable: ''(type: AND [[trigger]])'' 激活条目 (除非 abort 非空且为真).
   enable = {
* abort: ''(type: AND [[trigger]])'' 若非空且为真,废除该条目。
     has_government = my_ideology_group
* abort_when_not_enabled: ''(type: yes/no, default: no)'' 若为真,则在<code>enable</code>为假时废除该条目。
   }
* ai_strategy: ''(type: AI strategy, may appear multiple times)'' 在条目激活后应用的 AI 策略。
   annex = {
* reversed: ''(type: yes/no, default: no)'' 使用上文所述的逆语义。
     base = 500
* enable_reverse: ''type: AND [[trigger]])'' 源国家通过逆触发器向目标国家传递的另一个触发器
     modifier = {
* target_array: ''(type: variable)'' 包含反向目标的数组变量, 例如 <code>neighbors</code>, <code>exiles</code> 或 <code>enemies</code>.
       factor = 0
* targets: ''(type: list of variables)'' 独立的反向目标列表, 例如 <code>{ GER ENG FRA }</code>
       any_allied_country = {
         any_state = {
           is_owned_by = FROM
           is_core_of = PREV
           NOT = {
             is_core_of = ROOT
             is_claimed_by = ROOT
           }
         }
       }
     }
   }
   puppet = {
     base = 100
     modifier = {
       factor = 0
       FROM = { tag = QAT }
     }
   }
   puppet_all = {
     base = 0
   }
   puppet_state = {
     base = 100
     modifier = {
       factor = 0
       FROM.FROM = { tag = QAT }
     }
     modifier = {
       factor = 0
       any_allied_country = {
         ROOT = {
           is_core_of = PREV
           NOT = {
             is_core_of = FROM.FROM
             is_claimed_by = FROM.FROM
           }
         }
       }
     }
   }
   take_states = {
     base = 100
     modifier = {
       factor = 0
       any_allied_country = {
         FROM = {
           is_core_of = PREV
           NOT = {
             is_core_of = ROOT
             is_claimed_by = ROOT
           }
         }
       }
     }
   }
}</pre>}}|2=Pre-1.12 AI和平谈判}}


== AI 策略计划 ==
== AI 策略计划 ==
{{SVersion|1.5}}
{{SVersion|1.11}}
{{path|common/ai_strategy_plans}} 中 文件定义了特定 Tag 的全面 AI 行 为,用以 模拟历史上的战 略计划。
AI策略计划用于根据情况指导AI优先考虑 事项:选择哪些顾问、研究哪些技术、应用哪些AI策略、选择哪个国策等。这些计划比一般的AI策略更 详细 主要 于在游戏的大部分时间内告知一个国家的整体计划。一个国家可 同时定义和执行多个AI策 略计划。


 这是一个通用 :
AI策略计划在{{path|common/ai_strategy_plans/*.txt}}文件中定义。在这些文件中,新策略计划作为一个新代码块进行定义,其名称必须与计划的内部ID相同。
<pre>
  在该计划中,<code>name = "AI计划名称"</code>和<code>desc = "AI计划描述"</code>确定了策略计划的名称和描述。'' 并不打算向玩家展示'',因此不需要将其本地化为不同的语言。相反的,这用于<code>aiview</code>控制台命令中,向开发者提供有关AI希望优先考虑的事项的信息。
<strategy_plan> = {
<code>allowed = { ... }</code>类似于决议或ideas, 是一个 触发块,'''仅在游戏开始时检查'''。这主要是用来决定要在什么国家和扩展包中使用这个策略计划。
   name = <name>     # Name of the plan
<code>enable = { ... }</code>游戏时间内每天检查一次,看看是否满足allowed条件。如果满足<code>enable = { ... }</code>,则该AI策略计划将分配给AI,无论之后<code>enable = { ... }</code>是否变为false。通常情况下, [[Triggers#has_game_rule]]用于与自定义游戏规则搭配,以决定AI将选择的路径。[[Triggers#is_historical_focus_on|is_historical_focus_on]] 常与默认AI设置一起使用,国家的flags可以 过设置[[On actions|on_startup]]来实现随机化,使 [[Scopes#random_list|random_list]]来设定随机值。
   desc = <desc>     # Description of the plan
<code>abort = { ... }</code>游戏时间内每天检查一次,以使AI在<code>enable = { ... }</code>条件满足时 ''停止'' 使用该AI策略计划。因此,必须是false的情况下,才能使AI策略计划有可能被选择。
    
<code>ai_national_focuses = { TAG_focus_name_1 TAG_focus_name_2 }</code> 是一个国家国策的列表,以空格分隔,按照 AI 应该采取的顺序排列。在这个 子中,AI 将首先尝试进行 TAG_focus_name_1国策。若 TAG_focus_name_1 已经完成,或无法进行,那么 AI 将尝试进行 TAG_focus_name_2国策。如果这两个国策由于已完成或者未满足前提条件而都无法进行,AI 将转向其他国策,同时考虑 <code>ai_will_do = { ... }</code> 的内容。在按设定好的国策优先进行顺序下,AI 会忽略 <code>ai_will_do = { ... }</code> 的值。
    # When this plan is enabled.
<code>focus_factors = { ... }</code> 为指定国策的 ai_will_do 值分配一个乘数。这个块中的一个条目看起来像 <code>TAG_focus_name = 3</code>。在这种情况下,这将使该国策的 ai_will_do 值乘以 3,假设 AI 策略计划的权重为 1。如果国策项在应用修正因子后具有 4 的 ai_will_do 值,那么在跟随此策略计划时,它将变为 12,并视为这样的处理。当然,因子为 0 将使该国策项在没有在 ai_national_focuses 中指定的情况下永远不会被选择。这可以作为一种更快书写或更随机的方式,使 AI 通过使它不应选择的国策具有 0 值来实现让其遵循某种政治路径。
<code>research = { ... }</code> 为指定科研槽的 ai_will_do 值分配一个乘数。这个块中的一个条目看起来像 <code>artillery = 3</code> 。在这种情况下,这将使该类别内每一项科研项的 ai_will_do 值乘以 3,假设 AI 策略计划的权重为 1。其他内置修正因子仍然适用,但这将增加它们的可能性。
其他也分配增益的块还有 <code>ideas = { ... }</code> 和 <code>traits = { ... }</code>,格式类似。ideas 块用于单个idea(如法律条例或设计商)或顾问(使用 idea_token 在条目中),而 traits 则用于给ideas/顾问的分配国家领导者特质。
<code>ai_strategy = { ... }</code> 允许在策略计划开启时应用 [[#AI strategies|AI strategy]] 。
<code>weight = { ... }</code> 是一个  [[#MTTH blocks|MTTH block]] ,为计划分配一个整体权重。这使得 AI 策略计划中的每个因子在应用之前都乘以权重。例如,权重为 1.25 将使国策因子 4 变为 5 之后再应用。这可以在某些情况下使 AI 更严格地遵循策略计划,而在其他情况下则执行的相对宽松。
 
=== 代码示例 ===
{{Collapse|
<pre>BHR_historical = {
   name = "Historical plan for BHR"
    desc = "4 focuses in a specific order"
    allowed = {
     tag = BHR
   }
    enable = {
    enable = {
      <triggers>
      OR = {
       AND = {
         is_historical_focus_on = yes
         has_game_rule = {
           rule = BHR_ai_behavior
           option = DEFAULT
         }
       }
       has_country_flag = BHR_AI_RANDOM_HISTORICAL # Randomly set in on_actions if BHR_ai_behavior is set to RANDOM. Make sure to set that up!
       has_game_rule = {
         rule = BHR_ai_behavior
         option = HISTORICAL
       }
     }
    }
    }
  
   # When this plan is aborted.
    abort = {
    abort = {
      <triggers>
      OMA = {
       OR = {
         has_government = fascism
         has_government = communism
       }
     }
    }
    }
  
   # Defines which national focuses the AI picks first during this plan.
    ai_national_focuses = {
    ai_national_focuses = {
      <focus> # AI picks top downwards
      BHR_focus_name_1
   }
     BHR_focus_name_2
  
     BHR_focus_name_3
   # Defines which technology categories the AI has weighting towards/against during this plan.
      BHR_focus_name_4
   research = {
      <category> = <weight>
    }
    }
  
   # Defines which ideas the AI has weighting towards/against during this plan.
    ideas = {
    ideas = {
      <idea> = <weight>
      BHR_advisor = 3
    }
    }
  
   # Defines which traits the AI has weighting towards/against during this plan.
    traits = {
    traits = {
      <trait> = <weight>
      fascist_demagouge = 0
    }
    }
  
   # Defines AI strategies to apply during this plan.
    ai_strategy = {
    ai_strategy = {
      <strategy attributes>
      type = invade
     id = OMA
     value = 200
   }
}
BHR_alternate = {
   name = "Alternative plan for BHR"
   desc = "AI is just set to never do BHR_focus_name_2 and be more likely to do BHR_focus_name_5, especially if after 1937"
   enable = {
     OR = {
       has_country_flag = BHR_AI_RANDOM_ALTERNATE # Randomly set in on_actions if BHR_ai_behavior is set to RANDOM. Make sure to set that up!
       has_game_rule = {
         rule = BHR_ai_behavior
         option = ALTERNATE
       }
     }
    }
    }
  
   # Defines pick weights for specific focuses during this plan.
    focus_factors = {
    focus_factors = {
      <focus> = <weight>
      BHR_focus_name_2 = 0
     BHR_focus_name_5 = 2
    }
    }
  
   # Keep small, as it is used as a factor for some things (such as research needs)
   # Recommended around 1.0. Useful for relation between plans
    weight = {
    weight = {
     factor = 1.0
      modifier = {
      modifier = {
        factor = 1.0
        factor = 2
       date > 1937.1.1
      }
      }
    }
    }
}
   research = {
</pre>
     artillery = 2
   }
}</pre>}}
 
== AI 部队编制 ==
{{SVersion|1.11}}
{{path|common/ai_templates/*.txt}} 文件用于定义AI在编制编成窗口中所追求的模板。 
 
部队编制被定义为文件夹中任何文件内的一个块,块的名称与部队编制的名称相同。<br/> 
这些参数用于部队编制本身: 
* <code>roles = { ... }</code> 是编制所包含的部队类型列表。这些可以是任何东西,用于 [[#role_ratio|role_ratio AI strategy]]。AI将会为所拥有的每个师创建一个编制。 
* <code>available_for = { ... }</code> 在此列表外的国家将不允许使用如下编制。如果未指定,则每个国家都将使用它们。 
* <code>blocked_for = { ... }</code> 在此列表内的国家将不允许使用如下编制。这个参数只有在没有 <code>available_for = { ... }</code> 块时才会被使用。 
* <code>match_to_count = 0.3</code> 是一个在 0-1 的范围内的十进制数,用于判断一个现行部队编制是否符合对应职能编制。默认值设置为 0.5。 
* <code>upgrade_prio = { ... }</code> 是一个 [[#MTTH blocks|MTTH block]] ,决定职能编制相对于其他在花费经验进行提升时的“重要性”。如果有多个职能编制具有相同的职能,则优先级最高的编制会被使用。在别的情况下,此条优先级定义会影响其与不同编制相比的概率。
 
此外,在职能编制中,每个单独的编制被定义为一个其名称是编制的块。它可以是任何名称,只要在文件中没有重名即可。<br/> 
这些参数在编制定义中使用: 
* <code>upgrade_prio = { ... }</code> 是一个  [[#MTTH blocks|MTTH block]] ,决定了该编制相对于职能编制中其他编制在花费经验进行升级时的权重。 
* <code>production_prio = { ... }</code> 是一个 [[#MTTH blocks|MTTH block]] ,决定了该编制相对于职能编制中其他编制在实际生产时的权重。 
* <code>replace_with = my_other_template</code> 指定了一个不同的编制,作为该编制的新版本。当创建该新编制成为可能时,AI将尝试转向使用此新的编制。 
* <code>can_upgrade_in_field = { ... }</code> 是一个触发块,决定AI何时尝试升级已分配此编制的部队到将要替换的编制。 
* <code>custom_icon = 10</code> 指定AI为该编制分配的图标。这个代码例将使用 <code>GFX_div_templ_10_large</code> 和 <code>GFX_div_templ_10_small</code> Sprite为编制分配图标。此项为可选,默认为编制中绝大多数旅的图标。 
* <code>reinforce_prio = 2</code> 指定AI在该编制上设置的装备增援优先级。默认优先级为 1,在游戏中显示为“常规”。0 为“后备”,2 为“精英”。如果未设置,默认为 1。 
* <code>target_width = 20</code> 指定AI针对该编制的目标作战宽度。 
* <code>width_weight = 2.5</code> 指定AI在多大程度上应该专注于目标宽度。权重越高,AI越会避免偏离目标宽度。 
* <code>column_swap_factor = 0.3</code> 指定了AI将整个列交换到不同子单位组以满足编制的可能性。 
* <code>stat_weights = { ... }</code> 是一个十进制值列表。每个值适用于不同的统计数据,并决定AI应该优先考虑什么,以及应该避免什么。与 NDefines.NAI.DIVISION_DESIGN_WEIGHTS in [[Defines]]一样,这些统计数据首先是 17 个陆军值,然后是对空攻击,接下来是共同值和特殊值。换句话说,与空军和海军有关的值除对空攻击外都被跳过,对空攻击来自于防空装备。这个值将添加到定义中的默认值:0.00 意味着与默认优先级相同。


== AI 模板 ==
* <code>allowed_types = { ... }</code> 是一个AI可以添加到编制中的营级单位列表。如果某个类型被标注省略,AI将永远不会添加它。这可以用来确保AI不会在编制中放入不同种类的单位,例如在一个移动轻坦克师中放置步兵,从而减缓其速度。
{{SVersion|1.5}}
* <code>target_template = { ... }</code> 指定AI应力求达到的编制。特别地,这些参数放在其中:
{{path|common/ai_templates}}中 文件 定义 了 AI 角色所使用 模板 以指明其使用的模板 。 
** <code>weight = 0.8</code> 是AI应该多大程度上去靠近这个编制。
** <code>match_value = 5000</code> 是一个值,决定了如果与目标编制匹配,该编制对AI的价值。
** <code>support = { ... }</code> 是目标编制内支援连的列表设定。单个定义的格式为 <code>artillery = 1</code>。先确定单位类型,再决定数量。由于只允许一个相同支援连的存在,因此数量不能是其他值,只能是 1。
** <code>regiments = { ... }</code> 是目标编制内常规营 列表。单个 定义的 格式为 <code>artillery_brigade = 4</code>。首先确定单位类型 再确定值数量


  角色是 AI 模板系统 核心。它们 可以 任意创建,允许 Modders 创建自 义角色
  相同职能 编制将被汇总为同一个职能组,然后每个 用编制将会进行适应性评分计算, 确定哪个编制在特 的时刻与军事目标应当被使用


  分配给某个角色的每个模板将组成一个组,然后以每个可用模板的适应度得来确定在特定时刻为角色使用哪个模板。
=== 代码示例 ===
{{Collapse|
<pre>armor_BHR = {


这是一个通用示例:
<pre>
<role_template_name> = {
   # Defines the actual role(s) the template covers.
   roles = {
     <roles>
   }
  
   # Restricts the template to only the specified tags. Optional.
    available_for = {
    available_for = {
      <tags>
      BHR
    }
    }
  
 
   # Blocks the template for the specified tags. Optional.
    roles = {
    blocked_for = {
      armor
      <tags>
    }
    }
  
 
   # Determines which existing templates are included in this role
   match_to_count = <float> # By default 0.5
  
   # Determines the importance of the role template, highest importance is the role used by the AI.
    upgrade_prio = {
    upgrade_prio = {
      factor = <float> # Base factor
      factor = 2.17
    
 
     # Modifies the base factor
      modifier = {
      modifier = {
        factor = <float>
        factor = 7
        
        OR = {
        <triggers>
         has_tech = basic_medium_tank
         has_tech = basic_medium_tank_chassis
       }
     }
 
     modifier = {
       factor = 2
       OR = {
         has_tech = main_battle_tank
         has_tech = main_battle_tank_chassis
        }
      }
      }
    }
    }
  
 
    # A template that belongs to this role. Multiple are allowed per role template.
    match_to_count = 0.5
    <template_name> = {
 
     # Determines the importance of the template amoungst other templates listed within the same role.
    medium_armor_BHR = {
 
 
      upgrade_prio = {
      upgrade_prio = {
        factor = <float> # Base factor
        factor = 2
        
     }
        # Modifies the base factor
 
        modifier = {
     target_width = 19.9
          factor = <float>
     width_weight = 3.0
          
     column_swap_factor = 0.1
          <triggers>
 
     stat_weights = {
       0.00 #-- default_morale
       1.10 #-- defense
       1.10 #-- breakthrough
       1.60 #-- hardness
       1.00 #-- soft_attack
       2.00 #-- hard_attack
       0.10 #-- recon
       0.01 #-- entrenchment
       0.10 #-- initiative
       0.01 #-- casualty_trickleback
       -0.05 #-- supply_consumption_factor
        -0.01 #-- supply_consumption
        0.00 #-- suppression
        0.00 #-- suppression_factor
       0.01 #-- experience_loss_factor
       0.00 #-- equipment_capture_factor
       0.00 #-- fuel_capacity
       #-- Air Values
       0.02 #-- air_attack
       #-- Common Values
       50.00 #-- max_organisation
       0.80 #-- max_strength
       1.0 #-- maximum_speed
       10.0 #-- armor_value
       0.05 #-- ap_attack
       0.10 #-- reliability
       0.10 #-- reliability_factor
       0.00 #-- weight
       0.00 #-- fuel_consumption
       0.00 #-- fuel_consumption_factor
       0.00 #-- strat_attack
       0.00 #-- carrier_size
       0.00 #-- acc_hot_gain
       0.00 #-- acc_cold_gain
       0.00 #-- build_cost_ic
     }
 
 
     target_template = {
       weight = 0.9
       match_value = 7000.0
 
       support = {
          engineer = 1
          maintenance_company = 1
          logistics_company = 1
       }
 
       regiments = {
         medium_armor = 6
         motorized = 5
        }
        }
      }
      }
      
 
      # Determines which template the AI will assign to a deployment line for a role. Highest score wins.
      allowed_types = {
      production_prio = {
       modern_armor
        factor = <float> # Base factor
       medium_armor
      
       motorized
       # Modifies the base factor
       mechanized
       infantry
 
       motorized_rocket_brigade
 
       engineer
       mot_recon
       armored_car_recon
       light_tank_recon
       signal_company
       maintenance_company
       logistics_company
 
       anti_tank
       military_police
       artillery
       anti_air
       rocket_artillery
     }
 
      replace_at_match = 0.8
     replace_with = modern_armor_BHR
     target_min_match = 0.5
   }
 
   modern_armor_BHR = {
 
      upgrade_prio = {
        factor = 2
 
        modifier = {
        modifier = {
          factor = <float>
          factor = 1
        
         <triggers>
        }
        }
      }
      }
    
     # Determines the requirement to upgrade in field
     can_upgrade_in_field = {
       <triggers>
     }
    
     custom_icon = <int>
     reinforce_prio = <int>
     target_width = <float>
     width_weight = <float>
     column_swap_factor = <float>


      # Determines the weights for each stat for this template.
      target_width = 19.9
      # Order determines which stat the value affects.
      width_weight = 3.0
     column_swap_factor = 0.1
 
      stat_weights = {
      stat_weights = {
        <float> #-- default_morale
        0.00 #-- default_morale
        <float> #-- defense
        1.10 #-- defense
        <float> #-- breakthrough
        1.10 #-- breakthrough
        <float> #-- hardness
        0.60 #-- hardness
        <float> #-- soft_attack
        2.00 #-- soft_attack
        <float> #-- hard_attack
        0.00 #-- hard_attack
        <float> #-- recon
        0.10 #-- recon
        <float> #-- entrenchment
        0.01 #-- entrenchment
        <float> #-- initiative
        0.10 #-- initiative
        <float> #-- casualty_trickleback
        0.01 #-- casualty_trickleback
        <float> #-- supply_consumption_factor
        -0.05 #-- supply_consumption_factor
        <float> #-- supply_consumption
        -0.01 #-- supply_consumption
        <float> #-- suppression
        0.00 #-- suppression
        <float> #-- suppression_factor
        0.00 #-- suppression_factor
        <float> #-- experience_loss_factor
        0.01 #-- experience_loss_factor
        <float> #-- equipment_capture_factor
        0.00 #-- equipment_capture_factor
        
        0.00 #-- fuel_capacity
        #-- Air Values
        #-- Air Values
        <float> #-- air_attack
        0.02 #-- air_attack
      
        #-- Common Values
        #-- Common Values
        <float> #-- max_organisation
        50.00 #-- max_organisation
        <float> #-- max_strength
        0.80 #-- max_strength
        <float> #-- maximum_speed
        10.0 #-- maximum_speed
        <float> #-- armor_value
        0.20 #-- armor_value
        <float> #-- ap_attack
        0.05 #-- ap_attack
        <float> #-- reliability
        0.10 #-- reliability
        <float> #-- reliability_factor
        0.10 #-- reliability_factor
        <float> #-- weight
        0.00 #-- weight
        <float> #-- build_cost_ic
        0.00 #-- fuel_consumption
       0.00 #-- fuel_consumption_factor
       0.00 #-- strat_attack
       0.00 #-- carrier_size
       0.00 #-- acc_hot_gain
       0.00 #-- acc_cold_gain
       0.00 #-- build_cost_ic
      }
      }
    
 
     #
      target_template = {
      target_template = {
        weight = <float>
        weight = 0.9
        match_value = <float>
        match_value = 9000.0
      
 
        support = {
        support = {
          <support unit> = <amount>
          engineer = 1
         recon = 1
         maintenance_company = 1
         logistics_company = 1
        }
        }
      
 
        regiments = {
        regiments = {
          <unit> = <amount>
          modern_armor = 4
         mechanized = 3
         medium_sp_artillery_brigade = 2
        }
        }
      }
      }
    
 
 
      allowed_types = {
      allowed_types = {
        <units>
        modern_armor
       mechanized
       motorized_rocket_brigade
       medium_sp_artillery_brigade
       engineer
       recon
       signal_company
       maintenance_company
       logistics_company
 
       anti_tank
       military_police
       artillery
       anti_air
       rocket_artillery
     }
   }
}</pre>}}
== AI 军事装备 ==
{{SVersion|1.11}}
{{path|common/ai_equipment/*.txt}} 文件用于定义AI在为坦克或舰船变体分配模块时应该追求的装备变体。
 
军事装备设计模板定义为文件夹内任何文件中的一个块,其名称与模板的名称相同。<br/>
这些参数用于装备模板设计本身:
* <code>category = <land|naval|air></code> 决定模板是用于坦克、舰船还是飞机。
* <code>roles = { ... }</code> 是模板所具有的职能的列表。这些可以是任何内容,用于 [[#role_ratio|role_ratio AI strategy]]。AI会尝试为他设计的每个职能装备拥有一个变体。
* <code>available_for = { ... }</code> 处于列表外的国家将不能使用该装备模板。如果未指定,则所有国家均可使用。
 
* <code>blocked_for = { ... }</code> 处于列表内的国家将不能使用该装备模板。只有在没有 <code>available_for = { ... }</code> 块时需要此项。
* <code>priority = { ... }</code> 是一个 [[#MTTH blocks|MTTH block]] ,决定该装备模板相对于其他模板在花费军事经验进行升级时的“重要性”。如果有多个装备模板具有相同的职能设计,则使用优先级最高的。除此之外这会决定与不同模板相比后选择的概率。
此外,在装备模板内,其中的独立设计被定义为一个块,名称为设计名称。在没有重复的前提下可以是任何内容。<br/>
这些参数用于设计定义中:
* <code>name = angry_speedboat</code> 对于使该装备能够作为预设使用是必不可少的。若未定义,例如德国的 <code>light_tank_artillery_2</code> 将使用 <code>GER_light_tank_artillery_equipment_2_short</code> 的本地化(如果本地化已定义)。
* <code>role_icon_index = 2</code> 用于为“舰船”分配特定的职能图标。此部分代码在陆地装备中无效。图标作为 <code>naval_equipment_role = { ... }</code> 的一部分在 {{path|gfx/army_icons/army_icons.txt}} 中定义。
* <code>priority = { ... }</code> 是一个 [[#MTTH blocks|MTTH block]] ,决定该设计相对于装备模板内其他槽位在花费军事经验进行升级时的“重要性”。
* <code>enable = { ... }</code> 是一个触发块,决定AI何时会专注于达到该设计。
* <code>allowed_types = { ... }</code> 是一个子单位的列表,AI可以将其添加到设计中。可以通过自定义去除其中的项来让AI不将其编入编制,例如可以使AI不在在机动轻型坦克师中加入步兵,防止师速度因此减慢。
* <code>target_variant = { ... }</code> 指定AI应该追求的变体。具体来说,有如下参数:
** <code>match_value = 5000</code> 用于决定如果现有编制匹配该模板,其对于AI的价值权重多少。
** <code>type = light_tank_chassis_0</code> 是部队编制设计中必须使用的特定装备类型。
** <code>modules = { ... }</code> 是装备应具备的模块列表,包括:
*** <code>main_armament_slot = tank_flamethrower</code> 决定指定模块槽的要求。该要求可以是模块类别、特定模块或是<code>empty</code>字符使其为空。如果指定为模块,可以使用greater-than(>)或less-than(<)以要求更好或更次的模块:以上根据模块中定义的年份决定。如果指定了更次,AI会倾向于最旧的模块;如果指定了更好,AI会倾向于最新的模块。如果指定为empty即空槽的情况下,使用greater-than(>)可以确保该槽位“不是”空的。
*** <code>main_armament_slot = { ... }</code> 允许为模块槽指定更多细节:
**** <code>module = tank_flamethrower</code> 决定该槽的模块要求。这与之前的 <code>main_armament_slot = tank_flamethrower</code> 完全相同:允许使用模块类别、模块或empty,并且可以以相同的方式使用等号。
**** <code>any_of = { ... }</code> 是一个模块或模块类别的列表。模块槽至少必须有列表中的一项。
**** <code>upgrade = current</code> 确保在将变体升级以匹配该设计时,必须使用与现有装备相同的模块。如果使用大于符号 (>),则还可要求AI对该槽进行部件升级。
** <code>upgrades = { ... }</code> 是设计应具备的一系列升级,具体包括:
*** <code>tank_nsb_engine_upgrade = 3</code> 决定指定升级应具有的AI优先级,设定为一个固定数字。
*** <code>tank_nsb_engine_upgrade = { ... }</code> 是一个[[#MTTH blocks|MTTH block]],通过动态绑定分配AI对指定部件升级的优先级。
* <code>requirements = { ... }</code> 是AI“必须”拥有的模块列表。它遵循与目标变体的模块块中指定的模块槽相同的格式:<code>module = tank_flamethrower</code>、<code>any_of = { ... }</code> 等。然而其并不与特定的槽相绑定。
* <code>allowed_modules = { ... }</code> 是在满足目标变体中的要求后,AI可以使用的模块列表。AI将永远不会选择列表外的模块。首先指定的模块优先级高于后指定的。
 
=== 代码示例  ===
{{Collapse|
<pre>BHR_light_tanks = {
   category = land
 
   available_for = {BHR}
 
   roles = {
     land_light_tank
   }
 
   priority = {
     factor = 1000
   }
 
   great_war_tank_default = {
     priority = {
       factor = 1
       modifier = {
         has_tech = basic_light_tank_chassis
         factor = 0 #let's not waste XP here
       }
     }
 
     target_variant = {
       match_value = 1000
       type = light_tank_chassis_0
       modules = {
         main_armament_slot = tank_heavy_machine_gun
         turret_type_slot = tank_light_one_man_tank_turret
         suspension_type_slot = tank_bogie_suspension
         armor_type_slot = tank_riveted_armor
         engine_type_slot = tank_gasoline_engine
         special_type_slot_1 = empty
         special_type_slot_2 = empty
         special_type_slot_3 = empty
         special_type_slot_4 = empty
       }
       upgrades = {
         tank_nsb_engine_upgrade = 3
         tank_nsb_armor_upgrade = {
           base = 1
           modifier = {
             add = 1
             has_war = yes
           }
         }
       }
     }
 
     allowed_modules = {
       tank_heavy_machine_gun
       tank_light_one_man_tank_turret
       tank_bogie_suspension
       tank_riveted_armor
       tank_gasoline_engine
      }
      }
    
     replace_at_match = <float>
     replace_with = <template>
     target_min_match = <float>
    }
    }
}
}</pre>}}
</pre>


{{Modding navbox}}
{{Modding navbox}}
[[Category:Modding]]
[[ 分类:Modding]]

2024年11月2日 (六) 23:27的最新版本

《钢铁雄心IV》中的AI能够操纵国家许多方面的事物。其包括变更国家的国策或科技走向,决定国家应该生产多少单位或建筑,以及国家应该生产什么样的模板,应该集中力量在哪里,决定使用哪些模板或变体等等。 以下是AI的mod文件路径:

  • /Hearts of Iron IV/common/ai_areas
  • /Hearts of Iron IV/common/ai_focuses
  • /Hearts of Iron IV/common/ai_peace
  • /Hearts of Iron IV/common/ai_strategy
  • /Hearts of Iron IV/common/ai_strategy_plans
  • /Hearts of Iron IV/common/ai_templates
  • /Hearts of Iron IV/common/ai_attitudes.txt
  • /Hearts of Iron IV/common/ai_personalities.txt

许多其他给玩家提供选择的地方应附有 AI 倾向来表达 AI 对各选项的权衡,这些地方使用ai_will_do。

MTTH 代码块

MTTH 块,在游戏内命名为 /Hearts of Iron IV/common/mtth/,是一种为某些块分配动态值的方法,无论是 country = { ... } in a focus tree to assign which countries can get it,动态变化的变量值(如在 /Hearts of Iron IV/common/mtth/ 中),还是事件的mean-time-to-happen value for an event值等。由于 MTTH 块分布在整个游戏中,了解其工作原理极为重要。然而,它最常见的应用是为数据库条目(例如国策或科研)分配基本的 AI 权重。

大多数情况下,它会被标记为 ai_will_do,游戏采用的方法是生成一个介于 0 和 ai_will_do 块的值之间的十进制数字,然后选择具有最高值的条目。在 ai_will_do 值之后还可以应用其他修正,例如在 AI strategy plans 中针对国策和科研应用的修正值。或the ones that get defined within Defines。它会与已经获值进行相乘。这可以包括不同的 `ai_will_do` 值,例如与国家领袖特质以及使用这些特质的idea或角色相关的内容。
事件选项则使用 `ai_chance`。即probability-proportional-to-size sampling。它采用与大小成比例的概率抽样,用一个虚拟的 d00 掷骰结果作为最终决定因素。因此,最终事件选项的概率不能不是 1/100 的倍数,尽管每个选项权重的总和可以与 100 有很大区别。换句话说,如果一个选项的值为 1,而另一个选项的值为 999,则第一个选项被选择的概率将是 1%,而不是 0.1%。

MTTH 块的初始值为 1。从该值出发进行进一步操作。这里可以对三个值进行参数更改,分别是: add, basefactor,例:可以这样factor = 0.3, base = 10, or add = 5add将指定参数加到该值上,factor乘以该值,而 base 通常在任何更改之前进行,建议将其设置为完全不同的参数,如乘以 0 并加上这个数。 为了使操作条件适用,使用 modifier = { ... } block。其起到的作用于 trigger block相似,默认作用域下(因此也是 ROOT)是评估 MTTH 块的国家。根据 MTTH 块, there may be additional scopes marked with FROM or FROM.FROM other than the default.可能还有其他标记为 FROM 的范围或 FROM.FROM 以外的默认范围。值修改参数作为常规参数使用(值修改参数和普通参数一样,拥有相同的使用方式和特性。这种设计可以使得函数在处理输入时具有更大的灵活性。),可以几乎没有区别的放置在 modifier = { ... } block中的任何位置,无论是在结束时、开始时,还是在trigger触发块之间。

Variables 也可以在值修改参数中使用。如果使用在 modifier = { ... } 触发块中定义的临时变量,为了变量能够按定义应用,那么修正值的值修改参数必须放在变量定义之后。变量也可以在 modifier = { ... } 块之外使用,也可直接放在 MTTH 块内部。

示例

ai_will_do = {
    base = 10.5

    # If the country is Germany, set the value to 0,
    # causing an early end of the evaluation.
    modifier = { tag = GER factor = 0 }
    modifier = { is_major = yes add = 1 }
    modifier = {
        factor = 3
        add = 2.5
        tag = FRA
    }
    factor = 2

    modifier = {
        set_temp_variable = { t = num_of_civilian_factories }
        add_to_temp_variable = { t = num_of_military_factories }
        divide_temp_variable = { t = 10 }
        round_temp_variable = t
        add = t
    }
}

假设GER和FRA是主要国家,结果是

  • 德国为0 即[math]\displaystyle{ 10.5 \cdot 0 = 0 }[/math]
  • 法国是74 即[math]\displaystyle{ ((10.5 + 1) \cdot 3 + 2.5) \cdot 2 = 74 }[/math]
  • 其他主要国家为23 即[math]\displaystyle{ (10.5 + 1) \cdot 2 = 23 }[/math]
  • 其他非主要国家为21 即[math]\displaystyle{ 10.5 \cdot 2 = 21 }[/math]

计算出该值后,该国民用和军用工厂的总数除以10并四舍五入,将计入得分。例如,如果法国在开局游戏中总共有43家民用和军用工厂,那么这将导致在之前的数值74基础上增加4,总共78。

AI 策略

AI strategies,AI策略,是为了让AI更愿意或更讨厌去采取某些行动。比如开战、保独、志愿军等外交行动,海陆军军事力量的战略部署权重,建造和生产的队列分配,以及抵抗运动抵抗运动 DLC中情报系统的运用。
AI strategies中的 value (值)可正可负,正值会增加AI采取行动的倾向,反之则会减少。

一般的AI策略存储在/Hearts of Iron IV/common/ai_strategy/*.txt 文件中,但是AI策略也可以在该文件夹之外定义。比如add_ai_strategy effect 语句可以在任何效果域中添加永久ai策略, AI strategy plans中也包含着自己内部定义的AI策略。总之,/Hearts of Iron IV/common/ai_strategy/*.txt 文件中定义/描述的AI策略可以通过满足或不满足条件来自动启用或关闭

/Hearts of Iron IV/common/ai_strategy/*.txt 文件中的每个条目都是一个具有 AI 策略名称的域,就像Effect作用域或Trigger条件域一样。条目名称可以任意定义(但为了防止重复,建议在词条后加一个ai_strategy之类的后缀),甚至允许重复定义:这只会出现在 AI dumps的后台中,玩家是看不到的。如果某个 AI 策略修改了 AI 选择与玩家进行外交行为的权重几率,那么当玩家将鼠标悬停在选项上时,会显示该外交行为的影响因素如下: COUNTRY has strategic reasons to be ...。以下是一个名为 BHR_invade_qatar 的 AI 策略示例:

BHR_invade_qatar = {
    allowed = {
        original_tag = BHR
    }
    enable = {
        country_exists = QAT
    }
    abort = {
        has_war_with = QAT
    }
    abort_when_not_enabled = yes
    ai_strategy = {
        type = invade
        id = QAT
        value = 200
    }
}

参数说明

以下是针对 /Hearts of Iron IV/common/ai_strategy/*.txt 条目(而非其中的 AI 策略条目)的参数说明。

allowed = { ... }是启用域, 该allowed域仅在游戏开始前进行检查,用于永久性地允许或禁止某个 AI 策略。通常这只用于国家检查(例如 tag = OMA)或 DLC 检查,这些检查一旦满足就永远不会失效。

enable = { ... } 是可用域,必须满足该条件才能启用 AI 策略。默认情况下,即使不满足该条件,也 不会 取消 AI 策略。可以通过使用 abort_when_not_enabled = yes 作为单独的参数来改变其是否可用。与 allowed 不同的是,这个条件会被实时判断。

abort = { ... } 是一个条件域,满足该条件就能禁用当前 AI 策略。即使不满足该条件,也会阻止该AI策略在游戏开始时被添加。

ai_strategy = { ... } 内部是要生效的 AI 策略。AI 策略的形式是 type = <AI strategy type>。[[#Types|The rest depends on the AI strategy]。

此外,还有 AI 策略的反转参数。用于有 id = TAG 条件的 AI 策略,以针对特定TAG:该 AI 策略将为满足 enable = { ... } 判断条件的国家启用。并依靠 reversed = yes来生效。 enable_reverse = { ... }意为需要满足域内条件才能反转。反转参数无默认条件域,所以需要条件域具体到某个TAG。

反转 AI 策略的例子如下:

BHR_support_neutrals = {
    allowed = {
        NOT = { original_tag = BHR }
    }
    enable = {
        has_government = neutrality
    }
    enable_reverse = {
        BHR = { has_government = neutrality }
    }
    reversed = yes
    abort_when_not_enabled = yes
    ai_strategy = {
        type = support
        id = BHR
        value = 100
    }
}

如果没有 reversed = yes,该例这将使每个 中立主义中立主义 国家支持 BHR。由于该参数的存在,策略被反转:BHR 将支持每个 中立主义中立主义 国家。

Types

此列表可能已过时。有关每种人工智能策略的列表可以在原版游戏的 /Hearts of Iron IV/common/ai_strategy/documentation.info 文件中找到。

与外交行动相关的AI策略:
名称 参数 示例 描述 备注
结盟 value = <int>
策略的权重。

id = <country>
策略的目标。

ai_strategy = {  
    type = alliance  
    id = USA  
    value = -100  
}
AI会尝试与一个国家结盟,如有可能,将加入同一阵营。
对抗 value = <int>
策略的权重。

id = <country>
策略的目标。

ai_strategy = {  
    type = antagonize  
    id = USA  
    value = -100  
}
AI将会与一个国家对抗,拒绝与其进行大多数的外交行动。
请求外国驻军 value = <int>
策略的权重。

id = <country>
策略的目标。

ai_strategy = {  
    type = asking_foreign_garrison  
    id = USA  
    value = 100  
}
AI将会按照权重请求外国人力支援以满足驻军需求,如果指明了特定国家。 如果未指定id,则将适用于其他所有国家。
交好 value = <int>
此策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = befriend
    id = USA
    value = 100
}
AI将会与某国家建立友好关系,接受大多数与该国的外交行动。
征服 value = <int>
此策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = conquer
    id = USA
    value = 100
}
AI将会试图征服某国家,更有可能为之正当化战争目标并宣战。 这并改变AI在与其进行战争时对前线的控制方式。
视为弱国 value = <int>
此策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = consider_weak
    id = USA
    value = 100
}
AI会将某国视为弱国,减少对其宣战前的踌躇不前,或使与该国结盟的可能性降低。
遏制 value = <int>
此策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = contain
    id = USA
    value = 100
}
AI将会遏制某个国家,保护他免受任何可能与其敌对国家的侵略。
宣战 value = <int>
此策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = declare_war
    id = USA
    value = 100
}
AI将会在已有正当化后的宣战借口的情况下对战争目标宣战。
外交行动接受 value = <int>
此策略的权重。

id = <country>
策略的目标国家。
target = <diplomatic action>
要修改的外交行动。

ai_strategy = {
    type = diplo_action_acceptance
    id = USA
    value = 100
    target = join_allies
}
若其他国家请求,AI将接受某项外交行动。 AI被提议不会影响其原有的态度。外交行动的名称通常可以通过用于标题的本地化键找到,大部分情况下位于/Hearts of Iron IV/localisation/english/diplomacy_l_english.yml 文件中:DIPLOMACY_SEND_VOLUNTEERS_TITLE:0 "派遣志愿军"表示派遣志愿军的外交行动名称为send_volunteers
外交行动愿望 value = <int>
此策略的权重。

id = <country>
策略的目标国家。
target = <diplomatic action>
要修改的外交行动。

ai_strategy = {
   type = diplo_action_desire
    id = USA
    value = 100
    target = call_allies
}
AI将会向指定国家请求某项外交行动。 AI不会因为被提议而更改原有态度。外交行动的名称通常可以通过用于标题的本地化键找到,大部分情况下位于/Hearts of Iron IV/localisation/english/diplomacy_l_english.yml文件中:DIPLOMACY_SEND_VOLUNTEERS_TITLE:0 "派遣志愿军"表示派遣志愿军的外交行动名称为send_volunteers
不与...一起参战 value = <int>
此策略的权重。

id = <country>
策略的目标国家。
target_country = <country>
与之参战的国家。

ai_strategy = {
    type = dont_join_wars_with
    id = USA
    value = 100
    target_country = BHR
}
AI将更不可能与指定国家联合对某一特定国家参战。 并不减少AI因“其他”国家召唤导致对目标国家宣战的可能性,即使这会导致与被指定国家一起与目标国家作战。
无视 value = <int>
此策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = ignore
    id = USA
    value = 100
}
AI将更不可能接受或主动与目标国进行任何形式的外交行动。
无视宣称 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = ignore_claim
    id = USA
    value = 1
}
AI将忽视指定国家发起的外交活动。 值为布尔型,仅设定为1。
保护 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = protect
    id = USA
    value = 100
}
AI将保护某一国家,对其进行保障独立或将其拉入同一阵营。 若值为负(综合考虑所有AI策略值)将导致AI不会保障该国家。
支持 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = support
    id = USA
    value = 100
}
AI将在战争中通过起草租借法案、派遣志愿军或远征军支持指定国家。
起草租借法案 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = send_lend_lease_desire
    id = USA
    value = 100
}
AI将向指定国家起草租借法案。
发送志愿军的意愿 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = send_volunteers_desire
    id = USA
    value = 100
}
AI将向指定国家派遣志愿军。
与陆军管理相关的AI策略:
名称 参数 示例 描述 备注
登陆侵略 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = invade
    id = USA
    value = -100
}
AI将对指定国家进行海军入侵。
准备战争 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = prepare_for_war
    id = USA
    value = 100
}
AI将准备对指定国家的战争,并将部队移动到其边界。
区域优先级 value = <int>
策略的权重。

id = <AI area>
要优先考虑的AI area

ai_strategy = {
    type = area_priority
    id = europe
    value = 100
}
推动AI在指定区域内放置更多单位。
不防守盟友边界 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = dont_defend_ally_borders
    id = POL
    value = 10
}
使AI永远不在指定国家与与其交战的国家之间的边界上部署部队。 数值必须是二进制的。如果总值(考虑到每个AI策略)为正,AI将永远不会在边界上放置任何部队。
强制防守盟友边界 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = force_defend_ally_borders
    id = FRA
    value = 100
}
AI将在指定国家与其他国家之间的边界上部署部队。 还接受id中的[[#AI areas|AI areas]。 |
前线装甲分配权重 value = <int>
策略的权重。

id = <country>
策略的目标国家。

ai_strategy = {
    type = front_armor_score
    id = POL
    value = 100
}
AI将为进攻指定国家部署更多装甲单位。
前线控制 state = <state>
目标州。

tag = <country>
目标国家。
strategic_region = <ID>
目标战略区域。
area = <state>
目标AI area
country_trigger = { ... }
目标国家的触发条件块。
state_trigger = { ... }
目标省份的触发条件块。 ratio = <decimal>
指定前线必须具备的前线比例 以启用策略的要求. 默认为0。
priority = <integer>
设置此前线控制策略的优先级。如果存在矛盾的前线控制策略,将遵循优先级更高的策略。
ordertype = <front|invasion>
如果设置,将使AI策略仅适用于陆地前线或海军入侵。
execution_type = <careful|balanced|rush|rush_weak>
如果设置,这将使AI的前线计划拥有设置的执行类型。仅适用于前线。
execute_order = <bool>
如果设置,将使AI强制执行前线命令或强制不执行。
manual_attack = <bool>
如果设置为false,防止AI进行不属于前线计划的小规模交战。默认为true,仅适用于前线。

ai_strategy = {
    type = front_control
    state_trigger = {
        industrial_complex > 1
        is_owned_by = ENG
    }
    ratio = 0.1
    ordertype = front
    execution_type = rush
    manual_attack = no
}
ai_strategy = {
    type = front_control
    area = suez
    priority = 1
    ratio = 0.2
    ordertype = invasion
    execute_order = yes
}
修改AI在指定前线给师团的命令。 可以同时使用多个目标类型,在这种情况下,必须满足每一个。这只改变分配给已经存在的前线的命令,不会改变分配给任何特定前线的单位数量,也不会强制创建任何单位。
前线单位请求 state = <state>
目标省份。

tag = <country>
目标国家。
strategic_region = <ID>
目标战略区域。
area = <state>
目标AI area
country_trigger = { ... }
目标国家的触发条件块。
state_trigger = { ... }
目标省份的触发条件块。 value = <int>
策略的权重。

ai_strategy = {
    type = front_unit_request
    tag = POL
    value = 100
}
ai_strategy = {
    type = front_unit_request
    country_trigger = {
        original_tag = SPR
        has_government = fascism
    }
    value = 100
}
让AI在指定的陆地前线上部署更多单位。 可以同时使用多个目标类型,在这种情况下,必须满足每一个。
入侵单位请求 state = <state>
目标州。

tag = <country>
目标国家。
strategic_region = <ID>
目标战略区域。
area = <state>
目标AI area
country_trigger = { ... }
目标国家的触发条件块。
state_trigger = { ... }
目标省份的触发条件块。 value = <int>
策略的权重。

ai_strategy = {
    type = invasion_unit_request
    state = 123
    value = 100
}
ai_strategy = {
    type = invasion_unit_request
    strategic_region = 42
    value = 100
}
让AI在进行对指定目标的海军入侵中部署更多单位。 可以同时使用多个目标类型,在这种情况下,必须满足每一个。
驻军 value = <int>
策略的权重。
ai_strategy = {
    type = garrison
    value = 10
}
控制用于防守胜利点和港口的单位数量,而不是让这些单位在前线活动。
驻军增援优先级 value = <int>
策略的权重。
ai_strategy = {
    type = garrison_reinforcement_priority
    value = 100
}
| 让AI优先增强驻军单位,以保护胜利点和海军基地。
|
|-id="ignore_army_incompetence"
|忽略军队无能
|<code>value = <int></code><br/>策略的权重。  
|<pre>ai_strategy = {
    type = ignore_army_incompetence
    value = 100
}
让AI在计算中忽略因师级缺乏经验而给予的修正值,从而让AI认为优势在我。
布置单位缓冲区 ratio = <decimal>
用于缓冲单位的数量。

order_id = 2
如果两个布置单位缓冲区策略使用相同的ID,它们的比率将共享,而不是相加。
states = { ... }
可缓冲单位的省份列表。
area = <AI area>
用于缓冲单位的AI区域。
subtract_invasions_from_need = yes
如果为真,区域内的海军入侵将不计入比率,即不防守海军入侵。默认为假。
subtract_fronts_from_need = yes
如果为真,区域内的陆地前线将不计入比率,即不防守前线。默认为假。

ai_strategy = {
    type = put_unit_buffers
    ratio = 0.2
    states = {
        123
        124
        125
        126
    }
    subtract_fronts_from_need = yes
}
让AI在指定区域保持一定比例的师级以进行驻军任务。
备用单位因子 value = <int>
策略的权重。
ai_strategy = {
    type = spare_unit_factor
| AI将使用更多单位来协防盟友。
|-id="theatre_distribution_demand_increase"
|战区分配需求增加
|<code>value = <int></code><br/>策略的权重。<br/>
<code>id = <state></code><br/>策略的目标州。<br/>
|<pre>ai_strategy = {
    type = theatre_distribution_demand_increase
    value = 10
    id = 123
}
让AI在指定省份的战区中投入更多单位。 值为1表示1个单位。
与海军管理相关的 AI 策略:
名称 参数 示例 描述 备注
strike_force_home_base value = <int>
策略的权重。

id = <strategic region>
策略的目标。

ai_strategy = {
    type = strike_force_home_base
    id = 18
    value = 70
}
促使 AI 在指定的战略区域内执行打击舰队任务。
与情报相关的 AI 策略:
名称 参数 示例 描述 备注
agency_ai_base_num_factories_factor value = <int>
策略的权重。
ai_strategy = {
    type = agency_ai_base_num_factories_factor
    value = 70
}
更改AI用于情报系统升级的基准权重。 值为 1 等于相对于 Defines 中规定的基准增加 1%。
agency_ai_per_upgrade_factories_factor value = <int>
策略的权重。
ai_strategy = {
    type = agency_ai_per_upgrade_factories_factor
    value = 70
}
调整用于计算AI情报机构升级所需的工厂数量。 值为 1 等于相对于 Defines 的基线增加 1%。
intelligence_agency_branch_desire_factor value = <int>
策略的权重。

id = <分支>
策略的目标。

ai_strategy = {
    type = intelligence_agency_branch_desire_factor
    id = branch_crypto
    value = 70
}
修改用于计算 AI 进行情报机构升级所需的工厂数量。 分支定义在 /Hearts of Iron IV/common/intelligence_agency_upgrades/*.txt 文件中。
intelligence_agency_usable_factories value = <int>
策略的权重。
ai_strategy = {
    type = intelligence_agency_usable_factories
    value = 8
}
修改 AI 为情报机构使用的工厂数量。
operation_equipment_priority value = <int>
策略的权重。
ai_strategy = {
    type = operation_equipment_priority
    value = 80
}
让 AI 优先为当下特勤行动提供足够的军事装备。
operative_mission value = <int>
策略的权重。

mission = <mission>
优先执行的任务
mission_target = <country>
目标国家
state = <state>
如果有效,则优先考虑目标国内的状态。可选。
priority = <int>
如果定义了矛盾的 AI 策略,则选择优先级最高的策略。

ai_strategy = {
    type = operative_mission
    value = 80
    mission = quiet_intel_network
    state = 123
    state = 321
    mission_target = ENG
}
使 AI 对目标执行指定的任务。 可以定义多个状态,导致其中一个状态被优先考虑。任务名称可以在 /Hearts of Iron IV/localisation/english/operatives_l_english.yml 中查看。例如,OPERATIVE_MISSION_BOOST_IDEOLOGY_TITLE:0 "Boost Ideology" 表示增强意识形态的任务为 boost_ideology。
operative_operation value = <int>
策略的权重。

operation = <mission>
优先执行的任务
operation_target = <country>
目标国家
state = <state>
如果有效,则优先考虑目标国内的状态。可选。
region = <strategic region>
如果有效,则优先考虑目标国内的战略区域。可选。
priority = <int>
如果定义了矛盾的 AI 策略,则选择优先级最高的策略。

ai_strategy = {
    type = operative_operation
    value = 80
    operation = heavy_water_raid
    operation_target = ENG
}
促使 AI 在目标上执行指定的操作。 可以定义多个状态,并使其中一个状态被优先考虑。操作在 /Hearts of Iron IV/common/operations/*.txt 文件中定义。
与生产、建设和招聘相关的 AI 策略:
名称 参数 示例 描述 备注
added_military_to_civilian_factory_ratio value = <int>
策略的权重。
ai_strategy = {
    type = added_military_to_civilian_factory_ratio
    value = 50
}
对 AI 希望保持的军事与民用工厂比例进行修改。 正值意味着更多的军事工厂。
air_factory_balance value = <int>
策略的权重。
ai_strategy = {
    type = air_factory_balance
    value = 50
}
对 AI 希望保持的空军生产与现有工厂的比例进行修改。 正值意味着更多的空军。
dockyard_to_military_factory_ratio value = <int>
策略的权重。
ai_strategy = {
    type = dockyard_to_military_factory_ratio
    value = 50
}
对 AI 希望保持的船坞与军事工厂的比例进行修改。 正值意味着更多的船坞。
railway_gun_divisions_ratio value = <int>
策略的权重。
ai_strategy = {
    type = railway_gun_divisions_ratio
    value = 5
}
对AI 希望保持的列车炮与师的比例进行修改。 基本比例为 Defines 中的 RAILWAY_GUN_PRODUCTION_BASE_DIVISIONS_RATIO_PERCENT,默认值为 0。这将在 0-100 的比例上进行累加。
build_building value = <int>
策略的权重。

id = <building>
策略的目标。
target = <state>
用于建设的省份。

ai_strategy = {
    type = build_building
    id = industrial_complex
    target = 803
    value = 1
}
AI将会在指定省份内建造特定建筑。 值决定了 AI 希望在该省份内同时建造多少座建筑。
building_target value = <int>
策略的权重。

id = <building>
策略的目标。

ai_strategy = {
    type = building_target
    id = industrial_complex
    value = 30
}
使 AI 保持对指定建筑更高的期望目标。
factory_build_score_factor value = <int>
策略的权重。

target = <state>
用于建设的省份。

ai_strategy = {
    type = factory_build_score_factor
    target = 365
    value = 1
}
让AI 在指定省份内建造建筑。
equipment_production_factor value = <int>
策略的权重。

id = <equipment archetype type>
策略的目标。

ai_strategy = {
    type = equipment_production_factor
    id = armor
    value = 30
}
AI 将生产指定类型的装备。 每种装备原型的类型在 /Hearts of Iron IV/common/units/equipment/*.txt 文件中的 types = { ... } 中定义。
equipment_production_min_factories value = <int>
策略的权重。

id = <equipment archetype type>
策略的目标。

ai_strategy = {
    type = equipment_production_min_factories
    id = artillery
    value = 3
}
促使 AI 在指定类型的装备生产线上保持更多的工厂。 值为 1 对应于 1 个军事工厂。每种装备原型的类型在 /Hearts of Iron IV/common/units/equipment/*.txt 文件中的 types = { ... } 中定义。
equipment_variant_production_factor value = <int>
策略的权重。

id = <equipment archetype>
策略的目标。

ai_strategy = {
    type = equipment_variant_production_factor
    id = light_tank_chassis
    value = -100
}
AI 将生产更多指定的军事装备。 军事装备在 /Hearts of Iron IV/common/units/equipment/*.txt 文件中定义。
equipment_stockpile_surplus_ratio value = <int>
策略的权重。
ai_strategy = {
    type = equipment_stockpile_surplus_ratio
    value = 30
}
改变 AI 在库存中保存的装备比例,这将不会使AI立即使用这些装备。
build_army value = <int>
策略的权重。

id = <equipment archetype>
策略的目标。

ai_strategy = {
    type = build_army
    id = suppression
    value = -1000
}
修改 AI 所需的军队编制数量。 使用的目标是AI templates.中的角色。
force_build_armies value = <int>
策略的权重。
ai_strategy = {
    type = force_build_armies
    value = 30
}
这将强制使 AI 建立超过所需数量的师级单位。
production_upgrade_desire_offset value = <int>
策略的权重。

id = <equipment type>
策略的目标。

ai_strategy = {
    type = production_upgrade_desire_offset
    id = artillery_equipment_2
    value = -50
}
将使AI升级生产线至指定的装备类型。 设备类型在 /Hearts of Iron IV/common/units/equipment/*.txt 文件中定义。
value = <int>
策略的权重。
role_ratio value = <int>
策略的权重。

id = <role>
策略的目标。

ai_strategy = {  
    type = role_ratio  
    id = paratroopers  
    value = 30  
}
修改AI为指定职能制作的编制数量。 职能在[[#AI templates|AI templates] 中定义,用于单位编制,而 [[#AI equipment|AI equipment] 中定义船只和坦克变体。
unit_ratio value = <int>
策略的权重。

id = <unit>
策略的目标。

ai_strategy = {  
    type = unit_ratio  
    id = cas  
    value = 30  
}
修改AI使用特种单位编成的编制的数量上限。 单位在 /Hearts of Iron IV/common/units/*.txt 文件中定义,包括空军和海军以及陆军。
min_wanted_supply_trains value = <int>
策略的权重。
ai_strategy = {  
    type = min_wanted_supply_trains  
    value = 300  
}
对AI所需的最低补给火车数量进行更改。
min_wanted_supply_trucks value = <int>
The weight of the strategy.
ai_strategy = {
    type = min_wanted_supply_trucks
    value = 30
}
AI 总体上所需卡车的最低数量。
其他 AI 策略:
名称 参数 例子 描述 备注
scorched_earth_prio value = <int>
策略的权重。

id = <country>
使用焦土政策的国家所有者。
states = { ... }
使用焦土政策的省份列表。

ai_strategy = {
    type = scorched_earth_prio
    value = 100
    id = ENG
    states = {
        123
        124
        125
        126
    }
}
AI 将会在指定省份使用焦土政策。
land_xp_spend_priority value = <int>
策略的权重。

id = <type>
策略的目标。

ai_strategy = {
    type = land_xp_spend_priority
    id = division_template
    value = 30
}
修改 AI 花费陆军经验的优先顺序。 原版游戏使用包括 division_templateupgrade_xp_cutoff
pp_spend_amount value = <int>
策略的权重。

id = <type>
策略的目标。

ai_strategy = {
    type = pp_spend_amount
    id = idea
    value = 100
}
AI 将保留的政治点数。 原版游戏使用包括 ideadecision
pp_spend_priority value = <int>
策略的权重。

id = <type>
策略的目标。

ai_strategy = {
    type = pp_spend_priority
    id = relation
    value = 100
}
对AI 花费政治点数的方向进行更改。 原版游戏使用包括以下内容:
  • admiral
  • guarantee
  • relation
  • decision
research_weight_factor value = <int>
策略的权重。

id = <type>
策略的目标。

ai_strategy = {
    type = research_weight_factor
    id = radio_detection
    value = 2000
}
修改 AI 对科研项目研发的权重(分数)。 value = 50 意味着增加 50%的增速,-30 意味着 30%的减速,等等。

AI 区域

AI区域在 /Hearts of Iron IV/common/ai_areas/*.txt 文件中定义。这些区域用于多种之前列出的AI策略,例如 area_priority。一个省可能属于多个AI区域,也可能不属于任何区域。启用debug调试模式后,鼠标悬停在一个省上将提供该省所属的AI区域的信息(如果有的话)。

每个AI区域在文件中都是一个单独的块,块的名称即为区域的名称。在这些块中,可以添加两项内容:
continents = { ... } 是构成该AI区域的地理区划列表。这在 /Hearts of Iron IV/map/continent.txt 中定义,并在 [[Map modding#Provinces|their definitions]中分配给省份,位置在 /Hearts of Iron IV/map/definition.csv。在AI区域的定义中应使用大陆的全名,而不是省份定义中使用的 ID。
strategic_regions = { ... } 是根据其 ID 号码构成该AI区域的战略区域列表。

如果定义了多个ai区域,省份必须属于其中任何(any)一个。

一个AI区域的代码示例如下:

my_ai_area = {
    continents = {
        europe
        africa
    }
    strategic_regions = {
        53  # Caribbean
        189 # Burma
    }
}

AI 焦点

主条目:AI focuses

AI焦点,定义在/Hearts of Iron IV/common/ai_focuses/*.txt文件,用于让游戏AI根据当前设置目标的焦点选择点哪些科技和国策。

AI 和平谈判

Pre-1.12 AI和平谈判
AI的和平谈判行为在 /Hearts of Iron IV/common/peace_conference/ai_peace/*.txt 文件中定义。
在定义国家使用的和谈AI时,游戏会选择第一个满足前提条件的定义。在这种情况下,文件是根据其文件名按顺序加载的,使用 ASCII character IDs

在评估和平会议时,使用 ROOT(默认作用域)表示当前评估的赢家,使用 FROM 表示当前评估的输家。此外,存在以下 temporary variables

  • taken_states@TAG 是一个数组,包含作为和谈中一部分被国家 TAG 吞并的省份。
  • taken_by@123 是占领指定省份的国家,在此情况下为 123。
  • current_states@TAG 是一个数组,包含在和谈中尚未决定的、处于赢得战争的 TAG 控制下的省份。
  • subject_states@TAG 是一个数组,包含在和谈中设置为转移给被 TAG 统治的国家的省份。
  • subject_countries@TAG 是一个数组,包含在和谈中被设置为受 TAG 统治的国家。
  • subjected_by@123 是设定在和谈中拥有指定省份的国家的宗主国,在此情况下为 123。
  • subjected_by@TAG 是一个数组,包含以 TAG 作为宗主国的国家。
  • liberate_states@TAG 是一个数组,包含将要转移给被 TAG 解放的国家的省份。
  • liberate_countries@TAG 是一个数组,包含被 TAG解放的国家。

enable = { ... } 触发块用于确定AI是否应启用。如果为真且没有其他先前加载的和平会议AI为真,则选择该AI。

游戏中使用的和平选项如下:

  • annex - 国家 FROM 被 ROOT 完全吞并。这仅评估国家。
  • liberate - 国家 FROM 被 ROOT 解放。
  • puppet - 国家 FROM 被 ROOT 作为傀儡。
  • puppet_all - 国家 FROM 被 ROOT 作为傀儡 并且 能够保留其全部的省份。
  • puppet_state - ROOT的省份 被转移到 FROM。FROM,该省份在和平会议中成为 FROM 的一部分。
  • take_states - FROM 的省份被 ROOT 吞并。
  • force_government - 国家 FROM 的意识形态被 ROOT 强制更改。

在评估和谈时,若给定省份的控制者与会议开始原本拥有该地块的国家相同,则所有者则是原所有者。 每个和平会议选项都是文件定义中的一个 MTTH block

代码示例:
my_peace_conference = {
    enable = {
        has_government = my_ideology_group
    }
    annex = {
        base = 500
        modifier = {
            factor = 0
            any_allied_country = {
                any_state = {
                    is_owned_by = FROM
                    is_core_of = PREV
                    NOT = {
                        is_core_of = ROOT
                        is_claimed_by = ROOT
                    }
                }
            }
        }
    }
    puppet = {
        base = 100
        modifier = {
            factor = 0
            FROM = { tag = QAT }
        }
    }
    puppet_all = {
        base = 0
    }
    puppet_state = {
        base = 100
        modifier = {
            factor = 0
            FROM.FROM = { tag = QAT }
        }
        modifier = {
            factor = 0
            any_allied_country = {
                ROOT = {
                    is_core_of = PREV
                    NOT = {
                        is_core_of = FROM.FROM
                        is_claimed_by = FROM.FROM
                    }
                }
            }
        }
    }
    take_states = {
        base = 100
        modifier = {
            factor = 0
            any_allied_country = {
                FROM = {
                    is_core_of = PREV
                    NOT = {
                        is_core_of = ROOT
                        is_claimed_by = ROOT
                    }
                }
            }
        }
    }
}


AI 策略计划

AI策略计划用于根据情况指导AI优先考虑的事项:选择哪些顾问、研究哪些技术、应用哪些AI策略、选择哪个国策等。这些计划比一般的AI策略更为详细,主要用于在游戏的大部分时间内告知一个国家的整体计划。一个国家可以同时定义和执行多个AI策略计划。

AI策略计划在/Hearts of Iron IV/common/ai_strategy_plans/*.txt文件中定义。在这些文件中,新策略计划作为一个新代码块进行定义,其名称必须与计划的内部ID相同。 在该计划中,name = "AI计划名称"desc = "AI计划描述"确定了策略计划的名称和描述。这并不打算向玩家展示,因此不需要将其本地化为不同的语言。相反的,这用于aiview控制台命令中,向开发者提供有关AI希望优先考虑的事项的信息。 allowed = { ... }类似于决议或ideas,是一个触发块,仅在游戏开始时检查。这主要是用来决定要在什么国家和扩展包中使用这个策略计划。 enable = { ... }游戏时间内每天检查一次,看看是否满足allowed条件。如果满足enable = { ... },则该AI策略计划将分配给AI,无论之后enable = { ... }是否变为false。通常情况下, Triggers#has_game_rule用于与自定义游戏规则搭配,以决定AI将选择的路径。is_historical_focus_on 常与默认AI设置一起使用,国家的flags可以通过设置on_startup来实现随机化,使用random_list来设定随机值。 abort = { ... }游戏时间内每天检查一次,以使AI在enable = { ... }条件满足时 停止 使用该AI策略计划。因此,必须是false的情况下,才能使AI策略计划有可能被选择。 ai_national_focuses = { TAG_focus_name_1 TAG_focus_name_2 } 是一个国家国策的列表,以空格分隔,按照 AI 应该采取的顺序排列。在这个例子中,AI 将首先尝试进行 TAG_focus_name_1国策。若 TAG_focus_name_1 已经完成,或无法进行,那么 AI 将尝试进行 TAG_focus_name_2国策。如果这两个国策由于已完成或者未满足前提条件而都无法进行,AI 将转向其他国策,同时考虑 ai_will_do = { ... } 的内容。在按设定好的国策优先进行顺序下,AI 会忽略 ai_will_do = { ... } 的值。 focus_factors = { ... } 为指定国策的 ai_will_do 值分配一个乘数。这个块中的一个条目看起来像 TAG_focus_name = 3。在这种情况下,这将使该国策的 ai_will_do 值乘以 3,假设 AI 策略计划的权重为 1。如果国策项在应用修正因子后具有 4 的 ai_will_do 值,那么在跟随此策略计划时,它将变为 12,并视为这样的处理。当然,因子为 0 将使该国策项在没有在 ai_national_focuses 中指定的情况下永远不会被选择。这可以作为一种更快书写或更随机的方式,使 AI 通过使它不应选择的国策具有 0 值来实现让其遵循某种政治路径。 research = { ... } 为指定科研槽的 ai_will_do 值分配一个乘数。这个块中的一个条目看起来像 artillery = 3。在这种情况下,这将使该类别内每一项科研项的 ai_will_do 值乘以 3,假设 AI 策略计划的权重为 1。其他内置修正因子仍然适用,但这将增加它们的可能性。 其他也分配增益的块还有 ideas = { ... }traits = { ... },格式类似。ideas 块用于单个idea(如法律条例或设计商)或顾问(使用 idea_token 在条目中),而 traits 则用于给ideas/顾问的分配国家领导者特质。 ai_strategy = { ... } 允许在策略计划开启时应用 AI strategyweight = { ... } 是一个 MTTH block ,为计划分配一个整体权重。这使得 AI 策略计划中的每个因子在应用之前都乘以权重。例如,权重为 1.25 将使国策因子 4 变为 5 之后再应用。这可以在某些情况下使 AI 更严格地遵循策略计划,而在其他情况下则执行的相对宽松。

代码示例

BHR_historical = {
    name = "Historical plan for BHR"
    desc = "4 focuses in a specific order"
    allowed = {
        tag = BHR
    }
    enable = {
        OR = {
            AND = {
                is_historical_focus_on = yes
                has_game_rule = {
                    rule = BHR_ai_behavior
                    option = DEFAULT
                }
            }
            has_country_flag = BHR_AI_RANDOM_HISTORICAL # Randomly set in on_actions if BHR_ai_behavior is set to RANDOM. Make sure to set that up!
            has_game_rule = {
                rule = BHR_ai_behavior
                option = HISTORICAL
            }
        }
    }
    abort = {
        OMA = {
            OR = {
                has_government = fascism
                has_government = communism
            }
        }
    }
    ai_national_focuses = {
        BHR_focus_name_1
        BHR_focus_name_2
        BHR_focus_name_3
        BHR_focus_name_4
    }
    ideas = {
        BHR_advisor = 3
    }
    traits = {
        fascist_demagouge = 0
    }
    ai_strategy = {
        type = invade
        id = OMA
        value = 200
    }
}
BHR_alternate = {
    name = "Alternative plan for BHR"
    desc = "AI is just set to never do BHR_focus_name_2 and be more likely to do BHR_focus_name_5, especially if after 1937"
    enable = {
        OR = {
            has_country_flag = BHR_AI_RANDOM_ALTERNATE # Randomly set in on_actions if BHR_ai_behavior is set to RANDOM. Make sure to set that up!
            has_game_rule = {
                rule = BHR_ai_behavior
                option = ALTERNATE
            }
        }
    }
    focus_factors = {
        BHR_focus_name_2 = 0
        BHR_focus_name_5 = 2
    }
    weight = {
        modifier = {
            factor = 2
            date > 1937.1.1
        }
    }
    research = {
        artillery = 2
    }
}

AI 部队编制

/Hearts of Iron IV/common/ai_templates/*.txt 文件用于定义AI在编制编成窗口中所追求的模板。

部队编制被定义为文件夹中任何文件内的一个块,块的名称与部队编制的名称相同。
这些参数用于部队编制本身:

  • roles = { ... } 是编制所包含的部队类型列表。这些可以是任何东西,用于 role_ratio AI strategy。AI将会为所拥有的每个师创建一个编制。
  • available_for = { ... } 在此列表外的国家将不允许使用如下编制。如果未指定,则每个国家都将使用它们。
  • blocked_for = { ... } 在此列表内的国家将不允许使用如下编制。这个参数只有在没有 available_for = { ... } 块时才会被使用。
  • match_to_count = 0.3 是一个在 0-1 的范围内的十进制数,用于判断一个现行部队编制是否符合对应职能编制。默认值设置为 0.5。
  • upgrade_prio = { ... } 是一个 MTTH block ,决定职能编制相对于其他在花费经验进行提升时的“重要性”。如果有多个职能编制具有相同的职能,则优先级最高的编制会被使用。在别的情况下,此条优先级定义会影响其与不同编制相比的概率。

此外,在职能编制中,每个单独的编制被定义为一个其名称是编制的块。它可以是任何名称,只要在文件中没有重名即可。
这些参数在编制定义中使用:

  • upgrade_prio = { ... } 是一个 MTTH block ,决定了该编制相对于职能编制中其他编制在花费经验进行升级时的权重。
  • production_prio = { ... } 是一个 MTTH block ,决定了该编制相对于职能编制中其他编制在实际生产时的权重。
  • replace_with = my_other_template 指定了一个不同的编制,作为该编制的新版本。当创建该新编制成为可能时,AI将尝试转向使用此新的编制。
  • can_upgrade_in_field = { ... } 是一个触发块,决定AI何时尝试升级已分配此编制的部队到将要替换的编制。
  • custom_icon = 10 指定AI为该编制分配的图标。这个代码例将使用 GFX_div_templ_10_largeGFX_div_templ_10_small Sprite为编制分配图标。此项为可选,默认为编制中绝大多数旅的图标。
  • reinforce_prio = 2 指定AI在该编制上设置的装备增援优先级。默认优先级为 1,在游戏中显示为“常规”。0 为“后备”,2 为“精英”。如果未设置,默认为 1。
  • target_width = 20 指定AI针对该编制的目标作战宽度。
  • width_weight = 2.5 指定AI在多大程度上应该专注于目标宽度。权重越高,AI越会避免偏离目标宽度。
  • column_swap_factor = 0.3 指定了AI将整个列交换到不同子单位组以满足编制的可能性。
  • stat_weights = { ... } 是一个十进制值列表。每个值适用于不同的统计数据,并决定AI应该优先考虑什么,以及应该避免什么。与 NDefines.NAI.DIVISION_DESIGN_WEIGHTS in Defines一样,这些统计数据首先是 17 个陆军值,然后是对空攻击,接下来是共同值和特殊值。换句话说,与空军和海军有关的值除对空攻击外都被跳过,对空攻击来自于防空装备。这个值将添加到定义中的默认值:0.00 意味着与默认优先级相同。
  • allowed_types = { ... } 是一个AI可以添加到编制中的营级单位列表。如果某个类型被标注省略,AI将永远不会添加它。这可以用来确保AI不会在编制中放入不同种类的单位,例如在一个移动轻坦克师中放置步兵,从而减缓其速度。
  • target_template = { ... } 指定AI应力求达到的编制。特别地,这些参数放在其中:
    • weight = 0.8 是AI应该多大程度上去靠近这个编制。
    • match_value = 5000 是一个值,决定了如果与目标编制匹配,该编制对AI的价值。
    • support = { ... } 是目标编制内支援连的列表设定。单个定义的格式为 artillery = 1。先确定单位类型,再决定数量。由于只允许一个相同支援连的存在,因此数量不能是其他值,只能是 1。
    • regiments = { ... } 是目标编制内常规营的列表。单个定义的格式为 artillery_brigade = 4。首先确定单位类型,再确定值数量。

相同职能的编制将被汇总为同一个职能组,然后每个可用编制将会进行适应性评分计算,以确定哪个编制在特定的时刻与军事目标应当被使用。

代码示例

armor_BHR = {

    available_for = {
        BHR
    }

    roles = {
        armor
    }

    upgrade_prio = {
        factor = 2.17

        modifier = {
            factor = 7
            OR = {
                has_tech = basic_medium_tank
                has_tech = basic_medium_tank_chassis
            }
        }

        modifier = {
            factor = 2
            OR = {
                has_tech = main_battle_tank
                has_tech = main_battle_tank_chassis
            }
        }
    }

    match_to_count = 0.5

    medium_armor_BHR = {


        upgrade_prio = {
            factor = 2
        }

        target_width = 19.9
        width_weight = 3.0
        column_swap_factor = 0.1

        stat_weights = {
            0.00 #-- default_morale
            1.10 #-- defense
            1.10 #-- breakthrough
            1.60 #-- hardness
            1.00 #-- soft_attack
            2.00 #-- hard_attack
            0.10 #-- recon
            0.01 #-- entrenchment
            0.10 #-- initiative
            0.01 #-- casualty_trickleback
            -0.05 #-- supply_consumption_factor
            -0.01 #-- supply_consumption
            0.00 #-- suppression
            0.00 #-- suppression_factor
            0.01 #-- experience_loss_factor
            0.00 #-- equipment_capture_factor
            0.00 #-- fuel_capacity
            #-- Air Values
            0.02 #-- air_attack
            #-- Common Values
            50.00 #-- max_organisation
            0.80 #-- max_strength
            1.0 #-- maximum_speed
            10.0 #-- armor_value
            0.05 #-- ap_attack
            0.10 #-- reliability
            0.10 #-- reliability_factor
            0.00 #-- weight
            0.00 #-- fuel_consumption
            0.00 #-- fuel_consumption_factor
            0.00 #-- strat_attack
            0.00 #-- carrier_size
            0.00 #-- acc_hot_gain
            0.00 #-- acc_cold_gain
            0.00 #-- build_cost_ic
        }


        target_template = {
            weight = 0.9
            match_value = 7000.0

            support = {
                engineer = 1
                maintenance_company = 1
                logistics_company = 1
            }

            regiments = {
                medium_armor = 6
                motorized = 5
            }
        }

        allowed_types = {
            modern_armor
            medium_armor
            motorized
            mechanized
            infantry

            motorized_rocket_brigade

            engineer
            mot_recon
            armored_car_recon
            light_tank_recon
            signal_company
            maintenance_company
            logistics_company

            anti_tank
            military_police
            artillery
            anti_air
            rocket_artillery
        }

        replace_at_match = 0.8
        replace_with = modern_armor_BHR
        target_min_match = 0.5
    }

    modern_armor_BHR = {

        upgrade_prio = {
            factor = 2

            modifier = {
                factor = 1
            }
        }

        target_width = 19.9
        width_weight = 3.0
        column_swap_factor = 0.1

        stat_weights = {
            0.00 #-- default_morale
            1.10 #-- defense
            1.10 #-- breakthrough
            0.60 #-- hardness
            2.00 #-- soft_attack
            0.00 #-- hard_attack
            0.10 #-- recon
            0.01 #-- entrenchment
            0.10 #-- initiative
            0.01 #-- casualty_trickleback
            -0.05 #-- supply_consumption_factor
            -0.01 #-- supply_consumption
            0.00 #-- suppression
            0.00 #-- suppression_factor
            0.01 #-- experience_loss_factor
            0.00 #-- equipment_capture_factor
            0.00 #-- fuel_capacity
            #-- Air Values
            0.02 #-- air_attack
            #-- Common Values
            50.00 #-- max_organisation
            0.80 #-- max_strength
            10.0 #-- maximum_speed
            0.20 #-- armor_value
            0.05 #-- ap_attack
            0.10 #-- reliability
            0.10 #-- reliability_factor
            0.00 #-- weight
            0.00 #-- fuel_consumption
            0.00 #-- fuel_consumption_factor
            0.00 #-- strat_attack
            0.00 #-- carrier_size
            0.00 #-- acc_hot_gain
            0.00 #-- acc_cold_gain
            0.00 #-- build_cost_ic
        }

        target_template = {
            weight = 0.9
            match_value = 9000.0

            support = {
                engineer = 1
                recon = 1
                maintenance_company = 1
                logistics_company = 1
            }

            regiments = {
                modern_armor = 4
                mechanized = 3
                medium_sp_artillery_brigade = 2
            }
        }


        allowed_types = {
            modern_armor
            mechanized
            motorized_rocket_brigade
            medium_sp_artillery_brigade
            engineer
            recon
            signal_company
            maintenance_company
            logistics_company

            anti_tank
            military_police
            artillery
            anti_air
            rocket_artillery
        }
    }
}

AI 军事装备

/Hearts of Iron IV/common/ai_equipment/*.txt 文件用于定义AI在为坦克或舰船变体分配模块时应该追求的装备变体。

军事装备设计模板定义为文件夹内任何文件中的一个块,其名称与模板的名称相同。
这些参数用于装备模板设计本身:

  • category = <land|naval|air> 决定模板是用于坦克、舰船还是飞机。
  • roles = { ... } 是模板所具有的职能的列表。这些可以是任何内容,用于 role_ratio AI strategy。AI会尝试为他设计的每个职能装备拥有一个变体。
  • available_for = { ... } 处于列表外的国家将不能使用该装备模板。如果未指定,则所有国家均可使用。
  • blocked_for = { ... } 处于列表内的国家将不能使用该装备模板。只有在没有 available_for = { ... } 块时需要此项。
  • priority = { ... } 是一个 MTTH block ,决定该装备模板相对于其他模板在花费军事经验进行升级时的“重要性”。如果有多个装备模板具有相同的职能设计,则使用优先级最高的。除此之外这会决定与不同模板相比后选择的概率。

此外,在装备模板内,其中的独立设计被定义为一个块,名称为设计名称。在没有重复的前提下可以是任何内容。
这些参数用于设计定义中:

  • name = angry_speedboat 对于使该装备能够作为预设使用是必不可少的。若未定义,例如德国的 light_tank_artillery_2 将使用 GER_light_tank_artillery_equipment_2_short 的本地化(如果本地化已定义)。
  • role_icon_index = 2 用于为“舰船”分配特定的职能图标。此部分代码在陆地装备中无效。图标作为 naval_equipment_role = { ... } 的一部分在 /Hearts of Iron IV/gfx/army_icons/army_icons.txt 中定义。
  • priority = { ... } 是一个 MTTH block ,决定该设计相对于装备模板内其他槽位在花费军事经验进行升级时的“重要性”。
  • enable = { ... } 是一个触发块,决定AI何时会专注于达到该设计。
  • allowed_types = { ... } 是一个子单位的列表,AI可以将其添加到设计中。可以通过自定义去除其中的项来让AI不将其编入编制,例如可以使AI不在在机动轻型坦克师中加入步兵,防止师速度因此减慢。
  • target_variant = { ... } 指定AI应该追求的变体。具体来说,有如下参数:
    • match_value = 5000 用于决定如果现有编制匹配该模板,其对于AI的价值权重多少。
    • type = light_tank_chassis_0 是部队编制设计中必须使用的特定装备类型。
    • modules = { ... } 是装备应具备的模块列表,包括:
      • main_armament_slot = tank_flamethrower 决定指定模块槽的要求。该要求可以是模块类别、特定模块或是empty字符使其为空。如果指定为模块,可以使用greater-than(>)或less-than(<)以要求更好或更次的模块:以上根据模块中定义的年份决定。如果指定了更次,AI会倾向于最旧的模块;如果指定了更好,AI会倾向于最新的模块。如果指定为empty即空槽的情况下,使用greater-than(>)可以确保该槽位“不是”空的。
      • main_armament_slot = { ... } 允许为模块槽指定更多细节:
        • module = tank_flamethrower 决定该槽的模块要求。这与之前的 main_armament_slot = tank_flamethrower 完全相同:允许使用模块类别、模块或empty,并且可以以相同的方式使用等号。
        • any_of = { ... } 是一个模块或模块类别的列表。模块槽至少必须有列表中的一项。
        • upgrade = current 确保在将变体升级以匹配该设计时,必须使用与现有装备相同的模块。如果使用大于符号 (>),则还可要求AI对该槽进行部件升级。
    • upgrades = { ... } 是设计应具备的一系列升级,具体包括:
      • tank_nsb_engine_upgrade = 3 决定指定升级应具有的AI优先级,设定为一个固定数字。
      • tank_nsb_engine_upgrade = { ... } 是一个MTTH block,通过动态绑定分配AI对指定部件升级的优先级。
  • requirements = { ... } 是AI“必须”拥有的模块列表。它遵循与目标变体的模块块中指定的模块槽相同的格式:module = tank_flamethrowerany_of = { ... } 等。然而其并不与特定的槽相绑定。
  • allowed_modules = { ... } 是在满足目标变体中的要求后,AI可以使用的模块列表。AI将永远不会选择列表外的模块。首先指定的模块优先级高于后指定的。

代码示例

BHR_light_tanks = {
    category = land

    available_for = {BHR}

    roles = {
        land_light_tank
    }

    priority = {
        factor = 1000
    }

    great_war_tank_default = {
        priority = {
            factor = 1
            modifier = {
                has_tech = basic_light_tank_chassis
                factor = 0 #let's not waste XP here
            }
        }

        target_variant = {
            match_value = 1000
            type = light_tank_chassis_0
            modules = {
                main_armament_slot = tank_heavy_machine_gun
                turret_type_slot = tank_light_one_man_tank_turret
                suspension_type_slot = tank_bogie_suspension
                armor_type_slot = tank_riveted_armor
                engine_type_slot = tank_gasoline_engine
                special_type_slot_1 = empty
                special_type_slot_2 = empty
                special_type_slot_3 = empty
                special_type_slot_4 = empty
            }
            upgrades = {
                tank_nsb_engine_upgrade = 3
                tank_nsb_armor_upgrade = {
                    base = 1
                    modifier = {
                        add = 1
                        has_war = yes
                    }
                }
            }
        }

        allowed_modules = {
            tank_heavy_machine_gun
            tank_light_one_man_tank_turret
            tank_bogie_suspension
            tank_riveted_armor
            tank_gasoline_engine
        }
    }
}