道士突破宠物召唤限制
这是我发布的baidu“希望BM"吧的帖子,也是很有学习意义,所以还是搬过来吧,当作B站第2贴,投名状。以下是帖子内容,只修正不通顺的词句与错别字,并根据情形,补充一些新的注释,比如,这是第1条新注:为了吸引人气,我又又又打脸妥协了,什么不搞变态的修改的话,大家全忘了吧,单机下你爱怎么折腾怎么来吧;本贴适配的游戏版本仍然是3.11.01,可叠加99物品的)
这个修改,我其实自从21版以来,完全没搞过,而且21版时,我也没有放开召唤3只的上限。再声明一下,我修改宗旨一向是不作过于变态的修改!修改过于变态,那就是玩游戏,而是毁游戏了,完全不再有什么游戏体验,只是纯粹体验你的修改了!
但是,为了给贴吧吸引人气,我暂时只能妥协,放一个教程。
之前在修改学习群,有过这方面的讨论,但我并没有过多参与,仍然是认为这类修改易堕于变态之中。但我也给出了”查看谁访问、改写魔法值“之类的方法。但这次实践,我发现其实有更好的寻址方式。
首先,我们要认识到,召唤成功后,宠物数据(地址)就存储于人物数据中,没有宠物时,此数据则为0。那么先设定一个搜索范围(人物地址为搜索起始地址,搜索结束地址为起始地址+10000就肯定够了),下面是操作步骤:
第1步:获取人物地址。
打开CE附加S端(服务器端),浏览人物地址,(常规操作,人物基地址查找方法,在群视频教程中!)右键此地址,弹出菜单项,选择“转到地址”,弹出的输入框,全选文字 ,并复制此地址(新注:人物地址的获取,可以参照第1篇帖子"法师无限诱惑”)

第2步:以人物地址为参照,设定一个搜索范围,以便迅速搜索到宠物存储的地址。

第3步:首次搜索 4字节的 精确数值 0; 这个没什么说的。
第4步:召唤宠物后,修改搜索类型为“增加的数值”,然后再次搜索。
(新注:如果是纯新手,数值的搜索操作请参考"法师无限诱惑”,有详细的步骤图示,但要明白,这里使用的“模糊搜索”方式,前一帖子是使用“精确数值”方式)

第5步:杀死宠物,然后又搜索精确数值 0。
(新注:先把扫描索类型为“精确的数值”,然后才能输入数字0,可参考第2步的图示,部分图无法上传。)
第6步:召唤宠物,按第4步的方法,又搜索“增加的数值”。这时,应该就能搜索到唯一的地址了,也就是存储宠物地址的地址。
(新注:如果搜索不到,请重复第5步和第6步,直到搜索出唯一地址为止。)
004.jgp
第7步,找出处理召唤的代码的地址。鼠标右键点击第6步搜索到的地址,然后选择“查看谁访问此地址”。

第8步:继续召唤宠物。追踪到的结果,大约如下图。

明显,这个+42B0,就是存储宠物数据的人物偏移了。我们有时候,查找偏移,其实从代码中查看,会更直观。点击第1条数据,再点击右边的“显示反汇编程序”,以显示代码地址。
(新注:这也是迅速定位代码地址的操作,“无限诱惑”里则是双击追踪代码,都是经常用到的)

第9步:找出限制宠物数量的地方。
先召唤出2只宠物,然后对代码地址右键,弹出菜单后选“中断与跟踪”,我们要追踪为什么无法召唤3只宠。这一步无图,操作方法请参考其它帖子,或是下载视频教程学习。
(新注:请参考“无限诱惑”中的最后一种下断方式,有详细图示)
这是追踪到的结果:

注意看,计算完宠物数量后,eax = 2,即是有2只宠物,返回上一层代码后,它跟另一个值 [esp+14] 比较。这里的[esp+14] ,应该是按职业取值,道士=2,法师=3。
(新注:寄存器eax的数值,在点击追踪代码后,在追踪栏的右边可查看到,上图是右上角。
[esp+14] 的值由道士的召唤技能等级决定)
我选中的代码行,就是关键的判断跳转,jnl xxxx 跳转成立的条件是: eax 值不小于[esp+14] (大于和等于)。
(新注:汇编指令 jnl ,j = jump 跳转,n = not 不,l = little 小于,合起来的意思就是“不小于”,也就是“大于或等于”,比较结果符合,跳转就成立。这里是比较已召出的宠物个数(eax)与技能允许召唤的数量,条件成立,则是禁止召唤,也就是限制召唤数量的地方了。)
我们先测试一下,把这行代码置空,即让它永远不跳。

(新注:空指令,也可叫作“空白指令”,替换成空指令,原本要跳转,现在跳转没有了,当然就是永远不跳了。)
回游戏继续召唤,第3只出来了。

但是无论如何再尝试,此时3只就是最大限度了。另一个限制召唤数量,在于4楼的追踪结果的第二行代码“ cmp dword ptr[eax],00”,因为第3行为 “ mov [ebx+eax*4+42B0],esi ”,这已经是存储宠物地址了,是召唤成功了,所以,第2行肯定也是数量限制的关键所在。

选中上图的第2行代码,然后点击”显示反汇编程序“,照样子跳转到代码栏,查看这个判断代码。这回是将这个判断后的跳转改为强制跳转。

(新注:汇编指令 jmp 即是强制跳转,无论前面有没有判断,判断的结果是什么,它都是跳到后面跟着的地址。)
再测试,此时召唤无数量限制了。
帖子结语:
虽然放出教程,但仍然不赞成搞这种无限制的召唤啊,我就保留一点点不放出成品脚本了。
而且此种修改有一些不足,召唤数量多于3只,受控制宠物其实只有3只。具体根源在于,游戏设定只存储3只宠物,多召唤出来的,根本没存储其地址,所以也无法控制了(聚集、杀死等等操作)。当然也有了另一种恶趣味玩法,你下线了,这些多出来的宠物仍然存在,如果是登陆小战士,还能带它们继续逛街。
(新注:3只宠的存储限制,在“无限诱惑”一视频中,有详细解释,可惜我不会弄,这里上传后给以广告的理由封禁了5遍,我实在是怕了。有兴趣请到群里下载吧,专集封面有群号。这一贴内容,我也会做个视频,但能不能上传这里,我也未知,但群里肯定会有。)

