心灵终结3.3.6地图编辑器萌新教程第24篇:如何让AI造兵(一)——AI触发
本来这一篇是想继续补充基地节点的更多细节的,但是有人催我赶紧讲AI触发,
就先把这一篇发出来,基地节点留在后面继续讲。

一、什么是AI触发
在单人战役或者遭遇战中,AI每隔一段时间会派出一支部队来攻击玩家,这个过程就是AI触发。具体来说,AI触发的执行过程是这样的:每隔一定的时间,AI会从若干个满足条件的AI触发选项当中选择一个,该选项会有一个对应的作战小队,此时AI会从生产建筑中生产对应的特遣部队,按照对应的动作脚本中的命令以及作战小队中的设置来执行相应动作,通常是攻击玩家。
“AI触发选项”包括两部分,一部分是自带的,有aimo.ini规定的AI触发选项,称为“宏观AI触发”。另一部分是在地图编辑器的“编辑——AI触发”里面自己写的,只针对本地图生效的AI触发。在“编辑——基本设置(Basic)”中,“忽略宏观AI控制”默认为no,此时如果在游戏中开启AI触发,会同时使用宏观AI触发选项和地图自身的AI触发选项;如果设置为yes,则只使用地图自身的AI触发选项。

二、启用AI触发
我们先只用宏观AI触发为例,来看看具体如何让AI开始造兵。
AI开始造兵需要用到的触发是:结果74:AI触发开始,参数所填的所属方即为开始造兵的AI。但除此之外,还需要一个条件,这个条件与上一篇中提到的AI开始按照基地节点建造建筑的条件相同:AI所属方的IQ≥4,或者使用“触发结果3:生产开始”来让相应所属方开始生产。
注:(1)上面的“IQ≥4”里面的这一临界值是可以调整的,它是由rulesmo.ini中的[IQ]小节里面的“Production=4”决定的,你可以在内置ini中新建[IQ]小节并修改这一条的数值。
(2)“AI所属方IQ≥ini中Production规定的IQ”这一点的效果与“触发结果3:生产开始”相同,目前已知的有以下效果:
(a)相应AI所属方会开始按照基地节点造建筑;
(b)相应AI所属方在使用触发结果74开启AI触发后会开始造兵;
(c)相应AI所属方如果有矿场和重工,会固定地从重工里生产一辆矿车。
尤其注意,(c)这一点是不需要开启AI触发就会发生的。如果当AI造出矿车时,AI的基地在地图可见范围外(比如任务第一阶段用不到AI基地,到了第二阶段地图扩展之后AI基地才会出现),那么AI的矿车会卡在重工里面或者门口,从而该重工无法继续出兵(如果AI基地在地图可见范围里面就不会有这个问题)。如果需要避免这个问题,可以将IQ中的Production这一条设为6,到了需要让AI开始造东西的时候用触发结果3手动激活,或者锁掉AI的矿车这一科技类型。
三、在地图中添加AI触发选项
下面我们讲如何在地图的“AI触发”中添加新的AI触发选项。接下来的示例中,玩家所属方是美国,AI是苏俄,AI的IQ是5,大于Production所需要的4.
我们首先需要准备一个或两个作战小队。在此我们准备两个,作战小队1是“10动员兵,移动到路径点0并攻击”,作战小队2是“10喷火兵,移动到路径点0并攻击”。
我们想要添加一个敌人按照作战小队1的要求来攻击玩家的AI触发选项。我们打开“AI触发”界面,新建一个AI触发,名称随意(一定不要含有英文逗号,最好不要含有中文),“作战小队1”选择我们刚才建立的作战小队1,“作战小队2”暂时不填。其他选项说明如下:
“所属方”和“阵营”:由于我们此处是为苏俄写的AI触发,因此“所属方”选“All”或者“苏维埃”,阵营选“0-All”或者“2-苏联”。这两个选项只要有一个写得与实际AI所属方不对应就会使AI触发无效。如果所属方填“All”,那么如果地图上还有中国、拉丁同盟,也可以使用这个AI触发选项;如果填“苏维埃”就只有苏俄能用。(不过我也不知道为什么还要有“阵营”这个选项……)
“基地防御”和“遭遇战可用”不用管,保持默认勾选即可;下面的三个难度,若勾选上就说明在该难度下会使用这个AI触发。
“类型”:AI将这一AI触发选项纳入考虑的条件。也就是说,只有满足这里的条件,AI才有可能会选择该AI触发对应的作战小队去攻击玩家。选择“无”就表示无条件满足,另外常用的是“0:敌方拥有X类型的建筑<条件符>N个”以及“1:所属方拥有X类型的建筑<条件符>N个”。比如我们选择0,然后在最下面的“额外限制条件”中,“条件”选“大于等于”,“数量”填“1”,“科技类型”填“GACNST”(盟军建造场),那么这个条件合起来就是:“敌方拥有的盟军建造场数量大于等于1个”。这里的“敌方”指的的AI所属方的敌方,在这里就是指玩家。如果玩家没有盟军建造场,AI就不会按照作战小队1派10个动员兵进攻玩家。注意,虽然在“类型”的表述中只用了“建筑”,但实际上所有科技类型,包括建筑和单位都可以使用。
“权重”:每一个AI触发选项有一个权重。当AI在若干个满足条件的AI触发选项中随机选择时,权重越高,被选择的概率就越大。大多数AI触发的权重在一百多到三百多,500就算是比较高了。AI触发中填的“权重”指的是这个AI触发选项的初始权重。如果一个AI触发选项被选择之后,其作战小队在执行脚本的过程中被消灭,那么会判定该作战小队“行动失败”,该AI触发选项的权重会降低;如果作战小队执行到了脚本中的“49-成功”这一动作,那么会判定该作战小队“行动成功”,该AI触发选项的权重会升高。但是权重最低不能低于AI触发里设置的“最低权重”,最高不能超过“最高权重”。另外,权重可以设置的最大值为5000,如果将权重设为5000,那么当满足条件时就一定会选择这个AI触发选项。一般来说,如果不需要对AI行为进行很精确的控制,可以将“权重”“最高权重”“最低权重”设置成一样的,这样在整局游戏中该AI触发选项的权重就不会变了。
比如说,我们把这个例子中的所有权重都填为5000,作战小队是10个动员兵攻击玩家,条件是玩家拥有的盟军建造场数量≥1个,最后勾选AI触发中的“启用”。然后进入游戏看看效果。本例中“基本设置”中的“忽略宏观AI控制”为no,AI所属方有足够的资金。



