骑马与砍杀中文站论坛
标题: 骑马与砍杀2简易示例MOD制作教程----骑砍2官方文档翻译 [打印本页]
作者: NightSawyer 时间: 2020-4-7 23:24
标题: 骑马与砍杀2简易示例MOD制作教程----骑砍2官方文档翻译
本帖最后由 NightSawyer 于 2020-4-8 16:22 编辑
[spoiler=前言]
2. 本人将bannerlord文档中入门部分凭着个人理解,经过试验,成功后写成一个制作简易模组的入门贴,在此贴中涉及编程专业知识较少,即使是未接触过编程的新人也可以通过本贴内容,按部就班地制作一个输出”Hello world”的小示例
3. 本帖子使用的编程环境是visual studio 2019 community
4. 若有意进行更近一层的学习,可以将本贴与文档相关内容对比学习,这样可以更快理解如何使用该文档
5. 本人头一次翻译这种文档,希望大家多多体谅;技术上面的错误,也请各位大大多多指正
[/spoiler]
[spoiler=一、创建模组]
创建MOD(模组)在Bannerlord里,一个MOD(模组)只需要MOD文件夹(SubModule folder)和一个”SubModule.xml”文件。
1. 在”\Mount & Blade IIBannerlord\Modules\”里创建一个文件夹,文件夹名字必须为你的模组名。
2. 在你新建的文件夹中创建一个”SubModule.xml”文件
[/spoiler]
[spoiler=二、SubModule.xml]
元素说明1. Name – 你的模组名
2. Id - 你模组的ID(不能为空)
3. Version – 当前模组版本
4. SinglePlayerModule – 你的模组是否为单人模组
5. MultiPlayerModule – 你的模组是否为多人模组
6. DependedModules – 你所需的用来保证你模组功能完整性的模组(你的模组引用的其他模组)
7. SubModules – 你模组包含的子模块(DLL)
8. Xmls – 包含模组数据文件夹中的Xml文件的路径
注意对于多个模组,若它们之间的Xml文件拥有相同的ID,它们会和它们自己的资源绑定并且不会覆盖。对于同一个Xml文件的不同Objects(例:两个物品),若它们有相同的ID,它们会以在启动器加载的前后顺序来相互覆盖。(这方面因为欠缺MOD制作经验,按照个人理解翻译,欢迎各位MOD制作大佬指正错误)
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>
- <!-- 以下元素是非必需的,如果你的MOD未绑定DLL就可以删去 -->
- <SubModule>
- <Name value="MySubModule"/>
- <!-- DLL文件的路径。若你的模组名为MyModule,示例如下 -->
- <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>
复制代码
[/spoiler]
[spoiler=三、示例模组制作(C#)]
模组设置1. 进入到”\Modules”文件夹下
2. 创建一个名为”ExampleMod”的文件夹(该文件夹名必须与内部”SubModule.xml”中的Id一致)
3. 在”ExampleMod”文件夹中新建一个名为”bin”的文件夹,然后在”bin”里创建一个名为”Win64_Shipping_Client”的文件夹
4. 在”ExampleMod”文件夹中新建一个名为”SubModule.xml”的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>
复制代码
注意:”ExampleMod.MySubModule”中的MySubModule是之后编程部分的类名
5. 如果你起的名和上面部分不一致,请对以上部分命名进行修改,来保证模组关系相对应
6. 启动启动器,保证你的模组出现在Mods加载目录中
项目设置1. 在进行项目设置之前,你需要知道,有一些基础性模组是不需要通过建立项目来修改(例如:改变或添加物品、人物、场景)
2. 打开Visual Studio(本人使用2019社区版),然后选择创建新项目。选择类库(.Net Standard)
3. 将你的项目命名为”ExampleMod”(如果你起了其他的名字,确保命名空间和程序集名称正确)
4. 将位置设置成”ExampleMod/bin/Win64_Shipping_Client”(即你创建的那几个文件夹,非必须)
5. 在项目中添加TaleWorlds.*的DLL文件的引用,它们在”游戏目录\Mount & Blade IIBannerlord\bin\Win64_Shipping_Client”
以及”游戏目录\Mount&BladeII Bannerlord\Modules\CustomBattle(Native、SandBox、StoryMode中也有)\bin\Win64_Shipping_Client”
编程1. 在项目中创建一个新类,名为”MySubModule”,打开
2. 添加using声明
3. 继承”MBSubModuleBase”类
4. 覆写OnSubModuleLoad()方法
5. 生成DLL文件(找到项目根目录” ExampleMod\ExampleMod\bin\Debug\netstandard2.0”),在文件夹内找到”ExampleMod.dll”
将DLL文件丢进” Modules\ExampleMod\bin\Win64_Shipping_Client”文件夹内。
6. 打开启动器,在Mods目录中选中”ExampleMod”,启动游戏。
[/spoiler]
作者: NightSawyer 时间: 2020-4-7 23:29
本帖最后由 NightSawyer 于 2020-4-9 08:22 编辑
Debug相关设置可参考6楼的内容
作者: liu1173286138zx 时间: 2020-4-8 00:17
这就是技术宅吗 i了 i了
作者: kenwakyouki 时间: 2020-4-8 06:35
这就是技术宅吗 i了 i了
作者: 江湖人称小辣椒 时间: 2020-4-8 09:25
这就是技术宅吗 i了 i了
作者: pangliang 时间: 2020-4-9 07:43
不崩溃, 可以参考
作者: NightSawyer 时间: 2020-4-9 08:21
我又试了一下确实不崩溃,之前测试debug发生的崩溃可能是我个人原因
作者: cheng9812 时间: 2020-4-9 11:22
楼主,给力
作者: Aion1998 时间: 2020-4-9 16:04
太感谢了,今晚就回去研究一下
作为一名辣鸡的C#程序员终于有用武之地了
作者: Aion1998 时间: 2020-4-9 16:08
简略的看了下,最后一步,是不是可以简化一下,直接指定生成输出目录为 Modules\ExampleMod\bin\Win64_Shipping_Client,这样就可以不用自己手动去丢了!
作者: NightSawyer 时间: 2020-4-9 22:14
是的,dll直接输出到那里也可以
作者: 不知火我 时间: 2020-4-11 17:45
为啥会有引用无效或不支持该引用的报错,这是什么原因
作者: 不知火我 时间: 2020-4-11 17:47
而且发现引用taleworld开头的是可行的,但是其他的貌似就不行。
作者: Aion1998 时间: 2020-4-13 11:33
检查下版本
作者: 不知火我 时间: 2020-4-13 20:46
貌似只要引入taleworld开头的dll即可,当然登录器也要排除,看视频看别人就是这么做的。
作者: jsai9a22 时间: 2020-4-15 18:58
本帖最后由 jsai9a22 于 2020-4-16 23:01 编辑
好顶赞!有没有官方的函数文档简介的?不然得自己去看眼花的
报个坑<Version value="v1.0.0"/>,起初我以为这是自己MOD的版本号随意填无所谓,直到做完之后启动器无限崩,验证之后小数点只能为2-3个,多了少了都会崩。
作者: longkoong 时间: 2020-4-19 10:52
感谢翻译!!
作者: peren717 时间: 2020-4-19 16:09
发现砍2的mod和rimworld一样,大量用了Harmonylib来patch源代码。
这是维基https://github.com/pardeike/Harmony/wiki/Patching
希望哪位大佬能有这部分的讲解。
作者: Aion1998 时间: 2020-4-22 09:50
求分享视频
作者: 菊小隐 时间: 2020-4-26 03:53
请问如果不需要生成DLL文件该怎么做
作者: peren717 时间: 2020-4-26 15:58
在下面加上一行
<SpecificVersion>False</SpecificVersion>
貌似就没事了
作者: jsai9a22 时间: 2020-4-26 22:48
还有这种操作
作者: cey8923 时间: 2020-4-30 08:41
前期需要安装什么东西么,完全的小白一点儿都不明白。能不能再详细一点
作者: 我爱食史 时间: 2020-5-6 16:18
大佬膜拜!!!!
作者: 一只walker 时间: 2020-5-7 11:48
我怎么添加了xml之后就连登陆器都打不开了。。
作者: casebo 时间: 2020-5-19 23:18
大佬!这是啥意思?
作者: casebo 时间: 2020-5-19 23:27
本帖最后由 casebo 于 2020-5-20 18:45 编辑
我已经知道哪里错了,前面那个字搞错了
作者: darkfalling 时间: 2020-7-28 16:56
大佬,如果我的mod仅仅是修改原有兵种,在我mod的xml文件里直接用游戏原兵种ID进行新建就可以达到覆盖原有兵种的目的吗?
作者: byl20010928 时间: 2022-1-30 20:06
大佬盔甲武器之类的mod有没有教程该用哪些软件做啊
作者: SNAKE_WUUU 时间: 2023-9-22 14:10
java能做吗
作者: oldtimer 时间: 2024-10-23 22:01
非常感谢教学
| 欢迎光临 骑马与砍杀中文站论坛 (https://bbs.mountblade.com.cn/) |
Powered by Discuz! X3.4 |