红警3起义时刻1.0修改器v2.9by大象

  • 软件大小: 221KB
  • 软件类别: 国产软件
  • 界面语言: 简体中文
  • 文件类型: .rar
  • 软件评级: ☆☆☆☆☆
  • 更新时间: 2009-11-06
  • 软件授权: 免费下载
  • 软件情况: 经测试可用
  • 本站地址: www.xtcdj.com
使用说明:

红警3起义时刻1.0修改器v2.9by大象


首先声明,这个修改器只能用在起义1.0版本上
为啥呢,因为我懒得给游戏升级
而且升级游戏又得重新找地址,很麻烦 -_,-

 

2.9
 
1 kill it -- 每次只杀死1个单位
2 获得3种基地车

2.8
1 增加单位技能立刻可用功能
2 重新安排快捷键。无需经常按键的功能放到小键盘上。笔记本无小键盘,可以切换出来直接点击对应功能。
3 增援的兵全部为3星
4 杀死选中单位功能总是出现错误?因此暂时取消这个功能。
5 地图全开导致游戏出现停顿现象,减小全开范围从10000为5000。大大减轻停顿。


输入兵种代码要加上 0x 前缀表示十六进制
比如道场核心要输入  0x57F07A3A
部分兵种代码:
=================日升
D81C1012 火箭天使
6586A5A0 欧米伽百合子
90B81D3C 波能坦克
FC5E3314 将军战舰
CABF0882 超级要塞核心
==============萌军
53E0EB12 谭雅
C04A61DC 平定者
8BEAB78D 未来坦克X-1
3D6832A4 先锋武装战艇机
==============苏俄
59052E2F 化学部队
174F874F 娜塔莎
9E45383C 天启坦克
FFA811AE 基洛夫飞船
==============特殊单位
911C7E98 磁暴坦克







既然不能用远程线程,那么就用游戏本身的线程。
在读取玩家金钱的代码上做个跳转,然后执行创建单位等功能即可。

创建单位call
0061145E  |.  51            push    ecx                              ; 玩家标志 10 ; 选中兵 428 10
0061145F  |.  55            push    ebp                              ; 玩家标志 ; 选中兵 428
00611464  |.  52            push    edx                              ;  &坐标
00611465  |.  53            push    ebx                              ;  单位代码
0061146D  |.  53            push    ebx                              ;  0
0061146E  |.  E8 7DFDFFFF   call    ra3ep1_1.006111F0                ;  初始化建造基地车外面2
00611475  |.  83C4 14       add     esp, 14
返回创建的单位地址


=====================================
申请出1个0x3000大小的内存。
0-fff 用来放判断和调用代码
1000-1fff 是功能函数
2000-2fff 是临时数据


临时数据部分这样定义
//0 单位地址
//20 单位代码
//40 玩家标志
//80 x
//84 y
//88 z
//100 选中单位数量


功能判断用00D44FF4,这个地址随便找的,为0且固定就可以。
==1 世界核平 (创建1次超武攻击)
==2 复制选中的兵给玩家
==3 复制选中的兵
==4 杀死选中的兵
==5 选中的兵升级
==6 创建10个指定的兵。兵数值在00D44FF8。


========================
=========================
[ENABLE]
fullaccess(00401000,0x7d1000)
globalalloc(memforexe,0x3000)
//0-fff exe
//1000-1fff calls
//2000-2fff data
define(MyCall_GetUnitData,call memforexe+1000)
define(MyCall_ConvertNum2Code,call memforexe+1060)
define(MyCall_KillUnit,call memforexe+1080)
define(MyCall_CreateUnit,call memforexe+10a0)
define(MyCall_UnitLevelUp,call memforexe+10D0)
define(MyCall_SetUnitSkillEnable,call memforexe+10E0)
define(MyCall_Xadd100,call memforexe+10F0)
define(MyCall_CreateBuilding,call memforexe+1110)
globalalloc(beforememforexe,0x100)
label(Xbeforememforexe)
00AE7c0a:
jmp beforememforexe
Xbeforememforexe:

