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

实现混元石合星百分百成功率

2023-03-03 23:40 作者:螺丝刀_汗颜  | 我要投稿

如果不是“提hahaha”在贴吧提问,我从来没考虑过要修改这个,因为搞这个好像不如直接刷星级装备了?我一开始以为是像凝晶升星一样,是取的随机数,所以简单回得了一下。看了问题反馈后才亲自尝试,此时才发现这个修改可不易确定修改位置,因为这功能是通过LUA脚本实现的,等于套了好几层代码,而且LUA语言的参数及数据处理与游戏寻常的汇编大有不同。不说废话了,下面就按步骤进行解说,当然是还是使用CE与3.11.01 99合一版的环境。

1, 对服务端内存人物背包的混元石或参与合成的装备数据+5C(物品tag)此处的数据下断追踪,记得要选“写入数据时中断”,接着进行魔盒合星就有追踪结果。提示:背包里最好只放参与合成的物品,魔盒打开后也是可以放进仓库的。

下面分析追踪结果,先上图,展开它。

展开的追踪结果

返回上一层,其实就是“按物品标签清除物品数据”的函数

部分注释是我自己加的

追踪上1层

返回第2层,则是处理LUA脚本传过来的参数后,然后调用“remove item”函数。

注意看注释栏,游戏内置的字符串。

追踪返回第2层


返回第3层,就是 call edi 之后的lua脚本代码了。继续查看追踪到的后面代码,全是lua了。

但稍微用点心,你会发现它好像是个循环处理的脚本,因为它反复执行了 +266D call edi 

追踪返回第3层(下面)与后续LUA脚本代码

2, 尝试对  +266D call edi 处的代码下断,发现没相关操作时不会响应。很好,那我们设法截取所有的 call edi 具体的函数地址。截取原理,我以前在贴吧'修改心得:隔空捡的实现"此文中有提及,不清楚的请去“希望BM"吧翻查,下面直接放出原代码。

截取lua脚本调用的函数


3,再进行混元合星操作后,截取到数据,然后按顺序逐一查看调用的函数并作记录。要注意操作方法: 复制“out__”处的地址值后,然后在汇编栏跳转至  [out__]  ...  [out__ 4] ... [out__+8] ... [out__+C]...

下面是我做的记录笔记,英文是抄了游戏的部分字符串,中文则是我的理解,部分尝试多次合星后才知道的,因为有测试高星合成,所以部分注释未必正确。

获取到的关键函数地址

通过不断测试,发现 此函数  "lua51vc12.dll"+48C44  { ->->MSVCR120.floor }最为关键。

它其实就是计算出一个浮点数,后续就是以此数来确定合星时装备新生成的属性类型,如果无法生成属性,那就是合星失败!如果将浮点数修改为一个可用的固定值,那么合成装备的极品属性就只有一种,比如全攻或全防。我猜想,将浮点转为整数时才确定属性类型的,比如物防是1,那么对应的浮点数应该是 1.00 ~ 1.99 之间。有兴趣,请自行实验验证吧。


3, 修改方法,可以修改最后生成的浮点数。但此方法就是固定生成特定属性,不可取。在我进一步测试时,发现有更简单的实现方法:

[ENABLE]

//混元合星100%成功

"lua51vc12.dll"+48C12:

mov edi,01

nop 3 

[DISABLE]

"lua51vc12.dll"+48C12:

mov edi,[esi+14]

sub edi,eax

sar edi,03

mov eax,[eax-08]

//Alt: db 8B 7E 14 2B F8


本文至此结束,希望大家举一返三,能应付所有的LUA脚本的调用代码了。

懒得打字了,再会。

实现混元石合星百分百成功率的评论 (共 条)

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