Przejdź do głównej zawartości

Ustawienia

ReAPI nie ma własnych zmiennych konsoli — to API do skryptowania, a nie wtyczka dla użytkownika końcowego. „Konfigurowanie” ReAPI oznacza poprawne używanie jego funkcji natywnych w twoim kodzie w Pawnie. Ta strona opisuje podstawowe elementy.

Pliki dołączane

Plik nagłówkowyUdostępnia
reapi.incRdzeń modułu: funkcje natywne łańcuchów hooków, makra dostępu do składowych, sprawdzanie możliwości. Dołącz właśnie ten; on pociąga za sobą pozostałe.
reapi_engine.inc / reapi_engine_const.incFunkcje silnika (ReHLDS), na które można założyć hooki, oraz ich stałe.
reapi_gamedll.inc / reapi_gamedll_const.incFunkcje biblioteki GameDLL (ReGameDLL_CS), na które można założyć hooki, oraz ich stałe. Dostępne tylko wtedy, gdy działa ReGameDLL_CS.
cssdk_const.incStałe SDK Counter-Strike’a, wspólne dla powyższych plików nagłówkowych.
reapi_reunion.incHooki do ReUnion, gdy jest zainstalowany.
reapi_vtc.incHooki do integracji z antycheatem VTC, gdy jest zainstalowana.
reapi_rechecker.incHooki do ReChecker, gdy jest zainstalowany.

reapi.inc dołącza wszystkie powyższe automatycznie — reapi_engine.inc ma sens tylko z ReHLDS, a reapi_gamedll.inc tylko z ReGameDLL_CS.

Łańcuchy hooków

Łańcuch hooków pozwala twojej wtyczce przechwycić wywołanie funkcji silnika albo biblioteki 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 to jedna ze stałych RG_* zadeklarowanych w reapi_engine_const.inc (funkcje silnika) albo w reapi_gamedll_const.inc (funkcje GameDLL) — pełną, wersjonowaną listę funkcji, na które można założyć hooki, oraz sygnatury ich funkcji zwrotnych znajdziesz właśnie w tych plikach.

Typy zwracane przez łańcuchy hooków

Zwróć jedną z tych wartości ze swojej funkcji zwrotnej, żeby zdecydować, co stanie się dalej:

StałaDziałanie
HC_CONTINUEWtyczka niczego nie zrobiła; wszystko toczy się normalnie.
HC_SUPERCEDEPomija właściwą funkcję; zamiast niej używa wartości ustawionej przez SetHookChainReturn.
HC_BREAKPomija wszystkie pozostałe funkcje oraz właściwą funkcję; używa ustawionej wartości zwracanej. Pomija hooki wszystkich kolejnych wtyczek AMXX — używaj ostrożnie.
HC_BYPASSPomija wywołania we wszystkich kolejnych wtyczkach AMXX, ale mimo to wywołuje oryginalną funkcję. W trybie pre pomija też funkcje z trybu post.

Typy argumentów i wartości zwracanych

SetHookChainReturn, GetHookChainReturn i SetHookChainArg przyjmują wartość AType:, która opisuje, jak interpretować kolejne argumenty:

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

Dostęp do składowych

Odczytuj i zapisuj wewnętrzne składowe struktur (gracz, broń, granat, zasady gry i inne) po nazwie, a nie po ręcznie wyliczonym przesunięciu:

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

Domyślnie set_member/get_member sprowadzają się do wariantów set_member_s/get_member_s, które sprawdzają zakresy. Zdefiniuj MEMBER_UNSAFE przed #include <reapi>, jeśli potrzebujesz wariantów bez sprawdzania, nieco szybszych, i rozumiesz związane z tym ryzyko.

Sprawdzanie możliwości w czasie działania

Używaj tych funkcji, żeby wtyczka dostosowała się do tego, na czym faktycznie działa, zamiast cokolwiek zakładać:

Funkcja natywnaZwraca prawdę, gdy
is_rehlds()Serwer działa na ReHLDS.
is_regamedll()Serwer działa na ReGameDLL_CS.
has_reunion()ReUnion jest zainstalowany.
has_vtc()Integracja z antycheatem VTC jest zainstalowana.
has_rechecker()ReChecker jest zainstalowany.

Pozostałe funkcje pomocnicze

Funkcja natywnaDo czego służy
bool:FClassnameIs(entityIndex, const className[])Sprawdza nazwę klasy obiektu; przy okazji weryfikuje sam obiekt.
WeaponIdType:GetGrenadeType(entityIndex)Zwraca typ granatu danego obiektu.
engset_view(index, viewEntity) / get_viewent(index)Odczytuje albo ustawia obiekt, z którego patrzy gracz.
bool:is_entity(entityIndex)Sprawdza, czy dany indeks odpowiada prawidłowemu obiektowi.

Pełną i aktualną listę funkcji natywnych oraz identyfikatorów funkcji, na które można założyć hooki, czerp z plików reapi.inc, reapi_engine_const.inc i reapi_gamedll_const.inc (zainstalowanych razem z scripting/include twoich wtyczek) — to one są źródłem rozstrzygającym, bo są wersjonowane razem z plikiem binarnym, którego używasz.