本帖最后由 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即可任意制作了。
论坛的设置有点问题啊,格式有问题请包涵。