简单粗暴的飞行道具AI检测教程
原文地址:https://tieba.baidu.com/p/1756702285?qq-pf-to=pcqq.group
引言:飞行道具的原理
飞行道具有两种:helper型,helper的state里带有hitdef。proj型,由本体直接用projectile控制器叫出。
敌我双方helper的数据可以像敌我本体一样直接读出。比如说速度,我方本体访问我方本体的横坐标速度写法是:
vel x
我方本体访问敌人横坐标速度:
enemynear,vel x
我方本体访问我方helper需要用helperID。在召唤一个helper是,控制器里有写ID=9741(举例,可以是任何数字),这里的ID就是helperID。那么访问我方helper就可以用:
helper(9741),vel x
那么敌方helper呢?这里就要提及mugen引擎的处理原理。引擎对每一个本体和helper都分配一个独一无二的序列号,叫做playerID,而且是按顺序排列的,比如先召唤出playerID为87的一个helper,下一个helper就会是88。而且就算playerID为x的helper消失了,下一个helper的ID仍然是x+1。访问一个playerID为103的helper(敌我皆可,针对本体也可以)的写法是:
playerID(103),vel x
Part1,helper式飞行道具的检测
那么我们知道helper是用hitdef攻击的,而hitdef又肯定有hitdefattr,用playerID(xxx),hitdefattr来看一个helper是否有hitdef不就可以了?
没错,但是必须知道对方helper的playerID。好在playerID是序列分配的,我们把playerID的范围缩小到一个区间之后就可以 一・个・一・个・试
大体思想就是储存上一个已知的helper的playerID,作为区间的下限。召唤一个helper然后立刻删除,将这个helper的playerID,记录下来,作为上限。在此区间一个一个试。
具体实现方法是用一个var当作现在正在实验的playerID值,从下限开始。如果一个helper有hitdef,而且不是我方的,就跳出state。如果不行就changestate到现在的state,然后这个var的数值+1,一直到上限。到上限之后跳出state。
区间的大小要注意两点:一,changestate不能超过2500个循环。二,1F内changestate太多会耗CPU,渣机器就跑不动。本人的做法没有用召唤helper的方法设置上限,而是200循环之后直接跳出,效果也不错。