作者论坛账号:blbljj008
鉴于上一个帖子有点火,于是我加班加点把2号界面也设计完成了,并且调整了1号界面。代码也全部完成,虽然不完美,也许有bug,但是能用。
游戏成品图
1号界面集成跟玩家有关的控制类功能。 下面说正题,设计2号界面,我就不细说了,请看上一贴,原理一样。本帖重点说怎么写入这些选择框的代码。分以下步骤:
功能说明:在游戏中,你只能控制一个玩家的生产,至于想控制谁,由你决定,这里为了你听得更清楚,我用本机玩家来表示你出生的玩家,
用被控制的玩家来表示你侵入的殖民玩家,当你从本机玩家切换到被控制玩家的时候,你需要先刷新一下电力,比如收一下基地,或出售一
个电厂,这样建造界面才会刷新,刷新之后就可以正常被控制的玩家的建筑界面了,这时本机玩家属于无人控制状态,你一切操作都在玩被
控制玩家,这时如果你选择了观战,那么你和网络对面的他,都会观战,这时你再切回本机玩家,那么就相当于踢出了他。如果你选择退出,
那么相当于你和他同归于尽了。还可以取消他生产的东西,或者移动他的部队等等吧,做点坏事,戏耍一下室友非常好用。
此项功能属于可以联机使用。
2号界面集成跟的是一切普遍的功能,功能的名字都很简单,一看即懂。
控制所有部队-------->所有能看见的部队,无论陆海空,无论隶属于谁,你都能控制移动。
获得全球卫星-------->就是开全图,这个有很多种方式实现,我用的最简单一种。
这两项功能属于可以联机使用。
无限钱 -------->一次性加很多钱。
随处建造 -------->哪都可以建造建筑,除了水里和天上还有地图外面。
无限电力 -------->把电力负载改为0。
无限超级武器-------->超级武器随便用。
一星兵营 -------->偷兵营,使生产的大兵都是一星的。
一星坦克 -------->偷重工,使生产的坦克都是一星的。
小兵自动疗伤-------->大兵受伤后,自动回血。
坦克自动疗伤-------->坦克受伤后,自动回血。
瞬间建造 -------->生产的东西,点击生产即可完成生产。
以上是单机功能,联机使用会崩溃。
1、实现这些功能的游戏代码研究,此步骤略过,我直接说结果。以几项功能举例,全说累得慌。下载我改编好的,自己分析去吧。
很多功能,网上都有资料以及辅助,都可以参考研究。
1)、控制的原理
游戏内部有个基址,是本机指挥系统的基址 00A83D4C 。
还有个玩家列表的基址 [00A8022C]+i*4 i表示玩家序号。
把 i玩家的基址赋值给指挥系统,就能控制谁,就这么简单。
控制1号的代码例如:
mov ebx, 00A8022C
mov ebx, [ebx]
mov ecx, 1
mov esi, [ebx+ecx*4]
mov [00A83D4C], esi
2)、全图
实现的方式很多,改跳转、调用间谍卫星的call、直接写地图数据。
我用简单的改跳转来实现。
006D88FC - 75 05 - jne 006D8903 --------> 改 jmp
3)、控制所有
游戏内有个call(子函数的意思),判断单位的所属,自己的返回1,不是自己的返回0。谁来都返回1,就控制了所有部队。
call 0050B6F0 判断所属的函数。
内部
0050B716 - 8B 15 4C3DA800 - mov edx,[00A83D4C] <<
0050B71C - 33 C0 - xor eax,eax
0050B71E - 3B CA - cmp ecx,edx --------> 比较所属,改 nop
2、点击选择框的时候,拦截一下,加入游戏功能的代码。
1)、拦截选择框消息,点击任何的选择框都会进过这里,从这里跳走,判断点击的哪个选择框,执行相应代码。
00616785 . 68 11010000 push 0x111 |Message = WM_COMMAND
0061678A . 57 push edi |hWnd = 0x12B9B4
0061678B . FF15 A4147E00 call dword ptr ds:[<&USER32.SendMessageA>] \SendMessageA
2)、写入执行代码,以控制全部部队为例,需要用到3个api,完全现xiao的。
GetCurrentProcessId
OpenProcess
WriteProcessMemory
代码如下:
pushad
call dword ptr ds:[<&KERNEL32.GetCurrentProcessId>] ; [GetCurrentProcessId
mov ebx,0x8
mov ecx,0x20
or ebx,ecx ; /ProcessId = 0x650
push eax ; |Inheritable = TRUE
push 0x1 ; |Access = VM_OPERATION|VM_WRITE
push ebx ; \OpenProcess
call dword ptr ds:[<&kernel32.OpenProcess>]
push 0x9090
mov ecx,esp
push 0x0 ; /pBytesWritten = NULL
push 0x2 ; |BytesToWrite = 0x2
push ecx ; |Buffer = 0012D2B8
push 0050B71E ; |Address = 0x50B71E
push eax ; |hProcess = 00000470
call dword ptr ds:[<&kernel32.WriteProcessMemory>] ; \WriteProcessMemory
popad
一号界面的功能,我是盟军,上来就控制了粉色电脑
2号界面的功能,无限钱,开地图等等
我改写的代码,没考虑代码健壮性这些问题,比如 mov ebx, 00A8022C 之后没有test ebx,ebx 之类的,存在bug在所难免,待你完善!
以上都是现xiao现卖的,一切的一切都是我瞎编的,你上了我的急了咣当了吗?如果你有不同的思路,回帖一起研究!
战网坦克大战,走起!如果你发现了我,下手轻点!如果我定点清除了你的隐形基地,有可能就是我哦!
最最后,把评分刷起来,家人们,老铁们,后排的同学,别睡了,你们xiao会了吗?
附件见左下角原文。
--官方论坛
www.52pojie.cn
--推荐给朋友
公众微信号:吾爱破解论坛
或搜微信号:pojie_52