游戏几乎玩了30多个小时了,但是完成度实在是太低了,想自己修改一下,修改当然比起自己做游戏是简单的多。查了一下引擎是土鸡自研的,牛逼!简单研究了一下如何制作mod。

一. SubModule 介绍

一开始,对SubModule.xml文件有个很好的了解是很重要的,因为该文件告诉游戏选择了mod后应该加载什么内容。

Name - 模块的名称
Id - id,不要使用空格
Version - 版本
SinglePlayerModule -是否适用单人模式
MultiPlayerModule -是否适用多人模式
DependedModules -  依赖的模块
SubModules - 组成自己的子模块
Xmls - ModuleData 文件夹下 XML的路径
<Module>
    <Name value="My Module"/>
    <Id value="MyModule"/>
    <Version value="v1.0.0"/>
    <SingleplayerModule value="true"/>
    <MultiplayerModule value="false"/>
    <DependedModules>
        <DependedModule Id="Native"/>
        <DependedModule Id="SandBoxCore"/>
        <DependedModule Id="Sandbox"/>
        <DependedModule Id="CustomBattle"/>
        <DependedModule Id="StoryMode" />
    </DependedModules>
    <SubModules>
        <!-- The following SubModule element is optional. You can remove this portion if your mod does not have a DLL associated with it. -->
        <SubModule>
            <Name value="MySubModule"/>
            <!-- Path to the DLL File, if your Mod is called MyModule then it should be   -->
            <DLLName value="ExampleMod.dll"/>
            <SubModuleClassType value="ExampleMod.MySubModule"/>
            <Tags>
                <Tag key="DedicatedServerType" value="none" />
                <Tag key="IsNoRenderModeElement" value="false" />
            </Tags>
        </SubModule>
    </SubModules>
    <Xmls>
        <XmlNode>
            <XmlName type="1" id="Items" path="customitems"/>
        </XmlNode>  
        <XmlNode>
            <XmlName type="1" id="SPCultures" path="customcultures"/>
        </XmlNode>
        <XmlNode>
            <XmlName type="1" id="NPCCharacters" path="customcharacters"/>
        </XmlNode>
    </Xmls>
</Module>

二. 文件夹结构

所有的文件都是可选的,唯一需要的只是要包含有效的 SubModule.xml

有关文件夹结构和内容的完整示例,请参阅 Drive:\\InstallLocation\Mount & Blade II Bannerlord\Modules\Native\

AssetPackages -   目前不知道,可能要官方的编辑器出来才知道
    someasset.tpac
Atmospheres -  大气
    Interpolated 
        interpolatedatmosphere.xml
    atmosphere.xml
bin - 编译的二进制文件(后面会介绍)
    Win64_Shipping_Client
        MyModule.dll
GUI - UI
    Brushes
    Prefabs 
ModuleData - 常规数据(物品/文化/文字)
SceneObj - 场景文件

三.Basic C# Mod

以下指南将逐步引导您如何创建基本的C#mod。此mod将在单人游戏标题屏幕上添加一个按钮。单击后,此按钮将输出到聊天。Hello World

转到您的游戏文件并找到目录Modules,创建一个新文件夹并命名ExampleMod

创建一个名为的新文件夹,并在此目录中创建一个名为的新文件夹。binWin64_Shipping_Client

在 ExampleMod 创建一个新文件,然后将以下内容粘贴到其中:SubModule.xml

 <Module>
     <Name value="Example Mod"/>
     <Id value="ExampleMod"/>
     <Version value="v1.0.0"/>
     <SingleplayerModule value="true"/>
     <MultiplayerModule value="false"/>
     <DependedModules>
         <DependedModule Id="Native"/>
         <DependedModule Id="SandBoxCore"/>
         <DependedModule Id="Sandbox"/>
         <DependedModule Id="CustomBattle"/>
         <DependedModule Id="StoryMode" />
     </DependedModules>
     <SubModules>
         <SubModule>
             <Name value="ExampleMod"/>
             <DLLName value="ExampleMod.dll"/>
             <SubModuleClassType value="ExampleMod.MySubModule"/>
             <Tags>
                 <Tag key="DedicatedServerType" value="none" />
                 <Tag key="IsNoRenderModeElement" value="false" />
             </Tags>
         </SubModule>
     </SubModules>
     <Xmls/>
 </Module>

如果成功的话会在启动器里看到我们的mode ,如果失败启动器会无法启动,看是否id和文件名不匹配。

确保你有宇宙最强IDE Visual Studio

启动Microsoft Visual Studio,然后选择。Create New Project。不需要建在游戏目录下,随便你硬盘上的位置。

选择Class Library (.NET Framework)

将项目命名 ExampleMod 。如果该选项对您不可用,在此处下载(开发人员包)。

现在,您的项目已安装完毕,将构建路径设置为游戏文件中的目录。Modules/ExampleMod/bin/Win64_Shipping_Client

添加引用,在Mount & Blade II Bannerlord\bin\Win64_Shipping_Client目录下的TaleWorlds的dll,还有module下的。可能这有些蠢,不过这很有用。

编码

确保文件名和namespace一致
using TaleWorlds.Core;
using TaleWorlds.Localization;
using TaleWorlds.MountAndBlade;
namespace ExampleMod
{
    public class MySubModule : MBSubModuleBase
    {

        protected override void OnSubModuleLoad()
        {
            Module.CurrentModule.AddInitialStateOption(new InitialStateOption("Message", new TextObject("Message", null),
        9990, () => { InformationManager.DisplayMessage(new InformationMessage("Hello World!")); },
        false));
        }

    }



}

、点击build,启动mod