骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 衣谷三国
查看: 19722|回复: 11

[求助] 【原创】【教程】如何自定义游戏设定,以及如何自制mod

[复制链接]

0

主题

4

回帖

1

积分

平民

Rank: 1

UID
3230083
第纳尔
21
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-4-3
鲜花(1) 鸡蛋(0)
发表于 2021-4-17 21:09:15 | 显示全部楼层 |阅读模式
本帖最后由 zszzsz 于 2021-4-17 22:25 编辑

修改游戏设定,如《装备属性》《经验值设定》《技能设定》等,势必要对游戏文件进行修改,1、我们首先打开游戏本地路径——路径\Steam\steamapps\common\Mount & Blade II Bannerlord\ index.png
打开文件夹bin\Win64_Shipping_Client

index-bin.png
该目录下以TaleWorlds.*.dll格式命名的dll文件中保存着大部分的游戏设定。
其他的位于Mount & Blade II Bannerlord\Modules\SandBox\bin\Win64_Shipping_Client 等官方dll文件中。
如何查看并修改这些dll文件呢?



2、修改本地文件(不形成mod至此步即可应用)
骑砍2并未对其进行加密,故我们可以反编译修改dll文件,这里我们需要下载一个软件——dnSpy。
搜索这个软件并尝试下载,我是从github官方下载的,但是github很多时候连接不好,从百度搜索dnSpy并下载任意版本均可。
下载安装该软件,打开软件目录,如图:
dnspyindex.png
打开软件,界面如下:

dnspy.png
从刚才打开的目录底下拖拽某个dll,或是文件——打开某个dll,本教程以修改经验倍率为例,打开

官方版本mod-StoryMode目录下的StoryMode.dll
D:\Game\Steam\steamapps\common\Mount & Blade II Bannerlord\Modules\StoryMode\bin\Win64_Shipping_Client
storymodeindex.png
dnSpy打开文件后
storymodedn.png
左边列表点击小三角打开层层打开目录
storymodeopen.png

各个数据所在位置大多要靠自己翻找或借鉴别人mod的引用目录,这里我会直接打开经验倍率相应目录StoryMode.dll/StoryMode.GameModels/StoryModeGenericXpModel,并选择GetXpMultiplier(Hero hero),如下所示
storymode——getxp.png
在这种获取数值代码中,可以通过修改return后面的值对数值进行调整,在这个方法(这段代码)命名处可以看到返回的是浮点数值类型,所以要修改倍率,则在return值后添加《*3f》,在右边操作页面右键,点击编辑方法弹出反编译界面如下,并添加:
storymode——rclick.png
storymode——change.png
此时,若点击右下角编译,则会弹出一系列错误
storymode——error.png
原因在于文件引用了其他dll文件,而dnSpy中未添加,我们点击看到有TaleWorlds.CampaignSystem和TaleWorlds.ObjectSystem需要添加引用,点击类名,看引用了哪些文件,.是下级分割符号,故该类只引用了TaleWorlds.CampaignSystem.dll, storymode——333.png
所以我们在游戏目录下找到TaleWorlds.CampaignSystem.dll并把其拖拽到dnSpy目录下
再次运行,仍然提示几条错误,错误列表中提示需要引用TaleWorlds.ObjectSystem,同样找到把它加入到dnSpy的目录里
storymode——index3.png
storymode——index4.png
再回到刚才编辑的那里,点击编辑方法,修改,发现没有红色的标记,点击编译可完成编译
storymode——edit.png
没有异常提示,返回到了目录,可以看到相应的目标已经修改,
storymode——fi.png
此时点击菜单——文件——全部保存,确定后文件修改即完成。
storymode——fi1.png
storymode——fi2.png
再次进入游戏,此时你获得的经验值就是原本的3倍了,*注意修改后假如新开档的话,其他npc的经验也会成倍初始化,会造成npc的技能等级偏高的情况,自己的初始技能也会成倍获得。



storymode——index2.png
storymode——333.png

鲜花鸡蛋

st1807  在2023-4-15 19:31  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

0

主题

4

回帖

1

积分

平民

Rank: 1

UID
3230083
第纳尔
21
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-4-3
鲜花(1) 鸡蛋(0)
 楼主| 发表于 2021-4-17 23:41:55 | 显示全部楼层
本帖最后由 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


3.2_创建一个新项目
选择类库,注意底下说明要确定是创建dll使用的类库(有好几种类库项目),而不是面向NET Standard或.NET Core项目的,
2.png
选择版本4.7.2,修改名称,选择项目路径(随意)
3.png
新创建的项目如图所示
4.png

