中国战地技术资源网 经典模组专区 Battlefield 1942 关于战地1942与战地2的武器AI    (回复:12/浏览:2021)
字号: ﹣中﹣
头衔 版主
积分 7162
帖子 479 (1)
注册 2009-12-11

关于战地1942与战地2的武器AI

1 楼 发表于 2009-12-18 11:17 打印 只看楼主
先看下战地1942的AI(来自于BG42拟真模组:AssaultDUKW)
weaponTemplate.create AssaultDUKWMainGun
weaponTemplate.burst 0
weaponTemplate.indirect 1
weaponTemplate.minRange 5.0
weaponTemplate.maxRange 2000.0
weaponTemplate.deviation 1
weaponTemplate.deviationCorrectionTime 3
weaponTemplate.weaponActivate PINone
weaponTemplate.weaponFire PIFire
weaponTemplate.setStrength Infantry     9.0
weaponTemplate.setStrength LightArmour  8.0
weaponTemplate.setStrength HeavyArmour 10.0
weaponTemplate.setStrength NavalArmour  0.0
weaponTemplate.setStrength Submarine    0.0
weaponTemplate.setStrength Air          0.0
感觉是不是很像呢?基本上的设定都是一样的,然后再次重申一遍:weaponTemplate.weaponFire PIFire 这个参数很重要,如果假设一辆坦克有两种武器(废话),而你把机枪的参数设定成了左键发射(事实上是右键)而坦克炮弹则是相反,就会出现以下的结果:Bot的坦克用坦克炮打步兵,用机枪打坦克(汗……),所以,这个语句是相当重要的。
至于indirect的矫正,不使用一般来说是1-30度的攻击角度,使用的是余下的一直到90,所以,这个同样相当important!
一个武器AI的最基本写法是:(×代表数字或其他字符)
weaponTemplate.create (名字)
weaponTemplate.burst 0或者是1(当开火时是否需要把弹药全部射出去[仅限于连射武器像机枪等……])
weaponTemplate.indirect 0或者是1(定义已有过解释)
weaponTemplate.minRange ×(最小射程[支持小数])
weaponTemplate.maxRange ×(最大射程[支持小数])
weaponTemplate.deviation 0或者是1(是否允许偏差[如果不允许所有的Bot就都是神枪手了!战地2中作用不大,照样秒杀你])
weaponTemplate.deviationCorrectionTime ×(弹道误差矫正间隔,必须要有以下语句的支持才有作用:weaponTemplate.deviation 1)
weaponTemplate.weaponActivate PINone、PIMenu1-6(激活武器数字选项,如果填错了会导致Bot使用错误的武器)
weaponTemplate.weaponFire PIFire、PIAltFire(左键开火还是右键开火,出错后过应该已经知道了)
weaponTemplate.setStrength Infantry          ×
weaponTemplate.setStrength LightArmour    ×
weaponTemplate.setStrength HeavyArmour   ×
weaponTemplate.setStrength NavalArmour    ×
weaponTemplate.setStrength Submarine       ×
weaponTemplate.setStrength Air                  ×
(以上为定义AI对武器伤害作用的认知)

这是战地1942武器AI的写法,你们可以从中看出,战地1942和战地2的武器AI写法可以说是完全一样,同样,这也是战地2中变化最小的代码(我只是说代码,但是功能强化了)
另外还有诸如:exitvelocity 一类的,专门用于遥控载具的代码,我就不说了,估计战地2里面什么作用都没有,我就简单介绍一下:
weaponTemplate.exitvelocity ×(弹药出膛速度,方便Bot计算提前量[专门用于那些发射后会自动减速的炮弹一类的弹药,要获得一个正确的数值需要上百甚至上千次的试验才能得到!])
weaponTemplate.useAimerOnly 1或者0(只有瞄准了才能发射[必须在视线范围内,和Init有关])
weaponTemplate.setSoundSphereRadius ×(声音传播范围,和战地2的一样,但是,在战地2里你要是改的太大敌军会全部以你为目标攻击的!)
至于代码的搭配要看你们得了,搭配得越好效果越棒!(至于射击范围可以提高积极性是错误的,真正影响积极性的是声音和弹药总数!)
还有,提供以下目前战地1942电脑AI最强的Bot基础AI以供大家研究,估计应该有些帮助的……
rem *** Plugins ***
aiTemplatePlugIn.create Unit SoldierUnit
aiTemplatePlugIn.equipmentType 3
aiTemplatePlugIn.setBattleStrength Infantry   10.0
aiTemplatePlugIn.setBattleStrength LightArmour 8.0
aiTemplatePlugIn.setBattleStrength HeavyArmour 4.0
aiTemplatePlugIn.setBattleStrength NavalArmour 0.0
aiTemplatePlugIn.setBattleStrength Submarine   0.0
aiTemplatePlugIn.setBattleStrength Air         0.0
aiTemplatePlugIn.setStrategicStrength 0 2
aiTemplatePlugIn.setStrategicStrength 1 2

