我爱秘籍论坛

 找回密码
 加入论坛

QQ登录

只需一步,快速开始

扫一扫,访问微社区

CE:最优秀的游戏修改工具入门:修改器制作傻瓜教程说说:你最想要找的修改器以前游戏玩我们,现在我们玩游戏
进阶:游戏修改视频教程导航必备:超2400款游戏秘籍下载:超5000款游戏修改器必读:论坛金币获得方法
返回列表
查看: 644101|回复: 234

最高指挥官2+18修改器

  [复制链接]
发表于 2012-5-25 15:58:00 | 显示全部楼层 |阅读模式
本帖最后由 endsub 于 2012-5-25 22:48 编辑

一个偶然的机会看到大象前辈做的魔兽修改器,认识到原来修改器可以做到那样的程度。从那以后就一直想做一个类似的东西。
最高指挥官2是经典RTS横扫千军的续作,我决定选这个游戏下手。之前在国内外各论坛上也看到不少最高指挥官2的修改器,但貌似尚没有哪一个能实现大象修改器那样的神奇功能(瞬移、复制、大变活人等)。
经过一段时间的努力,我基本实现了这些功能:
2.png
功能说明:alt+*是修改器初始化,其上的功能(不消耗资源、无敌、增加三种资源的数量、加人口上限)无需初始化就能直接用
其下的功能则必须先经过初始化,它们包括:
给玩家三个种族的工程师
复制选中单位
快速捕获+对敌人的捕获免疫
buff持续时间无限
改变颜色(三个文本框分别是主色、副色、图标颜色,均为RGB编码,默认黑底蓝色)
瞬间转移(选中的所有单位均会转移,之前大象前辈的貌似是只转一个)
快速建造
快速造核弹+敌人无法造核弹
在鼠标指针处创造单位(两个文本框分别是单位编码和数量)
强化所选择的单位(hp和护盾加满,经验/等级升满)
解锁所有科技
地图全开

我的游戏版本是1.250(SKIDROW补丁),安装了DLC(也是SKIDROW版的)
大家有兴趣的话可以帮忙测试下,这个游戏其实品质很高,但貌似玩的人不太多。
上一张游戏截图:
1.jpg
顺便附上创造单位时所用到的单位代码(只列实验性单位),默认是Soul Ripper II
有任何问题,都请大家指出。
SPC2+18.rar (2.84 MB, 下载次数: 519)

评分

参与人数 2金币 +51 鲜花 +2 收起 理由
magicway + 1 感谢您的分享!
我爱秘籍 + 50 + 2 原创作品,加分鼓励!

查看全部评分

 楼主| 发表于 2012-5-25 21:53:05 | 显示全部楼层

这个是中文版。。。
无标题.png
压缩包里同样内涵单位代码。。。

SPC2+18_ch.rar

2.84 MB, 下载次数: 236, 下载积分: 金币 -3

回复 支持 6 反对 0

使用道具 举报

发表于 2012-5-25 20:58:38 | 显示全部楼层
看不懂英文
回复 支持 2 反对 0

使用道具 举报

发表于 2012-5-25 20:02:58 | 显示全部楼层
  LZ系统好像是WIN8....     

点评

   发表于 2012-5-31 12:48
回复 支持 2 反对 0

使用道具 举报

发表于 2012-5-25 20:05:56 | 显示全部楼层
支持啊
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2012-5-25 20:06:35 | 显示全部楼层
嗯,是的,win8消费者预览版。对游戏的兼容性还是很不错的,这个对修改器的使用应该不会有太大影响,毕竟基址还是0x400000......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-25 20:10:37 | 显示全部楼层
感谢各位的支持,感谢坛主 我爱秘籍。
虽然也许游戏玩的人不多,但我们都知道修改器制作的意义和乐趣所在,它们超越了游戏本身。
大象前辈虽然已很久没在论坛活动了,但我希望前辈的技术和精神能在论坛里永存
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-25 21:09:29 | 显示全部楼层
z6226429 发表于 2012-5-25 20:58
看不懂英文

见谅,主要是在CE里用中文不太方便。
下面的功能介绍是中文写的,顺序和界面上的功能一样。
回复 支持 反对

使用道具 举报

发表于 2012-5-25 21:30:30 | 显示全部楼层
支持下     顺便说最好有中文版 英文的看不懂
回复 支持 反对

