骑马与砍杀中文站论坛

标题: 骑马与砍杀2Mod开发新手指南cnedwin(持续更新ing) [打印本页]

作者: cnedwin    时间: 2021-4-25 23:04
标题: 骑马与砍杀2Mod开发新手指南cnedwin(持续更新ing)
本帖最后由 cnedwin 于 2021-4-26 00:35 编辑

内容会逐渐编写,大家如果有什么建议,可以给我发帖留言。

内容提纲:
第一章:准备工作和部分文档
第二章:如何创建一个新的Mod,以及C#工程示例
第三章:骑马与砍杀2的游戏主体结构讲解
第四章:如何通过修改XML来修改装备和兵种
第五章:如何在大地图上制作一个新的定居点
第六章:骑马与砍杀2的一些程序常见定义
第七章:骑马与砍杀2的GUI系统和组件布局
第八章:通过HarmonyLib修改骑砍与砍杀2的方法和关键参数
第九章:骑马与砍杀2的 监听器(Tick)和事件注册(Event)
第十章:骑马与砍杀2的 消息提示和输入输出
十一章:骑马与砍杀2的 如何增加和修改热键(Key)
十二章:骑马与砍杀2的 本地化(Localization)和多语言系统
十三章:骑马与砍杀2的 存档数据(SaveData)与同步机制
十四章:骑马与砍杀2的 角色创建和角色开发相关
十五章:骑马与砍杀2的 角色技能和特质系统
十六章:骑马与砍杀2的 定居点相关功能
十七章:骑马与砍杀2的 摄像头控制
十八章:骑马与砍杀2的 战场相关和AI控制
十九章:骑马与砍杀2的 Mod编辑器如何导入3D模型
二十章:骑马与砍杀2的 Mod编辑器如何创建制作一件装备
二十一章:骑马与砍杀2的 Mod编辑器如何创建一个新的场景

第一章:准备工作和部分文档

骑马与砍杀是自研引擎,使用C++开发底层引擎,整个游戏的逻辑是基于C#语言开发,保存配置和数据使用XML文件。
因此我们需要准备一下常用的软件
C#开发用 Visual Studio 2019 https://visualstudio.microsoft.com/zh-hans/vs/
编辑XML文件   NotePad++  https://notepad-plus.en.softonic.com/download
反编译查看骑砍2的源代码
       dnSPY    https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8    代码还原度比较高,但是自带调试工具,强大的关联分析,而且可以直接修改DLL
       ILSPY     https://github.com/icsharpcode/ILSpy/releases/tag/v7.0-rc2   代码还原度比较高,轻便,但只能阅读和搜索,建议的分 析
       DotPeek  https://www.jetbrains.com/decompiler/     代码还原度很高,并且可以导出一个VS工程,但不能编译回原有工程
对比不同的文件夹或者文件差异   Beyond Compare 4    https://www.scootersoftware.com/BCompare-zh-4.3.7.25118.exe
骑马与砍杀2 官方 Mod编辑器  在 Steam的游戏库中勾选工具,安装 Mount & Blade II Bannerlord Modding Kit

以下是一些有用的资料:
官方的文档库:
https://github.com/TaleWorlds/Documentations
http://docs.modding.bannerlord.com/zh_cn/
VS2019的Mod工程模板:
https://github.com/BUTR/Bannerlord.Module.Template
砍2MOD开发技术以及mod工具部分教程
https://bbs.mountblade.com.cn/thread-2069427-1-1.html
砍2Mod场景编辑器教程
https://www.bilibili.com/medialist/detail/ml1093229335?spm_id_from=333.788.b_636f6d6d656e74.4
Aewol 的 砍2MOD开发技术以及mod工具部分教程
https://www.bilibili.com/read/cv7847470
秃猴的 骑马与砍杀2 武器模型导入教程
https://www.bilibili.com/video/BV1Va4y1L74B

如果你没有C#语言基础,还可以在B站找到类似的教程
最新某机构C#零基础入门全套课程   https://www.bilibili.com/video/BV1UK4y1v713

另外推荐一些:学习C#的好去处

