[版主推荐]《骑马与砍杀2》MOD汉化指南

本帖最后由 cnedwin 于 2020-8-26 19:22 编辑

新上传了一个视频教程: https://www.bilibili.com/video/BV1Sf4y1Q74f/

为了防止Mod汉化的停更,前阵子我也发了一个招募帖,不过报名的人并不多,所以我打算把汉化的方法和经验写出来,让更多人受益。

这是招募贴:https://bbs.mountblade.com.cn/thread-2065554-1-1.html

这是懒人包:https://bbs.mountblade.com.cn/thread-2064803-1-1.html

这是141的列表:https://bbs.mountblade.com.cn/thread-2063606-1-1.html

这是142的列表:https://bbs.mountblade.com.cn/thread-2065111-1-1.html

这是143的列表: https://bbs.mountblade.com.cn/thread-2066300-1-2.html

这是150的列表:https://bbs.mountblade.com.cn/thread-2068024-1-1.html

我的网盘地址:链接 https://quqi.gblhgk.com/s/1845019/ZFgk5BVyw4cWr4o1 查阅码 qWUr2r

不要问我为什么不用百度网盘,下载量太大,每天被封几次你就知道了。

第一章:如何使用DNSPY反编译DLL和使用NotePad++编辑XML

主流的汉化圈,基本用DNSPY来反编译DLL,修改里面的代码实现的,DNSPY的下载链接在这里:https://github.com/0xd4d/dnSpy/releases

因为骑马与砍杀2是基于.Net 4.7.2开发的,所以我们选择 dnSpy-net472.zip

这是一个绿色软件,不需要安装,解压缩后,直接运行dnSpy.exe,会看到这样的一个界面。

1.png (92.22 KB, 下载次数: 434)

下载附件

保存到相册

2020-6-19 10:29 上传

将我们要修改的Mod目录里的 \bin\Win64_Shipping_Client 下所有.dll后缀的文件拖到左边那一栏。

以Telepathymod为例,然后点开要修改的主程序Telepathy.dll

2.png (172.74 KB, 下载次数: 434)

下载附件

保存到相册

2020-6-19 10:29 上传

我们要汉化的其实是右边的那些代码里面的字符(String)

3.png (157.51 KB, 下载次数: 449)

下载附件

保存到相册

2020-6-19 10:29 上传

我们看到一个字符串,在骑砍2中,通常是TextObject的对象,它本身是一个String类型。

因为汉化,不能破坏程序主体和代码,我们只汉化那些用双引号引起来橙色部分,类型是String的字符。

注意千万不要漏掉了左右两边的双引号。

修改完之后,我们需要编译和保存。

编译的时候,会用到这个程序依赖的一些库,主要写在上面

如果你不拖进去,编译会报错,报错的英文里大概就是说缺少依赖的文件之类的。

4.png (151.96 KB, 下载次数: 453)

下载附件

保存到相册

2020-6-19 10:29 上传

因此我们需要把它依赖的库(都是一些DLL),也拖到DNSPY的左边,或者在编辑类的时候,左下角有一个引用程序集,把需要的库选中。

通常这些库,它们在三个位置:游戏的基础库:

\Steam\steamapps\common\Mount & Blade II Bannerlord\bin\Win64_Shipping_Client

游戏默认Mod的一些运行库:

\Steam\steamapps\common\Mount & Blade II Bannerlord\Modules\Native\bin\Win64_Shipping_Client

\Steam\steamapps\common\Mount & Blade II Bannerlord\Modules\Sandbox\bin\Win64_Shipping_Client

\Steam\steamapps\common\Mount & Blade II Bannerlord\Modules\StoryMode\bin\Win64_Shipping_Client

游戏依赖的第三方库,比如MCM和Modlib

注意这些依赖的库dll,版本一定要选对,否则进游戏就会崩溃,比如你输出1.4.1的版本,千万别选成1.4.2的dll。

你看一下上图,白色字,引用里缺的文件名字叫什么,去找到,给他拖进去就行了。

