Skip to content

A Template Module for Fast Developing

License

Notifications You must be signed in to change notification settings

YiGu-Studio/TemplateModule

Repository files navigation

TemplateModule

这是一个帮助你快速上手开发的模板工程。你可以使用它进行独立开发,在测试完成后把它合并到主工程ThreeKingdomsEA中。

开发步骤

前置步骤

复制Directory.Build.props.template并重命名为Directory.Build.props,修改其中的<GameFolder>属性为你的游戏安装目录(通常为D:\Program Files\Steam\SteamApps\common\Mount &amp; Blade II Bannerlord),这一步能让项目编译生成的DLL文件和StaticResources下的静态资源文件自动部署到游戏的Modules\Yigu.TemplateModule目录中。

MyMod文件夹

这是你的Mod开发代码所在位置。在开发和测试完成后,你只需要将文件夹中的内容直接合并到ThreeKingdomsEA主工程中并修改几行代码即可完成合并。

MyModule.cs

这是你的Mod代码入口。首先你需要修改namespace,目前三国mod的命名空间为Yigu.ThreeKingdoms.子类别.Mod名,其中子类别目前有Battlefield(战场类)和Campaign(战役类,指一个存档中的全局要素)。例如战场小地图Mod的命名空间是Yigu.ThreeKingdoms.Battlefield.MiniMap。一个响亮而有意义的名字是重要的,它有助于让你的代码和其它Mod不起冲突。

你的MyModule类需要继承泛型类Yigu.Core.Framework.ModuleBase<ConfigType>,其中ConfigType是你的配置文件类(参见下文MyConfig.cs),并实现函数OnSubModuleLoad()。这个类的效果类似于TaleWorlds.MountAndBlade.MBSubModuleBase,提供了一系列OnXXX()函数允许你在Mod运行的各个时间点运行你的代码逻辑。

  • IEnumerable<Yigu.Core.Framework.MissionLogicBase> MissionLogics: 可以override该属性,在OnMissionBehaviorInitialize()时候会自动加载这些MissionLogic(参见下文MyMissionLogic.cs

  • IEnumerable<TaleWorlds.CampaignSystem.CampaignBehaviorBase>: 可以override该属性,在OnCampaignStart()时自动加载这些战役逻辑。

MyConfig.cs

这是你的Mod配置类。同样不要忘记修改命名空间。如果不需要可视化配置,删除该文件并在MyModule类的泛型参数中填上Yigu.Core.Config.NoConfig即可。

你的MyConfig类需要继承Yigu.Core.Config.BaseConfig。在这个类中可以创建如下几种类型的配置项:

  • BooleanOption
  • IntOption
  • FloatOption
  • EnumOption

需要新增一个配置项的时候,首先写一个属性,比如

public float SomeOption {get;set;} = 2.0;

然后用对应的Attribute进行修饰即可,Attribute的参数为

[xxOption(配置项名字的translation string, 配置项的描述translation string, 配置项的目录, ...)]

其中

  • 名字和描述的translation string写在StaticResources\ModuleData\Languages\CNs\std_config_strings_xml-zho-CN.xml
  • 配置项的目录是一个字符串,"Battlefield"是战场类的配置,"Economy"是经济类,其它的类别有需要可以在顶层的MainConfig.cs中添加。
  • 其它参数,根据配置项类型不同,
    • 数值类配置项(IntOption, FloatOption)还需要两个参数即上下限
    • 枚举类配置项需要一个数组类型的参数,分别为每个枚举值的translation string,同样写在StaticResources\ModuleData\Languages\CNs\std_config_strings_xml-zho-CN.xml

MyMissionLogic.cs

一个MissionLogic类就是一段场景/战场中的逻辑。你需要继承Yigu.Core.Framework.MissionLogicBase来实现你的逻辑。类似于TaleWorlds.MountAndBlase.MissionLogic,它提供了一系列OnXXX()函数允许你在战斗的各个阶段运行你的代码逻辑。例子中的代码就是在战斗刚开场时在游戏左下角日志中输出一行"hello world"。

  • bool IfAddMissionLogic(Mission m): 你需要override该方法,判断在某种Mission下是否触发该逻辑。

StaticResources文件夹

这是游戏的静态资源文件夹,该目录下的所有文件/文件夹将被copy到Mod目录即游戏的Modules\Yigu.TemplateModule下。

静态资源合并到主项目时,将该目录下的每个文件夹分别合并到主项目的对应文件夹即可,请注意合并时候不要直接覆盖,有一些诸如翻译文件ModuleData\Languages\CNs\std_config_strings_xml-zho-CN.xml在主项目中已经存在,你需要把文件内容进行手工编辑与合并。SubModule.xml不需要合并。

About

A Template Module for Fast Developing

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages