ReAPI NEW UPDATE

Încuiat
Romania Avatar utilizator

Topic Author
[RGK]*Kent
Administrator Community
Administrator Community
Mesaje: 383
Membru din: Septembrie 13, 2020, 1:50 pm
Localitate: Rosiori de Vede
Vârsta: 29
Contact:
Status: Neconectat
Kent’s avatar
Offline

ReAPI NEW UPDATE

Imagine
Echipa de dezvoltare:
Asmodai
s1lent



Referinte:

download
github
Compilate dev-builds


Linkuri Download:
NEW Version 5.21.0.252
Download-link
reapi-bin-5.21.0.252.zip
Last Version 5.19.0.217
Download-link
reapi_5.19.0.217-dev.zip
Descriere:
ReAPI este un modul AMX Mod X care poate functiona cu API-ul ReHLDS | ReGameDLL_CS | Reunion | VTC | Rechecker .
Acest lucru oferă dezvoltatorilor AMXX-plugin-urilor mai multe oportunităti pentru a-ti realiza obiectivele.


Cerinţe:
ReHLDS, ReGameDLL_CS, Reunion, VTC, Rechecker.
Atentie: Nu e neapărat să utilizati toate cele enumerate mai înainte, însă de retinut este faptul că modulul nu va fi funtiona la capaciatatea maximă..
MetaMod 1.20 (p) sau mai nou


Instalare:
1. Copiati din arhiva reapi_X_X_X.zip fisierul reapi_amxx_i386.so sau reapi_amxx.dll (în functie de sistemul de operare) în folderul /addons/amxmodx/module
2. Deschidem fisierul modules.ini din /addons/amxmodx/configs si adăugăm din rând nou:
reapi


3. Salvăm si facem un restart complet al serverului.

Caracteristici foward-uri:
Gestionează apelurile functiilor originale si a altor hook-uri. Acest lucru poate fi făcut prin returnarea din foward a unuia din aceste 4 valori:
HC_CONTINUE - continuă să apeleze hook-uri si functia originală;
HC_OVERRIDE - continuă să apeleze functia originală, dar returnează valoarea sa;
HC_SUPERCEDE - continuă să apeleze hook-uri, dar întrerupe executarea functiei originale (Dacă functia nu este void (nulă), înainte de închiderea apelului trebuie să setati valoarea returnată);
HC_BREAK - întrerupe executarea de hook-uri si functii originale;
Setarea valorii de returnare. Se efectuează cu ajutorul nativei SetHookChainReturn cu 2 argumente, în prima trebuie de specificat tipul valorii returnate, iar în a doua valoarea;
Obtinerea valorii de returnare. Acest lucru se face cu ajutorul nativei GetHookChainReturn, si poate fi apelată doar în post.
Înlocuirea argumentelor în functie. Acest lucru se face cu ajutorul nativei SetHookChainArg, îm primul argument se specifică numărul de ordine al argumentelor care întotdeauna începe cu 1, în al doilea tipul de argument si în alt treilea - valoarea;


Exemple Practice:
Pentru început adăugăm include-ul reapi
#include <reapi>
În plugin_init, înregistrăm un hook pe DeadPlayerWeapons si atârnăm un handler pe CSGameRules_DeadPlayerWeapons
public plugin_init()
{
RegisterHookChain(RG_CSGameRules_DeadPlayerWeapons, "CSGameRules_DeadPlayerWeapons")
}
Apoi creăm corpul functiei handler
public CSGameRules_DeadPlayerWeapons(const index)
{

}
Următorul pas, pentru a întelege ar fi bine să trageti o privire în sursa ReGameDLL_CS player.cpp#L1473. Vedem că functia trebuie să returneze o anumită valoare în care nu asteaptă GR_PLR_DROP_GUN_NO. Esenta functiei PackDeadPlayerItems este că aceasta aruncă armele jos după moartea jucătorului. Vom încerca să împiedicăm acest lucru. Pentru aceasta vom returna valoarea GR_PLR_DROP_GUN_NO care nu se asteaptă să o primească.
public CSGameRules_DeadPlayerWeapons(const index)
{
SetHookChainReturn(ATYPE_INTEGER, GR_PLR_DROP_GUN_NO);
}
Din moment ce, în functia originală, nu este practic nimic, deci nu avem nevoie să o apelăm încă o dată, de aceea utilizăm HC_SUPERCEDE.
public CSGameRules_DeadPlayerWeapons(const index)