beforememforexe:
add edi,[eax+4]
mov edx,[ecx]
mov eax,[00D44FF4]
test eax,eax
jne beforememforexe+20
jmp Xbeforememforexe

beforememforexe+20:
pushad
call memforexe
popad
xor eax,eax
mov [00D44FF4],eax
jmp Xbeforememforexe

memforexe:
mov eax,[ceefe4]
mov eax,[eax+60]
test eax,eax
db 75 01
ret
mov eax,[00D44FF4]
cmp eax,1
je memforexe+100
cmp eax,2
je memforexe+200
cmp eax,3
je memforexe+300
cmp eax,4
je memforexe+400
cmp eax,5
je memforexe+500
cmp eax,6
je memforexe+600
cmp eax,7
je memforexe+700
cmp eax,8
je memforexe+800
ret


memforexe+100:
MyCall_GetUnitData
mov eax,[cfc734] //自己的标志
mov eax,[eax+28]
mov [memforexe+2040],eax
mov eax,808ADA9D //超能波毁灭
MyCall_ConvertNum2Code
MyCall_CreateUnit
mov eax,C74050EF //真空内爆弹
MyCall_ConvertNum2Code
MyCall_CreateUnit
mov eax,5dec9e8c //质子撞击炮的炮弹
MyCall_ConvertNum2Code
MyCall_CreateUnit
MyCall_KillUnit
ret

memforexe+200:
MyCall_GetUnitData
mov eax,[cfc734] //需要自己的标志而不是选中单位的
mov eax,[eax+28]
mov [memforexe+2040],eax
MyCall_CreateUnit
ret

memforexe+300:
MyCall_GetUnitData
MyCall_CreateUnit
ret

memforexe+400:
mov esi,[ceefe4]
mov eax,[esi+60]
test eax,eax
db 75 01
ret
mov edi,[esi+54]
mov eax,[edi+8]
test eax,eax
db 75 01
ret
mov eax,[eax+138]
MyCall_KillUnit
ret


memforexe+500:
mov esi,[ceefe4]
mov ecx,[esi+60]
mov [memforexe+2100],ecx //把选中单位数量保存起来
mov edi,[esi+54]
test ecx,ecx
jne memforexe+520
ret

memforexe+520:
test ecx,ecx  //0表示已经没有其他单位了
db 75 01
ret
mov ebx,[edi+8]
test ebx,ebx
db 75 01
ret
mov ebx,[ebx+138]
mov eax,[ebx+3dc]
MyCall_UnitLevelUp
dec [memforexe+2100]
mov ecx,[memforexe+2100] //单位总数-1
mov edi,[edi] //指向下个单位
jmp memforexe+520

memforexe+600:
mov eax,[00D44FF8]
test eax,eax
db 75 01
ret
MyCall_GetUnitData
mov eax,[00D44FF8]
MyCall_ConvertNum2Code
mov [memforexe+2020],eax
push 10
pop eax
mov [memforexe+2100],eax
jmp memforexe+630

memforexe+630:
mov eax,[memforexe+2100]
test eax,eax
db 75 01
ret
MyCall_CreateUnit
mov eax,[eax+3dc]
push eax
push eax
MyCall_UnitLevelUp
pop eax
MyCall_UnitLevelUp
pop eax
MyCall_UnitLevelUp
dec [memforexe+2100]
jmp memforexe+630

memforexe+700:
mov esi,[ceefe4]
mov ecx,[esi+60]
mov [memforexe+2100],ecx //把选中单位数量保存起来
mov edi,[esi+54]
test ecx,ecx
jne memforexe+720
ret

memforexe+720:
test ecx,ecx  //0表示已经没有其他单位了
db 75 01
ret
mov ebx,[edi+8]
test ebx,ebx
db 75 01
ret
mov eax,[ebx+138]
MyCall_SetUnitSkillEnable
dec [memforexe+2100]
mov ecx,[memforexe+2100] //单位总数-1
mov edi,[edi] //指向下个单位
jmp memforexe+720