进入游戏之后,AI只会按照作战小队的指令,每次造10个动员兵攻击玩家。这是因为玩家满足上面AI触发的条件“拥有至少1个盟军建造场”,并且该AI触发选项的权重为5000.

之后,我们卖掉建造场,此时已经不满足这个AI触发选项的条件了,因此这个AI触发失效,其他宏观AI触发开始起作用,此时我们就会看到AI像遭遇战那样出其他的兵来攻击玩家。

如果我们再造一个盟军基地车并展开,理论上敌人又会恢复到只出动员兵的状态。不过,这个过程可能需要很长时间,因为AI每两次选定AI触发的间隔很短,但从它“选定要用哪个AI触发”到它“真正把兵造出来并进攻玩家”经过的时间可能很长,所以当我们展开盟军基地车时,从此时此刻开始AI只会选择造动员兵进攻玩家的AI触发,但之前“积攒”的AI触发队列可能已经很多了,所以短时间内并不会回到“只造动员兵”的状态。因此,尽量不要想着用AI触发的条件去像“触发条件”一样精确地控制一些结果。一般来说,如果没有必要去精确控制AI的行为,可以将所有AI触发条件设为“无”,或者某一科技类型数量≥0,即无条件满足。
顺带一提,AI触发中还有一个“作战小队2”的选项,比如我们把之前写好的“作战小队2(10喷火兵攻击玩家)”填进去,那么AI会交替使用10个动员兵和10个喷火兵攻击玩家。
四、AI触发的其他注意事项
1、如果我们在上面的例子中,在地图上用地编提前放两个属于苏俄的动员兵,那么进入游戏之后,我们会看到AI会造8个动员兵,但不会来攻击玩家,也不会派出其他任何部队。这是因为AI要用10个动员兵来攻击玩家,当地图上有10个属于AI的动员兵时,AI会尝试组建作战小队,但放在地图上的兵默认是不能进行AI重组的(详见教程第18篇),所以AI就卡在这一步了。只有我们消灭这两个动员兵,AI才会再造两个动员兵并组建作战小队来攻击玩家。因此,如果你想启用AI触发,最好不要在AI的基地里放置驻守基地的部队(除非你可以保证基地驻守部队的单位种类不会被包含在任何一个该所属方的AI触发中)。如果一定要有驻守部队,建议单独设置一个所属方。

2、AI造兵不受科技树的限制,但受RequiredHouses和ForbiddenHouses以及TechLevel的限制(详见教程第15、16篇)。比如我们将例子中的动员兵改成火箭飞行兵,苏俄AI仍然可以仅凭苏军兵营造出来。但是如果我们给火箭飞行兵加上ForbiddenHouses=USSR或者TechLevel=11,AI就造不出来了,但是这两种情况AI的表现还有区别。如果添加的是TechLevel=11,AI会造其他的兵来攻击玩家,就像“根本不考虑这个含有10个火箭飞行兵的AI触发,转而去在其他AI触发中选择”;如果添加的是ForbiddenHouses=USSR,那么AI不会造任何兵来攻击玩家,就像“选择了这个AI触发,但是因为造不出来兵所以卡住了”,类似于1中的情况。
3、游戏开始后,如果玩家没有攻击过AI,那么即使开启了AI触发。AI也不会主动来攻击玩家(凭什么遭遇战就会),所以可以在游戏开始之后用触发往玩家基地里面刷一波兵,让玩家攻击AI所属方的单位,从而起到“拉仇恨”的效果。
4、AI每两次选择AI触发选项之间的时间间隔会随任务难度变化,终结难度最短,休闲难度最长。所以含有AI触发的任务天然地就有“难度分级”。