{
SetHookChainReturn(ATYPE_INTEGER, GR_PLR_DROP_GUN_NO);
return HC_SUPERCEDE;
}
Deci, într-un mod destul de simplu, am împiedicat aparitia armelor pe pământ. Pluginul merge perfect pentru un server CSDM sau GunGame de exemplu:
#include <amxmodx>
#include <reapi>

public plugin_init()
{
RegisterHookChain(RG_CSGameRules_DeadPlayerWeapons, "CSGameRules_DeadPlayerWeapons")
}

public CSGameRules_DeadPlayerWeapons(const index)
{
SetHookChainReturn(ATYPE_INTEGER, GR_PLR_DROP_GUN_NO);
return HC_SUPERCEDE;
}
GetHookChainReturn:
CBasePlayer::TakeDamage returnează valoarea 0/1 sub forma
0 - nu a primit damage;
1 - a primit damage;

Dacă pe server va fi dezactivat friendlyfire (mp_friendlyfire 0), trăgând în coechipieri functia CBasePlayer::TakeDamage va continua să fie apelată, însă va returna 0. În anumite situatii, trebuie să stim exact dacă victima a primit damage, după acest exemplu vom notifica în chat atacatorul cu informatii despre cât damage a făcut.
GetHookChainReturn trebuie să fie utilizat doar în post, când functia originală a fost deja apelată.
#include <amxmodx>
#include <reapi>

public plugin_init()
{
RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", 1);
}

public CBasePlayer_TakeDamage(const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{
if (GetHookChainReturn() == 1) {
client_print(0, print_chat, "Victima a primit damage: %f", flDamage);
} else {
client_print(0, print_chat, "Victima nu a primit damage: %f", flDamage);
}

return HC_CONTINUE;
}
Informatie utilă: CBasePlayer::TakeDamage în post, argumentul flDamage este returnat luând în calcul armura si damage-ul subevaluat cu 35% asupra coechipierilor (cu alte cuvinte în flDamage va fi damage-ul exact) ceea ce nu putem spune de o asemenea posibilitate în modulul Hamsandwich.
SetHookChainArg Hide:
Folosind hook-ul ShowVGUIMenu, putem modifica meniul de alegere a echipei pentru toti, cu exceptia meniului VGUI, deoarece functia ShowVGUIMenu, este apelată atât pentru VGUI cât si pentru old menu.
#include <amxmodx>
#include <reapi>

public plugin_init()
{
RegisterHookChain(RG_ShowVGUIMenu, "ShowVGUIMenu");
}

public ShowVGUIMenu(const index, VGUIMenu:menuType, const bitsSlots, szOldMenu[], bool:bForceOldMenu)
{
if (menuType == VGUI_Menu_Team) {
new szMenu[256];
formatex(szMenu, charsmax(szMenu), "\yDupa care echipa vei juca?^n^n\w1. Terrorist^n2. Counter-Terrorist^n^n5. Nu Stiu");

if (bitsSlots & MENU_KEY_6) {
add(szMenu, charsmax(szMenu), "^n6. Spectator");
}

SetHookChainArg(4, ATYPE_STRING, szMenu);
}

return HC_CONTINUE;
}
Observatii:
ReAPI este în cea mai mare parte proiectat pentru Counter-Strike 1.6 / Condition Zero , dar poate fi folosit si în alte moduri cu mai putine functionalităti disponibile.
Cu fiecare versiune nouă se recomandă să recompilati plug-in-urile utilizând ReAPI cu incluziuni actualizate.
:arrow: [RGK]*Kent - mortall.ro :)

Link:
BBcode:
HTML:
Hide post links
Show post links
Încuiat

Înapoi la “Module”