amxx插件开发新手教程2-入门
条评论amxx插件开发教程学习下来需要多少时间?你需要花一些时间直到你掌握它,并且每天都要坚持编写代码。根据理解力的不同,需要的时间也不一样(三个月,六个月,或一个星期)
插件模块(Modules)
AMXMODX
这个是插件的基础模块。必须注册不然插件无法编译
FakeMeta
FakeMeta模块可以为我们写插件做出许多帮助,他可以 设置或获取游戏中数据,以便我们进行修改或添加
Hamsandwich
Hamsandwich 是一个多功能的模块,主要提供事件注册
Engine
引擎模块,一般不常用(不推荐使用,因为这个模块的代码比较难记)
Fun
Fun模块,很多插件都会见到使用他的身影,他可以为 初学者 提供不太复杂的代码。
比如修改生命值,修改重力,设定/取消 无敌模式 等效果。
但是 以上 都可以通过fakemeta来一举拿下。
所以fun模块 只是提供一个方便初学者修改游戏数据的模块
数组变量以及什么是浮点值
什么是数组
在代码中会见到[]包含起来的部分,这个地方就叫数组
示例:
1 | new abc[33] //数组最大值是33 |
浮点是什么
浮点值也就是带小数点的值(比如: 123.0, 521.5)
对于代码来说。
变量前面有Float:这样的就是浮点值(又叫浮点变量)
示例:
1 | new Float:abc //声明一个名字叫 abc 的浮点变量 |
注册事件
什么是事件
在游戏中会有无数的事件。
比如:
- 开枪
- 装填子弹
- 掏出武器
- 新的一局
- 复活
- 死亡
- 造成伤害
- 子弹击中墙壁
- …(省略)
这些都是事件,可以通过hamsandwich来勾住,以实现我们下一步的目的
怎么注册事件
对于插件来说,不同的模块注册方法也不同
fakemeta模块,事件的注册方法是:
1 | register_forward(事件名, "触发什么函数") |
hamsandwich模块,事件的注册方法是:
1 | RegisterHam(事件名, "为了什么实体注册", "触发什么函数") |
注意:
一些特殊的事件是fakemeta或hamsandwich不能兼容注册的
比如:复活事件只能由hamsandwich模块中的事件注册
但玩家思考,用Hamsandwich和FakeMeta模块中的事件都可以注册
返回以及返回值
什么是返回
返回是一种很常见的代码,在代码中是return这样的代码
他的作用是,不在当前函数中继续往下执行
示例:
1 | public test(id) |
如上表示, 当abc变量>0 的时候,就会返回。所以下面的client_print内容,就不会在游戏中显示出来
返回值是什么
返回值是一种特殊的传递方法。他一般是在return后面接上一些英文代码或者数字
示例:
1 | public test(id) |
请注意:
返回值使用不当会造成插件无法编译,主要的原因是其中一个return后面没有接上应有的返回值,而函数中其他的return后面都有> 返回值,这种情况下会出现无法编译
例子:返回值错误的写法
1 | public test(id) |
这样这个函数在编译器编译的时候就会报告返回值不统一的错误,导致插件无法编译
GameTime游戏时间
获取Time
当我们想知道游戏经过了多长时间的时候,我们应该怎么办呢
我们可以用
1 | get_gametime() |
来获取游戏所经过的时间
提示:
和现实中的时间略有不同。例如游戏中运行15分钟
通过get_gametime()就会得到返回值900.0
get_gametime()的返回值是浮点
我们可以获取到现在的游戏经过时间
配合client_print来写的话会变成下面这样
1 | client_print(id, print_chat, "GameTime: %.2f", get_gametime() ) |
存储Time
当我们知道游戏时间是做什么的了,那么怎么来用它呢。
我们会在很多地方用到这个get_gametime()特别是一些计算复杂的插件中
那么怎么来利用呢?我们可以配合之前学的数组来存储他
1 | SaveTime[id] = get_gametime() |
这样可以给单独的一个玩家存储时间,也可以像下面这样为全局存储一个时间,他不针对某一个玩家
1 | SaveTime = get_gametime() |
提示:
数组的变量名字可以随意更改,你自己记得出就行
判断以及使用Time
当我们学会如何获取游戏时间后,现在我们可以尝试来为他加点判断来使用它
1 | if( SaveTime[id] < get_gametime()) |
上面这样的一些判断,分别意味着
- 如果存储的时间 小于当前游戏时间
- 如果存储的时间 大于当前游戏时间
- 如果存储的时间 小于等于 当前游戏时间
- 如果存储的时间 大于等于 当前游戏时间
代码写法注意:<=(大于等于)和>=(小于等于)总是=号在右边,如果把=号写到了左边,如=<、=>这样的两种情况均无法被编译器成功编译。
示例Time
1 |
|