cnedwin 发表于 2020-5-27 21:01

【经验】再次深谈如何制定稳定不崩溃的Mod排序规则

本帖最后由 cnedwin 于 2020-5-27 21:04 编辑

之前我写过一些帖子,例如:

骑马与砍杀2发售第2月 复盘Nexes全球最火Mod发展趋势+下载分享
【稳定保守】e 1.4.1 Beta 稳定可用Mod+汉化+排序+网盘下载
【适配】解决最新版本ModLib与Mod Configuration menu的Mod兼容性的老Mod的运行
1.3.0Beta版 教你怎么安排稳定不崩溃不坏档的MOD加载排序列表

今天我再深入讲讲,到底怎么排序Mod才不会崩溃,希望对大家有启发,以后可以帮助其他朋友接触加载崩溃和冲突崩溃问题。
如果你是Mod原创、修复、汉化的作者,请加这个QQ群:955645332



第一,我们要了解一下这个游戏的一些技术机制:
游戏刚开始启动,
1,首先是启动底层的3D引擎:\Mount & Blade II Bannerlord\bin\Win64_Shipping_Client\ 下面那些不带TaleWorlds开头的DLL
2,启动一些游戏的基础模块,比如游戏的基础系统、UI图形界面、声音特效、3D模型、对话、弹窗、等等,\Mount & Blade II Bannerlord\bin\Win64_Shipping_Client\ TaleWorlds.* 开头的DLL
3,启动游戏最核心的模块,Native系统
4,引入沙盒地图运行库(SandBox Core)、沙盒地图(SandBox)、剧情模式(StoryMode)、自定义战斗(CustomBattle)
5,读取Modules目录里的第三方Mod的DLL和XML(同等情况下,DLL优先于XML)
6,如果模块相同,则后加载的覆盖前加载的,如果模块不同,则自动视为新增模块,这是本游戏最重要的Mod机制

第二,所以你要记住,四个原则:
1,不要用修改到游戏根目录下Bin目录里和官方5个默认模组目录里的文件的任何MOD,这种操作很危险,如果崩溃了,你首先要验证游戏完整性来修复。
2,游戏的DLL文件是金字塔型的,先加载基础库(Bin目录),再加载核心模块(默认五个模组的DLL),然后加载功能(独立DLL)类,然后是配置类(XML)。
3,修改到同一个功能的Mod,不冲突就依次加载,后加载的给先加载的做补充,冲突的,后加载的覆盖前加载的。
4,同一个功能模块的DLL,他的参数和配置,都是XML文件,道理同第3点,也是后加载的覆盖前加载的。

第三,如果没崩溃,但是有些Mod的功能不见了,怎么办?
根据第二章里讲的,如果几个Mod都做了同一个功能,我举一个例子
外交修复(DiplomacyFixes)抄袭了心灵感应(Telepathy)的立即对话功能,同一个位置做了一个按钮,谁加载顺序在下面,就留着谁的按钮。
因为这个功能,其实就是一个百科功能网页的修改,你可以打开他们Mod目录的XML看看就知道了 \GUI\Prefabs\Encyclopedia\EncyclopediaSubPages
相当于两个Mod都改了同一个网页的同一个位置,按照后加载的覆盖先加载的原则,当然是谁在下面留了谁的按钮。

而另一种,不是修改同一个位置的页面和按钮的,而是增加人物的对话选项的。
根据游戏默认的机制,除非他们的id都一样,否则就会增加一个对话选项,我举一个例子
军火商的对话、娶媳妇的对话、分封贵族的对话,他们加到默认对话之外,只是多了3项,互不冲突。
但是如果id也一样,比如同性结婚和娶任何人(Marry Anyone),这两个Mod同时用,就会有一个功能失效。

