Jump to content
Sign in to follow this  
ρєτяυ

[AMXX] Introducere in noul sistem de CVar-uri.

Recommended Posts

Informatii generale :[/b]

 

Cum este bine cunoscut, AMXX 1.8.3 (inca in dezvolvate), aduce incet incet multe lucruri noi, de baza.

Cel despre care vreau sa va lamuresc este noul sistem de cvar-uri, un CVar Utilities portat si simplificat pentru AMXX.

 

Scopul :[/b]

 

Scopul este simplu, multi dintre noi ne-am dorit sa putem manipula cvar-urile, sa vedem cand o valoare se schimba, sa putem adauga valori maxime sau minime, sa adaugam descrieri cvar-urilor, acesta este scopul noului sistem de cvar-uri.

 

Crearea unui CVar :[/b]

 

Cu totii am fost obisnuiti pana acum sa folosim register_cvar() pentru a crea un cvar, haideti sa vedem putin sintaxa acesei native :

native register_cvar(const name[], const string[], flags = FCVAR_NONE, Float:fvalue = 0.0);

 

name - Cvar name

string - Default cvar value

flags - Optional bitsum of flags specifying cvar behavior

fvalue - Unused (adica, aceasta nativa are un parametru in plus fara motiv, el nefiindfolosit la nimic, nice)

 

Iar acum sa vedem sintaxa noii native create_cvar() :

native create_cvar(const name[], const string[], flags = FCVAR_NONE, const description[] = "", bool:has_min = false, Float:min_val = 0.0, bool:has_max = false, Float:max_val = 0.0);

 

name - Cvar name

string - Default cvar value

flags - Optional bitsum of flags specifying cvar behavior

description - Optional description of the cvar (aceasta descriere va fi folosita mai tarziu pentru creearea automata unui fisier de tip config a pluginului.)

has_min - Optional boolean that specifies if the cvar has a minimum value

min_val - Minimum floating point value

has_max - Optional boolean that specifies if the cvar has a maximum value

max_val - Maximum floating point value

 

Ce se poate observa de aici ?

create_cvar() fata de register_cvar() ne ofera 2 noi posibilitati :

- Adaugarea unei descrieri cvar-ului.

- Adaugarea unui minim/maxim cvar-ului.

 

Bind-area unui CVar :[/b]

 

Prin bindare, se intelege ca una dintre variabilele noastre globale va primi mereu valoarea cvar-ului. Asta ne va ajuta sa nu mai folosim mereu nativele get_cvar/pcvar_num/float/string.

 

Sintaxa :

native bind_pcvar_num(pcvar, &any:var);

 

pcvar - Pointer to cvar

var - Global variable to keep updated

 

Nimic mai simplu, inainte trebuia sa ai mereu un stock pentru a folosi o valoare dintr-un cvar, iar acum tot ce trebuie sa faci e sa ai o variabila globala care sa fie bindata pe un anumit cvar, acea variabila globala va avea mereu valoarea cvar-ului.

 

Hook-ul unui CVar :[/b]

 

Daca dorim sa vedem cand se schimba valoarea unui cvar nu va trebui decat sa ne folosim de nativa hook_cvar_change(), aceasta ne va oferi un callback de fiecare data cand cvar-ul sufera vreo modificare.

 

Sintaxa :

native cvarhook:hook_cvar_change(pcvar, const callback[]);

 

pcvar - Pointer to cvar

callback - Name of callback function (adica, ii vom oferi o functie, pe care nativa o va apela ori de cate ori e schimbata valoarea unui cvar)

 

Desigur, acest hook va ingreuna serverul deoarece un task continuu va manca multe din memorie, iar pentru asta avem si nativele enable_cvar_hook() si disable_cvar_hook() pentru cand vrem sa oprim/repornim un hook.

 

 

Bound-ul unui CVar :[/b]

Impreuna cu acest sistem nou, nu numai ca putem sa setam o limita maxima a cvar-ului, ci putem si sa setam o noua limita sau putem vedea limita actuala a unui cvar folosindu-ne de get/set_pcvar_bounds()

 

Sintaxa : 

native set_pcvar_bounds(pcvar, CvarBounds:type, bool:set, Float:value = 0.0);

 

pcvar - Pointer to cvar

type - Type of boundary to set

set - If true the cvar boundary will be set, otherwise it will be removed (value is ignored) (adica putem alege daca vrem sa setam o noua limita daca set este true, sau sa eliminam limitele daca set este false)

value - Floating point value to use as the boundary

 

 

 

Exemplul folosirii noului sistem de CVar :[/b]

CODE: SELECT ALL

 

#include <amxmisc>

 

new CvarPointer, Float:CvarValue, cvarhook:HoockedCvar;

 

public plugin_init()

{

 CvarPointer = create_cvar("cvar_de_test", "5.0", FCVAR_NONE, "Acest cvar este creat pentru un test.", true, 0.0, true, 10.0);

// numele cvar-ului - valoarea - flagurile - descrierea cvar-ului - admite minim - valoare - admite maxim - valoare

 

 bind_pcvar_float(CvarPointer, CvarValue); // variabila globala CvarValue va avea salvanta in ea mereu valoarea acestui cvar.

 HoockedCvar = hook_cvar_change(CvarPointer, "cvarValueChanged");

}

 

 

public clinet_putinserver(id)

{

 set_task(CvarValue, "testFunction", id);

 enable_cvar_hook(HoockedCvar); // repornim hook-ul cvar-ului

}

 

public testFunction(id)

{

 client_print_color(id, print_team_blue, "^3[^4Info^3] ^1 Bun venit pe server %n");

 server_print("acest mesaj a aparut in %f secunde de la conectarea pe server.", CvarValue);

}

 

public cvarValueChanged(pcvar, const old_value[], const new_value[])

{

 server_print("Valoarea cvar-ului ^"cvar_de_test^" si-a schimbat valoarea din %s in %s", old_value, new_value);

 disable_cvar_hook(HoockedCvar); // oprim hook-ul cvar-ului

}

P

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×