.ai文件用來體現電腦操作的國家的思維方式和對玩家行為的判斷能力。
當開始一局新游戲時,電腦會啟動各個國家的ai文件,該文件以XXX_aaaa.ai,其中XXX為國家id,aaaa為劇本開始年代,比如開始1936年劇本時,電腦會自動為德國開啟ger_1936.ai,而對于短劇本,XXX則相對于\Hearts of Iron 2\scenarios里各個短劇本的名字。
調用.ai文件的方法是在事件文件中調用,
type = ai which = [file name] # 通過這條命令來調用一個ai文件,這個ai文件會替換# 原有的ai文件
比如這個事件:
################
# Battle of Britain
#############################################
event = {
id = 24000
random = no
country = ENG
trigger = {
ai = yes
war = { country = GER country = ENG }
NOT = { war = { country = GER country = SOV } }
OR = {
control = { province = 56 data = GER } # Paris
AND = {
# Belgium
control = { province = 45 data = GER }
control = { province = 50 data = GER }
control = { province = 51 data = GER }
control = { province = 52 data = GER }
control = { province = 65 data = GER }
control = { province = 68 data = GER }
control = { province = 69 data = GER }
control = { province = 70 data = GER }
}
}
}
name = "AI_EVENT"
style = 0
date = { day = 1 month = january year = 1936 }
offset = 4
deathdate = { day = 29 month = december year = 1948 }
action_a = {
command = { type = ai which = "switch/ENG_Britain.ai" }
}
}
當英德交戰,德蘇不交戰,德國占領巴黎或者占領了比利時的歐洲部分,英國就會調整自己的ai。
Ai文件的命名方式可以隨意,但必須和事件中調用的文件名相同。
ai文件夾里的一堆.ai文件是原版游戲定義的,switch文件夾里的ai文件則由后續的補丁不斷補充。
---------------------------一個完整ai文件模型的介紹-----------------------------
#一個完整的ai文件由許多部分組成,但并不意味著一個ai文件需要包含所有的這些部分,
#有時一個ai文件只有幾個語句,但它依然是正確的,它將只替換原有文件中的那幾個語句。
switch = [yes/no]
#默認是yes,如果用no,則ai不會在每年開始的時候尋找更合適的ai,如果用的是美國,
#則美國不會把他的政策從孤立主義逐漸改變到干涉主義。
#但由事件調用的ai會無視這個語句,還是能改變該國的ai。
#各種政策科研等的調整值,如
# exp_force_ratio = 0.750
#當前設定的flag,事件會設定多個flag,從而之后的事件可以按照flag的情況來判斷事件#發生與否。
flags = {
testflag = yes
invade_albania = no
assist_finland = no
}
#調整ai同意索取領土要求的可能性
claim_acceptance = X
#向哪些國家要求領土他們會同意
demand_claims = {
EST
LAT
ROM
LIT
FIN
}
#哪些國家如果我們占領了他們會給與他們獨立
liberate = {
LIT
FIN
}
#對列表中的國家難以影響他們以改善關系,x的取值[0-10],0意味著毫無影響。
resistance = {
ROM = x
}
#對列表中的國家有極強的侵略性,如果某個國家對應的數值是100,那么這個國家將不顧一
#切的試圖毀滅該國。在本例,德國將首先對付法國,然后對付英國。
combat = {
ENG = 60
FRA = 70
}
#這個國家將保證列表中的國家的獨立,這個數值越高,如果相對應的國家受侵略,保護國就
#越容易進行干涉。
protect = {
TUR = 100
DAN = 100
}
#這個國家將盡量和列表中的國家保持良好關系并與之同盟,數值越高可能性越高。
befriend = {
TUR = 100
DAN = 100
}
#xxx表示省份ID,這個語句表示這個國家將盡力在戰爭中占領這個省份,并盡可能通過和
#平談判獲得這個省份,n越高可能性越高。
target = {
xxx = n# 1 - 100
}
#電腦分配給升級的ic的最大值
upgrading = 0.1
#電腦分配給增援ic的最大值
reinforcement = 0.1
#如果電腦被占據的ic比例超過這個數字,他就會恐慌而開始爆民兵
desperation = 0.3
#開始戰略轉移消耗的時間
strat_redeploy_threshold = [days]
#進行戰略轉移部隊的最高比例,默認0.25
max_redeploying = X
#影響該國對別國宣戰的幾率
war = 50
# 完全中立的國家的該值介于100到150
#影響該國接受同盟和軍事通行要求的可能性,如果超過100則完全不可能,但這并不影響該
#國宣戰的可能性。該值取決于國策的選擇和與其他國家的關系。
neutrality = 0
#影響在前線對敵方表示友好的部隊的比例,默認是4.0
max_front_ratio = X
#列表中的值將取代面對特定國家時默認的值
ax_front_ratios = {
FIN = 2.0
...
}
#送遠征軍的比例
#不要設置的太低,必須給AI在同盟軍控制的戰區放棄己方部隊指揮權的機會
exp_force_ratio = 0.75
#AI不會給列表中的國家送遠征軍,如果它們之間要跨過大洋
#但如果兩國鄰近,還是會送遠征軍的
no_exp_forces_to = {
TAG
...
}
#戰時分配衛戍責任的陸軍最大比例
max_garrison_prop = [0.0-1.0]
#戰時分配衛戍責任的陸軍最小比例
#所有非前線省份的陸軍都有衛戍AI控制(除非這個國家準備進行一場侵略)
min_garrison_prop
#分配給建造基礎設施的IC比例
construction = {
max_factor = [0.0-1.0]
# 建造防空炮的設置,yes = 總是建造, no = 不造, atwar = 戰時建造, not_atwar =和平時建造
AA_batteries = [yes/no/atwar/not_atwar]
# 超過這個數值則不再建造
max_AA_level = X
# 建造防空炮的省份列表,填入省份的ID,按優先順序排列
AA_provs = { ... }
# 建造海岸要塞的設置,同上
coastal_fort = [yes/no/atwar/not_atwar]
# 超過這個數值則不再建造
max_coastal_level = X
# 建造海岸要塞的省份列表,按優先順序排列
coastal_fort_provs = { ... }
# 同上,雷達
radar_station = [yes/no/atwar/not_atwar]
max_radar = X
radar_provs = { ... }
# 同上,機場
air_base = [yes/no/atwar/not_atwar]
max_air_base = X
air_base_provs = { ... }
# 同上,港口
naval_base = [yes/no/atwar/not_atwar]
max_naval_base = X
naval_base_provs = { ... }
# 同上,地堡
land_fort = [yes/no/atwar/not_atwar]
max_land_level = X
# 在這些國家的邊界造地堡
fort_borders = {
GER,
ITA,
...
}
# 通常在資源充足的時候不斷建造IC,除非是在戰時
ic_at_war = [yes/no]
# 無論資源是否充足,不斷建造IC,直到X年。(通常用于某國可以預見之后將進行擴張)
force_ic_until = X
# 在這一年結束時停止建造IC
ic_end_year = X
# 建造IC的省份優先權列表
IC_provs = { ... }
}
garrison = {
defend_overseas_beaches = [yes/no] # 是否海外駐軍,默認no
# 在下列語句中X是一個基數,這個基數表示每個地區駐扎多少個師,這個基數取決于省#份
# 數量。(ps,這一段我還不大懂,望指點)
home_multiplier = X # 在本土,用這個數乘以基數,默認: 0.5
overseas_multiplier = X # 在其他領土,用這個數乘以基數,默認: 0.3333
home_peace_cap = X #在和平時期,守衛首都地區的最大部隊數量.
war_zone_odds = X # 默認: 2.0 (盡量達到地方部隊的兩倍)
area_multiplier = { # 如果某個地區有一個特殊的省份,則列在表中,并用特殊的值乘以基數
#(可以覆蓋海外省份的數值, 但不能覆蓋本土省份。)
155 = 1.5
....
}
#駐軍優先權設置:
beach = 50 # 海岸省份的優先權
capital = 100 # 首都
human_border = 210 # 忽視人類同盟玩家
war_target = 100 # 這個AI下一個要進攻的國家
reserves = 20 # 前線后的省份
opposing_alliance = 100 # 通常說來,所有的同盟都是對立的
claim_threat = 100 # 如果這個國家中立,這條語句針對可能向他宣戰的國家
unstable_border = 50 # 與他國相接的別國被占據領土
# 特別的省份
province_priorities = {
527 = 50 # 省份527 的駐軍優先權是50
1123 = -1 #優先權為負數則會覆蓋所有其他優先權并設置為0
...
}
ignore = {
1123 #設為0...
}
key_point_prio_mult = [Value] # 把這個省份的優先權設為value(尚有疑問)
}
front = {
river = x #(將用多少部隊進行跨河攻擊,< 1.0 表示有優勢)
#以下數值修正防御方的兵力數量及勝利幾率(1.0 = 沒有區別)
largefort = x #對于6級及以上地堡
smallfort = x #對于6級以下地堡
occupied = x #被敵方領土包圍
owned = x #被本方領土包圍
#戰斗修正數值
# 以下數值減少進攻方的戰斗效率
frozen_attack = 0.50
snow_attack = 0.50
blizzard_attack = 0.25
storm_attack = 0.60
muddy_attack = 0.75
#減少進攻方的完全進攻效率(1.0 = 沒有修正, 0.5 = 減半.)
jungle_attack = 0.85
mountain_attack = 0.60
swamp_attack = 0.60
forest_attack = 0.85
hill_attack = 0.75
urban_attack = 0.40
# 前線部隊的比例,通常用于防備鄰國省份的進攻,默認,0.33。
support_defense_prop = X
recklessness = [0-3]#魯莽程度,越是高,AI越容易做出冒險的舉動
# Even - 將部隊均勻分布在前線
# Reactive - 針對對方部隊的重點集結部隊
# Defensive - 更多的部隊防御戰略要地(IC, Victory Points, Oil, etc)
# Offensive - 更多的部隊集結在對方防御薄弱之處
# Operational Defensive - 撤退的道路越少,部隊越少(避免被包餃子.)
distrib_vs_ai = [even/reactive/defensive/offensive/op_defensive]
distrib_vs_human = [even/reactive/defensive/offensive/op_defensive]
#在制定日起內,不會向制定國家宣戰。(比如英法隊德國侵略波蘭時的觀望)
enemy_handicap = {
ENG = 100
FRA = 120
...
...
}
passivity = { # 對特定國家的反擊
# 取值范圍: 0-100 (%)
ENG = 0
FRA = 50
...
...
}
province_priorities = {
527 = 0.2 #分配原本應該分配的20%的部隊來防守省份527
...
}
reserve_prop = [0.0-1.0]
# 總兵力中分配給后方部隊的最高比例(包括指揮部和其他的師)
panic_ratio_vs_ai = X
# 如果敵方部隊的數量超過己方部隊這個倍數,則要求更多部隊
#注意,這會使得部分部隊放棄衛戍責任,所以,設得高一些
panic_ratio_vs_human = X # 同上,針對人類玩家
enemy_reinf_days = X
# 在X天內,計算獲勝幾率的同時統計進入目標省份的敵軍數量
base_attack_odds = X # 如果獲勝幾率高于X,則攻擊
min_attack_odds = X
# 如果戰斗發生了僵局,若勝利幾率低于這個數值,AI會選擇停止戰斗或撤退
max_attack_odds = X
# 如果勝利幾率高于這個數值,AI不會再派遣援軍
reinforce_odds = X
# 如果勝利幾率在這個數值,則會派遣援軍
withdraw_odds = X
#如果勝利幾率低于這個數值,則會放棄進攻或者撤退
# 注意: 計算防御方撤退幾率的公式非常復雜,用幾個變量來體現很難
# 注意: 如果平均組織度過低,則部隊也有可能撤退
}
military = {
relative_build_scheme = [yes/no]
# yes:AI會盡量保持自己的部隊種類的比例;no:AI會按照下面的比例來分配自己的生產。默認:yes
max_batch_peace = 800
# 和平時期AI用流水線生產同一單位的最長日期
max_batch_war = 500
# 戰爭并未蔓延到本國邊境時期AI用流水線生產同一單位的最長日期
max_batch_home_front = 190
# 戰爭已經蔓延到本國邊境時期AI用流水線生產同一單位的最長日期
#注意: AI生產單位的數量同時受到其他因素的制約, 比如總的IC限制, 劇本結束時起將要
#到來,以及產生絕望情緒時.
# 生產分配表范例:
infantry = 3
cavalry = 0
motorized = 5
mechanized = 6
light_armor = 0
armor = 10
paratrooper = 0
marine = 6
bergsjaeger = 3
garrison = 0
hq = 2
militia = 0
# 35 %
escort = 5
multi_role = 7
interceptor = 3
strategic_bomber = 4
tactical_bomber = 6
naval_bomber = 5
cas = 5
transport_plane = 0
flying_bomb = 0
flying_rocket = 0
# 35 %
battleship = 2
light_cruiser = 4
heavy_cruiser = 3
battlecruiser = 0
destroyer = 6
carrier = 6
submarine = 4
transport = 5
# 30 %
# 注意:總和必須是100%
# 加強旅生產:
# (每個可以加加強旅的師都有一個合適的加強旅)
#陸軍加強旅:
artillery = 15
sp_artillery = 5
rocket_artillery = 0
sp_rocket_artillery = 2
anti_tank = 3
tank_destroyer = 5
light_armor_brigade = 0
heavy_armor = 0
super_heavy_armor = 0
armored_car = 0
anti_air = 5
police = 0
engineer = 5
# 綜合必須<= 100
# 海軍加強旅:
cag = 100
# 綜合必須<= 100
}
#我參考的一篇研究AI的文章里,作者是針對1.2版本的,而現在是1.3版本,不知道是否有變化
#那篇文章的作者指出,relative_build_scheme = [yes/no]這個語句在所有的單獨ai文件中,都是
#選no,因為如果選yes,ai會盡力使自己的所有單位在種類上保持一個相同比例,比如蘇聯會為
#每一個步兵師建造一艘戰列艦。而由于開局時海軍和陸軍比例完全失調,英國和美國會一開始
#暴陸軍空軍,直到他們的數量和海軍相同。而如果意大利在42年被英國消滅了所有海軍,他就會
#在接下來的2~4年里只造海軍,完全不造陸軍。
#我不清楚這句話在1.3里是否有改變,但我建議還是選no,然后按照自己的意思分配ai建造
air_marshal = {
icxdayscostfactor = 10.0 # 如何估算預期將要消耗的真實ic數值
manpowercostfactor = 100.0 # 如何估算預期將要消耗的真實人力資源數值
destructionriskthreashold = 0.2 # 如何評估一個師將要被解散
airsuperioritydesirability = 10.0 # 作為一個乘數參加任務期望的計算
airsuperioritylosstolerance = 1.0 # 什么樣的損失比例在任務中是可以接受的,2.0
#表示2倍的損失倍接受, 0.5 表示一半
groundattacklosstolerance = 1.0
groundattackdesirability = 1.0
interdictionlosstolerance = 1.5
inderdictiondesirability = 1.0
logisticalstrikelosstolerance = 4.5
logisticalstrikeefficency = 0.01# 這個數值用來調整在完成任務時遭到的實際損失
logisticalstrikedesirability = 100000.0
runwaycrateringlosstolerance = 1.5
runwaycrateringefficency = 0.01
runwaycrateringdesirability = 20000.0
strategicstriketolerance = 4.5
strategicstrikeefficency = 0.01
strategicstrikedesirability = 1000000.0
installationstriketolerance = 1.5
installationstrikeefficency = 0.01
installationstrikedesirability = 10.0
navalstriketolerance = 1.0
navalstrikedesirability = 10.0
portstriketolerance = 1.0
portstrikedesirability = 9.0
# 你可以設置很多軍事計劃, 但是如果你想增加一個那就要在所有的種類中都增加,
# 默認狀態下并沒有設置
# 默認如下:
taskforcetype = {
name = "Air Superiority" # 名字可以隨意,便于調試
desiredratio = 0.400 # 這個比率表示這個國家是否希望進行這項計劃?
rangeweight = 10.000 # 空軍在這項計劃中的重要性?
airkillpowerweight = 2000.000 # 在這個計劃中空軍消滅地方空中實力的重要性?
hardkillpowerweight = 0.000
softkillpowerweight = 0.000
navalkillpowerweight = 0.000
strategickillpowerweight = 0.000
transportcapacityweight = -1000000.000
# 很大的負數表示運輸船完全擯棄在這個計劃之外
airvulnurabilityweight = -1.000
# 暴露給敵方空軍的弱點評估(這個數值是建造成本及其他多種數據的綜合考慮)
surfacevulnurabilityweight = 0.000
# ai在完成任務時要考慮哪些問題?
# Idle is the "mission" the AI is on when doing nothing,
# Reorganize is the "mission" the AI is on when trying to reform its
# air OOB to be more optimal. The other missions listed here correspond
# to the standard tactical missions AND a rebase to the best airbase.
# Possible missions are:
idle = yes
reorganize = yes
air_superiority = yes
#其他和"奪取制空權"相違背的默認計劃
#interdiction 封鎖
#ground_attack 攻擊地面部隊
#logistical_strike 轟炸補給線
#runway_cratering 轟炸機場
#strategic_bombardment 戰略轟炸
#installation_strike 戰術轟炸
#naval_strike 艦船轟炸
#port_strike 港口轟炸
#convoy_air_raiding 空中護衛
#airborne_assault 空降突襲
#air_supply 空運補給
}
# 其他默認空軍任務
taskforcetype = { name = "Soft Bombing" desiredratio = 0.200 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = 0.000 softkillpowerweight = 2000.000 navalkillpowerweight = 0.000 strategickillpowerweight = 0.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = 0.000 surfacevulnurabilityweight = -1.000 idle = yes reorganize = yes interdiction = yes ground_attack = yes }
taskforcetype = { name = "Hard Bombing" desiredratio = 0.100 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = 2000.000 softkillpowerweight = 0.000 navalkillpowerweight = 0.000 strategickillpowerweight = 0.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = 0.000 surfacevulnurabilityweight = -1.000 idle = yes reorganize = yes interdiction = yes ground_attack = yes }
taskforcetype = { name = "Strategic Bombing" desiredratio = 0.100 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = 0.000 softkillpowerweight = 0.000 navalkillpowerweight = 0.000 strategickillpowerweight = 2000.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = -0.500 surfacevulnurabilityweight = -0.500 idle = yes reorganize = yes logistical_strike = yes runway_cratering = yes strategic_bombardment = yes installation_strike = yes }
taskforcetype = { name = "Naval Bombing" desiredratio = 0.100 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = 0.000 softkillpowerweight = 0.000 navalkillpowerweight = 2000.000 strategickillpowerweight = 0.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = 0.000 surfacevulnurabilityweight = -1.000 idle = yes reorganize = yes naval_strike = yes port_strike = yes convoy_air_raiding = yes }
taskforcetype = { name = "Airlift" desiredratio = 0.100 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = -2000.000 softkillpowerweight = -2000.000 navalkillpowerweight = 0.000 strategickillpowerweight = -2000.000 transportcapacityweight = 1000000.000 airvulnurabilityweight = -1.000 surfacevulnurabilityweight = 0.000 idle = yes reorganize = yes airborne_assault = yes air_supply = yes }
}
#部隊的數量乘以leader_rartio便得到實際分配的將領數量.
#如果你有101陸軍單位同時land_field_marsal = 0.02 那么你有兩個元帥.
leader_ratio = {
land_field_marshal =0.02
land_general =0.031
land_lt_general =0.41
sea_grand_admiral =0.02
sea_admiral =0.061
sea_vice_admiral =0.401
air_marshal =0.02
air_general =0.091
air_lt_General =0.11
}
#AI兩棲作戰的影響因素
invasion = {
#對于某個特定的省份目標
base = 1.0 # 相對關系修正. (數值低 = 特定的重要省份.)
random = 1.0 # 隨機范圍大小(1.0 = 1%)
coastal = 1.0 # 數值高則避免登陸有海岸要塞的省份
beach = 1.0 # 數值高則避免難以登陸的海岸.
distance = 1.0 # 數值高 = 避免遠距離作戰.
max_distance = 20.0 # 如果目標距離超過這個,則忽視之。1 = 100km ingame.
pocket = 1.0 #優先, 比如完全被敵國省份包圍的省份.
island = 1.0 #是否優先占領孤島
enemy = 1.0 #數值高表示警惕敵方有駐軍的省份
adjacentenemy = 1.0 # 數值高表示警惕鄰近的敵軍
air_base = 0.1 # 有機場的省份的優先權
naval_base = 0.1 # 有港口省份的優先權
air_support = 0.1 #敵方空軍半徑范圍內的海岸優先權
ignore = [yes/no] # 發動侵略,看是否和我國有邊界. Default: no.
redirect = priority/nearest/home # AI文件中的目標身份的優先權
# 最近的AI有良好的攻擊效率并且有機會退防
#部分特定省份有較高優先權
target = {
898 = 1000 # 入侵South Sicily (898) 有著極高的優先權. 負數表示完全不管那里.
}
}
#影響AI對海軍控制的因素
admiral = {
#對下列海域的攻擊有特別的優先權
target = {
592 = 200 ...
}
#下列海域為核心海域,對它的控制很重要
core = {
592
...
}
#下列省份可被用作港口
base = {
592
...
}
#被忽略的省份
ignore = {
#以下必須是海域,而不是省份ID
"northern baltic"
"southern baltic"
}
min_org = 95% # 在下次出港前必須達到最高組織度的比例
min_dmg = 95% # 在下次出港前必須達到最高人力的比例
return_org = 60% # 低于最高組織度的這個比例將回港
return_dmg = 50% # 低于人力的這個比例將回港
}
# 科研發展的影響因素
technology = {
endgoal = { ... } #將要完成的科技列表,填入科技ID
preference = { ... } # 優先研究的科技列表
ignore = { ... } # 不會研究的科技列表
#優先研究的科研領域
armor = 2.0
infantry = 3.0
industry = 2.5
aircraft = 0.6
naval = 0.1
land_doctrines = 4.0
air_doctrines = 0.9
naval_doctrines = 0.1
secret_weapons = 0.4
}
# 對于貿易協定的影響因素
trade = {
favored = {
TAG = X # 對這些國家有貿易優惠
}
embargo = {
TAG # 不會和這些國家進行交易
}
# 這個數指表示AI取消貿易協定的可能性,默認是 4.0.
#低一些的數值表示這個國家很容易取消不利于他們的貿易協定.
cancel_deal_threshold = X
# 下面的數值將覆蓋"db\resource_values.csv" 中AI對各項資源重要性的看法,
#除非設置為 -1 (默認.)
energy = -1
rare_materials = -1
metal = -1
oil = -1
supplies = -1
money = -1
}
# 對科技共享的影響因素
tech_sharing = {
favored = {
TAG = X # 樂于和這些國家分享科技,如果X值較高,則會分享質量較高的科技
...
}
embargo = {
TAG # 不會和這些國家分享科技
...
}
not = {
ID # 不會分享這些科技
...
}
prioritized
ID = X # 優先分享這些科技
...
}
}
posted on 2009-11-05 20:50
飛翔天使 閱讀(2442)
評論(0) 編輯 收藏 所屬分類:
Game