3.3编辑代码
可以看到中间界面即编辑代码处,可以先不管上方的那些using xxxxxx;
将下方的namespace Xp_3{}大括号内的内容替换如下
  1. namespace XP_3
  2. {
  3.     public class MySubModule : MBSubModuleBase
  4.     {
  5.         // Token: 0x06000005 RID: 5 RVA: 0x0000245D File Offset: 0x0000065D
  6.         protected override void OnGameStart(Game game, IGameStarter starterObject)
  7.         {
  8.             base.OnGameStart(game, starterObject);
  9.             starterObject.AddModel(new Multi_Xp_SubModule());
  10.         }






  11.         internal class Multi_Xp_SubModule : StoryMode.GameModels.StoryModeGenericXpModel
  12.         {
  13.             public override float GetXpMultiplier(Hero hero)
  14.             {
  15.                 if (((hero != null) ? hero.CurrentSettlement : null) != null && hero.CurrentSettlement.IsTrainingField())
  16.                 {
  17.                     return 0f;
  18.                 }
  19.                 return base.GetXpMultiplier(hero) * 3f;
  20.             }
  21.         }

  22.     }
  23. }
  24. </font>
复制代码
下面说明一下这些代码
5.png
首先,namespace目录下要有一个
public class MySubModule : MBSubModuleBase(最大黑框)(MySubModule 是命名,可改,没必要改;冒号后的MBSubModuleBase不可改)
该目录下有两个部分,一个是下方(上图第一个小黑框内),这段代码的意思是游戏开启时加载此mod,必须要有,否则会报错,这也是官方教程中没有的东西:
  1. protected override void OnGameStart(Game game, IGameStarter starterObject)
  2. {
  3. base.OnGameStart(game, starterObject);
  4. starterObject.AddModel(new Multi_Xp_SubModule());
  5. }
复制代码
第二部分是
  1. internal class Multi_Xp_SubModule : StoryMode.GameModels.StoryModeGenericXpModel
  2.         {
  3.             public override float GetXpMultiplier(Hero hero)
  4.             {
  5.                 if (((hero != null) ? hero.CurrentSettlement : null) != null && hero.CurrentSettlement.IsTrainingField())
  6.                 {
  7.                     return 0f;
  8.                 }
  9.                 return base.GetXpMultiplier(hero) * 3f;
  10.             }
  11.         }</font>
复制代码
注意两部分的Multi_Xp_SubModule部分一致,第二部分冒号后内容为刚才我们用dnSpy修改文件相同的目录,在visual studio中打字编辑会有提示
下方大括号内的内容为要修改的方法,可以比较看到,大括号内的内容即dnSpy修改步骤里,编辑方法时对应的方法内容,可以直接复制粘贴即可,记得带上自己的修改内容。


****即,无论要修改哪个文件的内容,只要复制粘贴两个部分:
1、我贴出的第一部分直接复制粘贴,记得修改红字命名;
2、dnSpy查看后要修改的方法复制套入
<
internal class 命名:本地修改相同目录
{
     }
>
即完成了代码的编辑。


3.4 添加引用
与dnSpy一样,visual studio编辑过程中也需要添加引用
按如下步骤操作
6.png
右键右侧解决方案目录下的引用,点击添加引用
7.png
至此界面选择浏览
调整目录至D:\目录\steamapps\common\Mount & Blade II Bannerlord\bin\Win64_Shipping_Client即游戏目录下的\bin\Win64_Shipping_Client
8.png
选择该目录下所有TaleWorlds.开头的dll文件,添加(我的TaleWorlds.Native添加不上,但不影响使用)
添加以上引用后,再打开添加引用,浏览:
选择
游戏目录\Modules\
看到目录中的官方mod和自己的mod,黑点标记的是官方的
9.png
可以使用右上角windows文件搜索功能搜索dll
选择所有官方的dll文件
10.png
同样会有部分添加不上,不过不影响使用
按照以上步骤操作完成后,引用添加完成。


3.5调整using
代码中还需要调整using
11.png
首先,创建项目时那些using system.xxxxx可以保留也可以去除(保留using system;)
无论你修改哪个本地文件,如图所示的三条都是必要添加的
  1. using TaleWorlds.Core;
  2. using TaleWorlds.Localization;
  3. using TaleWorlds.MountAndBlade;
复制代码
此外,还要添加using 本次修改的文件,此与我们在dnSpy添加的是一致的,即添加
  1. using TaleWorlds.CampaignSystem;
  2. using TaleWorlds.ObjectSystem;
复制代码
还要添加我们本次修改的文件
  1. using StoryMode;
复制代码
不用至子目录。
15.png
如上图,代码部分全部完成。


3.6生成dll
首先我们调整生成时的解决方案,如图点击配置管理器
13.png
14.png
如图位置点击新建,选择x64新建自动确认后关闭此界面
此时,若各步骤没有问题,在菜单-生成-生成解决方案点击即可得到dll文件,按照下方日志中的生成目录找到在一堆引用dll之间的生成目标dll。
16.png
ps:我的截图和我的操作步骤顺序或不一致,但最终我使用上述步骤得到了文件。