https://msdn.microsoft.com
https://www.cnblogs.com (中文,强烈推荐)
https://www.codeplex.com (源码,强烈推荐)
https://www.codeproject.com (英文,强烈推荐)
https://code.msdn.microsoft.com/ (推荐)
https://www.asp.net
https://www.gotdotnet.com
https://www.windowsforms.com
https://www.c-sharpcorner.com



作者: cnedwin    时间: 2021-4-25 23:04
本帖最后由 cnedwin 于 2021-5-1 00:13 编辑

第二章:如何创建一个新的Mod,以及C#工程示例

骑砍2的Mod是由C#语言编写,引用官方的dll库,编译为dll,再通过修改submodules.xml来引入游戏的。


创建模组(SubModule.xml)
1. 前往游戏文件下的 Modules 目录。
2. 创建一个新的文件夹并命名为 ExampleMod(必须跟你第4步使用的id相同)。
3. 创建一个新的文件夹并命名为 bin 然后在其中新建一个子文件夹并命名为 Win64_Shipping_Client
4. 在你第2步创建的目录下新建一个文件 SubModule.xml(必须是这个文件名)并粘贴该代码:源链接

  1. <Module>
  2.      <Name value="Example Mod"/>
  3.      <Id value="ExampleMod"/>
  4.      <Version value="v1.0.0"/>
  5.      <SingleplayerModule value="true"/>
  6.      <MultiplayerModule value="false"/>
  7.      <DependedModules>
  8.          <DependedModule Id="Native"/>
  9.          <DependedModule Id="SandBoxCore"/>
  10.          <DependedModule Id="Sandbox"/>
  11.          <DependedModule Id="CustomBattle"/>
  12.          <DependedModule Id="StoryMode" />
  13.      </DependedModules>
  14.      <SubModules>
  15.          <SubModule>
  16.              <Name value="ExampleMod"/>
  17.              <DLLName value="ExampleMod.dll"/>
  18.              <SubModuleClassType value="ExampleMod.MySubModule"/>
  19.              <Tags>
  20.                  <Tag key="DedicatedServerType" value="none" />
  21.                  <Tag key="IsNoRenderModeElement" value="false" />
  22.              </Tags>
  23.          </SubModule>
  24.      </SubModules>
  25.      <Xmls/>
  26. </Module>
复制代码

注意:MySubModule 是在编程部分会使用的类的名字。
5. 如果你使用了不同的名字,请修改以上文件并匹配你的 Module/SubModule 的值。
6. 打开游戏启动器并确认你的模组名字出现在了 Singleplayer > Mods 中。
查看更多有关目录的信息,请访问目录结构

创建项目
在创建项目之前,要告知你这里对于基础模组(如物品/场景/文化等)而言是不需要的。

启动 Microsoft Visual Studio 并点击 新建项目(Create New Project)。
选择 Class Library (.NET Framework)。
将你的项目命名为 ExampleMod(如果你用了其它名字请确保命名空间和程序集名称是正确的)并使用.NET Framework 4.7.2 作为 Framework。如果没有这个选项,在这里下载(开发包)。
建好项目后,设置你的编译路径为游戏目录下的 Modules/ExampleMod/bin/Win64_Shipping_Client。
引用 在你游戏文件目录(不是你的模组目录)下 bin\Win64_Shipping_Client 中的 TaleWorlds.*(DLLs),并且引用每个官方模组目录 Modules\ModuleName\bin\Win64_Shipping_Client 下的 TaleWorlds.* DLLs。

调试项目(可选)

/singleplayer _MODULES_*Native*SandBoxCore*CustomBattle*SandBox*StoryMode*ExampleMod*_MODULES_

编程
1. 在你的 VS 项目中新建一个类并命名为 MySubModule,然后打开它。
2. 将以下指令添加到你的类中:
  1. using TaleWorlds.Core;
  2. using TaleWorlds.Localization;
  3. using TaleWorlds.MountAndBlade;
复制代码
3. 继承 MBSubModuleBase 类。
4. 复写 OnSubModuleLoad() 继承方法。
5. 添加如下代码到你的复写方法中:源链接

  1. Module.CurrentModule.AddInitialStateOption(new InitialStateOption("Message",
  2.      new TextObject("消息", null),
  3.      9990,
  4.      () => { InformationManager.DisplayMessage(new InformationMessage("Hello World!")); },
  5.      false));
