本教程的内容主要是在制作尤里的复仇Mod:万世之战时总结的经验,其中参考了红警DIY论坛的AI教程,并用ModENC中所提供的词条更正准确度。
AI原理介绍
AI主要分为两个大的部分,一个为Rules(md).ini部分的改动,另一个为Ai(md).ini。
AI大体上分为两个阶段,一个是发展阶段,另一个是出兵阶段。发展阶段指的是AI建造建筑,发展经济,提高科技等级,建立防御武器等等。而出兵阶段则是AI按照设定,训练和生产不同的兵种和载具,在战场上进行战斗或其他动作。
Rules(md).ini主要控制的是发展阶段,而AI(md).ini则控制的是出兵阶段。
AI的设计实际上更多取决于你的Rules,比如新的单位AI会如何使用,新的建筑AI会如何保护等等。如果你的Mod新增了单位但没有新增AI,那么这个Mod一定不是一个合格的好Mod。
Rules改动
实际上,整个红警2的AI机制都是宏观与微观结合,因此对Rules(md).ini中的宏观标签进行合适的修改极其重要,这些宏观标签包括了AI对建筑功能的识别、对防御建筑数量的控制、对经济的调控以及对作战指令的设定等。
[General]
[General]部分是Rules(md).ini中的重要组成部分。下面列举出[General]中可以左右AI的标签,以下标签的数值均为尤里的复仇原版数值,可作为修改的参考。
BaseBias=2 ;敌人靠近AI时的威胁倍数值,作用是影响AI对单位威胁的敏感度。值越高越敏感度越高。
BaseDefenseDelay=.25 ;AI派出防御部队应对基地威胁的延迟时间,单位为分钟。
CloseEnough=2.25 ;AI执行“移动到”指令时,视为完成接近的距离值。
Stray=2.0 ;小队在执行任务时,不会导致小队重组的偏离直径值,单位为单元格(Cell)。建议值:4-5。
RelaxedStray=3.0 ;执行集结指令(53和54号指令)时,以这个数值代替Stray以适应大部队作战。建议值:5-7。
SuspendDelay=2 ;小队暂停任务后恢复执行任务的时间,单位为分钟。
SuspendPriority=1 ;小队的任务如果在这个权重值之下,就会暂停任务转而参与基地防御。
GuardModeStray=2.0 ;小队在防御模式下,不会导致小队重组的偏离直径值,单位为(Cell)。建议值:3-4。
TeamDelays=2000,2500,3500 ;(困难、中等、简单)的AI出小队的间隔,单位为帧。建议值:100以下。
AIHateDelays=30,50,70 ;(困难、中等、简单)的AI选择敌人的时间间间隔,单位为帧。最好保持一个比较低的值。
AIAlternateProductionCreditCutoff=1000 ;AI的资金低于这个数值就不再花钱
MultiplayerAICM=400,0,0 ;(困难、中等、简单)的AI初始资金加成。初始资金=设定资金*(x+100)/100
AIVirtualPurifiers=4,2,0 ;(困难、中等、简单)的AI采集矿石转化成的资金加成。转化资金=原本资金*(1+x*0.25)
AISlaveMinerNumber=4,3,2 ;(困难、中等、简单)的AI生产的奴隶矿场数量。
HarvestersPerRefinery=2,2,1 ;(盟军、苏联、尤里)的AI会为每个矿场配备的矿车数量。
AIExtraRefineries=2,1,0 ;(困难、中等、简单)的AI会额外建造的矿场数量。
MinimumAIDefensiveTeams=1,1,1 ;(困难、中等、简单)的AI会生产的基地防御的最小小队数量。
MaximumAIDefensiveTeams=2,2,2 ;(困难、中等、简单)的AI会生产的基地防御的最大小队数量。
TotalAITeamCap=30,30,30 ;(困难、中等、简单)的AI会生产的最大小队数量。
UseMinDefenseRule=yes ;AI在创建每个小队之前都会将“已有MinimumAIDefensiveTeams数量的防御小队”作为前提。
DissolveUnfilledTeamDelay=5000 ;AI在多久之后会解散一只不完整的小队,单位为帧。
AISafeDistance=20 ;距离敌人基地多远之外AI认为是安全距离,单位为单元格(Cell)。
AIMinorSuperReadyPercent=.7 ;次级超级武器(铁幕、超时空)充能到这个百分比时,AI会将其作为触发。
AlliedBaseDefenseCounts=25,20,6 ;(困难、中等、简单)的盟军AI生产防御建筑的数量参数。计算公式见下方:
SovietBaseDefenseCounts=25,22,6 ;(困难、中等、简单)的苏军AI生产防御建筑的数量参数。计算公式见下方:
ThirdBaseDefenseCounts=25,22,6 ;(困难、中等、简单)的第三阵营AI生产防御建筑的数量参数。计算公式见下方:
((基地建筑总价值-2000)/1500 * GDIBaseDefenseCoefficient) + 3*(该参数-1)
AIPickWallDefensePercent=50,25,10;(困难、中等、简单)的AI用围墙来代替防御建筑的概率
AIRestrictReplaceTime=400 ;AI的建筑被摧毁后,用电厂、矿场、围墙或者防御建筑代替的时间,单位为帧。
ThreatPerOccupant=10 ;AI对每一个进驻建筑的步兵判定的威胁值。
ApproachTargetResetMultiplier=1.5 ;AI判定目标移动的参数。AI通过武器射程判定目标,而如果这个目标移动到武器射程*该参数之外,AI将判定该目标为移动目标,并重新接近敌人。
GuardAreaTargetingDelay=36 ;区域警戒(Area Guard)状态下AI搜索目标的延迟。
NormalTargetingDelay=27 ;
AINavalYardAdjacency=20 ;AI能建造船厂的距离,单位为单元格(Cell)。
DisabledDisguiseDetectionPercent=15,5,2 ;(困难、中等、简单)的AI识破幻影坦克的概率。概率虽然低,但人越多越容易识破。
AIAutoDeployFrameDelay=15,25,100 ;AI部署步兵的延迟。
AISuperDefenseProbability=90,50,10 ;(困难、中等、简单)的AI使用护盾类型(铁幕、力场护盾)超级武器的概率。
AISuperDefenseFrames=50 ;AI使用护盾类型的超级武器保护自己的延迟。
AISuperDefenseDistance=12 ;从基地中心开始算多少距离是AI使用护盾保护的范围,单位为单元格(Cell)。
[CombatDamage]
Crush=1.8 ;在该距离时AI的载具会直接碾压可碾压的步兵以取代开火,单位为单元格(Cell)。
[AI]
[AI]部分是Rules(md).ini中对AI的基本定义,比如告诉AI有哪些建筑可以建造、各个建筑的定义、防御建筑的数量等。
[AI]
BuildConst=GACNST,NACNST,YACNST ;AI会建造的基地
BuildPower=NAPOWR,GAPOWR,YAPOWR ;AI会建造的电厂
BuildRefinery=NAREFN,GAREFN,YAREFN ;AI会建造的矿场
BuildBarracks=NAHAND,GAPILE,YABRCK ;AI会建造的兵营
BuildTech=NATECH,GATECH,YATECH ;AI会建造的作战实验室
BuildWeapons=GAWEAP,NAWEAP,YAWEAP ;AI会建造的工厂
BuildRadar=GAAIRC,NARADR,AMRADR,NAPSIS ;AI会建造的雷达
ConcreteWalls=GAWALL,NAWALL,GAFWLL ;AI会建造的围墙
BuildNavalYard=NAYARD,GAYARD,YAYARD ;AI会建造的海军船坞
BuildDummy=GAPILL,NALASR,YAGGUN ;AI会建造的基础防御武器
NeutralTechBuildings=CAAIRP,CATHOSP,CAOILD,CAOUTP,CAMACH,CAPOWR ;AI可以占领的科技建筑
AlliedBaseDefenses=GAPILL,ATESLA,NASAM ;盟军AI会建造的防御武器,无视BuildLimit和RequiredHouse。
SovietBaseDefenses=NALASR,NABNKR,TESLA,NAFLAK ;苏军AI会建造的防御武器,无视BuildLimit和RequiredHouse。
ThirdBaseDefenses=YAGGUN,YAPSYT,NATBNK ;第三阵营AI会建造的防御武器,无视BuildLimit和RequiredHouse。
AIForcePredictionFudge=5,25,80 ;AI根据敌人单位造价的总和,选择防御建筑进行建造。三个值为困难、中等、简单的敌人所用的参数,理论上来说数值越小越智能。
NodBaseDefenseCoefficient=1.2 ;只影响SovietBaseDefenseCounts的计算。
GDIBaseDefenseCoefficient=1.5 ;只影响AlliedBaseDefenseCounts的计算。
ComputerBaseDefenseResponse=3 ;AI响应基地被攻击或者ToProtect单位被攻击的敌人的参数。具体算法未知。
PatrolScan=.016 ;AI执行巡逻任务时搜索敌人的时间。(单位:分钟)
CreditReserve=100 ;AI在资金少于这个数就不会维修建筑了。
PathDelay=.01 ;单位拥堵后再次尝试通过的时间间隔。(单位:分钟)
BlockagePathDelay=60 ;再次尝试通过但仍无法通过则绕路的时间。(单位:帧)
AutocreateTime=1 ;创建一支带有AutoCreate=yes小队的时间(单位:分钟)
Paranoid=yes ;AI玩家是否针对人类玩家。
AIBaseSpacing=1 ;AI生产建筑的最小间隔,单位为单元格(Cell)。
[IQ]
[IQ]的设置主要和地图相结合,比如在任务中有些敌人不会修理建筑,不会自动生产,这就是[IQ]的功劳。在遭遇战中,[IQ]全部是最大数值。
[IQ]
MaxIQLevels=5 ; IQ的最大值
SuperWeapons=4 ; 可以自动使用超级武器的最小IQ值
Production=5 ; 可以自动建造建筑的最小IQ值
GuardArea=2 ; 可以让新单位进入区域警戒状态的最小IQ值
RepairSell=1 ; 可以维修或者卖掉建筑以获取最大收益的最小IQ值
AutoCrush=2 ; 自动碾压单位的最小IQ值
Scatter=2 ; 可以躲避炮弹的最小IQ值
ContentScan=3 ; 懂得扫描乘员威胁度的最小IQ值
Aircraft=3 ; 懂得生产飞行器的最小IQ值
Harvester=2 ; 懂得补充矿车的最小IQ值
SellBack=2 ; 懂得卖掉建筑攒经费的最小IQ值
在遭遇战中,玩家的IQ为0,电脑的IQ为5。
通过将IQ设置为0,可以让玩家实现很多电脑才具备的功能,比如把RepairSell设置为0,玩家就可以不用点维修按钮实现自动维修(经过大量验证,AI自动维修把玩家的建筑卖掉的可能性非常低);把AutoCrush设置为0玩家的坦克也可以自动碾压敌方步兵;把Scatter设置为0玩家的单位可以自动躲炮弹;把GuardArea设置为0玩家的单位就会在视野范围内自动找架打。但超级武器、生产类型的词条设置为0无效。
个人来说不建议将IQ的内容设置为0,因为玩家本身就比电脑拥有更强的应变能力,如果让玩家拥有这些自动操作手段,那么游戏性也会变得非常低。
AI的建造逻辑
AI在出兵和建造建筑时会使用不同的逻辑来判断单位是否可被建造,分以下情况讨论:
建筑:
AI判定建筑是否可建造的检查项:
是否检查? | 条件 | |
Prerequisite= | 是 | 只有被设置的阵营允许建造。 |
PrerequisiteOverride= | 否 | 无 |
TechLevel= | 是 | 大于最大值不可建造。 |
AIBuildThis= | 是 | yes则会建造,no则不会建造。 |
AIBasePlanningSide= | 是 | 0则盟军可生产,1则苏军可生产,2则尤里可生产。 |
RequiresStolenAlliedTech= | 否 | 无 |
RequiresStolenAlliedTech= | ||
RequiresStolenAlliedTech= | ||
Owner | 是 | 在Owner列表中的国家才可以建造该建筑,原版直接将所有国家放入。 |
RequiredHouses | 是 | 在列表中的国家可以建造。 |
ForbiddenHouses | 在列表中的国家不能建造。 |
步兵和载具:
AI在生产步兵和载具时的检查项:
是否检查? | 条件 | |
Prerequisite= | 否 | 无 |
PrerequisiteOverride= | 否 | 无 |
TechLevel= | 是 | -1或大于最大值不可生产 |
RequiresStolenAlliedTech= | 是 | 在偷取盟军作战实验室后可生产。 |
RequiresStolenAlliedTech= | 在偷取苏联作战实验室后可生产。 | |
RequiresStolenAlliedTech= | 在偷取尤里作战实验室后可生产。 | |
Owner | 否 | 无 |
RequiredHouses | 是 | 在列表中的国家可以生产。 |
ForbiddenHouses | 在列表中的国家不能生产。 |
AI改动
AI改动意为更改Ai(md).ini文件。AI(md).ini主要分为4大板块,即特遣部队、脚本、小队和触发。
以下说明各个部分的作用。
- 特遣部队:主要负责定义一支小队的兵种内容。
- 脚本:主要负责定义一支小队的行动方式。
- 小队:小队的载体,里面定义了单位的行为特性、用于构成的特遣部队以及用于行动准则的脚本。
- 触发:小队形成的条件。
整个AI出兵的流水线如下:
- 触发条件满足后,开始创建小队。
- 小队招募的成员内容由特遣部队定义,小队会等到特遣部队定义的兵种集齐后开始行动。
- 小队的行动方式由脚本定义。
AI(md).ini中,小队和触发是占大部分篇幅的内容,因为触发是不可以共用的。小队可以被多个触发共用,而特遣部队和脚本则通用性更高。
特遣部队·TaskForce
特遣部队的代码构成方式比较简单,首先需要再[TaskForces]中注册你的特遣部队名称。
接下来详细定义特遣部队,格式如下:
[TaskForceName] ;特遣部队的注册名,不得超过24个英文字符,只能是英文。
Name=Name of the Task Force ;特遣部队的名称,用于描述你的特遣部队,不会被游戏读取。
0=1,MTNK ;格式为N=X,Y | N=序列,X=数量,Y=单位注册名
1=2,SREF
...
5=3,FV
Group=-1 ;无特殊需要建议保留原值-1。
需要注意的是,特遣部队的序列不需要严格按照升序写单位,但是最大到5。
脚本·Script
脚本需要在[ScriptTypes]注册表中注册。
脚本的格式如下:
[ScriptName] ;脚本的注册名,不得超过24个英文字符
0=X,Y
1=X,Y
2=X,Y
...
49=X,Y
以下表格只列出适合在遭遇战中使用的脚本指令。
指令 | 指令介绍 | 参数 | 参数介绍 |
---|---|---|---|
0 | 攻击最近的目标(间谍无法执行,陆军只判定地面单位,海军只判定水面单位) 注:攻击指令为自循环指令。比如小队被指令攻击建筑,当第一个建筑被摧毁小队会立刻循环这个指令,寻找第二个最近的建筑进行攻击,直到没有可攻击的建筑,小队才会执行下一条指令。 |
0 | 任何目标([VehicleTypes]/[AircraftTypes]/[InfantryTypes]/[BuildingTypes])(Aircraft类无法执行此项。) |
1 | 同0,0(其实根本没有0,1,空项自动判定成0,0) | ||
2 | 建筑物([BuildingTypes]) | ||
3 | 资源类([BuildingTypes]/[VehicleTypes]/[AircraftTypes],Storag>0) | ||
4 | 步兵([InfantryTypes]) | ||
5 | 载具([VehicleTypes]/[AircraftTypes]) | ||
6 | 工厂([BuildingTypes],Factory=) | ||
7 | 防御建筑([BuildingTypes],Primary=) | ||
8 | 同0,0(同样是空项) | ||
9 | 电厂([BuildingTypes],BuildCat=Power) | ||
10 | 可驻军建筑([BuildingTypes],CanOccupyFire=yes) | ||
11 | 中立科技建筑([BuildingTypes],NeedsEngineer=yes) | ||
1 | 攻击n号路径点,工程师/间谍/突击队都可以用这句完成占领/渗透/清理。 | n | 路径点编号 |
3 | 移动到n号路径点(Waypoint)。 | n | 路径点编号 |
4 | 移动到n号单元标记(CellTag)。 | n | 单元标记编号 |
5 | 警戒(Guard)状态保持n秒 | n | 单位:秒 |
6 | 跳转到当前Script的第n行。 | n | n=索引号+1 |
8 | 释放乘客 | 0 | 运输工具和乘客都会执行接下来的指令。 |
1 | 运输工具执行接下来的指令,乘客不执行。 | ||
2 | 乘客执行接下来的指令,运输工具不执行。 | ||
3 | 运输工具和乘客都不执行接下来的指令。 | ||
9 | 部署。(步兵、基地车、武装直升机皆有效) | 0 | 固定参数 |
10 | 跟随最近的友好单位。(如果写在Script的第一行,将会无条件跟随产生的第一个小队) | 0 | 固定参数 |
11 | 进入第n种状态(通常能在Rules里找到并修改相应状态),无法执行该Script内接下来的任何指令。(可以通过重组至其他小队来终止任务) | 5 | Guard - 防御,只攻击进入射程内的敌人。 |
7 | Enter - 进入建筑或运输工具。AI会自动找寻附近的建筑物进驻。 | ||
11 | Area Guard - 区域防御,会主动迎击附近的敌人。 | ||
15 | Hunt - 猎杀敌人。非Aircraft单位有AA=yes的武器时会优先搜寻敌方Aircraft类单位,但是无视Balloon类单位。Aircraft类单位会按0,3寻敌。(伞兵默认执行此状态。海军有效。默认无法重组,但是可以改) | ||
18 | Construction - 在建筑建立的位置造建筑。(车辆部署建筑同样有效) | ||
14 | 队伍中存在有Passengers位置的运输工具,并且其余单位Size和PhysicalSize满足运输条件时,乘客们进入运输工具。(实际使用时,一个队伍里只能存在1个运输工具)(运输步兵时可以在14,0之后加43,0保证单位装载完毕,运输车辆时不可接43,0) | 0 | 固定参数 |
17 | 变为执行第n号脚本,理论上可以用来实现超过50行的脚本。 | n | n为该脚本在注册列表中的顺序号而非索引号,从0开始,所以为索引号+1。 |
18 | 改变小队,让当前小队加入第n号小队,理论上可以用来实现超过6行的大队。 | n | n为该小队在注册列表中的顺序号而非索引号,从0开始,所以为索引号+1。 |
21 | 分散部队。 | 0 | 固定参数 |
42 | 改变朝向。 | 0 | 北 |
1 | 东北 | ||
2 | 东 | ||
3 | 东南 | ||
4 | 南 | ||
5 | 西南 | ||
6 | 西 | ||
7 | 西北 | ||
43 | 等待运输单位完全装载完毕。运载步兵时可以用在14,0之后,运载车辆时不要使用。 | 0 | 固定参数 |
46 | 攻击指定建筑N。(工程师为占领、间谍为渗透、Assaulter=yes的单位为清驻兵、海军可用此指令攻击陆地建筑) | -1 + N | 选择指定建筑中威胁最小的。 |
65535 + N | 选择指定建筑中威胁最大的。 | ||
131071 + N | 选择指定建筑中距离最近的。 | ||
196607 + N | 选择指定建筑中距离最远的。 | ||
47 | 移动到N指定敌方或中立建筑附近。N的计算方法同上,"附近"的范围由CloseEnough指定。(海军可用) | -1 + N | 选择指定建筑中威胁最小的。 |
65535 + N | 选择指定建筑中威胁最大的。 | ||
131071 + N | 选择指定建筑中距离最近的。 | ||
196607 + N | 选择指定建筑中距离最远的。 | ||
49 | 任务执行成功。小队每执行一次49号指令,都会在该AITrigger中增加AITriggerSuccessWeightDelta的权重。如果被消灭之前没能执行49号指令,则减少AITriggerFailureWeightDelta * AITriggerTrackRecordCoefficient的权重。 | 0 | 固定参数 |
53 | 在敌人基地附近集合,距离由AISafeDistance决定。(海军有效) | 0 | 固定参数 |
54 | 在友方基地附近集合。距离由AISafeDistance决定,Ares中由AIFriendlyDistance决定。(海军有效) | 0 | 固定参数 |
55 | 如果铁幕就绪,则为该小队罩铁幕。 | 0 | 固定参数 |
56 | 如果超时空传送就绪,则传送该小队至指定建筑物N | -1 + N | 选择指定建筑中威胁最小的。 |
65535 + N | 选择指定建筑中威胁最大的。 | ||
131071 + N | 选择指定建筑中距离最近的。 | ||
196607 + N | 选择指定建筑中距离最远的。 | ||
57 | 如果超时空传送就绪,则传送该小队至指定类别周边。 | 0 | 任何目标([VehicleTypes]/[AircraftTypes]/[InfantryTypes]/[BuildingTypes])(Aircraft类无法执行此项。) |
1 | 同0,0(其实根本没有0,1,空项自动判定成0,0) | ||
2 | 建筑物([BuildingTypes]) | ||
3 | 资源类([BuildingTypes]/[VehicleTypes]/[AircraftTypes],Storag>0) | ||
4 | 步兵([InfantryTypes]) | ||
5 | 载具([VehicleTypes]/[AircraftTypes]) | ||
6 | 工厂([BuildingTypes],Factory=) | ||
7 | 防御建筑([BuildingTypes],Primary=) | ||
8 | 同0,0(同样是空项) | ||
9 | 电厂([BuildingTypes],BuildCat=Power) | ||
10 | 可驻军建筑([BuildingTypes],CanOccupyFire=yes) | ||
11 | 中立科技建筑([BuildingTypes],NeedsEngineer=yes) | ||
58 | 移动到指定友方建筑N附近。(海军可用) | -1 + N | 选择指定建筑中威胁最小的。 |
65535 + N | 选择指定建筑中威胁最大的。 | ||
131071 + N | 选择指定建筑中距离最近的。 | ||
196607 + N | 选择指定建筑中距离最远的。 | ||
64 | 进驻最近的可驻军建筑。(即使是用来占己方碉堡) | 0 | 固定参数 |
小队·Team
小队的代码构成方式比较像Rules(md).ini的形式,即先在[TeamTypes]中注册小队,然后再为小队增加各类标签。
小队的代码构成如下:
[TeamName] ;小队的注册名,不得超过24个英文字符,只能是英文。
Name=Name of the Team ;小队的名称,用于描述你的小队,不会被游戏读取。
VeteranLevel=1 ;无效。
MindControlDecision=0 ;小队的心灵控制单位在控制敌人之后,被控制者的行为。
Loadable=no ;是否有运载单位。
Annoyance=no ;是否会还击一次。
GuardSlower=no ;无效。
House=<none> ;无效。
Recruiter=no ;是否会从低优先级队伍中调取成员。
Autocreate=no ;是否结合地图预制单位生效。
Prebuild=no; 是否会提前建造队伍。
Reinforce=yes ;是否会强制补充损失的成员。
Droppod=no ;无效。
UseTransportOrigin=no ;无效。
Whiner=no ;无效。
Aggressive=yes ;是否为进攻型小队。
Suicide=no ;是否会还击。
Priority=7 ;优先级
Max=1 ;最大小队数量
TechLevel=0 ;科技等级
Group=-1 ;没有特殊需要就写-1。
OnTransOnly=no ;无效。
AvoidThreats=yes ;是否避免威胁。
IonImmune=no ;无效。
TransportsReturnOnUnload=no ;完成运输后载具是否回基地。
AreTeamMembersRecruitable=yes ;队伍成员是否能被调取。
IsBaseDefense=no ;是否为基地防御小队。
OnlyTargetHouseEnemy=no ;是否只针对敌方。
Script=ScriptName ;小队行动的脚本。
TaskForce=TaskForceName ;小队构成的特遣部队。
下面,对各个标签做出详细解释:
Aggresive和Suiside组合:
适用脚本 | Aggresive | Suicide | 敌人进入警戒范围 | 受到敌人攻击 |
---|---|---|---|---|
攻击类脚本(0,1,46,59) | yes | yes | 无视敌人,执行脚本 | 无视敌人攻击,执行脚本 |
yes | no | 无视敌人,执行脚本 | 攻击并追击敌军,一旦攻击完成(敌人被消灭或隐形),继续执行脚本 | |
no | yes | 无视敌人,执行脚本 | 无视敌人攻击,执行脚本 | |
no | no | 无视敌人,执行脚本 | 攻击并追击敌军,一旦攻击完成(敌人被消灭或隐形),继续执行脚本 | |
移动类脚本(3,47,53) | yes | yes | 无视敌人,执行脚本 | 无视敌人攻击,执行脚本 |
yes | no | 在移动到目标地点的同时对敌执行攻击(无炮塔单位只会迎击前方敌军)。如果小队所有成员都迎击,小队会放弃执行脚本投入战斗。战斗结束后,小队会继续执行下一行脚本。 | 攻击并追击敌军,如果小队所有成员都迎击,小队会放弃执行脚本投入战斗。战斗结束后,小队会继续执行下一行脚本。 | |
no | yes | 无视敌人,执行脚本 | 无视敌人攻击,执行脚本 | |
no | no | 在移动到目标地点的同时对敌执行攻击(无炮塔单位只会迎击前方敌军)。 | 在移动到目标地点的同时对敌执行攻击(无炮塔单位只会迎击前方敌军)。如果敌军逃跑,小队会开始追击。如果小队赶到敌军的地点,则会放弃当前脚本,在战斗之后执行下一行脚本。如果小队在未赶到敌军地点时战斗结束,小队会继续执行当前脚本。 |
MindControlDecision相关参数:
参数 | 描述 |
---|---|
0 | 不使用这个逻辑 |
1 | 招募 |
2 | 送进部队回收站 |
3 | 送进生化发电厂 |
4 | 搜索敌人 |
5 | 什么也不做 |
触发·Trigger
触发均需要放在[AITriggerTypes]之后,这个可以视作注册表和本体的合并项目。
触发的格式如下:
TriggerName = Trigger Name,7654321-G,<all>,3,1,GAREFN,0A00000002000000000000000000000000000000000000000000000000000000,250,50,500,1,0,1,0,<none>,1,1,1
触发的各项参数解释如下(从上往下):
触发名称 | 随意写,但一定要是英文,同时不能有其他符号。 | ||||||||
---|---|---|---|---|---|---|---|---|---|
第一小队 | 在[TeamTypes]中注册过的小队。 | ||||||||
所属国家 | 在Rules(md).ini中[Country]注册表中的国家。 | ||||||||
科技等级 | 无特殊需要可以写1,如果有特殊模式可以按模式需要自行拟定。 | ||||||||
触发前提 | -1: 任何条件 | 0: 敌方拥有(前提)指定的单位(建筑升级无效) | 1: 己方拥有(前提)指定的单位(建筑升级无效) | 2: 敌方电力黄 | 3: 敌方电力红(间谍偷电成功时有效) | 4: 敌方金钱大于或等于 | 5: 本方铁幕装置就绪 | 6: 本方超时空传送就绪 | 7: 中立方拥有(前提)指定的单位 |
前提条件 | <all> | 单位名称 | 单位名称 | <all> | <all> | <all> | <all> | 单位名称 | 单位名称 |
条件对比参数 | 64位长度,16进制。前10位有效。前8位代表数值,第9、10位代表算法值。详情见条件对比参数详解 | ||||||||
基础权重 | 0~5000, 0为不触发,5000为满足条件必触发 | ||||||||
权重下限 | 0~5000, 0为不触发,5000为满足条件必触发 | ||||||||
权重上限 | 0~5000, 0为不触发,5000为满足条件必触发 | ||||||||
游戏模式 | 0: 战役模式 | 1: 遭遇战模式 | |||||||
无效参数 | 0 | ||||||||
阵营 | 1: 盟军 | 2: 苏联 | 3: 尤里 | 4: 第四阵营 | n:第n阵营 | ||||
第二小队 | 在[TeamTypes]中注册过的小队 | ||||||||
简单的敌人是否触发? | 0: 不触发 | 1: 触发 | |||||||
中等的敌人是否触发? | 0: 不触发 | 1: 触发 | |||||||
冷酷的敌人是否触发? | 0: 不触发 | 1: 触发 |
条件对比参数详解
前8位代表数字,为16进制,可以通过10进制转16进制的转换器进行转换。比如十进制中的100,转换成8位的16进制就是00000064。
在此之后,必须以两位为单位,将16进制的数字倒着写,于是上述16进制数就成为64000000。
最后,将条件附加在16进制数的后面,00:<,01:≤,02:=,03:≥,04:>,05:≠
比如,大于等于100,就写作6400000003,然后在后面添加54个0即可放进触发中。
为了方便,可以用下面这个小工具进行计算:
生成结果: