3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 9257|回复: 17
打印 上一主题 下一主题

[心得] MOD 修改教程,IL的汇编和16进制文件的解读。

  [复制链接]

39

主题

1423

帖子

1252

积分

游戏狂人

Rank: 6Rank: 6

贡献度
81
金元
9277
积分
1252
精华
0
注册时间
2009-7-1
跳转到指定楼层
主题
发表于 2014-10-9 21:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
每天都要上班,哄老婆,看孩子,精力不够用,在此把这几天我制作MOD的一些方法和心得发表出来,供有能力的朋友参考一下,全当抛砖引玉了。
期待大家的努力,打造精品MOD。

DLL文件的反编译:
这里主要是修改的程序算法和参数。
其实就是用WINDOWS自带的ildasm,反编译为IL的高级汇编,然后根据需求修改IL文件,重新编写函数,最后再用ilasm将IL重新编译为DLL文件就行了。
具体怎样操作,去百度吧,就在这里这里站篇幅了,如果这个都自己搞不定了,后边的汇编编写,更没戏。
另外用到的工具是Reflector,主要是查看原始DLL的算法,这里看到的都是C#/JAVA/VB 格式的高级语言,便于解读算法,修改的时候,一边对照原始高级代码,一边修改IL汇编代码。

以给重机枪加上MOD插槽为例:
在原始代码中ItemTemplate_Weapon.CheckInitializeMods()的方法中。

根据武器的modclass进行switch语句,在这里就能发现在WeaponModClass的枚举中根本就没有重武器。
于是重新修改函数就行了,思路就是当武器的modclass没有时就加上瞄准镜、枪管、枪管下挂的MOD槽,当然造成的BUG就是所有没有modclass的武器都能装这些mod,拳套、指环、雷管、火箭筒等等。
随便用个文本编辑器打开反编译好的IL文件,搜索[size=14.4444446563721px]CheckInitializeMods,找到如下图位置。

然后改就行了,当然什么入栈、出栈、br跳转什么的就不详细介绍了。

改完以后重新编译为DLL,然后用reflector打开在看一下,业务逻辑对不对。
改好了以后如下图

然后就没了。


ItemTemplates文件的修改:
这里主要是修改物品的属性,其实主要靠猜,猜对了就能用,猜错了不是程序跳出,就是卡进度条。。。
用到的工具就是16进制编辑器,我这里用的是010editor,期间也要对照源代码看,需要修改的参数是string?是float?还是int?

例如修改武器MOD的参数。源代码中在ItemTemplate_Mod.GetStat(String)的方法中是获取某个属性值的,由此猜出属性名称是string类型的,属性值是float类型的。在这个方法中,获取属性名称的时候是在一个集合里去找的。
用16进制编辑器打开[size=14.4444446563721px]ItemTemplates,首先按照MOD的英文名称检索字符串,例如long barrel找到如下图位置:

string类型的对应属性名称,float类型占4位对应属性值,修改的时候,把值转换成float类型的,再原位置写进去保存即可。



[size=14.4444446563721px]




评分

1

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-5-20 16:48 , Processed in 0.040152 second(s), 21 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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