Ce este ReAPI?
ReAPI este un modul AMX Mod X care expune mecanismele interne ale ReHLDS și ale ReGameDLL_CS către pluginurile scrise în Pawn, sub formă de funcții native obișnuite, în loc să îi oblige pe autorii de pluginuri să modifice decalaje de memorie sau să facă singuri inginerie inversă asupra structurilor. El oferă codului Pawn un acces sigur și versionat la comportamente ale motorului și ale GameDLL-ului la care AMX Mod X și Metamod, luate ca atare, nu ajung.
Ce vă pune la dispoziție
- Lanțuri de hook-uri — interceptați funcții ale motorului (ReHLDS) și ale GameDLL-ului (ReGameDLL_CS) în
preșipost, cu un control fin asupra valorii returnate și chiar asupra argumentelor funcției originale. - Acces la membri — citiți și scrieți membrii interni ai structurilor motorului și ale GameDLL-ului (jucător, armă, grenadă, reguli de joc și altele) după nume, nu după un decalaj calculat manual.
- Verificări de capabilități în timpul execuției — funcții native precum
is_rehlds(),is_regamedll(),has_reunion(),has_vtc()șihas_rechecker()îi permit unui plugin să se adapteze la configurația pe care rulează efectiv. - Fișiere antet opționale de integrare —
reapi_reunion.inc,reapi_vtc.incșireapi_rechecker.incexpun hook-uri către ReUnion, către sistemul anti-cheat VTC și către ReChecker, atunci când acestea sunt instalate.
Cerințe pe scurt
- AMX Mod X, rulând peste Metamod-R (sau Metamod) și ReHLDS. Hook-urile și membrii de la nivelul motorului au nevoie de ReHLDS.
- ReGameDLL_CS, dacă pluginul dumneavoastră folosește hook-uri sau membri de la nivelul GameDLL-ului (
reapi_gamedll.inc). Pluginurile care țin doar de nivelul motorului funcționează și fără el.
Vedeți Instalare pentru pașii exacți de configurare.
Un exemplu minimal
#include <amxmodx>
#include <reapi>
public plugin_init()
{
register_plugin("ReAPI Test", "1.0", "s1lent");
RegisterHookChain(RG_CBasePlayer_GiveAmmo, "CBasePlayer_GiveAmmo");
}
public CBasePlayer_GiveAmmo(const this, iAmount, szName[], iMax)
{
server_print("-> CBasePlayer_GiveAmmo: index:(%d), amount:(%d), name:(%s), max:(%d)", this, iAmount, szName, iMax);
return HC_CONTINUE;
}
Acest cod pune un hook pe CBasePlayer::GiveAmmo, de partea GameDLL-ului, și consemnează fiecare apel fără să schimbe comportamentul (HC_CONTINUE). Vedeți Setări pentru API-ul complet al lanțurilor de hook-uri și pentru tipurile de returnare și de argumente disponibile.