arma3吧 关注:51,384贴子:496,547
  • 16回复贴,共1

【武器制作问题】AI手上的机枪不能全速开火是不是引擎的限制

只看楼主收藏回复

事因我最近制作了一把MG42机枪 射速设定为reloadTime=0.039999999; 这串数字代表的是非常高的射速
在我本人的测试下射速方面一切正常,但当AI使用这把机枪时AI射击的频率却非常奇怪 AI会以每一发子弹0.1-0.2秒的间隔开火 这也导致了这把射速非常高的枪在AI的使用下反而变低了很多的奇怪现象
经过大量的测试证实这跟武器config的class Far,class medium之类的AI射击模式设定毫无关系 甚至似乎跟任何代码都没有关系 所以我就好奇这是不是一个引擎方面的问题?请问有没有人有相关经验可以解答一下小弟我的疑问?


IP属地:中国香港来自Android客户端1楼2023-01-17 11:47回复
    我推断是引擎的问题,这代ai手里拿着全自动武器都很少连发,基本都在单点,而且还有很奇怪的一点,在编辑器中,偶尔会发生很奇怪的问题,比如说拿着机枪的ai,你作为该ai开始游戏,机枪的射速就是枪支本身的属性射速,而使用别的ai开始,等死掉之后切换成拿着机枪的ai,有概率卡出另一种奇怪的模式,部分机枪射速会变得极快,就像是现实的机枪射速一样,而且这个bug在切换过一次设计模式后就消失了,会变回枪支原本的属性射速


    IP属地:广东来自Android客户端2楼2023-01-17 20:38
    收起回复
      我觉得要不就是游戏本身引擎导致的,要不就是ai的那些加强模组导致的这个问题


      IP属地:广东来自Android客户端3楼2023-01-17 20:40
      回复
        AI开火行为是要独立写的,是一个专门射击次数和射速,AI开火只会以这个模式开火,你发现的bug就是模组作者忘记写玩家禁用导致的。有时候AI会在开火后到一瞬间收枪奔跑,但是这时候你会发现枪口实际朝向地面,是因为任何射击模式不可停止。由此可看出AI是使用武器的一个特殊射击模式,具体可在wiki里查询关键词cfgWeapons


        IP属地:江苏来自Android客户端4楼2023-01-17 21:40
        回复
          @SF034
          对 你说的应该是这个吧 这些理论上就是用来定义AI射击频率和模式的代码 其中每一行代码我都研究过 但还是不行 AI开火依然是一卡一卡的 具体可以帮忙看一下我的视频演示
          class Far: Full
          {
          aiBurstTerminable=1;
          showToPlayer=0;
          burst=3;
          burstRangeMax=12;
          aiRateOfFire=4;
          aiRateOfFireDispersion=3;
          aiRateOfFireDistance=600;
          minRange=300;
          minRangeProbab=0.64999998;
          midRange=400;
          midRangeProbab=0.25;
          maxRange=500;
          maxRangeProbab=0.050000001;
          };
          class Medium: Full
          {
          aiBurstTerminable=1;
          showToPlayer=0;
          autoFire=1;
          burst=4;
          burstRangeMax=12;
          aiRateOfFire=0.000000001;
          aiRateOfFireDispersion=2;
          aiRateOfFireDistance=300;
          minRange=100;
          minRangeProbab=0.75;
          midRange=200;
          midRangeProbab=0.69999999;
          maxRange=300;
          maxRangeProbab=0.2;
          };
          class Short: Medium
          {
          showToPlayer=0;
          autoFire=1;
          aiRateOfFire=0.000000001;
          aiRateOfFireDistance=50;
          minRange=10;
          minRangeProbab=0.050000001;
          midRange=50;
          midRangeProbab=0.5;
          maxRange=100;
          maxRangeProbab=0.039999999;
          };
          这是玩家使用下的MG42,射速无问题
          https://www.bilibili.com/video/BV1ZY41197Zo/?vd_source=d8887c411d452f97901e31625b57a398
          这是AI使用下的MG42,射速有问题
          https://http://www.bilibili.com/video/BV16v4y117dm/?spm_id_from=333.999.0.0&vd_source=d8887c411d452f97901e31625b57a398


          IP属地:中国香港5楼2023-01-17 22:48
          回复
            试试把每个mode的aiRateOfFireDispersion调到1
            还是觉得卡就调到0,再把aiRateOfFire调到0
            IFA的机枪就是所有mode里前者是1,後者是0
            因为AI射速是aiRateOfFire + aiRateOfFireDispersion * Random<0,1>
            把俩调到0就是AI理论射速的最大限度了
            实际上仍会有些微卡,那是因为AI每发射击都会微调些许,不像玩家一样按着不放
            尤其是远程,越远越常微调(IFA的机枪也是这样)。在近身(通常10米左右)AI就会全自动射击,因为咋瞄都在凖星里面
            真想啥情况AI都全自动倒是有一个方法,就是把每个隐藏mode里burst的数值调到弹匣数,那AI一开火就会按最大射速打空整個弹匣(显然这不是一个好方法)


            IP属地:中国香港来自Android客户端6楼2023-01-18 04:04
            收起回复
              今天再看了下IFA MG42的config。没错,你猜对了,(只有)MG42调动了脚本
              不过不是用火力压制之类的,是用setWeaponReloadingTime和forceWeaponFire这倆直接改变射速的指令
              基本上config上的寫法就是下面那个样子
              class cfgWeapons
              {
              class Default
              {
              class Eventhandlers;
              };
              class RifleCore: Default
              {
              };
              class Rifle: RifleCore
              {
              };
              class Rifle_Base_F: Rifle
              {
              };
              class Rifle_Long_Base_F: Rifle_Base_F
              {
              };
              class LIB_LMG: Rifle_Long_Base_F
              {
              };
              class LIB_MG42: LIB_LMG
              {
              class Eventhandlers: Eventhandlers
              {
              class WW2_mg42_ROF
              {
              fired="_this spawn WW2_fnc_mgROF;";
              };
              };
              };
              };
              至於mgROF可以在ww2_core_f_ww2_system_infantry_f.pbo里面的mgROF找到
              FOW的MG42也是加个Fired的Eventhandlers,就是脚本名称也叫mgROF
              脚本里面的细节,只能说要理解和修改真的很费时间,用就完事了


              IP属地:中国香港7楼2023-01-18 14:41
              收起回复
                @AndNowIKillYou
                多亏了这位大佬 目前MG42的射速问题解决了 此贴可以终结了 我是真的哭死


                IP属地:中国香港8楼2023-01-18 15:38
                回复