上一节,我们已经将人物相关的金手指功能完成的差不多了,这一节,将开始进军终极hack之路,先从传奇宝石开始
1. 我们先从传奇宝石奖励升级次数修改开始,因为我们知道每次完成大秘境之后,宝石升级次数奖励默认是0,没死的话是1,所以就修改这个奖励,搜索getnumbonus, 发现函数NephalemRiftManager::sGetNumBonusUpgrades,打开往下拉,分析代码得到了要hack的地方,找到2.6.6需要hack的地址,有2处,hack完写成金手指代码
2. 接下来我们搜索宝石升级几率chance, 找到了函数ItemCrafting_GetJewelUpgradeChance,可以知道这个返回值是宝石升级成功率,那么改成100%也就是1即可,找到2.6.6对应地址,修改之即可
3. 然后我们接着修改奖励次数始终锁定,在函数ItemCrafting_GetJewelUpgradeChance上右击跳转到外部引用,跳转到SItemCrafting_UpgradeJewel,发现了修改奖励次数的地方PlayerSetJewelBonusUpgradesLeft,然后找到2.6.6对应的地址hack之即可
4. 我们觉得每次升级宝石太慢了,于是考虑做一个升级一次宝石就满级的功能,往上面分析,发现了SItemUpgradeJewel函数,双击点进去,发现了要hack的地方,我们只用修改v2也就是宝石升级次数w21的值就可以了,找到2.6.6的地址,编写代码,然后写成金手指代码,当然有更简单的修改方式,比如在SItemUpgradeJewel调用时直接把传参改为150,这个读者可以自行实验
5. 我们不满足于宝石等级被暴雪限制为最高150,于是有了修改宝石为任意等级的想法,在之前我们已经知道了宝石等级的属性标志0xFFFFF576,于是可以考虑在在程序获取宝石等级时做hack,转到AttributesGetInt伪代码,可以看到比较简单,然后转到汇编代码,再找到2.6.6对应的地址,开始编写hack代码,并在原指令处做跳转,最后写成金手指代码
6. 到现在为止,我们已经完成了关于宝石升级次数以及等级修改等相关的功能,最后还剩一个问题,那就是每次升级宝石时动画时间比较长,不停按键也容易伤键,为了解决这个问题,我们考虑修改升级宝石的动画时间,因此我们搜索upgrade,发现了函数UIJewelUpgrade::OnButton1,因为我们是靠主按键进行宝石升级确认的,之后才会播放动画,所以猜测在此函数里可能会播放动画,点进去,往下分析,果然发现了UIStoryboard::Play,字面意思就是播放,因为Play又调用了Advance,因此我们可以在Advance里做hack, 双击UIStoryboard::Advance,分析伪代码
7. 分析可知v6就是要hack的地方,改为最大值1即可
8. 转到汇编代码,然后找到2.6.6的地址进行指令Hack,注意因为2.6.6附近指令和原始版本差别比较多,此处在2.6.6并不容易找,需要结合一些其他方法才能找到,比如扩大搜索范围,或者先搜索其他容易找的父函数然后点进来即可
9. 修改后写成金手指代码
10. 现在我们完成了传奇宝石相关的全部金手指功能,可以进游戏测试了,是不是升级时没有延时了?再测试一下锁定宝石等级1亿和奖励宝石升级次数均生效了,值得注意的是,锁定宝石等级需要在进游戏之前开启,这样人物进入游戏场景时,宝石的属性才会生效,而且重启游戏后宝石等级也会复位到最高级150,这个是由于每次进游戏场景或者存档时,系统会自动进行宝石等级上限复位,不用在意,我们锁定就好啦
11. 好了,本节到此结束,我们已经学会了通过修改动画播放的机制来取消延时,下一节,将会讲解其他延时机制的关闭方法,包括按键摇杆延时,锻造和附魔延时等