AI modding

本頁面適用於最新的版本(1.14)。

《鋼鐵雄心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
        }
    }
}