Codul Scripterului

Tutoriale scripting, cod si portiuni de cod.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
Lux0R^
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 1222
Joined: 13 Jul 2013, 16:31
Detinator Steam: Da
Reputatie: Scripter eXtreamCS
Moderator ajutator
Has thanked: 15 times
Been thanked: 12 times

15 Feb 2019, 16:37

Codul Scripterului - va fi o serie in care scripterii vor putea posta doar reguli ce tin de programarea pluginurilor, unde acestia observa dupa investigari pe site-uri oficiale anumite greseli ce se practica prea des iar acestrea ar trebui remediate.



Declararea unei variabile.

Exista 5 metode de a declara o variabila :

1. NEW

-- Folosit pentru a creea variabile private

exemple :
| Afiseaza codul
new a // declaram variabila a (valoarea e 0 daca nu e initializat)
new b = 2 // declaram variabila b si instantiem cu valoarea 2
new c[100] // declaram sirul/vectorul c
new d[4] = {0, 1, 2, 3} // declaram vectorul/sirul d si il initializam
2. CONST

-- Folosit pentru a creea constante

exemple :
| Afiseaza codul
const e // eroare, constanta e nu poate fi creata fara sa o si instantiem
const f = 3 // declaram constanta f si instantiem cu valoarea 3
const g[3] = {0, 1, 2} // g este invalid(eroare la declarare), nu se pot creea siruri/vectori doar folosind keywordl-ul const
new const h[3] = {0, 1, 2} // h este sir/vector declarat si instantiat.
new const i[10] // i este invalid, acelasi motiv ca si in cazul constantei e, sirurile de constante trebuie sa fie initiatializate la declarare
3. STATIC

-- Folosit pentru a creea variabile private care nu se distrug (traiesc cat traieste si pluginul), isi mentin ultima valoare setata.
-- Echivalentul variabilelor globale declarate cu NEW

exemple :
| Afiseaza codul
static j // declaram variabila statica j (valoarea e 0 daca nu e initializat)
static k = 2 // declaram variabila statica j si instantiem cu valoarea 2, isi va pastra valoarea pana la urmatoarea suprascriere a variabilei
static l[100] // declaram sirul/vectorul static l
static m[4] = {0, 1, 2, 3} // declaram vectorul/sirul static m si il initializam
.................
// functioneaza si in combinatie cu CONST, avand aceleasi reguli ca si la NEW
// sunt inutile, insa compilatorul le va accepta: 
static const var = 2 // constanta statica
static const sir[3] = {0, 1, 2} // sir/vector constant static
exemple corecte de folosire:
| Afiseaza codul
// cand se doreste retinerea unei informatii necesare, precum cea din get_user_msgid() dar nu vrem sa o salvam global (deoarece are exact acelasi efect si strica estetica codului), atunci optam la folosirea lui STATIC, care pastreaza valoarea ca o variabila globala, insa este vizibila doar in block-ul unde este declarata->
	static iTeamInfo = 0;
	if (iTeamInfo == 0) {
		iTeamInfo = get_user_msgid("TeamInfo");
	}

// in cazurile in care metoda este folosita de foarte multe ori pe secunda (ex: 100 ori per secunda), pentru a creste eficienta codului, vom folosi STATIC in favoarea lui NEW

public client_PreThink(id) // 100 call-uri pe secunda
{
    static Float:fOrigin[]; // variabila este doar creeata si nu se va distruge cat timp pluginul nu e distrus
    ...
}
4. STOCK

-- Folosit pentru a creea variabile ce pot sa fie nefolosite
-- Daca compilatorul observa ca sunt doar declarate, valoarea lor nu este citata sau suprascrisa, ele nu vor fi compilate (vor fi ignorate)

exemple :
| Afiseaza codul
stock n // declaram variabila nefolosibila n (valoarea e 0 daca nu e initializat)
stock o = 2 // declaram variabila nefolosibila o si instantiem cu valoarea 2
stock p[4] = {0, 1, 2, 3} // declaram vectorul/sirul nefolosibil p si il initializam
stock q[10]  // declaram vectorul/sirul nefolosibil q 
.................
// functioneaza si in combinatie cu CONST, avand aceleasi reguli ca si la NEW/STATIC
// sunt inutile, insa compilatorul le va accepta: 
stock const var = 2 // constanta nefolosibila
stock const sir[3] = {0, 1, 2} // sir/vector constant nefolosibil
.................
// nu are interactiuni cu STATIC

