只狼新建敌人缺失伤害判定问题的研究
萝莉大王hello
2024年07月11日 08:00

在我新建敌人氢氟酸(通过防身泪滴将1010芦苇小兵修改成1800芦苇小兵)的时候,出现了玩家和敌人,敌人和敌人,都无法攻击到的BUG。而在最近创建的敌人法师Grand Ring也同样出现了这个问题,而最早这个问题是出现在芦苇之国MOD的神父,最近招财的法环移植怪也出现了这个问题。所以还是得研究研究这玩意儿到底是怎么产生的

首先分析一下现象:

1.敌人被生成时发生,这意味着不读取就不会出现。

2.完全随机出现,曾遇见过连续5次正常,第6次出现伤害问题,或者连续3次出现问题的大金现象。

4.出现这情况的时候,无论是玩家攻击敌人,还是不同阵营的敌人互相攻击,都没有任何判定,而且范围是整个地图,同时我用开发者菜单检查了判定框也都正常显示没有问题。

5.问题只是在伤害判定,异常积累,特效依然生效,敌人碰撞,AI等依然存在,地图,特效,等其他正常没有任何问题。


那就从只狼MOD文件开始一个又一个排查吧

刚开始我尝试修改氢氟酸的AI,修一下就出现问题,我就一度认为是AI问题,去找阿愿,哈哈,这玩意儿纯概率完全不是。这就不得不提只狼新建敌人以后弹刀音效有问题,就是很早以前芦苇之国的怪物弹开音效很怪,后来这问题不出自map和npcparam,材质,是因为behavior和atk 和 原版的参数无法对应,总而言之解决问题就是:将原本敌人的behavior 和 atk 数值完全修改ID以后复制过去就可以解决


还是回到失去攻击判定的问题来,从逻辑上来首先排除event事件,script AI,sfx特效,menu图标界面文件等看起来都毫无关联的影响,为什么不排除sound?因为新建敌人一般都会创建一个新的sound,而出现问题的怪都有sound,所以不排除sound造成的影响。

action:

action里的xxxx. hks是敌人的行为逻辑,正常人也不会修改敌人的这个,从新建敌人的action,正常和不正常敌人都是相同的hks大小来看,应该不是hks造成的影响


sound:

去掉sound依然有问题,排除。


map: 直接引用原版敌人,注意实体问题,model ID问题,各种参数问题,依然出现问这种现象,排除。


param:

这个感觉就大有问题,于是我重新搞个原版的param,测试了胶囊体大小,row值,敌人类型,常驻特效,攻击判定,bevavior等各种情况,甚至直接用原版的参数,依然出现问题,遂排除。


chr:

这里是敌人的动作和模型数据,先从动作文件anibnd开始吧

我新建敌人用了自身动作以外,还映射了怪猎崛起的盾斧动作,于是我直接把异常敌人的动作anibnd文件用正常的NPC(剑圣 苇名一心)去替换,嗯,这个问题消失了,基本把问题锁定在了anibnd。


anibnd包含有: tae词条:在UE里面就是各种动画通知,把未出现问题敌人的tae词条复制过来,依然存在判定异常,和词条无关。

单个动作文件:我怀疑是移植动作的问题,于是把出现问题敌人的所有动作放进来,未出现判定异常,确认和所有动作没任何关系。同时我也猜测是动作文件不齐或者动作存在和骨骼不一致导致的判定异常,我询问过吧主暗影大人和招财,移植的敌人一般不调用的动作是不会拿来修改的,我就猜测是由于动作文件和骨骼文件有对不上的情况,所以会出现这个问题,甚至猜测缺失越多出现的概率越高,但是我现在移植的敌人动作高达279个,缺失的动作一个又一个复制粘贴也太麻烦了,于是我重新移植防身泪滴复制了动作较少的废案敌人的动作(那个巨大老翁),巨大老翁未出现判定问题,我把出错敌人动作给巨大老翁,依然出现判定问题,和动作文件不齐 动作骨骼文件不一致无关。

cxxxx.compendium:未知文件,不知道拿来干嘛的,把未出错敌人复制过来,依然出现判定异常,和cxxxx.compendium无关。

骨骼skeleton问题: 把未出现问题敌人的骨骼复制过来,最终发现当我把剑圣苇名一心的骨骼文件给问题敌人以后,就没有判定异常。


skeleton.hkx是骨骼文件,我使用的方法是把移植敌人骨骼用dsa4.8.6导出以后,再通过3dmax导出,同时注意去掉动作数据保留骨骼数据,我对比了剑圣苇名一心的骨骼数据,和问题敌人(黑骑士)的骨骼数据,除了多出几个骨骼以外(删掉以后依然存在问题),其他均没巨大差别,父级一致,实在想不出为何骨骼会导致这个问题。

但同时注意到一个问题:

但是,当我把出错的敌人给没出错敌人,依然没有出现错误判定。

这很自相矛盾

会不会是防身泪滴本身的BUG?我创建的巨大老翁就没有任何问题,难道说创建的一些特定的ID才会出问题,毕竟这种事情也很常见,但这个想法被我排除了,因为我无论如何怎么复制创建任何ID的剑圣苇名一心都没有任何问题,为什么正常敌人使用了错误骨骼不出现异常,而移植敌人用了他的骨骼会出现异常。

会不会是移植敌人的原因?这问题也被排除,因为我创建的氢氟酸是用原版小兵的数据,(注:前身实际上是义父)

难道其他数据也用了骨骼数据?

于是我重新查询NPC数据

anibnd:NPC的动作数据,骨骼是一个巨大因素

behbnd:忘记是啥了,只狼不能改,我把巨大老翁的behbnd数据给了黑骑士,未解决问题 chrbnd包含模型数据:

flver是黑骑士的数据,我想过是模型里面的骨骼问题,但是不知道怎么改。

我只知道c.clm2是布料有关的数据,其他几个不知道拿来干嘛的,于是我把黑骑士的模型替换给巨大老翁,直接修改flver名称,然后把他打包重新进行游戏,

判定问题修复了。

暂时得出来的最终原因是:

防身泪滴创建的布料,有些模型是用不了的,重新换一个敌人就好。

希望能给你提供到帮助。

最近连续加班好几天,做程序员好累啊,全是时间节点,也没啥有空的时间,搞这个研究就花了一周,然后又是连续加班好几天。