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

注册 登录

QQ登录

只需一步,快速开始

查看: 16277|回复: 39

[游戏资料] 【MOD开发实例】Script Hook V For .NET(C#开发GTAV MOD)

  [复制链接]

6

主题

265

帖子

736

积分

超级玩家

Rank: 5Rank: 5

贡献度
95
金元
3563
积分
736
精华
0
注册时间
2010-10-11

3DM MOD站(白银)

QQ
发表于 2015-5-10 11:10 | 显示全部楼层 |阅读模式
本帖最后由 陌.小皓 于 2015-5-10 12:38 编辑

【前言】
目前国内研究、开发MOD的玩家并不多,但国内很多玩家其实是有编程基础的,楼主在编程方面也是个菜鸟,只是希望能有更多的人来研究、开发MOD。

【什么是 Script Hook V For .NET
Script Hook V For .NET是国外玩家基于Script Hook V开发出来的一个asi脚本,该脚本可以使游戏支持读取使用.net语言(如:C#、VB)开发出来的脚本,Script Hook V For .NET是一个开源项目(开源是指源代码是公开的,任何人都可以下载到源代码,进行开发或修改),目前国外还有支持Lua的扩展,有兴趣的玩家可以自行上国外论坛获取。

Script Hook V For .Net工作原理】
上面说过,其实Script Hook V For .NET就是一个.asi脚本脚本,游戏运行后Script Hook V会加载所有的asi脚本,加载了Script Hook V For .NET后,Script Hook V For .NET又会遍历游戏目录“scripts”文件夹下的所有后缀名为“.cs”、“.vb”、“.dl”脚本。(这里说个小知识,C#编译出来的DLL或EXE等并不像其他语言一样,编译出来的只是中间语言,类似JAVA,详情大家可以自行百度)

【原作者相关】
原贴地址:http://gtaforums.com/topic/78990 ... -script-hook-v-net/
github地址:https://github.com/crosire/scripthookvdotnet/releases

【准备工作】
1.首先请确保你安装了Microsoft .NET Framework 4.5Microsoft Visual C++ Redistributable Package for Visual Studio 2013 (x64)
2.下载Script Hook V,将压缩包内“bin”文件夹下的所有内容解压到你的游戏目录(该地址下载下来的Script Hook V附带了一个内置修改器,如果你不想要内置修改器,只需要把里面的“NativeTrainer.asi”删除即可);
3.下载Script Hook V For .Net,将压缩包内的内容解压到你的游戏目录(该地址下载下来的Script Hook V For .NET附带了一个例子,如果你不要想,只需要把压缩包内“scripts”文件夹清空即可)。
这里我提供一个下载地址(点击下载),里面包含了最新的Script Hook VScript Hook V For .Net下载好后把压缩包里所有内容解压到游戏目录下即可,完成这步就可以省略上面的2、3两步。

【其他说明】
1.C#是.net的主要语言,也是楼主比较熟悉的语言,所以下来的示例,会使用C#作为开发语言;
2.本文中所提到的MOD均为脚本类的,不是修改模型、资源等类型。

【开发示例】
首先准备好一个开发环境(IDE),这里楼主自己用的Visual Studio 2012,大家可以自行百度,2013、2012都可以,当然你也可以Notepad++之类的文本编辑软件,上面说过Script Hook V For .Net是可以直接加载后缀为.cs或.vb的脚本的。

接下来我们就开发一个按下某个快捷键,可以使主角周围车辆爆炸的脚本:

1.首先打开Visual Studio 2012,新建一个C#的类库项目,.NET Framework 版本改为4.5:




2.添加引用,引用ScriptHookVDotNet.dll




3.把不需要的引用可以删除掉;

4.下面是完整的代码,代码我都做了备注:
  1. //基础需要的命名空间
  2. using System;
  3. using System.Windows.Forms;
  4. using GTA;
  5. using GTA.Native;

  6. //namespace GTAV_Script_Example
  7. //{
  8. //}
  9. //命名空间可以不写,这里我备注掉了

  10. public class TestMod : Script   //注意一定要继承“Script”类
  11. {
  12.     //该函数为构造函数,函数名跟类名同名,该类被加载后执行此函数
  13.     public TestMod()
  14.     {
  15.         Tick += OnTick; //刷新事件
  16.         KeyDown += OnKeyDown; //按键按下事件
  17.         Interval = 10; //刷新事件的间隔时间,单位毫秒
  18.     }

  19.     //刷新事件
  20.     void OnTick(object sender, EventArgs e)
  21.     {
  22.         //本例中不需要使用到该事件,实际如果需要刷新事件,则在刷新事件需要处理的内容写在这里
  23.     }

  24.     //快捷键事件
  25.     void OnKeyDown(object sender, KeyEventArgs e)
  26.     {
  27.         //当快捷键等于B时,执行大括号中的内容
  28.         if (e.KeyCode == Keys.B)
  29.         {
  30.             //获取玩家角色指针
  31.             Ped player = Game.Player.Character;

  32.             //判断实例是否存在,不存在则返回
  33.             bool isExist = Function.Call<bool>(Hash.DOES_ENTITY_EXIST, player);
  34.             if (!isExist) { return; }

  35.             //Function.Call() 这个函数可以执行Native类的所有函数,有多种用法
  36.             //无返回值的如:Function.Call(GTA.Native.Hash.SET_MAX_WANTED_LEVEL, 0);
  37.             //有返回值的<>内写返回值类型如:Function.Call<int>(GTA.Native.Hash.PLAYER_PED_ID);

  38.             //获取玩家附近200米内的载具
  39.             Vehicle[] vehicles = World.GetNearbyVehicles(player, 200f);

  40.             //这里判断数组vehicles的成员数,成员数小于1则说明附近200米内没有载具,则返回
  41.             if (vehicles.Length < 1)
  42.             {
  43.                 return;
  44.             }

  45.             //附近的第一辆载具爆炸,如果角色在载具中,附近第一辆载具会是角色的载具。在实际应用中,如果需要角色在载具中时,附近的其他载具也爆炸,那么上面的判断就要重新写。
  46.             vehicles[0].Explode();
  47.         }
  48.     }
  49. }
复制代码


5.生成项目,生成好的项目会在你项目目录中


6.生成好后,把生成好的DLL复制到游戏目录下的“scripts”目录




7.进入游戏测试


测试成功,就说明OK了,在实际中如果测试失败,游戏目录下会有一个“ScriptHookVDotNet.log”文件,里面会有详细的日志。
【示例源码】


【特别说明】
1.“GTA.Native.Function.Call”这个函数可以运行Native类的所有函数;
2.有部分Native类的函数Script Hook V For .NET的作者已经为我们封装好,可以直接调用,如果没有的就到Native类数据库查找就可以了。(Native类数据库:http://www.dev-c.com/nativedb/

本帖子中包含更多资源

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

x

评分

3

查看全部评分

回复

使用道具 举报

6

主题

533

帖子

560

积分

高级玩家

Rank: 4

贡献度
10
金元
5202
积分
560
精华
0
注册时间
2009-3-8
发表于 2015-5-10 11:33 | 显示全部楼层
ASI: Loading "H:\Grand Theft Auto V\ScriptHookVDotNet.asi"
     "ScriptHookVDotNet.asi" failed to load

为什么我的会加载失败呢。
运行库也安装了
回复 支持 反对

使用道具 举报

6

主题

265

帖子

736

积分

超级玩家

Rank: 5Rank: 5

贡献度
95
金元
3563
积分
736
精华
0
注册时间
2010-10-11

3DM MOD站(白银)

QQ
 楼主| 发表于 2015-5-10 11:54 | 显示全部楼层
zsw117 发表于 2015-5-10 11:33
ASI: Loading "H:\Grand Theft Auto V\ScriptHookVDotNet.asi"
     "ScriptHookVDotNet.asi" failed to lo ...

你游戏什么版本
回复 支持 反对

使用道具 举报

5

主题

66

帖子

66

积分

初级玩家

Rank: 2

贡献度
0
金元
1262
积分
66
精华
0
注册时间
2012-1-7
发表于 2015-5-10 11:57 | 显示全部楼层
像楼主这样的教程贴越来越少了。同为C#的前排赞一个。我用的VS2013,也去试试
回复 支持 反对

使用道具 举报

6

主题

265

帖子

736

积分

超级玩家

Rank: 5Rank: 5

贡献度
95
金元
3563
积分
736
精华
0
注册时间
2010-10-11

3DM MOD站(白银)

QQ
 楼主| 发表于 2015-5-10 12:08 | 显示全部楼层
我还在编辑帖子,有点乱,各位看官稍等下。
回复 支持 反对

使用道具 举报

6

主题

265

帖子

736

积分

超级玩家

Rank: 5Rank: 5

贡献度
95
金元
3563
积分
736
精华
0
注册时间
2010-10-11

3DM MOD站(白银)

QQ
 楼主| 发表于 2015-5-10 12:25 | 显示全部楼层
基本的已经编辑完了,因为比较忙,可能写的比较乱,以后我后慢慢抽时间更新。
回复 支持 反对

使用道具 举报

6

主题

265

帖子

736

积分

超级玩家

Rank: 5Rank: 5

贡献度
95
金元
3563
积分
736
精华
0
注册时间
2010-10-11

3DM MOD站(白银)

QQ
 楼主| 发表于 2015-5-10 12:35 | 显示全部楼层
哥兜兜有棉花糖 发表于 2015-5-10 11:57
像楼主这样的教程贴越来越少了。同为C#的前排赞一个。我用的VS2013,也去试试 ...

嗯嗯,我也前两天去国外论坛无意看到的,正好C#语法比较熟,脚本类的MOD都是调用的Native类的函数,熟悉Native类的话,开发就会比较快了。
回复 支持 反对

使用道具 举报

0

主题

171

帖子

245

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
2445
积分
245
精华
0
注册时间
2015-4-15
发表于 2015-5-10 12:42 | 显示全部楼层
才学几个月的路过。。。
回复 支持 反对

使用道具 举报

32

主题

1645

帖子

1382

积分

游戏狂人

Rank: 6Rank: 6

贡献度
78
金元
10703
积分
1382
精华
0
注册时间
2008-11-29
发表于 2015-5-10 12:46 | 显示全部楼层
很给力                       
回复 支持 反对

使用道具 举报

头像被屏蔽

22

主题

448

帖子

488

积分

高级玩家

Rank: 4

贡献度
16
金元
4237
积分
488
精华
0
注册时间
2012-8-11
发表于 2015-5-10 13:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

9

主题

251

帖子

684

积分

超级玩家

Rank: 5Rank: 5

贡献度
34
金元
5479
积分
684
精华
0
注册时间
2009-12-31

2019年3DM官方水友3DM页游玩家3DM页游玩家

QQ
发表于 2015-5-10 13:17 | 显示全部楼层
大神们越来越给力了~~~
回复 支持 反对

使用道具 举报

6

主题

533

帖子

560

积分

高级玩家

Rank: 4

贡献度
10
金元
5202
积分
560
精华
0
注册时间
2009-3-8
发表于 2015-5-10 13:59 | 显示全部楼层
陌.小皓 发表于 2015-5-10 11:54
你游戏什么版本

之前5号,现在是4号档。
反正都不行,游戏也重装过了
回复 支持 反对

使用道具 举报

6

主题

265

帖子

736

积分

超级玩家

Rank: 5Rank: 5

贡献度
95
金元
3563
积分
736
精华
0
注册时间
2010-10-11

3DM MOD站(白银)

QQ
 楼主| 发表于 2015-5-10 14:04 | 显示全部楼层
jeason1997 发表于 2015-5-10 13:15
可惜不会C#,目前就直接用C++开发ASI,不过调试速度非常慢,经常要测试一个新例子就要重启游戏一次。
还是L ...

这个也支持重载,按insert键可以重载。
回复 支持 反对

使用道具 举报

6

主题

265

帖子

736

积分

超级玩家

Rank: 5Rank: 5

贡献度
95
金元
3563
积分
736
精华
0
注册时间
2010-10-11

3DM MOD站(白银)

QQ
 楼主| 发表于 2015-5-10 14:05 | 显示全部楼层
zsw117 发表于 2015-5-10 13:59
之前5号,现在是4号档。
反正都不行,游戏也重装过了

Microsoft .NET Framework 4.5 这个装了吗?
回复 支持 反对

使用道具 举报

6

主题

533

帖子

560

积分

高级玩家

Rank: 4

贡献度
10
金元
5202
积分
560
精华
0
注册时间
2009-3-8
发表于 2015-5-10 14:31 | 显示全部楼层
陌.小皓 发表于 2015-5-10 14:05
Microsoft .NET Framework 4.5 这个装了吗?



有一个4.6,必须要4.5的吗,我之前装的是4.5的,也不行,后来在论坛里找了运行库集合,重装后就是4.6了

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

6

主题

265

帖子

736

积分

超级玩家

Rank: 5Rank: 5

贡献度
95
金元
3563
积分
736
精华
0
注册时间
2010-10-11

3DM MOD站(白银)

QQ
 楼主| 发表于 2015-5-10 14:38 | 显示全部楼层
zsw117 发表于 2015-5-10 14:31
有一个4.6,必须要4.5的吗,我之前装的是4.5的,也不行,后来在论坛里找了运行库集合,重装后就是4.6了
...

这个具体我也不知道原因了,它的日志只会提示加载失败,详细原因也不会提示。
回复 支持 反对

使用道具 举报

4

主题

6742

帖子

1万

积分

资深玩家

Rank: 9Rank: 9Rank: 9

贡献度
8
金元
107461
积分
10778
精华
0
注册时间
2010-9-3

元宵娘

发表于 2015-5-10 15:19 | 显示全部楼层
给力给力
回复 支持 反对

使用道具 举报

2

主题

143

帖子

116

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1759
积分
116
精华
0
注册时间
2013-9-15
发表于 2015-5-10 16:53 | 显示全部楼层
技术贴~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

4

主题

1761

帖子

2227

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
81
金元
19027
积分
2227
精华
0
注册时间
2009-8-15
发表于 2015-5-10 16:54 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

621

主题

2万

帖子

7万

积分

游戏之神

世事迁移流转 无聊就是一种幸福

Rank: 13Rank: 13Rank: 13Rank: 13

贡献度
6186
金元
493314
积分
74086
精华
1
注册时间
2013-6-5

3DM总监狂热粉丝骨灰玩家游戏天王游戏圣者欧洲提督深海提督3DM页游玩家3DM页游玩家元宵娘妹子认证(已下架)萌之委员会3DMer幸运儿游戏之神《足球经理2018》专属勋章小罗

发表于 2015-5-10 16:58 | 显示全部楼层
支持一下
回复 支持 反对

使用道具 举报

21

主题

1370

帖子

2797

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
2
金元
27892
积分
2797
精华
0
注册时间
2014-10-9
发表于 2015-5-10 17:54 | 显示全部楼层
小编辛苦了 这种结合实例 按步骤讲解的教程 让人更加好理解啊 希望楼楼在努力下 多做几个教程 比如普通asi的
回复 支持 反对

使用道具 举报

80

主题

544

帖子

685

积分

超级玩家

Rank: 5Rank: 5

贡献度
58
金元
4529
积分
685
精华
0
注册时间
2011-11-30
发表于 2015-5-10 21:56 | 显示全部楼层
有群吗大家一起研究
回复 支持 反对

使用道具 举报

80

主题

544

帖子

685

积分

超级玩家

Rank: 5Rank: 5

贡献度
58
金元
4529
积分
685
精华
0
注册时间
2011-11-30
发表于 2015-5-10 22:41 | 显示全部楼层
错误        1        命名空间“System.Windows”中不存在类型或命名空间名称“Forms”(是否缺少程序集引用?)        C:\Users\long\AppData\Local\Temporary Projects\ClassLibrary1\Class1.cs        8        22        ClassLibrary1
错误        2        未能找到类型或命名空间名称“KeyEventArgs”(是否缺少 using 指令或程序集引用?)        C:\Users\long\AppData\Local\Temporary Projects\ClassLibrary1\Class1.cs        36        35        ClassLibrary1


直接用的是楼主给的代码。为什么会这样呢
回复 支持 反对

使用道具 举报

6

主题

265

帖子

736

积分

超级玩家

Rank: 5Rank: 5

贡献度
95
金元
3563
积分
736
精华
0
注册时间
2010-10-11

3DM MOD站(白银)

QQ
 楼主| 发表于 2015-5-10 23:14 | 显示全部楼层
lulugan 发表于 2015-5-10 22:41
错误        1        命名空间“System.Windows”中不存在类型或命名空间名称“Forms”(是否缺少程序集引用?)        C:\Users\l ...

引用里添加一下用到的命名空间
回复 支持 反对

使用道具 举报

78

主题

1971

帖子

2255

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
34
金元
21192
积分
2255
精华
0
注册时间
2012-1-4
发表于 2015-7-19 13:36 | 显示全部楼层
dddddddddddddddddddddddddddd
回复 支持 反对

使用道具 举报

0

主题

44

帖子

101

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1010
积分
101
精华
0
注册时间
2011-7-28
发表于 2016-1-26 16:09 | 显示全部楼层
楼主 我太爱你了,我就需要这种教程贴,一步一步简单易懂,希望能有后续的内容继续学习啊。
回复 支持 反对

使用道具 举报

0

主题

44

帖子

101

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1010
积分
101
精华
0
注册时间
2011-7-28
发表于 2016-1-26 16:17 | 显示全部楼层
楼主能不能教教用C#怎么开发一个 像asi那样在游戏中的菜单界面呀。
回复 支持 反对

使用道具 举报

头像被屏蔽

0

主题

106

帖子

58

积分

禁止发言

贡献度
0
金元
1183
积分
58
精华
0
注册时间
2016-3-8
发表于 2016-3-9 03:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

105

帖子

106

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1660
积分
106
精华
0
注册时间
2016-4-26
发表于 2016-5-7 23:46 | 显示全部楼层
可惜不会目前就直接用开发不过调试速度非常慢经常要测试一个新例子就要重启游戏一次
回复 支持 反对

使用道具 举报

0

主题

4

帖子

4

积分

新手玩家

Rank: 1

贡献度
0
金元
40
积分
4
精华
0
注册时间
2018-4-8
发表于 2018-4-8 19:28 | 显示全部楼层
不懂英文,搞个毛。我还买了一本2015visual studio 高级编程的书。结果里面都没有什么关于游戏的语言。编程。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-8-20 02:17 , Processed in 0.129527 second(s), 20 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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