第四,加载不了游戏的崩溃是怎么造成的?
1,你安装的野鸡Mod,代码本身写的就有BUG,编译DLL的时候就已经有问题了,你去N网和论坛看看大家怎么说的,删了吧。
2,缺少这个Mod的基础运行库,最常见的就是依赖Mod Configuration Menu和ModLib的,一般启动器会给你个叹号,装上MCM和ML放在上面就好了!
3,有两个Mod,修改了核心模块的同一个功能,ID冲突或者代码冲突了,你只能二选一,删掉其中一个。

第2种情况,也包括DCC,最下面那个Detail Character Creation需要最上面那个!DCC库才能运行,所以做着特别给你改了名字,一个前面加了叹号(排最上面),一个前面加了zz(排最下面)

第五,MCM和ModLib到底什么鬼,怎么装?
Mod Configuration Menu-612-v3-1-4 - 兼容全系列新老Mod的菜单库,必须放在ModLib上面加载,并打开菜单覆盖
下载地址
ModLib-592-1-4-0-1589511449 - 大部分第三方Mod运行都依赖的菜单和弹窗运行库 https://github.com/mipen/ModLib/tree/beta
下载地址
最上面是这样顺序是这样的


第六,进度没法读取了,是怎么造成的?
1,你原来装的某个Mod,往存档里写了一些数据,例如保存队伍分组的Fixed Formail,或者某一些添加了新兵种的,你新装的如果没有这个数据,肯定无法读取了,点了没反应,或者马上就崩溃。
2,在选择读取进度时,你注意看右上角,那里写着这个存档里面需要的Mod以及他们的版本,如果没有原来的Mod,你就无法读取存档,当然,不往存档里写数据的就无所谓。
3,通常,你在升级Mod后,一样可以读取存档,作者会自动兼容旧版本,所以升级Mod不会坏存档。

第七,玩着玩着,就崩溃了,到底咋回事?
加载游戏没事,读取存档也没事,但是……
在大地图上走着走着,游戏就崩溃了,那肯定是跟每日结算有关系的Mod出问题了。
比如每天结束时,加经验、招兵、升级、消耗资源类型的Mod,去一个一个关掉,排查一下就知道是哪个了。
有一种情况例外,比如原来装了新兵种的Mod,现在删了,能读取进度,但是当你开始游戏时,因为NPC、城镇或者你的队伍里有这种“幽灵兵”,系统读取不到就崩了。
另一种例外的情况是,通过修改游戏原本的文件或者安装Mod,给你造出原本游戏没有的装备,穿在你身上或者背包里,也会同上。

第八,说了半天,到底该怎么排序呢?

已经掌握了前七章的一些规则,我给大家一个实例,是我自己1.4.1 Beta正在玩的进度,装了40-50个Mod,稳定运行两周没崩溃。








iijjfff 发表于 2020-5-28 01:11

前排欣赏,~感谢分享经验

cnedwin 发表于 2020-5-28 01:26

现在论坛太不活跃了,

ha995 发表于 2020-5-28 12:06

感谢分享经验,大佬辛苦

836047327 发表于 2020-5-28 12:11

这篇帖子才是干货满满啊,O(∩_∩)O谢谢

woshiice 发表于 2020-5-29 21:30

请把mod文件夹改成中文名字,然后打包放上传{:2_27:}{:2_27:}

longtoukkk 发表于 2020-5-30 12:48

用了你网盘里的懒人 按照教程一步一步做 ,开新档直接崩溃

by0082 发表于 2020-5-30 23:08

十分强大·~~~~~~~~~~

Loong-kay 发表于 2020-5-31 13:36

看到了个报错用的,对我这种打了几十个mod的很有用,谢谢大佬分享

有钱买正版 发表于 2020-6-1 00:59

今天更新后用mod崩溃。按照提示一个个关,关了5-6个智慧化就会提示mscorlib.dll加载失败,不显示哪个mod有问题了。不加载mod能玩,试了一下,有人碰到一样的情况吗,咋办啊

纸篓 发表于 2020-6-4 11:15

楼主我想进行个采访,请问游戏每天一更,您要如何保持您的稳定不崩溃?
页: [1]
查看完整版本: 【经验】再次深谈如何制定稳定不崩溃的Mod排序规则