aiTemplatePlugIn.create Physical SoldierPhysical
aiTemplatePlugIn.setStrType Infantry

aiTemplatePlugIn.create Mobile SoldierMobile
aiTemplatePlugIn.vehicleNumber 1
aiTemplatePlugIn.maxSpeed 6.0
aiTemplatePlugIn.turnRadius 0.1
aiTemplatePlugIn.coverSearchRadius 50.0
aiTemplatePlugIn.setSoundSphereRadius 0.0 30.0
aiTemplatePlugIn.setHearingProbability 0.01 0.1
aiTemplatePlugIn.lodHeight 1.0

aiTemplatePlugIn.create ControlInfo SoldierCtrl
aiTemplatePlugIn.driveTurnControl           PIMouseLookX
aiTemplatePlugIn.driveThrottleControl       PIThrottle
aiTemplatePlugIn.aimHorizontalControl       PIMouseLookX
aiTemplatePlugIn.aimVerticalControl         PIMouseLookY
aiTemplatePlugIn.lookHorizontalControl      PIMouseLookX
aiTemplatePlugIn.lookVerticalControl        PIMouseLookY
aiTemplatePlugIn.throttleSensitivity        1.0
aiTemplatePlugIn.pitchSensitivity           0.4363323
aiTemplatePlugIn.rollSensitivity           -0.5235988
aiTemplatePlugIn.yawSensitivity             1.0
aiTemplatePlugIn.lookVerticalSensitivity    0.4363323
aiTemplatePlugIn.lookHorizontalSensitivity -0.5235988
aiTemplatePlugIn.throttleLookAhead          1.0
aiTemplatePlugIn.pitchLookAhead             1.0
aiTemplatePlugIn.rollLookAhead              1.0
aiTemplatePlugIn.yawLookAhead               1.0
aiTemplatePlugIn.lookVerticalLookAhead      1.0
aiTemplatePlugIn.lookHorizontalLookAhead    1.0
aiTemplatePlugIn.pitchScale                 5.0
aiTemplatePlugIn.rollScale                  5.0
aiTemplatePlugIn.yawScale                   1.0
aiTemplatePlugIn.lookVerticalScale          1.0
aiTemplatePlugIn.lookHorizontalScale        1.0

aiTemplatePlugIn.create Armament SoldierArmament

rem *** AITemplate ***
aiTemplate.create Soldier
aiTemplate.addPlugIn SoldierUnit
aiTemplate.addPlugIn SoldierPhysical
aiTemplate.addPlugIn SoldierMobile
aiTemplate.addPlugIn SoldierCtrl
aiTemplate.addPlugIn SoldierArmament
aiTemplate.addType ITUnit
aiTemplate.addType ITMobile
aiTemplate.addType ITBiological
aiTemplate.addType ITGround
aiTemplate.addType ITSoldier
aiTemplate.degeneration 15
aiTemplate.allowedTimeDiff 0.5
aiTemplate.basicTemp 1
aiTemplate.commonKnowledge 0
3
狂顶
2
猛踩
头衔 版主
积分 14670
帖子 964
注册 2009-06-03
2 楼 发表于 2009-12-18 11:50
很好。
老师,能不能讲一讲如何让bot切换武器的方法。
比如AIX里面的载具有很多种武器,但是有些武器bot们不常用。
我现在正在研究naw_apache,他的左键是火箭弹,右键是地狱火(自动锁定),但是bot们貌似只会用火箭弹。另外,HJ里面的卡曼奇,左键是火箭弹,右键武器又两种,一种是对空导弹,一种是对地的自动锁定地狱火。但是和apahe一样,bot好像只会用左键武器。
当然,无代码无真相,晚上我会把这两个武器的AI发上来的。
头衔 版主
积分 14670
帖子 964
注册 2009-06-03
3 楼 发表于 2009-12-19 01:41
这是卡曼奇的AI。

rem *** Weaponory ***

rem * Rockets*
weaponTemplate.create rah66a_Rockets
weaponTemplate.indirect 0
weaponTemplate.minRange 10.0
weaponTemplate.maxRange 500.0
rem weaponTemplate.weaponFire PIFire
weaponTemplate.setStrength Infantry    15.0
weaponTemplate.setStrength LightArmour 10.0
weaponTemplate.setStrength HeavyArmour 3.0
weaponTemplate.setStrength NavalArmour 0.0
weaponTemplate.setStrength Helicopter  0.0
weaponTemplate.setStrength Airplane    0.0
weaponTemplate.fireRate 1800
weaponTemplate.allowedDeviation 4.0

