众所周知的,SPT4.0的mod系统转移到了C#,因此mod中会有一个dll,而且大多数mod的数值都将在这个dll中定义
那么修改数值,最直接的方法就是拉源码编译了。但遇到不开源的mod或者没有条件配置.NET开发环境的话,就需要通过修补的方式更改数值了
好在,生成的dll也是.NET,即便没有逆向工程经验的玩家也可以很轻易地修改(前提是没有加保护壳,不过我试了一下,加壳之后服务端好像没法加载这个mod,至少加themida不行)
我们将用到的工具是 dnSpyEx
首先把我们要修改的dll拖进窗口,我以191mod为例
接着我们在左边展开,直到mod的命名空间
接下来我们就是要找到我们要修改的物品的数值是在哪里定义了。
比如我要将dvc-12的穿透改为99,我们就找到dvc-12的数值定义位置
在例子中我们放在CreateAmmo函数中,实际情况下作者想放在哪个函数,叫什么名字都可以
然后我们找到这里,后面OverrideProperties中的内容就是子弹的数值了
我们确定了数值位置后,就在左上角切换到IL with C#视图,再次确认数值在IL代码中的位置
然后右键,Edit IL Insructions
你会发现数值可能是16进制,没关系,我们可以借助计算器
编辑时可以直接输入十进制数,不过要注意以16进制保存的位数不能超过原数据位数(16进制),编辑完成后按右下角OK保存即可
切换回C#视图你会发现数值已经变化了
然后我们点击左上角File > Save Module
一般来讲直接点OK就好了,然后进游戏验证一下
这样就修改成功了。
另外想说的:
如果要改的数值16进制位数更大也有办法,添加依赖然后采用重编译的方法也可以(我后面可能会补充)
虽然这相较于别的逆向工程来说是很简单的了,但还是麻烦,至少比编辑json麻烦。
其实我们可以搞一套模板,直接读json,(我没搞错的话,3.xx版本很多mod就是靠typescript/javascript实现读取json的)这样可以很方便的从3.xx版本移植上来,玩家想修改也方便。
或者哪怕不兼容旧版本模板,把数值部分放在json保存也可以。
目前好像已经有大佬在这么做了。等我有空我也折腾折腾






















你应该在编译QBZ 191 了??啥时候能出成品?