19年写的一篇文章,突然发现还没在博客上发,来补一下;
源码:https://github.com/3DMXM/TestModForNetAtRDR2
准备工作
- 首先下载Community ScriptHook RDR2 .NET:Mod站 | GitHub
- Script Hook RDR2 SDK:http://www.dev-c.com/rdr2/scripthookrdr2
- 然后下载Visual Studio:https://visualstudio.microsoft.com/zh-hans/
- .NET Framework 4.8或其以上版本:https://dotnet.microsoft.com/download/thank-you/net48-developer-pack
- 准备资料 RDR2 NativeDB:https://mod.3dmgame.com/NativeDB
新建项目
打开Visual Studio,新建项目,选择Visual C# ->类库(NET Framework),框架选择.NET Framework 4.8,名称自定义
右键“引用”,选择“添加引用”,将ScriptHook RDR2 .NET里面的“ScriptHookRDRNetAPI.dll”这个文件引用进来
文件引用完成完毕之后,添加几个引用:
1 | using System.Windows.Forms; |
添加进去之后,我们会发现一个报错
是因为我们创建项目的时候没有引用System.Windows.Forms这个东西,我们手动引用一下:
现在错误就消失了,接下来我们将自带的“Class1”改成“Main : Script”,这样我们就可以直接使用“ScriptHookRDRNetAPI”的函数了,接下来我们在里面开始写代码:
1 | public class Main : Script |
这样,我们的“超级跳”的功能就实现了,接下来我们再来写一个“修改时间”的功能,先在Script Hook RDR2 SDK 的“natives.h”文件中找到修改时间的代码:
1 | static void ADD_TO_CLOCK_TIME(int hours, int minutes, int seconds) { invoke<Void>(0xAB7C251C7701D336, hours, minutes, seconds); } |
简单说一下:
- “SET_CLOCK_TIME”是设置时间
- “ADD_TO_CLOCK_TIME”是添加时间,传递的全是整数,可正可负
使用ScriptHook RDR2 .NET要修改时间就是
1 | Function.Call(Hash.ADD_TO_CLOCK_TIME, 1, 0, 0, true); //加一小时 |
逻辑研究明白之后,我们来想想要怎么操作, 我们就使用键盘的 ↑和↓键来修改时间吧,
我们两个按键,操作的内容是一样的,只有一个值不一样,我们可以将它们写到一个方法里面:
1 | private void changeTime(int time) |
然后在按键监控的方法OnKeyDown来进行判断是否按下 ↑和↓键:
1 | if (e.KeyCode == Keys.Up) |
现在,我们修改时间的功能也已经实现了,将项目生成,
然后,将\bin\Debug\TestModForNet.dll放到游戏目录中的“scripts”文件夹中,没有自己新建一个
别忘了安装原版的ScriptHook RDR2 .NET和Script Hook RDR2
进游戏按C、↑、↓ 键就可以实现我们要的功能了