weaponTemplate.create rah66a_Gun
weaponTemplate.indirect 0
weaponTemplate.minRange 5.0
weaponTemplate.maxRange 350.0
weaponTemplate.setStrength Infantry   20.0
weaponTemplate.setStrength LightArmour 15.0
weaponTemplate.setStrength HeavyArmour 0.0
weaponTemplate.setStrength NavalArmour 0.0
weaponTemplate.setStrength Helicopter  12.0
weaponTemplate.setStrength Airplane    0.0
weaponTemplate.allowedDeviation 3.0

rem * Laser guided *
weaponTemplate.create rah66a_agm114_hellfire_tv
weaponTemplate.indirect 0
weaponTemplate.minRange 30.0
weaponTemplate.maxRange 500.0
weaponTemplate.weaponActivate PIWeaponSelect2
weaponTemplate.weaponFire PIAltFire
weaponTemplate.setStrength Infantry    0.0
weaponTemplate.setStrength LightArmour 15.0
weaponTemplate.setStrength HeavyArmour 15.0
weaponTemplate.setStrength NavalArmour 10.0
weaponTemplate.setStrength Helicopter  0.0
weaponTemplate.setStrength Airplane    0.0
weaponTemplate.allowedDeviation 20.0
weaponTemplate.fireRate 60

weaponTemplate.create rah66a_Sidewinder
weaponTemplate.indirect 0
weaponTemplate.minRange 10.0
weaponTemplate.maxRange 500.0
rem weaponTemplate.optimalRangePercentage 85
rem weaponTemplate.weaponActivate PIWeaponSelect3
rem weaponTemplate.weaponFire PIAltFire
weaponTemplate.setStrength Infantry    0.0
weaponTemplate.setStrength LightArmour 0.0
weaponTemplate.setStrength HeavyArmour 0.0
weaponTemplate.setStrength NavalArmour 0.0
weaponTemplate.setStrength Helicopter  30.0
weaponTemplate.setStrength Airplane    20.0
weaponTemplate.allowedDeviation 20.0
rem weaponTemplate.setFiresThroughTransparent 0

头衔 版主
积分 37604
帖子 1402 (2)
注册 2009-07-10
4 楼 发表于 2009-12-19 13:03
老早以前试过了 PIFire/PIAltFire 在tweak里.fire定义就可以了 感觉和PIWeaponSelect 在BF2里面不起作用
既然你说的这么肯定 我再去试试
头衔 版主
积分 37604
帖子 1402 (2)
注册 2009-07-10
5 楼 发表于 2009-12-19 13:22
已经测试过了 按照LZ的说法 定义PIAltFire 和weaponselect
确定PIAlt位上的武器BOT只会使用编号为一的那个
头衔 版主
积分 14670
帖子 964
注册 2009-06-03
6 楼 发表于 2009-12-19 19:05
对吧。老孔真是好人,谢谢了。

PIWeaponSelect1或者2应该是给玩儿家看的[大笑]
头衔 版主
积分 7162
帖子 479 (1)
注册 2009-12-11
7 楼 发表于 2010-03-05 11:54
突然想起一件事……
大概是刚开始修改的时候,有一次给AH1Z的地狱火+了个AI写了个weaponactive PIALTFIRE,然后坐在正位置上有奇迹发生……(但是很少见……)
头衔 版主
积分 14670
帖子 964
注册 2009-06-03
8 楼 发表于 2010-03-05 15:53
在Super里面,凡是原版的武直,二号位的bot都会发射TV了。只要你给他一个比较正的角度。但是bot只会发射,不会连续用鼠标......[大笑]
头衔 版主
积分 7162
帖子 479 (1)
注册 2009-12-11
9 楼 发表于 2010-03-05 21:36
我看一下,给Bot的导弹加个AI如何???
战地1942是载具发射载具,我看看战地2能不……
如果能,干脆用载具替换导弹的了……
头衔 版主
积分 14670
帖子 964
注册 2009-06-03
10 楼 发表于 2010-03-05 22:26
引用
原帖由8749236于 2010-03-05 21:36 发表
我看一下,给Bot的导弹加个AI如何???
战地1942是载具发射载具,我看看战地2能不……
如果能,干脆用载...

这个,理论上应该是可以的。就像某人曾经把载具用作手持武器一样。
头衔 版主
积分 7162
帖子 479 (1)
注册 2009-12-11
11 楼 发表于 2010-03-06 07:11
就是不能2号位发射,发射完后=进入1号位,然后10秒钟内出错
头衔 上尉
积分 1349
帖子 24
注册 2014-10-24
12 楼 发表于 2015-03-21 17:53
不过当时的BFG貌似比FH0.7知名点(在国内)
头衔 上尉
积分 1329
帖子 82
注册 2015-07-27
13 楼 发表于 2015-07-30 09:43
自己动手,丰衣足食,谢谢楼主分享经验,我会慢慢学习思考研究的