3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 侠客前传 | 刺客信条 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 15058|回复: 18

[MOD] 【Mod开发实例】利用Script Hook RDR2 用C++ 为荒野大镖客2 制作脚本Mod 实现“传送到坐标点”

[复制链接]

312

主题

2万

帖子

23万

积分

3DM Mod组 组长

mod.3dmgame.com

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

贡献度
772
金元
2287253
积分
231873
精华
6
注册时间
2013-3-5

Mod站荣誉勋章3DM MOD站(白银)3DM MOD站(黄金)

发表于 2020-12-7 12:27 | 显示全部楼层 |阅读模式

前排小广告:
如果您对游戏Mod的制作感兴趣,并且愿意与广大玩家一起分享快乐,欢迎加入我们的3DM MOD组:https://mod.3dmgame.com/Team


距离上一篇的【Mod开发实例】利用 ScriptHook RDR2.NET 用C#为荒野大镖客2 制作脚本Mod 貌似已经过去一年了吧,确实鸽的挺久的了(虽然我压根也没说会有续篇)

这次我们来用C++为荒野大镖客2来编写脚本。

成品
源码地址:https://github.com/3DMXM/TestModForAsiAtRDR2
生成后的Mod:

准备工作:
- 安装 Visual Studio:https://visualstudio.microsoft.com/zh-hans/  以下简称“VS”
- RDR2 NativeDB 库 :https://mod.3dmgame.com/NativeDB
- 下载Script Hook RDR2 SDK:http://www.dev-c.com/rdr2/scripthookrdr2


注意:
在安装Visual Studio的时候,请确定安装了C++工具包,至少需要安装一下工具:
- 使用C++的桌面开发
- Windows 10 SDK (任意版本)
- MSVC (任意版本)
- C++ 通用平台工具(任意版本)


(如果漏装了,可以重新运行“Visual Studio Installer”进行安装)




创建项目:


虽然我很想这样从0开始创建项目,但是这样创建后的配置起来特别麻烦,不仅要手动修改生成类型、预设头、链入lib,还要修改入口函数等等一些特别复杂的东西,所以我决定直接在SDK中的Pools.sln项目的基础上进行修改。


将SDK中的文件Pools项目复制出来,然后重命名,接着将SDK中的“inc”和“ilb”也复制过来,



然后改一下“script.h”、“main.cpp”中的引用文件路径

除此之外,还需要设置 项目->属性 中的

1.常规中的“Windows SDK 版本”和“平台工具集”修改


2.“配置器”->“命令行”->“其他选项” 中 ScriptHookRDR2.lib  的路径


全部准备好后,按F6启动生成项目,如果提示生成成功,那么准备工作就算完成了


开始编写:
打开“script.cpp”文件,删除不必要的代码,只留下“ScriptMain()” “main()” 函数,“update()”函数中的所有内容全部删除,大概是这个样子:


现在,我们来开始实现按“F9”然后在主角传送到地图上的标记点,所以,我们需要先判断用户是否按下按键:
引入SDK中“NativeTrainer” 里面的“keyboard.cpp”和“keyboard.h”文件
修改“main.cpp”中的代码为
<


回到“script.cpp”文件中
先引入
<
回到“update()”函数,先来判断玩家是否按下F9
键盘键值表参考:
[imghide]https://mod.3dmgame.com/static/upload/mod/202012/MOD5fcdc857daa52.png[/imghide]

<

接下来我们需要判断地图上是否有标记点,
查阅NativeDB 库可找到RADAR::IS_WAYPOINT_ACTIVE() [路径点是否激活],返回BOOL类型
直接写入if即可
<

接下来是获取标记点的坐标位置,
查阅NativeDB 库可找到RADAR::GET_WAYPOINT_COORDS_3D() [获取路径点的3D坐标],返回Vector3
直接新建变量接入即可
<

然后是传送玩家了,
查询NativeDB 库可找到ENTITY::SET_ENTITY_COORDS(Entity entity, float xPos, float yPos, float zPos, BOOL xAxis, BOOL yAxis, BOOL zAxis, BOOL clearArea) [设置实体坐标],无返回值