然后点编译,如果通过了,再点保存项目,导出新的dll。

如果有啥不懂的,只能靠你自己摸索了。

至于编辑XML,很多人直接用记事本,这个是骑砍2官方强烈反对的,因为会修改文件头和编码,导致文件不可用。

所以大家可以去我的网盘,下载一个NotePad++,或者用Vistual Cose,这种适合编辑XML的编辑器。

DNSPY编辑DLL,毕竟是反编译,所以跟原始程序还是有区别的,所以分为三种编辑模式:

1,编辑类 (黄色的名空间的下一级就是绿色的类,如果反编译的比较完整,直接编译类,就可以编译了。)

2,编辑类方法 (绿色的类下面,还会有一级,浅绿色的是类方法,也就是俗称的函数,有时候直接编译类方法就可以实现修改。)

3,IL指令修改(有一些程序不让反编译,或者有加密和签名,我们只能在右侧,单独点那一行,右键,IL指令编辑,然后利用0Harmony机制,在运行是偷换类方法来实现程序替换)

第二章:骑砍2的本地化机制

骑砍2,默认是支持多语言的,因此他在TaleWorlds.Localization.dll里面写好了本地化的机制。

关于这方面,悠悠小墨,他做过两个教程

第一个在N网: https://www.nexusmods.com/mountandblade2bannerlord/mods/1211

第二个在B站有视频: https://www.bilibili.com/video/BV1Tt4y117K2/

有了这个机制,如果dll里面已经给所有的字符串写好ID了,你只需要制作XML,放到指定的目录里,就可以汉化。我这里拿我汉化的Improved Garrisons 城镇驻军来举例:

5.png (185.96 KB, 下载次数: 458)

下载附件

保存到相册

2020-6-19 10:29 上传

你会发现,每一个字符,作者都预先给设定了一个ID,就是这个花括号里的英文。

如果你有对应的语言包,则在游戏里显示对应的语言,如果没有,则在游戏里默认显示花括号后面的英文。

我们会看到

\Mount & Blade II Bannerlord\Modules\ImprovedGarrisons\ModuleData\Languages

这个目录里面有一个str_CNS.xml 文件(这是我自己做的,原来没有)

用NotePad++打开编辑,你会发现这个:

6.png (190.64 KB, 下载次数: 475)

下载附件

保存到相册

2020-6-19 10:29 上传

原理你明白了么,就是在不破坏原来程序的基础上,我们做本地化的语言翻译,单独写一个xml来存放这些id的汉化内容。

一般作者发布Mod如果支持本地化,他会单独发一个语言包的模板,你下载下来,然后单独存放到\ModuleData\Languages 下面就行。

系统默认是,简体中文是CNs,也就是在Languages下面再建一个子目录CNs,繁体中文是CNt。

如果你有多个语言包,系统设置为什么语言,就会加载什么语言目录下对应的xml。

如果原作不支持本地化,一些有节操的汉化者,会自己给他们加ID,比如知楼大神。

7.png (227.41 KB, 下载次数: 470)

下载附件

保存到相册

2020-6-19 10:29 上传

注意,这些id,必须是唯一的,越长越好,最好不容易重复,否则跟其他的地方冲突就麻烦了。

\Mount & Blade II Bannerlord\Modules\ 这个目录是骑砍2存放配置文件的目录,一般都是放语言包和设置文件还有缓存的。

\Mount & Blade II Bannerlord\Modules\DiplomacyFixes\ModuleData\Languages\CNs 以外交修复为例,简体中文的语言包放在这个目录里。

你不需要修改任何程序,他默认都会自动加载,不管你文件名叫什么 .xml ,他都会按顺序加载,哪怕是好几个文件。

但是也有一些作者做的很不规范,他没有锁目录,比如我刚才举例子的IG,曾经几个版本把我都搞晕了。

第三章:如何提取字符串ID和制作XML语言包

上一章,其实已经讲得差不多了,相信你已经会提取id和自己做本地化的语言包了。

