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

news2024/9/23 1:28:47

前言:

最近在研究骑砍的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);

    }
}

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

三,真实测试

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型学习路线:从新手到专家的全面指南,从零基础到精通,非常详细收藏我这一篇就够了

随着人工智能技术的飞速发展&#xff0c;特别是近年来深度学习领域的突破&#xff0c;大规模预训练模型&#xff08;通常称为“大模型”&#xff09;已成为推动自然语言处理&#xff08;NLP&#xff09;、计算机视觉&#xff08;CV&#xff09;等领域发展的关键力量。本文将为你…

CSS 嵌套元素的隐藏规则

简单介绍一下&#xff0c;在 HTML 和 CSS 中&#xff0c;元素大体分为 块级元素、内联元素&#xff08;行内元素&#xff09;、块级内联元素&#xff08;行内块元素&#xff09;。它们有着不同的嵌套规则和特殊之处。 1. 行内元素 行内元素特点&#xff1a;不独占一行、不可设…

06- Python的标识符

Python 标识符的知识点 简单地理解&#xff0c;标识符就是一个名字&#xff0c;就好像我们每个人都有属于自己的名字&#xff0c;它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。 Python 中标识符的命名不是随意的&#xff0c;而是要遵守一定的命令规则&#xf…

Qt 调用MFC dll,动态库中有界面

一、创建MFC 动态库工程 下一步 创建 点击确定 二、创建接口 这个是系统创建的&#xff0c;改成自己的接口。 头文件&#xff1a; #ifndef __WEB_ENGINE__ #define __WEB_ENGINE__#ifdef __cplusplus extern "C" { #endif__declspec(dllexport) bool __stdcall Loa…

Datawhale AI 夏令营-CV竞赛-Task2

# Datawhale AI 夏令营 夏令营手册&#xff1a;从零上手CV竞赛 比赛&#xff1a;2024“大运河杯”数据开发应用创新大赛——城市治理赛道 代码运行平台&#xff1a;厚德云 赛题任务 本赛题的任务是开发智能识别系统&#xff0c;用于自动检测和分类城市管理中的违规行为。通…

Vue组件的好处和理解、基本使用、注意事项、组件嵌套、VueComponent理解和原型链

目录 1. 组件的好处和理解2. Vue组件的使用2.1 Vue中使用组件的三大步骤2.2 注意事项 4. 组件的嵌套5. VueComponent的理解6. VueComponent原型链 1. 组件的好处和理解 传统方式编写应用&#xff0c;存在2大问题&#xff1a; 依赖关系混乱&#xff0c;不好维护代码复用率不高…

中资优配:人气牛股10连板!

三大股指今日弱势轰动&#xff0c;均创2月初以来新低&#xff1b;小盘股较为生动&#xff0c;万得微盘股指数涨超1%&#xff1b;两市成交额再度萎缩至5000亿元下方&#xff1b;港股走势疲弱&#xff0c;两大股指均跌超1%。 具体来看&#xff0c;沪指在银行、酿酒等板块的拖累下…

ESP32-IDF http请求崩溃问题解决

文章目录 esp32s3 http请求崩溃问题代码讨论修正后不崩溃的代码 ESP32S3板子, 一运行http请求百度网站的例子, 就会panic死机, 记录下过程. esp32s3 http请求崩溃 一执行http请求的perform就会崩溃, 打印如图 ESP32-IDF 的http请求代码是根据官方demo来改的, 第一步先连接wi…

佰朔资本:大盘股和小盘股的区别?大中小盘股划分标准?

一般来说&#xff0c;大盘股&#xff1a;流通市值在500亿及以上&#xff0c;中盘股&#xff1a;流通市值在100亿~500亿之间&#xff0c;小盘股&#xff1a;流通市值在100亿及以下。 留意&#xff1a;流通市值是可以上市买卖流通的股数与股价乘积&#xff0c;总市值由流通市值与…