这样有点复杂,需要来慢慢的解释:

第一个参数,Entity entity是实体,也就是需要传送的实体,我们是传送玩家,所以需要获取玩家的实体,同时,也要判断,如果玩家在马上或者载具上,那么就连同马和载具一起传送,所以,获取实体的代码是:
<

第二~第四个参数,float xPos, float yPos, float zPos 是传送后的坐标,我们上面已经获取到标记点的3D坐标,所以直接用
<
就可以了

第五~第七个参数,BOOL xAxis, BOOL yAxis, BOOL zAxis 这3个参数意义暂时不明,不过AB大佬给的值是 “0,0,1“”,我们也一样用0,0,1就行了
第八个参数BOOL clearArea,传递一个BOOL值,是否清空区域,我们这里用FALSE即可。


接下来还有一步,为了避免在传送的时候出现在高空或地底,我们还需要获取标记点的地面Z轴
查阅NativeDB 库可以找到GAMEPLAY::GET_GROUND_Z_FOR_3D_COORD(float x, float y, float z, float* groundZ, BOOL unk) [获取3D坐标中Z轴的地面位置]
我们可以这样写:
<

至此,我们的功能就完成了,进游戏,添加一个标记点,然后按F9,即可直接传送到标记点,快捷键可修改IsKeyDown()中的值即可,

完整代码:
<

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

2

查看全部评分

回复

使用道具 举报

0

主题

102

帖子

102

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1020
积分
102
精华
0
注册时间
2019-12-26
发表于 2020-12-7 15:50 | 显示全部楼层
支持楼主!!
回复 支持 反对

使用道具 举报

11

主题

428

帖子

1070

积分

游戏狂人

Rank: 6Rank: 6

贡献度
61
金元
8256
积分
1070
精华
0
注册时间
2014-12-26
发表于 2020-12-7 20:02 | 显示全部楼层
收藏了
回复 支持 反对

使用道具 举报

0

主题

232

帖子

532

积分

高级玩家

Rank: 4

贡献度
0
金元
5317
积分
532
精华
0
注册时间
2016-1-28
发表于 2020-12-7 21:03 | 显示全部楼层
好东西赞一个 顺便问一下楼主有没有解包别人的asi然后修改一部分代码再重新打包的呢?想做一个启动自动无限体力、死亡之眼的 但是网上找到的功能太多了 感谢!
回复 支持 反对

使用道具 举报

18

主题

1万

帖子

5万

积分

游戏圣者

Trainer Tester

Rank: 12Rank: 12Rank: 12

贡献度
355
金元
513128
积分
52753
精华
2
注册时间
2009-7-6

玛丽·萝丝~端午节专属勋章3DM MOD站(白银)

发表于 2020-12-7 23:05 | 显示全部楼层
路过,支持一下~
回复 支持 反对

使用道具 举报

312

主题

2万

帖子

23万

积分

3DM Mod组 组长

mod.3dmgame.com

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

贡献度
772
金元
2287253
积分
231873
精华
6
注册时间
2013-3-5

Mod站荣誉勋章3DM MOD站(白银)3DM MOD站(黄金)

 楼主| 发表于 2020-12-8 11:00 | 显示全部楼层
SHEDEAD 发表于 2020-12-7 21:03
好东西赞一个 顺便问一下楼主有没有解包别人的asi然后修改一部分代码再重新打包的呢?想做一个启动自动无限 ...

耐力:PLAYER::RESTORE_PLAYER_STAMINA(Player player, float p1)
死神之眼:PLAYER::RESTORE_SPECIAL_ABILITY(Any p0, Any p1, BOOL p2)
回复 支持 反对

使用道具 举报

0

主题

232

帖子

532

积分

高级玩家

Rank: 4

贡献度
0
金元
5317
积分
532
精华
0
注册时间
2016-1-28
发表于 2020-12-8 11:45 | 显示全部楼层
◕小莫◕ 发表于 2020-12-8 11:00
耐力:PLAYER::RESTORE_PLAYER_STAMINA(Player player, float p1)
死神之眼:PLAYER::RESTORE_SPECIAL_ABI ...

感谢大佬!
回复 支持 反对

