欢迎光临散文网 会员登陆 & 注册

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

2023-03-26 17:57 作者:螺丝刀_汗颜  | 我要投稿

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

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

// ebp-30=人物地址
// ebp-30=ebp+6C=操作混元石
mov edi,[ebp-30]
cmp [ebp+6C],edi
jne _SL_HYS
mov edi,01

originalcode:
cmp edi,01
jne lua51vc12.luaopen_jit+2B1

exit:
jmp returnhere

_SL_HYS:
mov edi,02
jmp originalcode

"lua51vc12.dll"+48C77:
jmp HYSnewmem
returnhere:

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

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

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

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

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

...

获取合星物品数量 

...

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

...

获取成功率

...

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

脚本架构

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

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

建立标志

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

读数量时标志设为1

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

扣费用时标志设为2

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

修改合成的双浮点值

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

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

共享函数的处理-完善混元合星的脚本的评论 (共 条)

分享到微博请遵守国家法律