使用道具 举报

发表于 2012-5-25 21:58:18 | 显示全部楼层
希望LZ出个修改方法或者思路让我们小白参考学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-25 22:02:54 | 显示全部楼层
不知道为什么下载还要收-1金币,好像没法设置免费下载?
这里是我写的瞬移脚本,其中体现了游戏单位的组织结构等最为主要的信息,一并发上来给大家参考。

按照大象前辈的思路,最好是调用游戏内置函数实现相关功能,这样比较稳健。
但是开始时我没找到相关函数(这游戏的函数调用不太明显,很多都是用lua引擎统一解释lua脚本完成相关功能)
所以我自己解析了单位在内存中的结构,这个过程中也学到不少东西。
记得大象前辈以前的一个红警脚本,单位是以链表形式组织的,
但我发现这游戏的单位是以二叉树的形式组织起来的。。。

transfer.rar

1.52 KB, 下载次数: 18, 下载积分: 金币 -3

回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-25 22:10:55 | 显示全部楼层
不知道怎么设置免费下载,我干脆直接粘过来好了:
我会加一些注释帮助大家理解:

[enable]
alloc(transfer,1024)
label(func_findhandle)
label(func_unit_transfer)
label(func_building_transfer)
label(func_sleep)
label(find_begin)
label(find_end)
label(verify)
label(fail)
label(func_end)
label(sel_tree_dfs)
label(building)
label(visit)
label(next)
label(exit)
label(sleep_loop)
label(sleep_end)
label(building_move)

transfer:
//-----------THREAD ENTRANCE FUNCTION-------------
//这是新线程的入口函数
mov eax,[SupremeCommander2.exe+14EF7A0]
cmp eax,0
je exit //eax中存储着当前选中单位的数量
mov eax,[SupremeCommander2.exe+14EF79c]
mov eax,[eax+4]
//now eax hold the root of sel_tree

//以下这段代码寻找当前鼠标指针的位置
mov esi,[SupremeCommander2.exe+1125CBC]
mov ebx,[esi+510]//x
mov ecx,[esi+514]//z
mov edx,[esi+518]//y
//now we get the mouse cord

//当前选中单位是以二叉树的形式组织起来的,以下代码用深度优先搜索对这棵二叉树进行遍历
push 0
sel_tree_dfs:
cmp eax,0
je exit
cmp byte ptr [eax+19],0//[eax+19]为1的话,代表这是叶结点,应当回溯
je visit
pop eax
jmp sel_tree_dfs

visit:
mov esi,eax
mov eax,[eax+10]
//现在eax中存储着单位的句柄
mov eax,[eax+1a0]
//now eax hold the uid of sel unit
//maybe there exists some index nodes as those in unit_tree
cmp eax,fffff
ja next
call func_findhandle
test eax,eax
jz next
//now eax hold the actual unit handle

//here should judge land or air or naval or building,they transfer differently
//judge code begin
//to be added
cmp [eax+760],0
je building
call func_unit_transfer//这个函数完成兵的瞬移
jmp next
building:
call func_building_transfer//这函数完成建筑的瞬移
//judge code end

next:
mov eax,[esi]
push [esi+8]
jmp sel_tree_dfs

exit:
ret
//---------------------------------------------

//------------FUNCTION---------------
func_findhandle:
//这个函数根据单位的id寻找单位句柄
//所有单位在内存中都是以一棵二叉树的形式组织起来的
//*****findhandle function*****
//input:eax=uid
//output:eax=handle
push esi
push ecx
push edx
//find root of unit_tree
mov esi,SupremeCommander2.exe+14EB4B8
mov esi,[esi]
add esi,8
mov esi,[esi]
add esi,c
mov esi,[esi]
add esi,c
mov esi,[esi]
add esi,9cc
mov esi,[esi]
add esi,4
mov esi,[esi]
add esi,4
mov esi,[esi]
//now esi hold the root of the tree
//find the node of selected unit by uid
xor ecx,ecx
find_begin:
cmp byte ptr [esi+15],1
je find_end
mov ecx,[esi+10]//ecx hold the handle
cmp [esi+c],eax
je find_end
mov edx,esi
mov esi,[esi+8]
jb find_begin
mov esi,[edx]
jmp find_begin
find_end:
test ecx,ecx
jnz verify
fail:
xor eax,eax
jmp func_end
verify:
cmp eax,[ecx+190]
jne fail
mov eax,ecx
func_end:
pop edx
pop ecx
pop esi
ret
//----------------------------------------

