实现混元石合星百分百成功率
如果不是“提hahaha”在贴吧提问,我从来没考虑过要修改这个,因为搞这个好像不如直接刷星级装备了?我一开始以为是像凝晶升星一样,是取的随机数,所以简单回得了一下。看了问题反馈后才亲自尝试,此时才发现这个修改可不易确定修改位置,因为这功能是通过LUA脚本实现的,等于套了好几层代码,而且LUA语言的参数及数据处理与游戏寻常的汇编大有不同。不说废话了,下面就按步骤进行解说,当然是还是使用CE与3.11.01 99合一版的环境。
1, 对服务端内存人物背包的混元石或参与合成的装备数据+5C(物品tag)此处的数据下断追踪,记得要选“写入数据时中断”,接着进行魔盒合星就有追踪结果。提示:背包里最好只放参与合成的物品,魔盒打开后也是可以放进仓库的。
下面分析追踪结果,先上图,展开它。

返回上一层,其实就是“按物品标签清除物品数据”的函数
部分注释是我自己加的

返回第2层,则是处理LUA脚本传过来的参数后,然后调用“remove item”函数。
注意看注释栏,游戏内置的字符串。

返回第3层,就是 call edi 之后的lua脚本代码了。继续查看追踪到的后面代码,全是lua了。
但稍微用点心,你会发现它好像是个循环处理的脚本,因为它反复执行了 +266D call edi

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

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脚本的调用代码了。
懒得打字了,再会。

