lll259 发表于 2014-10-9 21:29

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

每天都要上班,哄老婆,看孩子,精力不够用,在此把这几天我制作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文件,搜索CheckInitializeMods,找到如下图位置。

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

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

然后就没了。


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

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

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








lll259 发表于 2014-10-9 21:29

本帖最后由 lll259 于 2014-10-9 22:03 编辑

武器参数: FAMAS为例,检索文本FAMAS,找到如下图位置:

然后往下看:



其他我还没再猜,有兴趣可以自己猜猜看,改个数保存一下,进入游戏看看就知道了。


lll259 发表于 2014-10-9 21:30

本帖最后由 lll259 于 2014-10-9 22:10 编辑

这几天光琢磨着改游戏了,连游戏还没通关过一次呢。先不改了,玩游戏去了,哪天玩的的不爽了,再掉头回来继续改。

wangyilr 发表于 2014-10-10 07:25

kanbudong

shanading 发表于 2014-10-10 08:31

很好的数据修改分析贴 感谢辛苦分享 学习了

zytzzmzyt 发表于 2014-10-10 12:32

感谢分享 虽然不懂

jinglc 发表于 2014-10-10 13:53

大神,麻烦问下移动速度怎么改?请指导

yihailanxin 发表于 2014-10-10 15:29

本帖最后由 yihailanxin 于 2014-10-10 15:31 编辑

求教楼主。在long barrel 的修改中命中是加6。请问 00 00 c0 40 是代表6了。比如我要是该成9应该怎么改。。怎么转换成00 00 什么的

eorthe 发表于 2014-10-10 15:45

jinglc 发表于 2014-10-10 13:53 static/image/common/back.gif
大神,麻烦问下移动速度怎么改?请指导

用JustDecompile,按 http://bbs.3dmgame.com/thread-4474882-1-2.html 修改负重的方法,在负重上边一段有 runspeed,默认值是6,改大就可以增加移动速度。

egh3612 发表于 2014-10-11 17:57

本帖最后由 egh3612 于 2014-10-11 18:07 编辑

沒想到Wasteland 2的ItemTemplates也是如此簡單..., 原本早就轉往家機Rom檔修改的我又找回昔日的熱情,
以前最後修改的一個PC遊戲是巫術八代的說...

順便一提, 增加水壺與負載的背包這下可就發揮它應有的功用了,不用再靠JustDecompile只弄到那一千三百
多點的負重...

當然, 就連被我棄之如敝屣的能量武器也終於派上用場了

零度热血 发表于 2014-10-13 15:45

看老婆 哄孩子才对{:3_94:}

eorthe 发表于 2014-10-13 18:03

yihailanxin 发表于 2014-10-10 15:29 static/image/common/back.gif
求教楼主。在long barrel 的修改中命中是加6。请问 00 00 c0 40 是代表6了。比如我要是该成9应该怎么改。。 ...

有些数据是浮点数,9等于00 00 10 41,如果手里没有转换工具,网上有一些在线转换的,比如http://jinzhi.supfree.net/,输入9.0,在下边会显示16进制浮点数,在16进制编辑器里改需要把高低位倒过来。

jeason1997 发表于 2014-10-13 19:28

loliny 发表于 2014-10-21 22:58

太专业了,掌握了方法,完全可以自定义武器外挂的类型和属性了。

egh3612 发表于 2014-10-22 01:51

本帖最后由 egh3612 于 2014-10-23 00:40 编辑

Untiy3d是一種標準檔案格式...

只不過要開啟這種檔案的軟體, 下載的安裝程式約1.2GB, 而且不是免費的, 不付費購買的話, 只能試用30天

如果就只是修改物品資料的話, 我想使用WinHex這一類軟體會簡單許多...

不然就等等看日後是否有只抽出物品資料的編輯工具...

sniperchen106 发表于 2014-10-28 11:10

武器属性的修改好像很复杂,武器修改好后是只有我方才有还是只要修改好的武器就是敌我通用的。

超激斗 发表于 2014-11-19 10:19

武器数值改后游戏里贴图错误而且木有效果@@

xx军 发表于 2014-11-26 10:47

:D 大神膜拜,完全看不懂,我觉得你可以创建一个MOD业余小组,把会编程的高手都集合起来一起做,分段进行:lol
页: [1]
查看完整版本: MOD 修改教程,IL的汇编和16进制文件的解读。