[求助]【原创】【教程】如何自定义游戏设定,以及如何自制mod

2025-05-18 03:12:17

本帖最后由 zszzsz 于 2021-4-18 00:25 编辑

3、生成mod

我还是鼓励大家除了修改本地文件自己用以外,能生成mod便生成一下,毕竟这是一种创意的分享,让大家都能看到用到。

没有编程基础的人包括我(对C#并不熟悉)会觉得无法完成也是正常,不过我经过摸索,确定了当前版本(2021.4_e1.5.9)简单mod的制作过程,在这里进行一下分享,按照此步骤,简单的上一步可实现的修改都可以输出为mod。

3.1_首先下载Visual Studio 2019 Community(免费)

安装过程中,选择添加.NET桌面开发

1.png (133.06 KB, 下载次数: 75)

下载附件

保存到相册

2021-4-17 22:32 上传

3.2_创建一个新项目

选择类库,注意底下说明要确定是创建dll使用的类库(有好几种类库项目),而不是面向NET Standard或.NET Core项目的,

2.png (69.04 KB, 下载次数: 88)

下载附件

保存到相册

2021-4-17 22:34 上传

选择版本4.7.2,修改名称,选择项目路径(随意)

3.png (16.88 KB, 下载次数: 78)

下载附件

保存到相册

2021-4-17 22:37 上传

新创建的项目如图所示

4.png (58.79 KB, 下载次数: 65)

下载附件

保存到相册

2021-4-17 22:44 上传

3.3编辑代码

可以看到中间界面即编辑代码处,可以先不管上方的那些using xxxxxx;

将下方的namespace Xp_3{}大括号内的内容替换如下

namespace XP_3

{

public class MySubModule : MBSubModuleBase

{

// Token: 0x06000005 RID: 5 RVA: 0x0000245D File Offset: 0x0000065D

protected override void OnGameStart(Game game, IGameStarter starterObject)

{

base.OnGameStart(game, starterObject);

starterObject.AddModel(new Multi_Xp_SubModule());

}

internal class Multi_Xp_SubModule : StoryMode.GameModels.StoryModeGenericXpModel

{

public override float GetXpMultiplier(Hero hero)

{

if (((hero != null) ? hero.CurrentSettlement : null) != null && hero.CurrentSettlement.IsTrainingField())

{

return 0f;

}

return base.GetXpMultiplier(hero) * 3f;

}

}

}

}

复制代码下面说明一下这些代码

5.png (16.33 KB, 下载次数: 90)

下载附件

保存到相册

2021-4-17 22:48 上传

首先,namespace目录下要有一个

public class MySubModule : MBSubModuleBase(最大黑框)(MySubModule 是命名,可改,没必要改;冒号后的MBSubModuleBase不可改)

该目录下有两个部分,一个是下方(上图第一个小黑框内),这段代码的意思是游戏开启时加载此mod,必须要有,否则会报错,这也是官方教程中没有的东西:

protected override void OnGameStart(Game game, IGameStarter starterObject)

{

base.OnGameStart(game, starterObject);

starterObject.AddModel(new Multi_Xp_SubModule());

}复制代码第二部分是

internal class Multi_Xp_SubModule : StoryMode.GameModels.StoryModeGenericXpModel

{

public override float GetXpMultiplier(Hero hero)

{

if (((hero != null) ? hero.CurrentSettlement : null) != null && hero.CurrentSettlement.IsTrainingField())

{

return 0f;

}

return base.GetXpMultiplier(hero) * 3f;

}

}复制代码注意两部分的Multi_Xp_SubModule部分一致,第二部分冒号后内容为刚才我们用dnSpy修改文件相同的目录,在visual studio中打字编辑会有提示

下方大括号内的内容为要修改的方法,可以比较看到,大括号内的内容即dnSpy修改步骤里,编辑方法时对应的方法内容,可以直接复制粘贴即可,记得带上自己的修改内容。

****即,无论要修改哪个文件的内容,只要复制粘贴两个部分:

1、我贴出的第一部分直接复制粘贴,记得修改红字命名;

2、dnSpy查看后要修改的方法复制套入

<

internal class 命名:本地修改相同目录

{

}

>

即完成了代码的编辑。

3.4 添加引用

与dnSpy一样,visual studio编辑过程中也需要添加引用

按如下步骤操作

6.png (88.36 KB, 下载次数: 82)

下载附件

保存到相册

2021-4-17 23:01 上传

右键右侧解决方案目录下的引用,点击添加引用

7.png (76.89 KB, 下载次数: 75)

下载附件

保存到相册

2021-4-17 23:02 上传

至此界面选择浏览

调整目录至D:\目录\steamapps\common\Mount & Blade II Bannerlord\bin\Win64_Shipping_Client即游戏目录下的\bin\Win64_Shipping_Client

8.png (173.32 KB, 下载次数: 81)

下载附件

保存到相册

2021-4-17 23:04 上传

选择该目录下所有TaleWorlds.开头的dll文件,添加(我的TaleWorlds.Native添加不上,但不影响使用)

添加以上引用后,再打开添加引用,浏览:

选择

游戏目录\Modules\

看到目录中的官方mod和自己的mod,黑点标记的是官方的

9.png (118.25 KB, 下载次数: 72)

下载附件

保存到相册

2021-4-17 23:07 上传

可以使用右上角windows文件搜索功能搜索dll

选择所有官方的dll文件

10.png (163.86 KB, 下载次数: 93)

下载附件

保存到相册

2021-4-17 23:10 上传

同样会有部分添加不上,不过不影响使用

按照以上步骤操作完成后,引用添加完成。

3.5调整using

代码中还需要调整using

11.png (26.06 KB, 下载次数: 79)

下载附件

保存到相册

2021-4-17 23:12 上传

首先,创建项目时那些using system.xxxxx可以保留也可以去除(保留using system;)

无论你修改哪个本地文件,如图所示的三条都是必要添加的

using TaleWorlds.Core;

using TaleWorlds.Localization;

using TaleWorlds.MountAndBlade;复制代码此外,还要添加using 本次修改的文件,此与我们在dnSpy添加的是一致的,即添加

using TaleWorlds.CampaignSystem;

using TaleWorlds.ObjectSystem;复制代码还要添加我们本次修改的文件

using StoryMode;复制代码不用至子目录。

15.png (190.17 KB, 下载次数: 75)

下载附件

保存到相册

2021-4-17 23:26 上传

如上图,代码部分全部完成。

3.6生成dll

首先我们调整生成时的解决方案,如图点击配置管理器

13.png (75.75 KB, 下载次数: 78)

下载附件

保存到相册

2021-4-17 23:18 上传

14.png (30.14 KB, 下载次数: 69)

下载附件

保存到相册

2021-4-17 23:19 上传

如图位置点击新建,选择x64新建自动确认后关闭此界面

此时,若各步骤没有问题,在菜单-生成-生成解决方案点击即可得到dll文件,按照下方日志中的生成目录找到在一堆引用dll之间的生成目标dll。

16.png (111.84 KB, 下载次数: 73)

下载附件

保存到相册

2021-4-17 23:28 上传

ps:我的截图和我的操作步骤顺序或不一致,但最终我使用上述步骤得到了文件。

3.7形成mod

新建文件夹,命名为你的mod名

里面需要有一个/bin/Win64_Shipping_Client的目录,此目录下放刚才生成的dll

17.png (10.38 KB, 下载次数: 80)

下载附件

保存到相册

2021-4-17 23:31 上传

上图为我之前同样内容mod的实例,命名不一致但代码结构都是一致的,

18.png (8.53 KB, 下载次数: 68)

下载附件

保存到相册

2021-4-17 23:32 上传

回到mod文件夹目录,可以看到与bin文件夹并列的还有一个SubModule文件,这个文件可以新建,也可以直接从别人的mod里复制一个,然后用visual studio打开

19.png (82.89 KB, 下载次数: 66)

下载附件

保存到相册

2021-4-17 23:35 上传

必须改的内容黑点标注

注意最后两条,分别对应

dll文件名(不要错)

和namespace名.MySubModule,假如改了注意同样要改,上图为我之前的文件,如本例则应当是

修改完成后保存。

此时,你的mod文件夹下既有dll文件,也有对应的SubModule.XML文件了

把你的mod文件夹移动到

游戏目录/Modules/

启动游戏,即可在mod选项中看到自己的mod,打勾运行,若以上步骤无误,则类似简单修改的mod即可任意制作了。

论坛的设置有点问题啊,格式有问题请包涵。