RA2红色警戒红警2辅助

2024/01/02 sec 共 2652 字,约 8 分钟

地图全开

00481F9D  |> \0FBF56 26     movsx   edx, word ptr [esi+26]
00481FA1  |.  0FBF46 24     movsx   eax, word ptr [esi+24]
00481FA5  |.  52            push    edx
00481FA6  |.  50            push    eax
00481FA7  |.  68 10D08100   push    0081D010                         ;  ASCII "Crate at %d,%d contains 'reveal'",LF
00481FAC  |.  E8 2F49F8FF   call    004068E0                         ;  空函数
00481FB1  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]
00481FB4  |.  83C4 0C       add     esp, 0C
00481FB7  |.  8B91 1C020000 mov     edx, dword ptr [ecx+21C]
00481FBD  |.  B9 E8F78700   mov     ecx, 0087F7E8
00481FC2  |.  52            push    edx
00481FC3  |.  E8 C85D0F00   call    00577D90                         ;  地图全开

2024年1月3日:已验证可行性。

// 全地图内联代码
void Map_Assemble() {
	_asm {
		pushad
		mov eax,0x00A83D4C
		mov edx,[eax]
		mov ecx,0x0087F7E8
		push edx
		mov eax,0x00577D90
		call eax
		popad                      
	}
}

雷达开启

以下汇编仅作过程分析的参考:

00508DF0  /$  C681 79570000>mov     byte ptr [ecx+5779], 0
00508DF7  |.  A1 4C3DA800   mov     eax, dword ptr [A83D4C]
00508DFC  |.  83EC 0C       sub     esp, 0C
00508DFF  |.  3BC8          cmp     ecx, eax
00508E01  |.  0F85 4D010000 jnz     00508F54
00508E07  |.  8B81 B8020000 mov     eax, dword ptr [ecx+2B8]
00508E0D  |.  53            push    ebx
00508E0E  |.  55            push    ebp
00508E0F  |.  56            push    esi
00508E10  |.  8BB1 B0020000 mov     esi, dword ptr [ecx+2B0]
00508E16  |.  57            push    edi
00508E17  |.  83FE FF       cmp     esi, -1
00508E1A  |.  C64424 10 00  mov     byte ptr [esp+10], 0
00508E1F  |.  74 0E         je      short 00508E2F
00508E21  |.  8B15 84EDA800 mov     edx, dword ptr [A8ED84]
00508E27  |.  2BD6          sub     edx, esi
00508E29  |.  3BD0          cmp     edx, eax
00508E2B  |.  7D 0A         jge     short 00508E37
00508E2D  |.  2BC2          sub     eax, edx
00508E2F  |>  85C0          test    eax, eax
00508E31  |.  0F85 F8000000 jnz     00508F2F
00508E37  |>  A1 30B2A800   mov     eax, dword ptr [A8B230]
00508E3C  |.  8A90 A4340000 mov     dl, byte ptr [eax+34A4]
00508E42  |.  84D2          test    dl, dl                           ;  雷达开启判断
00508E44  |.  0F85 E0000000 jnz     00508F2A

2024年1月4日:已验证可行性,一键开启全图和雷达,无须修改指令。

//全地图内联代码
#pragma pack(1)
void Map_Assemble() {
	_asm {
		pushad
		mov eax, 0x00A83D4C
		mov edx, [eax]
		mov ecx, 0x0087F7E8
		push edx
		mov eax,0x00577D90
		call eax
		popad
	}
}

// 雷达全开 [[0x00A8B230] + 0x34A4] = 1
void RadarOn_Assemble() {
	_asm {
		pushad
		mov eax, 0x00A8B230
		mov eax, [eax]
		mov byte ptr [eax + 0x34A4], 0x1
		popad
	}
}

// 判断游戏是否运行
 bool isGameRunning() {
	 bool isRunning = false;

	 __try {
		 _asm {
			 pushad
			 mov eax, 0x00A83D4C
			 mov eax, [eax]
			 mov eax, 0x0087F7E8
			 mov eax, [eax]
			 popad
		 }

		 isRunning = true;
	 } __except (EXCEPTION_EXECUTE_HANDLER) {
		 isRunning = false;
	 }
	 return isRunning;
}

#pragma pack()

调用:

//地图全开
void openAllMap() {
	if (isGameRunning()) {
		Map_Assemble();
		RadarOn_Assemble();
	} else {
		::Beep(523, 400);	// do
	}
}

其他:

  • 对 00577D90 函数下断点,创建雷达后断下来跟踪。
  • 找到地址: 0x00A83D4C 0x0087F7E8 0x00A8B230 0x34A4 之间的关系和来源,最好能从一个地址出发找到其他地址。

无限信标

联网对战的时候最多只能放置三个信标,当超过三个时需要把多余的删除掉才能放置新的信标,这样就会造成一个麻烦:战况激烈的时候,想放置信标的时候放置不了,还需要在地图上删除一个信标才能继续放置。

解决思路:RA2YurisRevengeTrainer/issues/19

如何使用

编译项目 Ra2Tool ,使用任意注入工具把 Ra2Dll.dll 模块注入到游戏进程即可(RATrainer 用不到)。

如果使用HookLoader工具,可以参考如下使用步骤:

【使用说明】 1、运行exe 2、进入游戏之后按下快捷键【ALT + H】即可,一定要进入游戏,保险起见是在出现基地之后,其他场景没测试过。

【作者有话】 全图功能我认为对级别低的玩家比较有帮助,对级别高的玩家帮助没有那么大。其他影响游戏平衡的变态功能全部删除了,只保留了全图这个功能,不然就没有可玩性了。

参考

文档信息

Search

    Table of Contents