尤里的复仇AI.INI的构成&人工智能编辑全集
红色警戒二使用了 “脚本化” 的人工智能(指一个系统只对预知的行动和脚本作出反应而非启发式的人工智能 – 对一个动作作出反应并且根据一个动作而预测下个动作,
普遍的一个脚本化的系统是这样工作的
计算机使用一个对象,或一组对象,称做 [TaskForces] 中文名 [使命部队],
[使命部队] 按照他们的基本属性被控制并归类为 [TeamTypes] 中文名 [组类],
当进行行动,或系列行动时,[组类] 被 [ScriptTypes] 中文名 [脚本类] 控制,
[脚本类] 可能会或者可能不会被预先定义的事件叫做 [AITriggerTypes] 中文名 [人工智能撞针] 激活。
打开 AI.ini 文件
[TaskForces] 使命部队项
这项用来列出基本上所有红警二的 [TaskForces] 使命部队, 列表从 0 号开始,号随着这个使命部队包括的单位的数量增加而增加。如果你想人工智能造新单位或使用更多的单位你就必须改这项。
在这里每个使命部队所对应的条目都是用十六进制数值来表示的(你实际上可以用其它的,但是我建议你保持十六进制的传统)。 下面举个详细例子。
在[TaskForces] 使命部队项下
[某使命部队的十六进制代码]
Name=
a=x,UNIT
b=x,UNIT
c=x,UNIT
...
Group=
[某使命部队的十六进制代码] – 这是用来查找相应的使命部队用的,就像在[vehicletypes] 加了新单位后你必须也有相应的项。
Name=这个是专门给你用写注释的, 对游戏毫无作用, 你可以随便写什么。
n=x,UNIT – 用来定义有那些单位在使命部队里,每定义一个新的使命部队你必须新起一行,你沿用的使命部队的名称必须和 Rules.ini 里[BuildingTypes],[InfantryTypes],[VehicleTypes] 或 [AircraftTypes] 列表里部队的名字一样,记住,使命部队必须从0号开始. 例子, 定义一个有 5 个 美国大兵和 2 个灰熊坦克的部队
[使命部队的十六进制代码]
Name=5 GI's and 2 Grizzly Tanks
0=5,E1
1=2,MTNK
Group=-1
Group= -n 当使命部队被造出来或被选择完时,这个会使使命部队造成形成某种特殊的集结,-1 是缺省值,它的功能是使这个使命部队所有的单位移动当这些单位被遗留下来时(如果使命部队包含了运输类单位你就应该用 -1,关于怎么把一些单位装上运输类单位请看[组类]). 如果你不使用 -1的话可能造成问题(请看[脚本类] ‘换组’一节专门关于这个的描述)。
[ScriptTypes] 脚本类项
这项用来列出基本上所有红警二的 [ScriptTypes] 脚本类, 列表从 0 号开始,号随着这个脚本类的数量增加而增加。
在这里每个脚本类所对应的条目都是用十六进制数值来表示的(你实际上可以用其它的,但是我建议你保持十六进制的传统)。 下面举个详细例子。
在[ScriptTypes] 脚本类项项下
一个例子
[脚本类的十六进制代码]
Name=
a=x,y
b=x,y
c=x,y
...
[脚本类的十六进制代码] – 这个必须和你在 [ScriptTypes] 脚本类项 定义的名称一样
Name=这个是专门给你用写注释的, 对游戏毫无作用, 你可以随便写什么。
n=x,y – 这个定义一个使命部队将做的行动,每做一个新行动,你必须在写的时候新起一行,第一个行动从0号开始,行动总数可以无限的沿长或非常的复杂。这就是红警系列人工智能的关键所在
在这里,第一个值,x, 代表将做的行动,有些行动需要一个辅助数,这就是我们的 y(假设 x 代表抽烟,但抽烟可以站着抽也可以坐着抽,y就起到区分的作用)
下面举个例子。第一行(0=0,5)使计算机攻击任何遭遇的敌方车辆,第二行使计算机当完成第一行的任务后攻击任何目标。
[脚本类的十六进制代码]
Name=Attack any vehicle then attack anything
0=0,5
1=0,1
下面将给出脚本 x,y 值详细列表, 这是编辑红二人工智能最繁琐的地方,朋友们可要有点耐心了。
当 x 等于 0 时
0,y = 攻击目标, y = 将被攻击的目标的种类
在这里做的任何修改将指令[组类]去使用相对应的使命部队并使部队进攻被 y 值指定的敌方部队
下面是 x 等于0 时可以使用的 y 值。(大家不要高兴, x 总共有58个值,而且 y 值都不一样)
0什么都不做取消攻击
1任意攻击攻击任何它们遭遇的东西
2建筑任何属于[BuildingTypes] 的建筑类
3矿车任何属于[VehicleTypes] 的有 Harvester=yes 这项的车辆
4士兵任何属于[InfantryTypes] 的士兵
5车辆任何属于[VehicleTypes]的车辆
6工厂 任何属于[BuildingTypes] 的有 Factory=yes 的建筑如战车工厂
7基地防御类任何属于[BuildingTypes] 的有 IsBaseDefense=yes 的建筑
8基地威胁类任何赶去支援或已经到达被人工智能攻击的敌方基地的敌人
9电厂类任何属于[BuildingTypes] 的有正 Power= 值的建筑
10可被占领类任何属于[BuildingTypes] 的有 CanBeOccupied=yes 的建筑
11科技建筑任何属[BuildingTypes] 的有 NeedsEngineer=yes 的建筑
当 x 等于 1 时
1,y = 攻击路径点, y = 路径点号
在这里做的任何修改将指令[组类]去使用相对应的使命部队并使部队进攻被 y 值指定的路径点号
如果其中的任何成员有 Infiltrate=yes,这些成员将会进入在路径点上的建筑,如果是 Engineer=yes, 将会占领路径点上的建筑(建筑必须是 Capturable=yes 或 NeedsEngineer=yes),如果是 Agent=yes, 将会渗透入在路径点上的有CanBeOccupied=yes 的建筑,如果是 C4=yes,则会炸掉路径点上的有CanC4=yes 的建筑。 如果路径点上没有建筑,使命部队还是会移动到路径点上去并等待下个指令。98 一般是玩家出来的位置
当 x 等于 2 时
2,y =换组, y = 组的形状
这个是从红色警戒一来的,很有可能已经在红二里废除了,如果使用这个话,大部分时候会造成内部错误,但我还是把它写出来供参考。
-1缺省
0什么都不做保持组的队形
1紧密队形保持紧密队形,快速移动的减速,低速移动的加速
2分散队形散乱队形,各单位使用他们自己的移动速度
3楔行队型北三角形队形指向北方
4楔行队型东三角形队形指向东方
5楔行队型南三角形队形指向南方
6楔行队型西三角形队形指向西方
7线行队形北南队形从北到南拉一条线
8线行队形西东队形从西到东拉一条线
9北我不想说了
10东
11南
12西
13陆地用在 LOCOMOTOR 是气垫的单位
当 x 等于 3 时
3,y = 移动到路径点, y = 路径点号
在这里做的任何修改将指令[组类]去使用相对应的使命部队并使部队移动到被 y 值指定的路径点号
0 到 7 是玩家出来时的位置,98是任务时出来的位置,99为地图中部
当 x 等于 4 时
4,y = 移动到坐标点, y =坐标点号
在这里做的任何修改将指令[组类]去使用相对应的使命部队并使部队移动到被 y 值指定的坐标点号(以格计算)。如果你想某个组类激发某个行动你就要用这个,在红警二里,每个格都有一个相应的坐标点用于激发某个事件,记住,每个地图的的坐标点号不一定是相同的。
|当 x 等于 5 时
5,y = 警戒某区域,y=在这个区域警戒的总时间(以十分之一分为单位算)
在这里做的任何修改将指令[组类]去使用相对应的使命部队并使他们进入警戒状态(就像人类玩家按G一样)。
当 x 等于 6 时
6,y = 跳到某个脚本,y=脚本的序号
这个是用来重复某个在[脚本类]里的行动用的,例如,你想重复在第二行做过的行动那么 y 值就填 1
当X=7时
7,Y = 玩家胜利,Y = 0
强迫游戏以TeamType的所有着获胜为条件(他们赢得游戏)。
注:此X,Y值一般无实在意义。
当X=8时
8,Y = 卸货, Y = 卸货的类型
Y=0时,当运输单位和单位全部在小队中时,执行剩下的脚本。
Y=1时,当只剩下运输单位且单位失去时,只有运输单位执行剩下的脚本。
Y=2时,当只剩下单位且运输单位失去时,只有单位执行剩下的脚本。
Y=3时,当单位和运输单位都失去是,不执行剩下的脚本。
当X=9时
9,Y=部署,Y=0
如果TaskForce含有单位能够部署的设置(例如,一个单位有DeployInto=一个建筑类型,或者有Deployer=yes, DeployFire=yes, DeployToFire=yes等设置),那么才可以促使它们部署在某个地形单元(和点选一个单位,然后按D键或点命令栏里的Deploy按钮的效果相同)。
当X=10时
10,Y=跟随友军,Y=0
当一个单位移动的时候,这个指令引起TaskForce跟随最近的友军单位,虽然它将没有作用,但好像它是在“保卫”友军单位。跟随不是永远,当这个TaskForce分配到另一个任务时会放弃跟随。提示:如果其支持的TeamType在它的ScriptType中有这个XY值且是在第一行,那么它将会护送第一个TeamType。
=11,15 ; 搜索攻击
=54,0 ; 集合
=53,0
=5,10 ; 守卫范围10
=47,317 ; 移动
=46,131389 ; 攻击
=49,0 ; 重复以上行动直至就绪
=46,131143 可能的修桥
=63,0 可能的修桥
[0C85ADEC-G]
Name=CHINABB-AIZ
VeteranLevel=1 ;设置老兵的状态,在AI.ini中都设为1,也可设成2 或 3
Loadable=no ;一般都设为No. 如果部队中有成员需要Reload的(例如弹药ammo=)就设为Yes
Full=no
Annoyance=no ;yes是使AI的部队攻击完后撤退,并且待会再次发动攻击
GuardSlower=no ;部队在基地中作出还击时不会变慢
House= ;可以生产这种部队的国家/阵营
Recruiter=no ;AI会动用现有的单位去组成队伍,优于去建造新的单位来组成队
Autocreate=yes
Prebuild=no ;AI是否在还没需要时预先建造此队伍
Reinforce=no ;设置此部队是否为援军。多数用于守卫的部队会设成Yes
Droppod=no
UseTransportOrigin=no
Whiner=yes ;(大概,可能)决定AI是否自动补充队伍中被消灭的成员。通常用于防守队伍=[这句好象不对]
LooseRecruit=no ;决定部队是否在完成script type定义的任务后解散,而且不会再作为新兵加入其他队伍
Aggressive=yes ;不是使AI集结军队并盲目地去执行指令.
Suicide=no ;设置此部队是否忽略任何攻击并继续前进,常用于战机
Priority=5 ;建造部队时的优先权。通常为整数,数字越小,AI建造的可能性越大
Max=1 ;AI自动创建此部队的次数。范围(1 ~ 3)。当team type中没有autocreate=yes时,把它设成1
TechLevel=0 ;指定可以制造此队伍的最低科技水平,通常设为0
Group=-1
OnTransOnly=no
AvoidThreats=no ;控制AI是否在遇到敌人时停下并还火=[这句好象不对]
IonImmune=no ;是否对Ion Stroms免疫,一般都设为No.(在RA2中好象没用)
TransportsReturnOnUnload=no ;设置运输单位是否在完成卸载时返回基地
AreTeamMembersRecruitable=no ;YES=若当前的部队完成任务后还有剩余单位,将会加入另一队中。默认为no
IsBaseDefense=no ;决定部队是留在基地周围防守=[这句好象不对]
OnlyTargetHouseEnemy=no ;是否只对付敌对玩家的单位,而不攻击中立的单位(neutrals阵营的)
Script=0D9E236C-G
TaskForce=0D0222FC-G
0C0000DC-G=Nation Russian,XXXX,Russians,10,1,NARADR,0100000003000000000000000000000000000000000000000000000000000000,500.000000,10.000000,500.000000,1,0,2,0,,0,1,1
他们的含义是: AI名称,AI组名称,所有国(如果都能造为),科技等级,不明,诱发器开关,诱发器选项,诱发几率,诱发几率,诱发几率,不明,不明,基本阵营(1为盟军,2为苏军,3为尤里),附加AI组,简单敌人使用?(0为否,1为是),中等敌人使用?,冷酷敌人使用?
XXXX就是控制TaskForces的主代码。