rnf147852 发表于 2017-11-27 12:21:02

任鸟飞《天涯明月刀》BUFF及技能预判

为了提高游戏的可玩性,也为了提高 制作的难度,很多游戏对BOSS的技能伤害都设计的特别高,为了达到及时躲避的效果,我们需要对技能做预判。预判的方式有很多,比如通过收包的方式,这种方式判断的速度最快,但是代码写起来比较复杂,HOOK收包时也往往会被检测导致封号或崩溃。另一种方式就是在释放技能时进行遍历,很多游戏会加技能释放的状态和人物本身的BOSS存放在一起,比如《天涯明月刀》,《梦三国》等。关注 微信公众号 任鸟飞逆向交流学习
接下来我们以天涯明月刀为例来分析下技能的预判。首先我们通过搜索BUFF状态的名字,来找到技能状态库,这里要注意的是游戏内的汉字大多是以UTF-8编码的。过程很简单,我们就不去分析了,直接给公式。+1144]+64BUFF名字遍历起始地址[+1144]+68BUFF名字遍历数组成员数量[+1144]+5CBUFF名字遍历对象数量[[[+1144]+64]+n*4]+0BUFFID[[[+1144]+64]+n*4]+4BUFF对象[[[+1144]+64]+n*4]+8BUFF链表[[[[+1144]+54]+n*4]+4]+0BUFFID[[[[[+1144]+54]+n*4]+4]+4]+0BUFF名字我们得到一个数组套链表的结构,这个结构被广泛的应用于这款游戏当中。接下来我们去分析NPC和角色当前所有的BUFF和技能状态。我们接着之前的BUFF库的代码继续分析,取状态名字的函数传入了一个技能ID的参数,当我们访问角色身上的BUFF时会断下(如图)https://mmbiz.qlogo.cn/mmbiz_png/AWEDBp7zbXWC3RSKgiaic2nZUib7TrGwubKVBRO5jYCAzdRicATj7qCc41FdfE8ic6VoUnSLcCO3UoxmB5Qvia0JsybA/0?wx_fmt=png向上分析技能,我们发现追到了一个结构体数组,而我们角色当前BUFF状态和即将释放技能时的预备动作,都会存放在这个数组里,每一个动作都对应一个不同的ID。继续向上分析,发现这个数组是在角色对象下存放的(如图)https://mmbiz.qlogo.cn/mmbiz_png/AWEDBp7zbXWC3RSKgiaic2nZUib7TrGwubKcp80Q5XbnQvqvVSTL9EQHHp5fHvReibosaSOSxjiargOClXicBVAtf1LQ/0?wx_fmt=png通过代码输出,我们发现这个数组也同样适用于怪物和其他玩家。公式如下+304BUFF数组起始地址+308BUFF数组结束地址[+304]+80*n+0BUFFID   技能预判ID这个数组中出了ID,还有很多的未知数据,很有可能是当前释放技能的范围,目标,朝向,形状等信息,这需要通过大量的对比和分析来判断。这样我们就达到了一个对技能的预判效果,通过遍历到BOSS的不同的技能名字采取不同的躲避方式即可。

jhon02 发表于 2017-11-27 14:18:54

顶一下再说

rnf147852 发表于 2017-11-30 11:30:42

感谢支持 哈哈

qq135145 发表于 2018-11-12 21:20:09

怎么联系到你
页: [1]
查看完整版本: 任鸟飞《天涯明月刀》BUFF及技能预判