使用道具 举报

1

主题

94

帖子

153

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1527
积分
153
精华
0
注册时间
2013-7-21
发表于 2020-12-14 23:18 | 显示全部楼层
好家伙,在3dm学c++
回复 支持 反对

使用道具 举报

11

主题

753

帖子

861

积分

超级玩家

Rank: 5Rank: 5

贡献度
2
金元
8529
积分
861
精华
0
注册时间
2011-12-8
发表于 2020-12-15 22:38 | 显示全部楼层
刚发现,这是宝藏啊
回复 支持 反对

使用道具 举报

0

主题

16

帖子

16

积分

新手玩家

Rank: 1

贡献度
0
金元
160
积分
16
精华
0
注册时间
2018-10-5
发表于 2021-1-3 22:40 | 显示全部楼层
受教了,C++ niubi
回复 支持 反对

使用道具 举报

29

主题

341

帖子

801

积分

超级玩家

Rank: 5Rank: 5

贡献度
22
金元
7133
积分
801
精华
0
注册时间
2010-4-9
发表于 2021-7-21 07:17 | 显示全部楼层
支持小莫大神
回复 支持 反对

使用道具 举报

3

主题

179

帖子

407

积分

高级玩家

Rank: 4

贡献度
14
金元
3510
积分
407
精华
0
注册时间
2013-8-16
发表于 2021-8-20 17:14 | 显示全部楼层
好家伙,还是想看到从0开始创建项目
回复 支持 反对

使用道具 举报

0

主题

41

帖子

42

积分

初级玩家

Rank: 2

贡献度
0
金元
415
积分
42
精华
0
注册时间
2021-11-29
发表于 2021-11-29 20:05 | 显示全部楼层
没想到来3DM还可以学习编程


回复 支持 反对

使用道具 举报

2

主题

996

帖子

1446

积分

游戏狂人

Rank: 6Rank: 6

贡献度
40
金元
12857
积分
1446
精华
0
注册时间
2006-11-16
发表于 2021-12-11 14:44 | 显示全部楼层
6666666666666
回复 支持 反对

使用道具 举报

1

主题

46

帖子

117

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1166
积分
117
精华
0
注册时间
2016-1-1
发表于 2022-4-13 12:58 | 显示全部楼层
你好,我想请问下用c++写的asi和c#写的dll有啥区别,比如多了些api啥的
还是说只是语言不同,库都是一样的
回复 支持 反对

使用道具 举报

0

主题

61

帖子

61

积分

初级玩家

Rank: 2

贡献度
0
金元
610
积分
61
精华
0
注册时间
2021-2-7
发表于 2022-12-31 20:33 | 显示全部楼层
请问成品下载可以直接丢根目录用吗,有无效果
回复 支持 反对

使用道具 举报

3

主题

1万

帖子

1万

积分

骨灰玩家

Rank: 10Rank: 10Rank: 10

贡献度
1
金元
186704
积分
18674
精华
0
注册时间
2016-4-26
发表于 2023-1-8 15:10 | 显示全部楼层
66666666666666666
回复 支持 反对

使用道具 举报

1

主题

46

帖子

117

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1166
积分
117
精华
0
注册时间
2016-1-1
发表于 2023-11-16 10:57 | 显示全部楼层
大哥,最新的nativeDB网站打不开
回复 支持 反对

使用道具 举报

312

主题

2万

帖子

23万

积分

3DM Mod组 组长

mod.3dmgame.com

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

贡献度
772
金元
2287253
积分
231873
精华
6
注册时间
2013-3-5

Mod站荣誉勋章3DM MOD站(白银)3DM MOD站(黄金)

 楼主| 发表于 2024-4-8 17:08 | 显示全部楼层
丿艺丨 发表于 2022-4-13 12:58
你好,我想请问下用c++写的asi和c#写的dll有啥区别,比如多了些api啥的
还是说只是语言不同,库都是一样的 ...

只是语言不同,库都是一样的,
但我个人觉得,C++的拓展性和效率都要比C#要高

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|咖绿茵|求知网|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2024-4-19 02:58 , Processed in 0.150880 second(s), 35 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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