C#骑砍逻辑类Mod制作详细解说

2024-08-30 20:36

本文主要是介绍C#骑砍逻辑类Mod制作详细解说,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

最近在研究骑砍的mod,主要是想修改其中的逻辑部分,因此有了这篇帖子。

一,文件夹与XML配置

在Modules创建一个新文件夹,文件夹名称随意,不影响实际的读取。

文件夹下面的位置需要固定,因为我只是为了修改逻辑,所以只需要bin\Win64_Shipping_Client,这是之后放dll位置的地方。

XML的配置如下:

 <Module><Name value="YeMod"/><Id value="YeMod"/><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="YeMod"/><DLLName value="YeMod.dll"/><SubModuleClassType value="YeMod.Main"/><Tags><Tag key="DedicatedServerType" value="none" /><Tag key="IsNoRenderModeElement" value="false" /></Tags></SubModule></SubModules><Xmls/></Module>

参考论坛里面xml的配置方式,大概说明如下:

*1

<?xml version="1.0" encoding="utf-8"?>,SubModule文件里有的开头有的会有这样的标头,这个代表的意思是:声明这个文件是个xml类型,1.0版,用的utf-8编码。(其实这句话在SubModule文件里带不带都无所谓,它默认就按这个执行,你不带这句话把mod名称打成中文都可以。)另外,紧跟着会有个<Module>,这个<Module>和文件结尾的</Module>是一对,一个是开始标记,一个结束标记,无论隔多远,这两个符号之间的都是一个段落,所以这两个少一个就出错。还有一些标记是这样的:<Name value=" "/>,标记<之后找它后面最近的/>配对,这之间的语句是一个封闭的语句(不知道专业名称用的对不对,反正是这样用的)。

*2

<Name value=" "/> 这是mod在启动器里显示的名称,可以打成中文或英文,和id没关系,可以随便起。

*3

<Id value=" "/>这个对应mod文件夹名称,不区分大小写。

*4

<Version value="v1.0.0"/> 这个讲就是在启动器里显示的mod版本,你填什么那里显示什么,但要用v开头,用e开头之前试过,会报错。

*5

<SingleplayerModule value="true"/>是单人模式的mod吗?是的话填true,不是填false,我们这里填true。<MultiplayerModule value="false"/>不是多人模式mod,直接填false。

*6

<DependedModules>和</DependedModules>之间这几个=""里是需要依赖哪些mod,一般填官方这几个就可以,最少也要填一个,不能空,不然会报错。
    <DependedModules>
        <DependedModule Id="Native"/>
        <DependedModule Id="SandBoxCore"/>
        <DependedModule Id="Sandbox"/>
        <DependedModule Id="CustomBattle"/>
        <DependedModule Id="StoryMode" />
    </DependedModules>

*7

<SubModules>和</SubModules>之间的放所有mod所需的dll文件,如果不需要dll文件,就把<SubModules>和</SubModules>之间的内容全部删除。如果有dll文件,就要把每个dll文件的各个属性都要放在一对<SubModule></SubModule>之间的。接着说下每个dll的属性内容填写:①<Name value=" "/>,随便起名,中文英文都可以,但最好别和别的dll文件名字重名。
②<DLLName value="xxx.dll"/>,这里就是所需dll文件在bin\Win64_Shipping_Client目录下的文件名,要填写正确,复制粘贴过来就好。
③<SubModuleClassType value="xxx.xxx"/>,这里在一楼讲过,对应的是dll文件里的“空间名.类型名”。
④<Tags></Tags>,这之间填mod的类型属性,主要起个标识作用,只要用到dll,就一定要有这对标记,不然会报错,但这之间的内容可以不填,假如想填可以把别人mod里的复制过来,至于填什么没实际影响,总之有dll,<Tags></Tags>这对标记就要有,但之间的内容可填可不填,保证文件格式正确就行了。

*8

<Xmls></Xmls>,这对标记之间放mod需要的所有xml文档,每个xml文档要用一对<XmlNode> </XmlNode> 括起来,这之间填每个xml文档的属性。
①<XmlName id=" " path=" "/>,id=" "里填mod需要加载的xml文档的命名空间名称,例如你创建了一个新人物,人物属于NPCCharacters这个命名空间里的,这个文档里都是新建人物,所以这里填NPCCharacters,假如是新增武器,就要填Items。path=" "这里填需要加载的xml文档名称,不需要带后缀名,比如你新建人物的xml文档的名称是hero.xml,那这里就填hero。
②<IncludedGameTypes></IncludedGameTypes>这对标记之间填xml文档对应游戏类型,只要也是标识作用,不填也不要紧,甚至连这对标记都可以不要,想填可以把别人的复制过来,填什么没影响,但要注意文件格式正确。
 

最后我们打开外层的TaleWorlds.MountAndBlade.Launcher.exe,就可以看到我们配置的mod选项出现:

用mod配置器进入之后,会报错如下,大概意思就是缺少对应的dll,这个是正常的,接下来补上就是:

二,代码编写

通过VS建立一个类库工程,建立的步骤可以参考这个帖子。大概流程就是:

1,改下输出目录为mod的目录;

2,通过NuGet工具下载harmony,关于工具的使用,可以看上个帖子。

3,创建继承于MBSubModuleBase的Main.cs文件(这里MsgBox是测试函数,可除去)

using HarmonyLib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using TaleWorlds.MountAndBlade;namespace YeMod
{public class Main:MBSubModuleBase{protected override void OnSubModuleLoad(){base.OnSubModuleLoad();try{new Harmony("YeMod").PatchAll();MsgBox(0, "succenss", "msg box", 0x30);}catch{MsgBox(0, "error", "msg box", 0x30);}}[DllImport("user32.dll", EntryPoint = "MessageBoxA")]public static extern int MsgBox(int hWnd, string msg, string caption, int type);}
}

4,创建一个类,来修改对应的方法。比如,这里我要修改Agent类中的Die方法:

using HarmonyLib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using TaleWorlds.MountAndBlade;namespace YeMod
{[HarmonyPatch(typeof(Agent), "Die")]public class Test{private static bool Prefix(Blow b, Agent.KillInfo overrideKillInfo,Agent __instance){MsgBox(0, "die", "msg box", 0x30);return false;}[DllImport("user32.dll", EntryPoint = "MessageBoxA")]public static extern int MsgBox(int hWnd, string msg, string caption, int type);}
}

关于补丁参数该怎么填,可以看这个帖子,重点内容如下:

三,真实测试

进入游戏的时候,会有如下弹窗表示启动成功:

战斗死亡的时候,会有如下提示:

点掉之后,发现对方并未死亡,因为我们已经将死亡函数给拦截了。

其它可自己引申,老板需要定制请私信联系。

这篇关于C#骑砍逻辑类Mod制作详细解说的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121865

相关文章

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

C#中的 StreamReader/StreamWriter 使用示例详解

《C#中的StreamReader/StreamWriter使用示例详解》在C#开发中,StreamReader和StreamWriter是处理文本文件的核心类,属于System.IO命名空间,本... 目录前言一、什么是 StreamReader 和 StreamWriter?1. 定义2. 特点3. 用

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言