Jump to content

Tutorial - Tips & Tricks


L0K3D
 Share

Recommended Posts

Cateva lucruri ce va pot economisi timpul de lucru cat si optimizarea modului de joc, unele din ele sunt deja postate pe forumul oficial SA:MP insa nu toti le folosesc sau nu le cunosc.

  • Multiple actiuni intr-o declaratie:
sendInfo(playerid) {
	new a = 4, mStr[20];
	format(mStr, sizeof(mStr), "Var a = %i", a), SendClientMessage(playerid, -1, mStr);
}

* odata ce stim marimea string-ului o putem scrie direct, fara sa mai apelam la sizeof

  • Operatorul ternary

Folosind acest operator poti economisi timp si spatiu, structura: conditie ? adevarat : fals


new a = 5, b = 4, c;
if(a > b) 
	c = a;
else 
	c = b;

// operatorul ternar
c = (a > b) ? a : b;

// ca parametru actual
printf("c = %i", (a > b) ? a : b);
  • Atribuim valori variabilelor ce sunt folosite ca parametri actuali

O alta metoda ce te ajuta sa economisi timp/spatiu dar si sa ai un cod mai aranjat

new a;

// acest cod
printf("%i", a = 5); 

// sau acest cod
a = 5, printf("%i", a);

// fac acelasi lucru
  • Atribuirea mai multor variabile aceeasi valoare

Daca ai 2 sau mai multe variabile si vrei sa le setezi aceeasi valoare (de exemplu 1), nu e nevoie de le egalezi pe fiecare in parte cu 1;

new a, b, c;
a = b = c = 1;
// in loc de:
a = 1, b = 1, c = 1;
  • Creaza variabilele la timpul lor

Nu va grabiti sa creati variabilele, mai jos va voi da un exemplu si va voi spune de ce:

image.png.e29ae696a4ed8a0f1dde6f8e3b33b918.png

Am creata variabila para prea devreme, inca nu aveam nevoie de ea. In caz ca jucatorul nu corespunde cerintelor din primul if, variabila nu va fi folosita mai departe, deci a fost creata aiurea.

  • Functii

public - nu toate functie necesita sa aiba cuvantul public in fata (doar in cazul in care e apelata de un timer, CallLocalFunction, CallRemoteFunction, de un query). Callback-urile ce ne le ofera SA:MP-ul necesita folosirea sa.

stock - nu este un tip diferit de functie fata de cele publice, cum cred multi. E un modificator ce ii spune compilerului sa nu trimita warning-uri in cazul in care o functie sau o variabila este creata insa nu e folosita:

image.png.57f785f90abb0286c8761578115834bf.png

Unii din voi probabil folosesc aiurea acest modificator, e posibil sa aveti functii pe care nu le folositi si nu le veti folosi niciodata si totusi nu sunteti anuntati de compiler.

  • Conditiile in loop

Conditiile din header-ul unei bucle (loop) sunt foarte importante, la mai multe iteratii se va simti diferenta dintre o conditie scrisa gresit si una scrisa corect, insa va dati seama daca aveti mai multe bucle scrise aiurea apelate de mai multi playeri odata? Sigur se va simti.

for(new i; i < GetPlayerPoolSize(); i++ ) {  
    // ceva
}

* GetPlayerPoolSize se va efectua la fiecare iteratie, la un numar mare de iteratii se observa diferenta.


for(new i, j = GetPlayerPoolSize(); i < j; i++ ) {
    // ceva
}

* GetPlayerPoolSize se va efectua doar la prima iteratie.

  • Creearea variabilelor intr-un loop
for(new i; i < GetPlayerPoolSize(); i++ ) { 
	new count;
	if(IsPlayerAdmin(i))
		count++;
}

Nu e corect sa initializam o variabila in interiorul unui loop, ea va primi mereu valoarea 0 iar incrementarea de mai jos va fi degeaba, deoarece valoarea acestei variabile se va reseta la urmatoarea iteratie, varianta corecta:

for(new i, count; i < GetPlayerPoolSize(); i++ ) { 
	if(IsPlayerAdmin(i))
		count++;
}
  • Cum aflam linia unde a fost apelata o functie

Ca exemplu vom folosi functia CreateVehicle. Sa zicem ca aveti un timer ce creaza o masina intr-o anumita locatia insa voi nu stiti care din el e, putem afla foarte usor linia unde este apelata functia CreateVehicle folosind directivele pre-processor pentru a crea un macro:

#define debug_CreateVehicle(%0, %1, %2, %3, %4, %5, %6, %7) printf("** debug_CreateVehicle called on line %d", __line), CreateVehicle(%0, %1, %2, %3, %4, %5, %6, %7)

Cand functia CreateVehicle va fi apelata se va afisa mesajul respectiv in consola.

 

(!) Pe parcurs voi mai adauga cateva informatii.

Link to comment
Share on other sites

  • L0K3D pinned and unpinned this topic

Nice tutorial.

 

vldgIri.png

YouTube : Click Redirect Channel

Discord : Arabu#9330

Canal Discord : Click To Join

Facebook : Click Facebook

Instagram : Click Instagram

Skype : Mita.Official

Așteptăm jucatorii de PUBG Mobile și pe serverul de Discord PUBG Mobile România!

Join PUBGM România

Respectă și vei fi respectat !

 

 

 

 

Link to comment
Share on other sites

  • 2 months later...

hmm, chiar e destul de interesant ai +1 vtm

    _________________________________________________
    |                                                        _________             |
    |    |    /          /|        |\            |      /                   \          |
    |    |  /        /   |          |  \          |      |                              |
    |    |/       /     |           |    \        |      |                              |   
    |    |\              |           |      \      |      |        _____            |
    |    |  \            |           |        \    |      |                 \           |
    |    |    \          |           |          \  |      |                   |          |
    |    |      \        |           |            \|      \_________/           |
    |_______________________________________________|

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...