5. PUBLIC
-- Folosit pentru a creea variabile publice (xvar-uri)
-- Acestea pot fi modificate de catre alte pluginuri !
-- Este obligatoriu ca declararea sa fie globala !


exemple :
| Afiseaza codul
public r // declaram variabila publica r (valoarea e 0 daca nu e initializat)
public s = 2 // declaram variabila publica s si instantiem cu valoarea 2
public t[100] // eroare ! nu se pot declara variabile publice care sa fie vectori/siruri
.................
// accepta interactiuni cu CONST insa efectul nu e cunoscut, asa ca e de evitat folosirea lor
public const xvar // OK ! (ciudat, nu cere valoare default)
public const xvar = 2 // OK !

//
public plugin_init() {
     public xvar = 3 // invalid ! se pot declara doar global
}

NEW vs STATIC
- NEW se creeaza cand este declarat si se distruge la iesirea din block - consuma viteza la distrugere
- STATIC se creeaza doar o data la declarare si nu este distrus decat cand se distruge si pluginul - consuma memorie
- Se va folosi NEW cand se folosesc functii care nu se apeleaza des (exemplu: mai mult de 10 per secunda)
- Se va folosi STATIC cand se folosesc functii care se apeleaza des (exemplu: mai mult de 10 apeluri per secunda)
- Se va folosi STATIC cand se vor retine date utile (exemplu: citirea unui mesaj cu get_user_msgid()), in contextul in care operatia este destul de costisitoare si este folosita destul de des (1 apel la ~5 secunde ?), iar datele sunt folosite strict doar intr-un block
- NEW global este aproape echivalent cu STATIC, STATIC avand avantajul ca este vizibil doar in contextul blocului sau
- Mereu vom incerca sa alegem consumul de viteza in favoarea celui de memorie, cat timp viteza nu scade. Memoria e mult mai limitata.
Pauza pana in iulie... licenta ^^

Fara pm-uri pentru pluginuri de zm/furien + tot ce tine de vip.

Codul Scripterului: scripting/codul-scripterului-t362300.html#p2754224
RoyalServer
User avatar
LondoN eXtream
Membru eXtream
Membru eXtream
Posts: 2755
Joined: 10 Oct 2014, 06:21
Detinator Steam: Da
SteamID: /id/london_extreamcs
Reputatie: Fost scripter eXtreamCS
Fost moderator ajutator
Membru Club eXtreamCS (6 luni)
Fond eXtream: 0
Location: Roman, Neamț
Has thanked: 3 times
Been thanked: 12 times

08 Mar 2019, 11:49

FUNCTII UTILE
  • 1. Functia get_user_name(const Player, szOutput[], Len)
    Cu aceasta functie puteti afla numele unui jucator.
    exemplu | Afiseaza codul
    new Name[32]; // Declaram constanta Name cu 32 de celule.
    get_user_name(Player, Name, charsmax(Name));
    2. Functia get_user_ip(const Player, szOutput[]. Len, bool:WithPort)
    Cu aceasta functie puteti afla ip-ul unui jucator.
    Parametrul "bool:WithPort" va putea primi valoarea 0/1 adica true sau false si instiinteaza daca la executare va prelua si port-ul jucatorului.
    exemplu | Afiseaza codul
    new IP[16]; // Declaram variabila ip cu 16 celule. 
    get_user_ip(Player, IP, charsmax(IP), 1); // fara port
    3. Functia get_user_authid(const Player, szOutput, Len)
    Cu aceasta functie puteti afla ID-ul de steam al jucatorului.
    exemplu | Afiseaza codul
    new SteamID[45]; // declaram variabila steamid cu 45 de celule
    get_user_authid(Player, SteamID, charsmax(SteamID));
Sunt doar 3 functii basic, care mi-au venit acum pe moment in minte, voi actualiza postul cu cat mai multe
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 3 guests