跳到主要内容

设置

ReAPI 没有自己的服务器控制台变量——它是一套脚本 API,而不是面向最终用户的插件。所谓「配置」ReAPI,指的是在 Pawn 代码中正确使用它的原生函数。本页介绍这些基本组成部分。

头文件​

头文件提供的内容
reapi.inc模块核心:钩子链原生函数、成员访问宏、能力检测。包含这一个即可,它会引入其余头文件。
reapi_engine.inc / reapi_engine_const.inc引擎层面(ReHLDS)可挂接的函数及其常量。
reapi_gamedll.inc / reapi_gamedll_const.incGameDLL 层面(ReGameDLL_CS)可挂接的函数及其常量。仅在运行 ReGameDLL_CS 时可用。
cssdk_const.inc上述头文件共用的 Counter-Strike SDK 常量。
reapi_reunion.inc当 ReUnion 已安装时,提供对应的钩子。
reapi_vtc.inc当 VTC 反作弊集成已安装时,提供对应的钩子。
reapi_rechecker.inc当 ReChecker 已安装时,提供对应的钩子。

reapi.inc 会自动包含以上全部内容——其中 reapi_engine.inc 只有配合 ReHLDS 才有意义,reapi_gamedll.inc 则只有配合 ReGameDLL_CS 才有意义。

钩子链​

钩子链让你的插件能够介入引擎或 GameDLL 的函数调用。

native HookChain:RegisterHookChain(ReAPIFunc:function_id, const callback[], post = 0);
native bool:DisableHookChain(HookChain:hook);
native bool:EnableHookChain(HookChain:hook);
native SetHookChainReturn(AType:type, any:...);
native any:GetHookChainReturn(AType:type, any:...);
native SetHookChainArg(number, AType:type, any:...);
native bool:IsReapiHookOriginalWasCalled(ReAPIFunc:function_id);
native HookChain:GetCurrentHookChainHandle();

function_id 是在 reapi_engine_const.inc(引擎函数)或 reapi_gamedll_const.inc(GameDLL 函数)中声明的 RG_* 常量之一——完整且带版本的可挂接函数列表及其回调签名,请查阅这两个头文件。

钩子链的返回值​

从回调中返回以下值之一,以决定后续行为:

常量作用
HC_CONTINUE插件未做任何处理;照常继续执行。
HC_SUPERCEDE跳过真正的函数,改用通过 SetHookChainReturn 设置的返回值。
HC_BREAK跳过其余全部转发以及真正的函数,使用已设置的返回值。它会跳过后续所有 AMXX 插件的钩子——请谨慎使用。
HC_BYPASS跳过后续所有 AMXX 插件的调用,但仍然调用原函数。在 pre 阶段使用时,还会跳过 post 转发。

参数与返回值类型​

SetHookChainReturn、GetHookChainReturn 和 SetHookChainArg 都接受一个 AType: 值,用于说明如何解释其后的参数:

enum AType
{
ATYPE_INTEGER = 0,
ATYPE_FLOAT,
ATYPE_STRING,
ATYPE_CLASSPTR,
ATYPE_EDICT,
ATYPE_EVARS,
ATYPE_BOOL,
ATYPE_VECTOR,
ATYPE_TRACE
};

成员访问​

按名称读写内部结构体成员(玩家、武器、手雷、游戏规则等),而不必手工计算偏移:

set_member(entity, m_iSomeMember, value);
value = get_member(entity, m_iSomeMember);

默认情况下,set_member/get_member 会解析为带边界检查的 set_member_s/get_member_s。如果你需要不做检查、速度略快的版本,并且清楚其中的风险,可以在 #include <reapi> 之前定义 MEMBER_UNSAFE。

运行时能力检测​

用它们让插件适配实际运行的环境,而不是凭假设:

原生函数返回 true 的条件
is_rehlds()服务器运行在 ReHLDS 上。
is_regamedll()服务器运行在 ReGameDLL_CS 上。
has_reunion()已安装 ReUnion。
has_vtc()已安装 VTC 反作弊集成。
has_rechecker()已安装 ReChecker。

其他实用原生函数​

原生函数用途
bool:FClassnameIs(entityIndex, const className[])检查实体的 classname,同时也会校验该实体是否有效。
WeaponIdType:GetGrenadeType(entityIndex)返回实体对应的手雷类型。
engset_view(index, viewEntity) / get_viewent(index)获取和设置玩家的视角实体。
bool:is_entity(entityIndex)检查某个索引是否为有效实体。

要获取完整且最新的原生函数列表和可挂接函数的 ID,请以 reapi.inc、reapi_engine_const.inc 和 reapi_gamedll_const.inc(随插件一同安装在 scripting/include 中)为准——它们与你正在运行的模块文件是同版本发布的。