3.7形成mod
新建文件夹,命名为你的mod名
里面需要有一个/bin/Win64_Shipping_Client的目录,此目录下放刚才生成的dll
17.png
上图为我之前同样内容mod的实例,命名不一致但代码结构都是一致的,
18.png
回到mod文件夹目录,可以看到与bin文件夹并列的还有一个SubModule文件,这个文件可以新建,也可以直接从别人的mod里复制一个,然后用visual studio打开
19.png
必须改的内容黑点标注
注意最后两条,分别对应
dll文件名(不要错)
和namespace名.MySubModule,假如改了注意同样要改,上图为我之前的文件,如本例则应当是<DLLName value="XP_3.dll"/>
<SubModuleClassType value="XP_3.MySubModule"/>
修改完成后保存。
此时,你的mod文件夹下既有dll文件,也有对应的SubModule.XML文件了
把你的mod文件夹移动到
游戏目录/Modules/
启动游戏,即可在mod选项中看到自己的mod,打勾运行,若以上步骤无误,则类似简单修改的mod即可任意制作了。






论坛的设置有点问题啊,格式有问题请包涵。
12.png

0

主题

698

回帖

209

积分

见习骑士

Rank: 3

UID
3210535
第纳尔
1429
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2020-12-13

骑砍中文站APP会员勋章

鲜花(2) 鸡蛋(0)
发表于 2021-4-21 08:13:28 来自手机 | 显示全部楼层
请收下我的膝盖来自: Android客户端

0

主题

32

回帖

10

积分

随仆

Rank: 1

UID
3251354
第纳尔
287
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-7-16
鲜花(0) 鸡蛋(0)
发表于 2021-7-18 01:26:48 | 显示全部楼层
膜拜大佬!!

9

主题

142

回帖

55

积分

扈从

Rank: 2Rank: 2

UID
3167954
第纳尔
697
精华
0
互助
2
荣誉
0
贡献
0
魅力
0
注册时间
2020-4-14
鲜花(3) 鸡蛋(0)
发表于 2021-10-5 17:28:23 | 显示全部楼层
顶一下,这显然瞬间浇灭了我 自己新建一个MOD的火

0

主题

11

回帖

8

积分

平民

Rank: 1

UID
3253840
第纳尔
22
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2021-7-21
鲜花(0) 鸡蛋(0)
发表于 2021-11-4 14:26:25 | 显示全部楼层
6666666666

0

主题

25

回帖

8

积分

平民

Rank: 1

UID
3244933
第纳尔
251
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-6-11
鲜花(0) 鸡蛋(0)
发表于 2022-1-30 20:01:35 | 显示全部楼层
1.64还能用你这个方法么

5

主题

64

回帖

31

积分

扈从

Rank: 2Rank: 2

UID
3413444
第纳尔
192
精华
0
互助
2
荣誉
0
贡献
0
魅力
0
注册时间
2022-9-11
鲜花(2) 鸡蛋(0)
发表于 2022-9-12 04:32:50 来自手机 | 显示全部楼层
虽然我看着过于复杂,但我还是收藏点赞先来自: Android客户端

1

主题

170

回帖

51

积分

扈从

Rank: 2Rank: 2

UID
3367185
第纳尔
455
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2022-6-9
鲜花(1) 鸡蛋(0)
发表于 2022-9-12 08:24:08 来自手机 | 显示全部楼层
这个语言很像我调的设备来自: Android客户端

5

主题

64

回帖

31

积分

扈从

Rank: 2Rank: 2

UID
3413444
第纳尔
192
精华
0
互助
2
荣誉
0
贡献
0
魅力
0
注册时间
2022-9-11
鲜花(2) 鸡蛋(0)
发表于 2022-9-12 22:28:32 | 显示全部楼层
你好,请教一下,为什么我打开游戏时提示SubModule.XML无法加载,有问题呢?我是复制别的文件,然后改的和你的例子一模一样的。
[img]https://p.sda1.dev/7/c1bbcc8cbd112f33a428a9556b95ac4a/_7`0F8H___`FS@`R`PT0@IY.png[/img]
东风夜放花千树

5

主题

64

回帖

31

积分

扈从

Rank: 2Rank: 2

UID
3413444
第纳尔
192
精华
0
互助
2
荣誉
0
贡献
0
魅力
0
注册时间
2022-9-11
鲜花(2) 鸡蛋(0)
发表于 2022-9-12 22:29:21 | 显示全部楼层
六点自然醒 发表于 2022-9-12 22:28
你好,请教一下,为什么我打开游戏时提示SubModule.XML无法加载,有问题呢?我是复制别的文件,然后改的和 ...

https://p.sda1.dev/7/c1bbcc8cbd1 ... a/_7`0F8H___`FS@`R`
东风夜放花千树

4

主题

28

回帖

10

积分

随仆

Rank: 1

UID
3352912
第纳尔
182
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2022-4-25
鲜花(0) 鸡蛋(0)
发表于 2023-4-15 19:24:57 | 显示全部楼层
膜拜大佬,虽然我一头雾水
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2025-4-24 07:40 , Processed in 0.098390 second(s), 35 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表