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

注册 登录

QQ登录

只需一步,快速开始

查看: 1638|回复: 9

[MOD] cnedwin从零教你汉化一个Mod,图文教程。

[复制链接]

17

主题

269

帖子

1853

积分

游戏狂人

Rank: 6Rank: 6

贡献度
298
金元
6409
积分
1853
精华
2
注册时间
2013-12-5

勞菈·S·亞爾賽德

发表于 2020-6-12 19:17 | 显示全部楼层 |阅读模式
本帖最后由 cnedwin 于 2020-6-12 19:21 编辑

最近骑砍2更新越来越慢,很多作者也热情消退,估计会进入一个暂时的低谷期,除非官方能够更新一些新的内容,或者彻底开放Mod编辑器和API。
N网上的,绝大部分Mod都是由纸篓(他的马甲:luckysky426、WPB)、casebo、悠悠小墨汉化的,我的作品是不发布N网的。
最近一些合集帖在转载时,连出处和署名都不写,强烈谴责这些行为,为此纸篓甚至考虑解散他的QQ群了。


为了防止Mod汉化的停更,前阵子我也发了一个招募帖,不过报名的人并不多,所以我打算把汉化的方法和经验写出来,让更多人受益。
这是招募贴:https://bbs.mountblade.com.cn/thread-2065554-1-1.html
这是懒人包:https://bbs.mountblade.com.cn/thread-2064803-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,会看到这样的一个界面。


将我们要修改的Mod目录里的 \bin\Win64_Shipping_Client 下所有.dll后缀的文件拖到左边那一栏。
以Telepathymod为例,然后点开要修改的主程序Telepathy.dll



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


我们看到一个字符串,在骑砍2中,通常是TextObject的对象,它本身是一个String类型。
因为汉化,不能破坏程序主体和代码,我们只汉化那些用双引号引起来橙色部分,类型是String的字符。
注意千万不要漏掉了左右两边的双引号

修改完之后,我们需要编译保存
编译的时候,会用到这个程序依赖的一些库,主要写在上面
如果你不拖进去,编译会报错,报错的英文里大概就是说缺少依赖的文件之类的。