复制代码
6. 编译你的项目并确定文件被输出到了 Modules\ExampleMod\bin\Win64_Shipping_Client。
7. 打开游戏启动器转到 Singleplayer > Mods 确定你的模组被勾选了并启动。
8. 在主界面中,你应该可以看到一个 Message 按钮,单击后你会在左下角聊天框看见输出了 Hello World。
9. 你成功地创建了你的第一个游戏模组!

现成的Mod工程VS模板

Bannerlord.Module.Template  https://github.com/BUTR/Bannerlord.Module.Template
下载安装后,在Visual Studio 2019中就可以直接创建一个Mod工程,非常方便。

作者: cnedwin    时间: 2021-4-25 23:04
本帖最后由 cnedwin 于 2021-5-1 00:52 编辑

第三章,骑马与砍杀2的游戏主体结构讲解

1,骑砍的文件夹结构
QQ图片20210501003348.png

这是Mod文件夹(安装其他Mod只要丢到这个文件夹里就可以)
QQ图片20210501003932.png 在启动器里的顺序如下(从上往下,也叫从前往后):
1,Native
QQ图片20210501005133.png

2,
3,
4,
5,


作者: cnedwin    时间: 2021-4-25 23:04
11111111111
作者: cnedwin    时间: 2021-4-25 23:04
11111111111
作者: cnedwin    时间: 2021-4-25 23:04
本帖最后由 cnedwin 于 2021-4-26 01:17 编辑

第六章:骑马与砍杀2的一些程序常见定义

Mission

Agent

Behavior

Logic

Component

MVVM模式
View
ViewModel
Model

Brushes (笔刷)
Prefabs (预制元件)


HUD

Hero

CharacterObjcet

Monster

Harmony

Sencne
Screen

作者: cnedwin    时间: 2021-4-25 23:04
1111111
作者: cnedwin    时间: 2021-4-25 23:04
11111111111
作者: cnedwin    时间: 2021-4-25 23:04
1111111111111
作者: cnedwin    时间: 2021-4-25 23:04
1111111111111
作者: cnedwin    时间: 2021-4-25 23:05
111111111
作者: cnedwin    时间: 2021-4-25 23:05
1111111111111
作者: cnedwin    时间: 2021-4-25 23:05
111111111111
作者: cnedwin    时间: 2021-4-25 23:05
1111111111
作者: cnedwin    时间: 2021-4-25 23:05
11111111111
作者: cnedwin    时间: 2021-4-25 23:05
11111111
作者: cnedwin    时间: 2021-4-25 23:40
111111111
作者: cnedwin    时间: 2021-4-25 23:40
11111111111
作者: cnedwin    时间: 2021-4-25 23:40
111111111111111
作者: cnedwin    时间: 2021-4-25 23:40
11111111111
作者: cnedwin    时间: 2021-4-25 23:40
1111111
作者: cnedwin    时间: 2021-4-25 23:40
1111111111
作者: cnedwin    时间: 2021-4-25 23:40
1111111111
作者: cnedwin    时间: 2021-4-25 23:40
111111111
作者: cnedwin    时间: 2021-4-25 23:40
111111111111
作者: cnedwin    时间: 2021-4-25 23:44
1111111111
作者: cnedwin    时间: 2021-4-25 23:44
111111111111
作者: cnedwin    时间: 2021-4-25 23:44
11111111111111111
作者: cnedwin    时间: 2021-4-25 23:44
11111111111
作者: cnedwin    时间: 2021-4-25 23:44
1111111111111
作者: darkfalling    时间: 2021-5-6 18:49
支持大佬。。。。
作者: xiaonaichuan    时间: 2021-5-10 16:37
楼主大佬,我是才开始学习制作mod的新手,可否加我一下qq,有问题想向您咨询。我的QQ807326827
作者: ffffwww    时间: 2021-6-1 23:23
楼主没有更新了吗