【项目源码】终于有人将打字游戏和编程英语结合起来啦!Java初学者的福音

Hello&#xff01;各位彦祖&#xff0c;亦菲们&#xff01;又是美好的一天&#xff01;今天给大家分享一个Java项目源码&#xff1a;Java打字游戏项目源码&#xff01; 看到这里&#xff0c;你可能会说&#xff01; 一个破打字游戏有什么可神气的&#xff01;&#xff01;&…

OpenCV 图像处理中滤波技术介绍

VS2022配置OpenCV环境 关于OpenCV在VS2022上配置的教程可以参考&#xff1a;VS2022 配置OpenCV开发环境详细教程 图像处理中滤波技术 图像滤波是图像处理中的一种重要技术&#xff0c;用于改善图像质量或提取图像中的特定特征。以下是一些常见的图像滤波技术&#xff1a; 均…

LeetCode 热题100-41 二叉树的层序遍历

二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&…

线上预订酒店订房小程序源码系统 多商家入驻 带完整的安装代码包以及搭建部署教程

系统概述 线上预订酒店订房小程序源码系统是一款基于微信小程序开发的酒店预订系统。它充分利用了微信小程序的便捷性和普及性&#xff0c;为用户提供了一个方便、快捷的酒店预订渠道。同时&#xff0c;该系统还支持多商家入驻&#xff0c;允许不同的酒店商家在同一个平台上展…

uniapp自定义头部导航栏布局(普通版)

H5与微信小程序 通过获取系统信息和获取胶囊按钮的信息&#xff0c;得到获取标题栏高度&#xff0c;成而做好自定义头部导航栏 在微信小程序可使用 但在H5就保错&#xff0c;就需要优化 <!-- 全局custom-nav-bar组件 --> <template><view class"customN…

【Docker】Dockerfile实列-Nginx镜像构建

一、镜像构建步骤 实验准备&#xff1a;导入centos7镜像&#xff08;因为现在docker镜像拉取不下了&#xff09; docker load -i centos-7.tar.gz 1、建立构建目录&#xff0c;编写构建文件 [rootdocker-node1 ~]# mdkir /docker [rootdocker-node1 ~]# cd /docker [rootdo…

发现一个程序员最强外设,助你高效开发早日摸鱼!

简介 最近公司的副屏有点问题&#xff0c;经常屏闪&#xff0c;无意中和媳妇儿吐槽了几句。没想到&#xff0c;生日的时候&#xff0c;居然收到了她的礼物&#xff1a; 看到「程序员专用」的时候&#xff0c;我很开心的对媳妇儿表示了感谢&#xff0c;但内心第一反应是&#x…

1DM+ v17.1 修改版 — 多线程下载管理工具(高效稳定)

1DM 是一款适用于安卓设备的下载管理工具&#xff0c;支持多线程下载&#xff0c;可以加快下载速度。具备自动识别下载链接、断点续传、下载任务管理和文件浏览等功能。此修改版由 Balatan 制作&#xff0c;无需 root 或 Lucky Patcher&#xff0c;禁用不必要的权限和功能&…

学习之SQL语句

SQL通用语法 1、SQL语句可以单行或者多行书写&#xff0c;以分号结尾 2、SQL语句可以使用空格或者缩进增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写 4、注释&#xff1a; 单行注释&#xff1a;-- 注释内容 或 # 注释内容&#xff08;…

【百度-APP相关安卓开发】

百度-APP相关安卓开发 安卓四大组件activaty生命周期 启动模式一个Activity的生命周期主要有四种状态&#xff1a;Activity周期Activity的启动模式&#xff1a;广播接收器 线程多线程 线程池进程 线程 携程进程与线程比较协程与线程比较 进程间通信方式和区别Mysql和Redis区别T…

【Python】--- 基础语法(上)

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; Python 本篇博客博主将分享一些python的基础语法。 &#x1f3e0; 常量和表达式 我们可以把Python当成一个计算器,进行一些简单的算术运算 print(1 …