因此我们需要把它依赖的库(都是一些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 城镇驻军来举例:


你会发现,每一个字符,作者都预先给设定了一个ID,就是这个花括号里的英文。
如果你有对应的语言包,则在游戏里显示对应的语言,如果没有,则在游戏里默认显示花括号后面的英文。

我们会看到
\Mount & Blade II Bannerlord\Modules\ImprovedGarrisons\ModuleData\Languages
这个目录里面有一个str_CNS.xml 文件(这是我自己做的,原来没有)
用NotePad++打开编辑,你会发现这个:


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

一般作者发布Mod如果支持本地化,他会单独发一个语言包的模板,你下载下来,然后单独存放到\ModuleData\Languages 下面就行。
系统默认是,简体中文是CNs,也就是在Languages下面再建一个子目录CNs,繁体中文是CNt。
如果你有多个语言包,系统设置为什么语言,就会加载什么语言目录下对应的xml。
如果原作不支持本地化,一些有节操的汉化者,会自己给他们加ID,比如知楼大神。


注意,这些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文件的内容必须是这样的



第四章:修改DLL实现汉化

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


你只需要找到所有 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了。


另外有一些Mod,替换了骑砍2默认的一些界面,需要一些图片,那些图片也是存在GUI这个目录下的,你可以对照去看看。
汉化的时候自己做对应大小和尺寸的图片去替换。



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

很多时候,我们汉化一些Mod,并不需要汉化其他的文本,主要是看不懂他的设置菜单。
而大多数第三方Mod都使用MCM和Modlib作为菜单库,所以我们只要熟悉了怎么处理它的本地化就可以完成汉化工作。
以外交修复为例,它就是典型的使用了MCM的,进入游戏后,点选项,Mod选项,就能看到设置菜单。
他在dll里面一般是主要的名空间下,有一个Setting的类。


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

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


再拿很知名的技能实装的社区补丁Community Path举例子,我们直接汉他的主程序
这个Mod,直接编辑类是不能编译的,只能在右边,一行一行的用IL指令修改来汉。


这是一个判断函数,那个方法的名字我们不能汉,但是两个选项可以对应汉掉!
好了!现在你试试自己汉化一个Mod玩玩吧!!!

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

3

查看全部评分

102

主题

1479

帖子

6115

积分

游戏精英

Rank: 8Rank: 8

贡献度
935
金元
23747
积分
6115
精华
0
注册时间
2011-6-9

3DMer(永久)

发表于 2020-6-12 22:20 | 显示全部楼层
好帖,支持一下。话说我都不会像你们这样图文并茂的发帖,都是一堆文字然后一堆图,图不对文,3DM论坛发帖玩不转,谁来写个发帖的教程,我想学学,真的啊,不是开玩笑,哈哈

17

主题

269

帖子

1853

积分

游戏狂人

Rank: 6Rank: 6

贡献度
298
金元
6409
积分
1853
精华
2
注册时间
2013-12-5

勞菈·S·亞爾賽德

 楼主| 发表于 2020-6-12 22:21 | 显示全部楼层
ars5217 发表于 2020-6-12 22:20
好帖,支持一下。话说我都不会像你们这样图文并茂的发帖,都是一堆文字然后一堆图,图不对文,3DM论坛发帖 ...

兄弟加入我的小群,都是汉化作者,就8个人。
910445077

102

主题

1479

帖子

6115

积分

游戏精英

Rank: 8Rank: 8

贡献度
935
金元
23747
积分
6115
精华
0
注册时间
2011-6-9

3DMer(永久)

发表于 2020-6-12 22:31 | 显示全部楼层
cnedwin 发表于 2020-6-12 22:21
兄弟加入我的小群,都是汉化作者,就8个人。
910445077

谢邀,工作时忙时不忙的(愿我多中标),专业的汉化还是交给你们这些专业的大佬去做吧,我继续做一个玩不好游戏的玩家(真的玩不好游戏,绝对不吹牛,我保证)。

17

主题

269

帖子

1853

积分

游戏狂人

Rank: 6Rank: 6

贡献度
298
金元
6409
积分
1853
精华
2
注册时间
2013-12-5

勞菈·S·亞爾賽德

 楼主| 发表于 2020-6-12 22:39 | 显示全部楼层
ars5217 发表于 2020-6-12 22:31
谢邀,工作时忙时不忙的(愿我多中标),专业的汉化还是交给你们这些专业的大佬去做吧,我继续做一个玩不 ...

我们都忙,有一搭没一搭的

3

主题

140

帖子

203

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
2026
积分
203
精华
0
注册时间
2017-7-23
发表于 2020-6-13 09:54 | 显示全部楼层
厉害了 谢谢大佬

27

主题

1628

帖子

1853

积分

游戏狂人

Rank: 6Rank: 6

贡献度
90
金元
14933
积分
1853
精华
0
注册时间
2009-6-26
发表于 2020-6-15 09:07 | 显示全部楼层
我这就去学英文!

8

主题

1076

帖子

750

积分

超级玩家

Rank: 5Rank: 5

贡献度
18
金元
6780
积分
750
精华
0
注册时间
2009-9-22
发表于 2020-6-18 15:30 | 显示全部楼层
技术贴必须支持

0

主题

54

帖子

121

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1213
积分
121
精华
0
注册时间
2015-11-8
发表于 2020-7-8 18:08 | 显示全部楼层
找不到文件真麻烦,找了一下午没汉化的领主名字都没找到

0

主题

54

帖子

121

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1213
积分
121
精华
0
注册时间
2015-11-8
发表于 2020-7-8 18:11 | 显示全部楼层
哪个DLL能看到名字,和土匪聊天的内容。能不能给我个方向,我想把1.4.1没汉化的都弄了。强迫症一点点英文看着不舒服
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2020-11-1 09:46 , Processed in 0.092036 second(s), 17 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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