memforexe+800:
MyCall_GetUnitData
mov eax,61A093F6 //盟军基地
MyCall_CreateBuilding
mov eax,C16FF13F //苏俄基地
MyCall_CreateBuilding
mov eax,D20CC8DE //纳米科技电脑主机
MyCall_CreateBuilding
mov eax,CA9257EB //科技中心
MyCall_CreateBuilding
mov eax,5B3008B7 //空军基地
MyCall_CreateBuilding
mov eax,D25BB962 //机场
MyCall_CreateBuilding
mov eax,524BBD01 //超级反应堆
MyCall_CreateBuilding
mov eax,524BBD01 //超级反应堆
MyCall_CreateBuilding
mov eax,B7377639 //战斗研究所
MyCall_CreateBuilding
mov eax,D6D22475 //纳米虫群巢穴
MyCall_CreateBuilding
mov eax,FD87E82A //超时空传送仪
MyCall_CreateBuilding
mov eax,D20552E1 //铁幕
MyCall_CreateBuilding
mov eax,5D02B20C //日升矿石精炼厂
MyCall_CreateBuilding
mov eax,8ECE261C //盟军矿石精炼厂
MyCall_CreateBuilding
MyCall_Xadd100
mov eax,04F32965 //瞬息道场
MyCall_CreateBuilding
mov eax,509BD329 //新兵训练营
MyCall_CreateBuilding
mov eax,80D4EA1E //兵营
MyCall_CreateBuilding
mov eax,A01D437D //压碎起重机
MyCall_CreateBuilding
MyCall_Xadd100
mov eax,356FA3A9 //日升基地
MyCall_CreateBuilding
mov eax,A689B39A //机甲工厂
MyCall_CreateBuilding
mov eax,8209C058 //装甲工厂
MyCall_CreateBuilding
mov eax,D50C222E //战争工厂
MyCall_CreateBuilding
ret


memforexe+1000:
mov eax,[ceefe4]
mov eax,[eax+54]
mov eax,[eax+8]
mov esi,[eax+138] //选中单位地址
mov [memforexe+2000],esi
mov eax,[esi+38] //X
mov [memforexe+2080],eax
mov eax,[esi+3c] //Y
mov [memforexe+2084],eax
mov eax,[esi+40] //Z
mov [memforexe+2088],eax
mov eax,[esi+3dc]
mov eax,[eax+4] //选中单位代码
mov [memforexe+2020],eax
mov eax,[esi+428] //选中单位玩家标志
mov [memforexe+2040],eax
ret

memforexe+1060:
//计算单位代码。size 0x17
push eax
mov ecx,[00CF9138]
call 006d9470
mov [memforexe+2020],eax
ret

memforexe+1080:
//杀死单位。ecx=单位地址。size 0xb
mov ecx,eax
push 0
push 19
push 6
call 007E4E40
ret

memforexe+10a0:
//调用创建单位call。size 0x27
mov ecx,[memforexe+2020]
test ecx,ecx //检查1下单位代码
db 75 01
ret
mov eax,[memforexe+2040]
mov ebx,[eax+10]
push ebx
push eax
lea eax,[memforexe+2080]
push eax
push ecx
push 0
call 006111f0
add esp,14
ret

memforexe+10D0:
//单位升级
mov ecx,eax
push 0
push 1
push 1
call 00771C60
ret

memforexe+10E0:
//重置单位技能可用
mov esi,eax
mov ecx,eax
call 0073B510
ret

memforexe+10F0:
//单位X坐标+100
fld [memforexe+2080]
fiadd [00CBED64] //100
fstp [memforexe+2080]
ret

memforexe+1110:
MyCall_ConvertNum2Code
MyCall_CreateUnit
ret


[DISABLE]
00AE7c0a:
db 03 78 04
db 8b 11