## 六、制作你的第一个插件
### 6.1 首次编写的准备
1. 打开记事本 或 `UE编辑器`
2. 然后准备好AMXX编译器(可通过[这里][5]下载)
### 6.2 开始编写
> 首先我们需要定义 `注册什么模块`
这个部分并不难,由于是第一个插件。我们不需要写的太难
我们用 `#include <模块名>` 为基础模块 `amxmodx` 来完成注册,代码如下
```
#include <amxmodx>
```
如上,我们就完成了注册插件模块 `amxmodx` ,接下来我们需要定义三个信息,他们分别是
> * 插件名
* 插件版本号
* 插件作者名
我们通过 `register_plugin( )` 来完成注册
```
register_plugin("插件名", "插件版本号", "插件作者名")
```
> 中间的这三个部分叫参数,将他们写进去后需要用 `" "` 引号来把他们包围起来
接下来我们需要用 `plugin_init()` 来注册, `register_plugin` 事件
代码如下:
```
public plugint_init()
{
register_plugin("插件名", "插件版本号", "插件作者名")
}
```
将整个代码组合之后就会变成
```
#include <amxmodx>
public plugin_init()
{
register_plugin("插件名", "插件版本号", "插件作者名")
}
```
到这里,已经完成了基础代码构造,接下来我们需要做的是该插件做上功能
>
第一次,我们指定一个可以简单完成的目标吧。
按 Y 键输入 `/test` 提示一些信息
提示信息我们用到的是 `client_print( )` 他的作用是在游戏中打印指定的文字
示例:
```
client_print(id, print_chat, "这是一些信息")
```
>
这个信息需要由一个函数所包含
比如说:
```
public test(id)
{
client_print(id, print_chat, "这是一些信息")
}
```
> 我们需要注册一个 `客户端命令` 才能完成触发这个函数。
然后通过函数引发 `client_print`
注册客户端的命令的代码为 `register_clcmd( )` 这个代码由两个参数注册
> * 注册什么命令
* 触发什么函数
比如说:
```
register_clcmd("say /abc", "thefunc")
```
上述示例代表 通过按Y键输入 `/abc` 触发 `thefunc` 函数
> 注册客户端命令的代码必须写到 `plugin_init()` 里面进行注册
当所有代码组合后,就会变成如下示例:
```
#include <amxmodx>
public plugin_init()
{
register_plugin("插件名", "插件版本号", "插件作者名")
register_clcmd("注册什么命令", "触发什么函数")
}
```
我们的目标是 按Y键输入 `/test` 触发一段信息,这里的信息我们通过`函数(public)` 触发
首先我们需要将 `注册什么命令` 引号中的部分改成 `say /test`
示例:
```
register_clcmd("say /test", "触发什么函数") //注册客户端命令
```
> 在 `触发什么函数` 这个参数部分,我们可以自己定义一个 `名字`,比如说 `test_func` 填入进去即可
示例如下:
```
register_clcmd("say /test", "test_func") //注册客户端命令
```
接下来要做的就是触发函数,现在我们还没有定义 `被触发` 的那个函数
> 定义触发函数,需要触发的函数的名字
然后在 `plugin_init()` 括号外写入 `public 函数名`
示例:
```
#include <amxmodx>
public plugin_init()
{
register_plugin("插件名", "插件版本号", "插件作者名")
register_clcmd("say /test", "test_func") //注册客户端命令
}
public test_func(id)
{
client_print(id, print_chat, "这是一些信息")
}
```
> 请注意:注册`客户端命令`那里,触发的函数名要和下方这个 `public 函数名` 对应
接下来,我们需要在 `被触发的函数` 里写上 `client_print` 的打印信息
示例:
```
#include <amxmodx>
public plugin_init()
{
register_plugin("插件名", "插件版本号", "插件作者名")
register_clcmd("say /test", "test_func") //注册客户端命令
}
public test_func(id)
{
client_print(id, print_chat, "这是一些信息")
}
```
>
提示:由于如果不是 `UE编辑器` 更改代码保存后可能会出现 `ANIS/UTF-8` 乱码问题。
建议在初学插件的时候使用 `英文` 来替代(但注释中的中文可以除外)
比如:
```
public test_func(id)
{
client_print(id, print_chat, "Hello World")
}
```
### 6.3 编译这个源代码成为插件
当我们写好了一个源代码后,接下来的事情就需要交给 `编译器` 然后让他转义为 `AMXX`插件
如果还没有编译器,可以点击 [这里](http://120.25.198.85:7500/ExploerFile/index.php?share/file&user=admin&sid=FXPVnMux) 下载
> 跟着我做:
1. 复制 `编写好的源代码` 到 编译器目录下 然后 `粘贴`
2. 将源代码文件(.SMA)用鼠标拖拽到编译器目录下的 `compile.exe` 文件上,然后放开鼠标
3. 若成功编译,你会在编译器目录看见 compiled 文件夹。
4. 在这个文件夹中 就会找到你编译后的插件
>
不太能理解? 你可以看下面的动态图来 `帮助` 你
![](http://120.25.198.85:7500/ExploerFile/index.php?share/fileProxy&user=guest&sid=RwGtAHYQ)
>
到这里,你的第一个插件就制作完成了
插件安装到游戏的过程 可参考 `2.3 将插件安装到游戏中`