AMXXPawn state关键字

1. 核心功能

state关键字可在运行时切换插件自动机和插件状态。

声明函数时,可设定函数所属的插件自动机和状态。

一个脚本可以拥有多个从属于不同自动机或状态的同名函数。

使用state关键字切换脚本的自动机和状态,便可调用从属于此状态下的函数。

如果要调用默认状态下的函数,需要切换到任意一个未被该函数绑定的自动机或状态。

2. 基本语法格式

state) 【(条件表达式)】 【自动机名称(:)】(状态名称) [;]

()是必填项目,【】是可选项目。

若省略(条件表达式),表示无条件切换到指定状态。

若不省略(条件表达式),仅在条件表达式返回非0时才会切换。

注意:

3. 实例

无自动机:

#include <amxmodx> public plugin_init() { // 调用状态下的func函数,返回1 state yes; server_print("[AMXX]文本内容:%d", func()); // 调用状态下的func函数,返回2 state no; server_print("[AMXX]文本内容:%d", func()); // 所有func都不从属于插件auto状态,因此这里调用的是<>状态下的func函数,返回0 state auto; server_print("[AMXX]文本内容:%d", func()); } static func() <> return 0; static func() <yes> return 1; static func() <no> return 2; static func2() <auto> return 3;

有自动机:

#include <amxmodx> public plugin_init() { // 调用状态下的func函数,返回1 state debugmode:yes; server_print("[AMXX]文本内容:%d", func()); // 调用状态下的func函数,返回2 state debugmode:no; server_print("[AMXX]文本内容:%d", func()); // 所有func都不从属于插件debugmode:auto状态,因此这里调用的是<>状态下的func函数,返回0 state debugmode:auto; server_print("[AMXX]文本内容:%d", func()); } static func() <> return 0; static func() <debugmode:yes> return 1; static func() <debugmode:no> return 2; static func2() <debugmode:auto> return 3;

有条件的切换状态:

#include <amxmodx> enum tObjectInfo { Array: OI_Handle, _: OI_ElementSize } static Array:gObjects; public plugin_precache() { register_plugin("测试插件", "1.0.0", "插件作者"); // 若编译器调试级别大于1,说明允许AMX Mod X调试当前插件(通过添加-d0 -d1 -d2 -d3等编译器参数,可更改此常量) #if (1 < debug) // 用6个单元储存插件运行状态文本 new status[6]; get_plugin(-1, .status = status, .len5 = charsmax(status)); // 若AMX Mod X正在调试当前插件,切换到调试模式(在配置文件夹中,为当前插件名称末尾添加debug) state (equal(status, "debug")) PluginDebugging; #endif gObjects = ArrayCreate(tObjectInfo); // 根据此时插件状态(默认状态或PluginDebugging状态),调用对应的ArrayCreateEx函数 new Array:handle = ArrayCreateEx(); // ... } // 此函数仅在发布模式下可用 static Array:ArrayCreateEx(cellsize = 1, reserved = 32) <> { // 调用默认的创建数组函数 return ArrayCreate(cellsize, reserved); } // 此函数仅在调试模式下可用 static Array:ArrayCreateEx(cellsize = 1, reserved = 32) <PluginDebugging> { new sObjectInfo[tObjectInfo]; sObjectInfo[OI_Handle] = ArrayCreate(cellsize, reserved); sObjectInfo[OI_ElementSize] = cellsize; // 将创建的数组相关数据存入一个大数组中,方便未来检查 ArrayPushArray(gObjects, sObjectInfo); return sObjectInfo[OI_Handle]; }