//------------FUNCTION--------------------
func_unit_transfer:
//unit transfer
//input:eax=unit_handle ebx=dest_x ecx=dest_z edx=dest_y
push eax
push ebx
push ecx
push edx
push esi
mov [eax+a8],ebx//this only work for air units,but it also don't affect land and sea units
mov [eax+ac],ecx
mov [eax+b0],edx//this only work for air units,but it also don't affect land and sea units
mov esi,[eax+750]//this is for air units,should set the dest,though don't work for land and sea units,this also don't affect them
mov [esi+18],ebx
mov [esi+20],edx//air units should in place now
mov eax,[eax+760]
mov [eax+c],ebx
mov [eax+10],edx
cvttss2si ebx,[eax+c]
cvttss2si edx,[eax+10]
mov [eax+1d],bx
mov [eax+1f],dx
pop esi
pop edx
pop ecx
pop ebx
pop eax
ret
//----------------------------------------

//------------FUNCTION--------------------
//deal with building
//input:eax=handle ebx=cord_x ecx=cord_z edx=cord_y
func_building_transfer:
/*
cmp [eax+1c0],(float)0
je building_move
//this is to bary the building first to eliminate the invalid area left by transfered building
//i just force you to bary building first before moving
//by doing so,you can also make a "secrate underground factory",how could enemy do anything to such a factory?:)
mov [eax+1c0],(float)0
ret
*/
building_move:
mov [eax+1bc],ebx
mov [eax+1c0],ecx
mov [eax+1c4],edx
ret
//----------------------------------------


//------------FUNCTION--------------------
//sleep some time
//input: para1=num of nop
func_sleep:
push ecx
mov ecx,[esp+8]
sleep_loop:
cmp ecx,0
jle sleep_end
nop
nop
nop
nop
nop
dec ecx
jmp sleep_loop
sleep_end:
pop ecx
ret 4
//----------------------------------------

CREATETHREAD(transfer)
[disable]
dealloc(transfer)
回复 支持 反对

使用道具 举报

发表于 2012-5-25 22:21:28 | 显示全部楼层
下载附件金币-1是系统收的 并不是收费
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-25 22:36:40 | 显示全部楼层
幻想の領主 发表于 2012-5-25 22:21
下载附件金币-1是系统收的 并不是收费

原来如此,明白了。。。
以后我尽量发网盘或者直接粘贴
感谢解答!
回复 支持 反对

使用道具 举报

发表于 2012-5-25 22:43:54 | 显示全部楼层

崩溃啊,看了代码头大了,编程不会
回复 支持 反对

使用道具 举报

发表于 2012-5-26 10:44:33 | 显示全部楼层
老外做的修改器还没见到类似增援功能
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-26 11:26:57 | 显示全部楼层
我爱秘籍 发表于 2012-5-26 10:44
老外做的修改器还没见到类似增援功能

嗯,是的,也算是个小小的首创。。。
回复 支持 反对

使用道具 举报

发表于 2012-5-26 13:08:13 | 显示全部楼层
好帖还是要收藏,请继续
回复 支持 反对

使用道具 举报

发表于 2012-5-29 18:07:33 | 显示全部楼层
win7x64ALT +ABIJOSV使用会引起游戏崩溃和无响应,游戏版本号1.250
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-29 18:21:05 | 显示全部楼层
笑靥蒼穹 发表于 2012-5-29 18:07
win7x64ALT +ABIJOSV使用会引起游戏崩溃和无响应,游戏版本号1.250

感谢您的反馈!
其实这个让我挺惊讶的,因为修改器是在32位系统下开发的,这种情况下竟然还有功能可以在64位的系统当中使用。。。(如果我没理解错,您的意思是还有一些功能可用?)
其次,您列出的这些功能特性都是需要先alt+*激活修改器后才能用的,请确保使用他们之前,alt+*那一项已被激活(变为红字)
如果激活之后使用那些功能还是跳出,那可能就是64位的问题了。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入论坛

本版积分规则

QQ|Archiver|手机版|小黑屋|我爱秘籍论坛  

GMT+8, 2019-6-18 12:41 , Processed in 0.140894 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表