1.4版由于加入了寻路算法,原来的穿墙方法不适用。下面交流一下我修改的经验:
一般步骤,同样用OD载入Client.exe,Ctrl+G定位到0043D3BA:
0043D3BA |. 50 push eax ; |Arg2
0043D3BB |. 51 push ecx ; |Arg1
0043D3BC |. 8B0D F8D72301 mov ecx,dword ptr ds:[123D7F8] ; |
0043D3C2 E8 29EC0600 call client.004ABFF0 ; //这个函数实现寻路算法
0043D3C7 8D55 D4 lea edx,dword ptr ss:[ebp-2C]
0043D3CA 56 push esi
0043D3CB 52 push edx
0043D3CC |. 8BCB mov ecx,ebx ; |
0043D3CE |. E8 7D920000 call client.00446650 ; //这个函数是动作样式
0043D3D3 84C0 test al,al ; //紧接上面函数的传回值进行比较
0043D3D5 0F84 35210000 je client.0043F510 ; //判断是否需要移动ZF=0则跳走,不移动
0043D3DB |. D945 F0 fld dword ptr ss:[ebp-10]
0043D3DE |. D865 DC fsub dword ptr ss:[ebp-24]
0043D3E1 |. D945 E8 fld dword ptr ss:[ebp-18]
一般步骤,同样用OD载入Client.exe,Ctrl+G定位到0043D3BA:
0043D3BA |. 50 push eax ; |Arg2
0043D3BB |. 51 push ecx ; |Arg1
0043D3BC |. 8B0D F8D72301 mov ecx,dword ptr ds:[123D7F8] ; |
0043D3C2 E8 29EC0600 call client.004ABFF0 ; //这个函数实现寻路算法
0043D3C7 8D55 D4 lea edx,dword ptr ss:[ebp-2C]
0043D3CA 56 push esi
0043D3CB 52 push edx
0043D3CC |. 8BCB mov ecx,ebx ; |
0043D3CE |. E8 7D920000 call client.00446650 ; //这个函数是动作样式
0043D3D3 84C0 test al,al ; //紧接上面函数的传回值进行比较
0043D3D5 0F84 35210000 je client.0043F510 ; //判断是否需要移动ZF=0则跳走,不移动
0043D3DB |. D945 F0 fld dword ptr ss:[ebp-10]
0043D3DE |. D865 DC fsub dword ptr ss:[ebp-24]
0043D3E1 |. D945 E8 fld dword ptr ss:[ebp-18]
基本思路是只要屏蔽寻路就行了,同样,把0043D3C2这个CALL用NOP填充。修改0043D3D5这行的test al,al为cmp al,01 。这样使比较结果不会为0。如此,简单两步实现穿墙。
这里还有个有趣的现象,把0043D3D3这个CALL也NOP填充掉会如何,人物跑步动画停不下来了!这个问题原先可难住了我好久,因为我原先以为这个CALL是寻路算法的,结果不是。。。。。。花了不少冤枉时间。
UtrlEdit可以搜索E829EC0600字符串,找到后全部替换成90.再往下搜索84C0替换成3C01