作者: 幼稚园殺手    时间: 2021-6-3 14:34
请你善用编辑功能,不要三连以上
作者: q850612028    时间: 2021-6-6 14:06
我还以为骑砍游戏都是开源的。还想会不会带有注释。没想到还要反编译。
作者: Orange..    时间: 2021-6-11 10:01
好帖,顶顶顶
作者: 深浅入时无    时间: 2021-6-15 10:15
楼主快更.....
作者: 而他天光    时间: 2021-6-18 15:52
大佬,怎么做装备mod?
作者: cnyidawang    时间: 2021-6-21 15:02
太赞了太赞了!
作者: 乱心の鬼舞    时间: 2021-6-24 19:32
给C大双击666~
一看提纲,我只是个会到第4章的菜鸡
作者: 不知火我    时间: 2021-6-30 11:28
怎么后面只看到11111
作者: holyace    时间: 2021-7-31 23:29
我靠~《最新某机构C#零基础入门全套课程》转载我的视频,这个B站账号转载我的视频并得到我的允许,虽然我不介意,但是得我和说一声~~我是16th北半球作者之一,然后想看C#教学,还是得找原版出处~b站 —— 全栈ACE
作者: Alva_rain    时间: 2021-9-1 10:03
up你好,我做了一个适配七国的贵族招募模组。自己电脑上可以运行,到别人电脑上就不可以用了
作者: Alva_rain    时间: 2021-9-1 10:03
Alva_rain 发表于 2021-9-1 10:03
up你好,我做了一个适配七国的贵族招募模组。自己电脑上可以运行,到别人电脑上就不可以用了

是哪里出了什么问题吗

作者: Alva_rain    时间: 2021-9-1 10:04
Alva_rain 发表于 2021-9-1 10:03
是哪里出了什么问题吗

我在别人电脑上编译出mod是可以用的
作者: andrewhoward    时间: 2021-9-11 00:58
大佬快更啊

作者: 呵呵SAMA    时间: 2021-12-14 23:21
大佬怎么停更了
作者: 锅铲    时间: 2021-12-17 08:37
感谢 感谢 感谢 感谢 感谢

作者: Rovel    时间: 2022-1-2 17:20
cnedwin 发表于 2021-4-25 23:04
第二章:如何创建一个新的Mod,以及C#工程示例

骑砍2的Mod是由C#语言编写,引用官方的dll库,编译为dll ...

这个部分建议加上原作者的ID比较好
作者: 醉后梦醒    时间: 2022-5-23 22:02
TJ了吗
作者: 马M大M哈    时间: 2022-7-31 19:07
大佬在做希绝大陆MOD
作者: 六点自然醒    时间: 2022-9-14 03:57
先收藏,在吃饭(知识就是面包)
作者: 一己之力203    时间: 2023-3-9 13:02
z怎么都没了
作者: Whale-fall    时间: 2023-4-25 09:55
挖坟啦啦啦啦啦啦
作者: saber的王储    时间: 2023-8-1 23:37
大佬加油啊
作者: qweasdliu    时间: 2023-9-24 19:19
本帖最后由 qweasdliu 于 2023-9-24 19:39 编辑

再次感谢,之前根据这个帖子以及CSDN上的另外一篇骑砍2MOD制作文再加一个B站的HarmonyLib用法介绍,再外加参考了几个别人的MOD,耗时N天,总算做了一个几乎没有一行代码是我写的小MOD,满足了我的强迫症……后来由于骑砍2代码更新,我这小mod也跟着一起完蛋了,于是一两年没玩,今天又想玩了,为了更新我的小MOD,又来翻教程(已经完全忘记怎么做了)。我感觉主要的难点是怎么搞清源码的结构,是不是哪里有什么官方的说明文档……当初粗略的搜了一下也没搜到完整的,全靠瞎逼乱翻翻到了我想改的部分,梭代码一共用几分钟,翻源码翻了好几天
作者: 玩会哥    时间: 2023-11-28 21:06
你好,请问我在创建工程后,添加引用时报错。TaleWorlds.Native.dll不成功,请确保此文件可访问并且是一个有效的程序集或COM组件,这个你有遇到过吗

作者: 不问世俗z    时间: 2025-1-10 13:45
666666666666666666666666666666666666




欢迎光临 骑马与砍杀中文站论坛 (https://bbs.mountblade.com.cn/) Powered by Discuz! X3.4