通常应该在编译器目录(源码目录)创建文本文档,填写英文文件名和.sma后缀。
打开这个文件,开始编写代码。
函数是有名字的代码块。声明公共函数并定义其代码的示例:
// 声明一个函数 Function (名称可自定义),public 表示公开
public Function()
{
// 这里填写需要执行的代码,例如下面这行代码作用是在控制台发送文本
server_print("====================== Hello ======================");
}
其他模块不会主动访问你的公共函数,因此上面的代码仅保证能编译通过,公共函数的代码块内容无法执行。
要使代码实际执行,通常在源码需要引用 amxmodx.inc 这个头文件:
#include <amxmodx>
amxmodx.inc 中包含许多用 forward 声明的函数(缺少代码块部分的函数定义),像这样:
/**
* Called just after server activation.
*
* @note Good place to initialize most of the plugin...
*/
forward plugin_init();
你在自己的源码中用 public 定义同名函数,它就会在特定时刻被触发。
#include <amxmodx>
public plugin_init()
{
// 根据amxmodx.inc文件中的介绍,此函数在服务器启动后立刻触发。
// 是适合大部分插件进行数据初始化的好函数。
// 也可以调用其它函数(不包括forward函数)
// 调用Function函数的效果是在控制台发送Hello文本
Function();
// 下面这行代码作用是在控制台发送Rainbow文本
server_print("====================== Rainbow ======================");
}
public Function()
{
server_print("====================== Hello ======================");
}
编译源码得到.amxx文件后,存放到插件目录,并用记事本打开plugins.ini,另起一行填写插件文件名和介绍:
my_plugin.amxx ; 这是我正在测试的小插件
进入游戏地图后按打开控制台,发送amxx plugins即可查看插件信息。
调用 register_plugin 函数可以设置插件名称,版本,作者等信息:
#include <amxmodx>
public plugin_init()
{
register_plugin("插件名称", "插件版本", "插件作者");
}
若字符串内包含中文,保存时请设置为 UTF-8 无 BOM 编码。
除了forward函数,还可以利用特定的native函数监听事件,决定什么情况下触发自定义的公共函数。
例如:
amxmodx.inc的register_event、register_logevent函数。
fakemeta.inc的register_forward函数。
hamsandwich.inc的RegisterHam函数。
这类函数可以让特定事件触发之前或之后,先执行你制作的公共函数。
更详细的介绍需自行查阅inc文件提供的注释,其可监听的相关事件通常位于其它头文件内,例如**const.inc结尾的头文件。
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
public plugin_init()
{
register_plugin("测试", "1.0.0", "作者");
// 设置玩家实体被击杀事件触发之后,调用Player_Killed_Post函数
RegisterHam(Ham_Killed, "player", "Player_Killed_Post", 1, true);
}
public Player_Killed_Post(killedEntId, killerEntId, shouldGib)
{
// 若凶手还或者
if (is_user_alive(killerEntId))
{
// 获取凶手的最大生命值
new Float:maxHealth;
pev(killerEntId, pev_max_health, maxHealth);
// 设置凶手的生命值为最大生命值
set_pev(killerEntId, pev_health, maxHealth);
}
}
虽然本教程让你快速上手,但要想写出复杂插件,还需要学习基础语法。下一篇: