当前位置: 首页 > 热点

共享函数的处理-完善混元合星的脚本 环球资讯

2023-03-26 18:08:03 来源:哔哩哔哩

上一篇文章是对混元合星成功率的修改进行了尝试,隔天翠羽就向我反馈,那个方法会同时将物品爆率修正成100%。过好久,再上本站时,发现有网友在文章后也提出这问题。但我很懒,可能也是对这游戏的修改没多大兴趣了,所以没什么回复,或跟进修正之类的。

翠羽当时倒有给出了一个解决方案,就是用堆栈中的某个数据与人物地址比较确定是不是混元合星:


【资料图】

// ebp-30=人物地址// ebp-30=ebp+6C=操作混元石mov edi,[ebp-30]cmp [ebp+6C],edijne _SL_HYSmov edi,01originalcode:cmp edi,01jne lua51vc12.luaopen_jit+2B1exit:jmp returnhere_SL_HYS:mov edi,02jmp originalcode"lua51vc12.dll"+48C77:jmp HYSnewmemreturnhere:

这种修改其实就是共享函数的调用的处理问题了,用堆栈的数据进行判断是一种简单直接的方式,这里我向大家介绍另一种方式吧,适合更复杂的修改中,其实我在词缀修改一文中就有用过,只是没明说而已。脚本多,代码一多,看起来似乎复杂,但原理简单:我们按程序的执行流程,在不同地方按需要插入标志数据,达到干涉它后续的执行,实现修改目标。在词缀一文中,算是个很复杂的修正脚本,共享函数是“给地面物品添加词缀”,我是申请了一个全局地址来存储包括词缀各类数据等等数据,其中调用共享函数的"总开关“就是 + 0 偏移,为1时就是调用它,后续修正词缀数据时,也是先以此来判断............不理解的,可以看完本文后,再回头去复习它吧,现在还是说回本题。

上一篇文章中,我截取出一堆混元合星过程中调用的函数,它们的排列顺序,可以说就是调用的顺序了。我按游戏的注释放了英文注释,比如:

gamesvr.exe+EEE43 'GetRefineCount'.") }  这个是读取参与合星物品数

gamesvr.exe+DE2BF 'MinusMoney'.") }       这个是扣钱,也就是扣合成费用

按程序的设定,混元合星执行流程大抵是这样:

...

获取合星物品数量 

...

扣钱  (注意,继续扣费才一定是合星)

...

获取成功率

...

现在,我要做的就是用自己的数据,全局标志来干涉它的执行过程,先放整个脚本的架构照吧

注意脚本的排列顺序,建立全局标志一定要排在最前面,后面3个可乱排列,但还是按修改顺序来排吧,会让人的更容易理解和忘记。修改脚本很简单,修改原理也讲完了,我直接放图了。

第1个脚本,申请空间-建立全局标志:

第2个脚本,读取合成数量时,设置标志为1:

第3个脚本,扣除合成费用时,标志设为2:

第4个脚本,修改“成功率”:

这里没有修改原edi的值,可能要向大家介绍双浮点数吧

好了,下一篇就是它了,如果还有的话。

关键词:

相关阅读

Copyright   2015-2022 北方技术网 版权所有  备案号:京ICP备2021034106号-50   联系邮箱: 55 16 53 8@qq.com