Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 03/02/2021 in all areas

  1. L0K3D

    Tutorial - Tips & Tricks

    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: 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: 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.
    1 point
This leaderboard is set to Bucharest/GMT+03:00
×
×
  • Create New...