提取ID必须用DNSPY打开dll文件,去一个个找,如果没有你也可以自己加,但是千万别破坏程序结构,也别漏掉双引号。

而XML语言包,一般放在Mod文件夹的这个目录

\ModuleData\Languages\CNs

名字叫什么无所谓,如果作者给你英文的模板,你直接下载,建立文件夹,放进去,然后改英文字符为中文就行。

XML文件的内容必须是这样的

8.png (89.9 KB, 下载次数: 414)

下载附件

保存到相册

2020-6-19 10:29 上传

第四章:修改DLL实现汉化

有些Mod,不支持本地化,没有引用 TaleWorlds.Localization.dll,也没有提取字符ID,你又懒得给他加。你可以直接用DNSPY反编译他的DLL文件,直接修改那些字符串来实现,比如Distinguished Service。

9.png (233.01 KB, 下载次数: 464)

下载附件

保存到相册

2020-6-19 10:29 上传

你只需要找到所有 new TextObject("最佳服务勋章", null).ToString(), 这样子的对象。

new是创建一个新的,TextObject是一个文本对象的意思,双引号里面的代表字符,后面的ToString()代表这个是一个字符类型的对象。

双引号里面的,你改成什么文本都不会破坏程序本身。

但是你不要看到任何字符都去汉化,先编译试试,能不能正常编译。

如果能正常编译,你保存项目,导出dll,进游戏看看,能不能正常用。

如果不能,说明你把不该汉化的代码都给翻译了。。。

第五章:修改GUI和页面实现汉化

骑砍2,有一些需要汉化的地方,并不在DLL里面,而是在GUI界面上,或者在页面上(例如百科)。他们通常在这个目录下,我拿TelepathyMod心灵感应举例子。

\Modules\Telepathy\GUI\ 这个目录下放的都是一些游戏里的图形界面,比如弹窗啊,或者页面。

心灵感应是在角色的百科页面加了一个按钮,是在这里:

\Modules\Telepathy\GUI\Prefabs\Encyclopedia\EncyclopediaSubPages\EncyclopediaHeroPage.xml

字面意思你都能看出来,它是替换了百科页面的英雄这个子页面,游戏把它封装成一个XML了。

10.png (173.31 KB, 下载次数: 413)

下载附件

保存到相册

2020-6-19 13:45 上传

另外有一些Mod,替换了骑砍2默认的一些界面,需要一些图片,那些图片也是存在GUI这个目录下的,你可以对照去看看。

汉化的时候自己做对应大小和尺寸的图片去替换。

第六章:常见的MCM和Modlib设置菜单汉化

很多时候,我们汉化一些Mod,并不需要汉化其他的文本,主要是看不懂他的设置菜单。

而大多数第三方Mod都使用MCM和Modlib作为菜单库,所以我们只要熟悉了怎么处理它的本地化就可以完成汉化工作。

以外交修复为例,它就是典型的使用了MCM的,进入游戏后,点选项,Mod选项,就能看到设置菜单。

他在dll里面一般是主要的名空间下,有一个Setting的类。

11.png (199.08 KB, 下载次数: 436)

下载附件

保存到相册

2020-6-19 13:45 上传

大多数Mod,设置菜单都喜欢叫xxxx Setting,选项都喜欢叫 xxxx Opiton。

再以最著名的Bannerlord Tweaks 综合设置为例(它是用的Modlib)

12.png (347.47 KB, 下载次数: 415)

下载附件

保存到相册

2020-6-19 13:45 上传

再拿很知名的技能实装的社区补丁Community Path举例子,我们直接汉他的主程序

这个Mod,直接编辑类是不能编译的,只能在右边,一行一行的用IL指令修改来汉。

13.png (343.87 KB, 下载次数: 463)

下载附件

保存到相册

2020-6-19 13:45 上传

这是一个判断函数,那个方法的名字我们不能汉,但是两个选项可以对应汉掉!

好了!现在你试试自己汉化一个Mod玩玩吧!!!

以后我会举更多例子,如果你汉化遇到问题,可以给我回帖,或者加这个QQ群 910445077