Jump to content

WiDuAlK

V.I.P
  • Posts

    1,338
  • Joined

  • Last visited

  • Days Won

    94

Everything posted by WiDuAlK

  1. la OnPlayerConnect se pune textdraw-ul, verifica daca faci corect Show, daca nu, refa.
  2. ai cumva publicul OnPlayerRequestClass? daca da, sterge-l
  3. WiDuAlK

    Help me

    la dialog pune: if(dialogid == DIALOG_MEMBERS1) { if(response) { new index; if(index++ == listitem) { new id = GetPlayerID(PlayerInfo[index][pSelected]); PlayerInfo[index][pFACWarns] += 1; SCM(index,-1,"+1"); } } }
  4. Acel GM postat de @WopsS e o varianta foarte veche si neoptimizata. Din cate am inteles a facut mai multe versiuni, dar pe aceasta a reusit sa o posteze. Iti sugerez sa pornesti de aici: si sa incepi pas cu pas crearea si optimizarea propriului GM. In semnatura mea ai mai multe tutoriale pe care le poti folosi pe acel register-login.
  5. Salut. Cea ce ceri tu nu iti va face nimeni. De ce? Pentru ca tu vrei sa iti facem noi cea ce tu trebuie sa faci. Aceasta cerere, dupa mine, este absurda, ca si multe altele de aici. Iti sugerez sa cauti fiecare linie ce apartine de pLeader, pMember, pRank si restul variabilelor ce tin de factiune si sa le stergi, apoi sa iti faci singur factiunile.
  6. La multi ani, Known amice, sper sa te bucuri de ziua ta, sa mananci tort si pentru noi, iti urez cu drag sa-ti pice netul si sa iti faca PC scurtcircuit. Si sper sa ne vedem la o cu multa sanatate!!! You friend WiDuAlK!!!
  7. Salut SA-MP.RO, am venit cu un alt tutorial, posibil sa fie ultimul de acest tip/gen. Acest tutorial l-am scris acum foarte mult timp, dar pentru ca am vazut ca tutorialele mele sunt copiate fara a fii macar gandite sau intelese, nu l-am mai postat. Pentru acest fapt cred cred ca e ultimul tutorial legat de construirea unui GM. Deci sa incepem. Dupa cum zice si titlul "Cum sa faci un PayDay". Payday inseamna plata zilei. Am sa va arat 2 metode de a face payday. Prima metoda este cea UNIVERSALA. Aceasta metoda se aplica odata pe ora, la o ora fixa de exemplu: 9:00, 10:00, 11:00, 12.00, 13:00, 14:00 etc. A 2-a metoda este de a face payday INDIVIDUAL. Individual in sensul ca jucatorul trebuie sa joace timp de o ora pe server ca sa primeasca payday. Va putea primi payday in orice minut al zilei. Aceasta depinde cat sta pe server , si cat va juca pe server. Ne vom folosi de ACEST TUTORIAL Am sa definesc pentru ambele metode o variabila care o vom folosi. Mergem la enumul pInfo si punem: enum pInfo { // variabilele voastre pPayday }; Apoi mergem la callback-ul OnLogin si punem la verificarea "if(rows)": public OnLogin(playerid)// facem publicul { new rows, fields,temporar[200]; cache_get_data(rows, fields); if(rows) { // extragerile voastre P_Data[playerid][pPayday] = cache_get_field_content_int(0, "PayDay"); } ... } METODA I(metoda Universala) Facem un nou callback numit Payday: Avem nevoie si de include-ul foreach. forward Payday();// definim callback-ul public Payday()// facem public-ul { foreach(Player,i) { new ore, minute, secunde;// facem variabilele de timp gettime(ore, minute, secunde);// definim variabilele de timp, ore, minute si secunde conform ceasului if(minute == 0 && secunde == 0)// daca minutele sunt egale cu 0 { P_Data[i][pPayday] += 1;// dam tuturor jucatorilor un + payday mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `PayDay`='%d' WHERE `Nume`='%e'", P_Data[i][pPayday], GetName(i));// facem update tuturor jucatorilor mysql_query(handle, query);//trimitem update-ul in baza de date. } } return 1; } Acum, mergem la OnGameModeInit si punem un timer pentru a se aplica payday: public OnGameModeInit() { SetTimer("Payday", 1000, 1);// se verifica din secunda in secunda daca este timpul de payday sau nu. // liniile voastre return 1; } Explicatie: Conform ceasului, o ora are 60 de minute. al 60-lea minut este 00, adica 12:00- al 60-lea minut. Cand trece 60 de minute, adica este o ora fixa, atunci tuturor playerilor li se atribuie 1+ payday. Aceasta metoda nu este prea complicata, dar eu nu o folosesc, deoarece un jucator poate intra cu 5 minute inainte de a se da payday si ei vor primi la un + la fel ca jucatori care au jucat o ora intreaga. Pe partea cealalta, ei pot juca aproape o ora intrega si din cauza unor probleme personale, inchid jocul si pierd payday. Pentru a crea in baza de date noua variabila face-ti in felul urmator: Metoda 2(metoda Individuala) Aceasta metoda este mai recomandata, deoarece ei primesc pe merit un + la payday , nu odata pe ora, si nu vor pierde nimic. Facem variabila pLogin, pentru a verifica daca este conectat si logat. new pLogin[MAX_PLAYERS]; // aceasta variabila i se poate atribui tuturor playerilor de pe server Mergem la OnPlayerConnect si punem: public OnPlayerConnect(playerid) { pLogin[playerid] = 0; // cand se va conecta pLogin va avea valoarea 0 // liniile voastre return 1; } Mergem tot la enum-ul pInfo si punem: enum pInfo { // variabilele voastre pPayday, pTimePayday }; Mergem la callback-ul OnLogin si adaugam: public OnLogin(playerid)// facem publicul { new rows, fields,temporar[200]; cache_get_data(rows, fields); if(rows) { // extragerile voastre P_Data[playerid][pPayday] = cache_get_field_content_int(0, "PayDay"); P_Data[playerid][pTimePayday] = cache_get_field_content_int(0, "TimePayDay"); pLogin[playerid] = 1;// cand se va loga, pLogin va avea valoarea 1 } ... } Acum vom face un callback separat in care vom face un algoritm(o operatie matematica) in care vom seta timpul de payday. forward PaydayIndividual(); public PaydayIndividual() { new query[80]; // Cream query-ul cu care vom trimite mesajul in baza de date foreach(Player, i) { if(pLogin[i] == 1) { if(P_Data[i][pTimePayday] > 0) { P_Data[i][pTimePayday] --; mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `TimePayDay`='%d' WHERE `Nume`='%e'", P_Data[i][pTimePayday], GetName(i));// facem update tuturor jucatorilor mysql_query(handle, query);//trimitem update-ul in baza de date. } if(P_Data[i][pTimePayday] <= 0) { P_Data[i][pPayday] += 1; mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `PayDay`='%d' WHERE `Nume`='%e'", P_Data[i][pPayday], GetName(i));// facem update tuturor jucatorilor mysql_query(handle, query);//trimitem update-ul in baza de date. P_Data[i][pTimePayday] = 60 * 60; mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `TimePayDay`='%d' WHERE `Nume`='%e'", P_Data[i][pTimePayday], GetName(i));// facem update tuturor jucatorilor mysql_query(handle, query);//trimitem update-ul in baza de date. } } } return 1; } Adaugam un timer la OnGameModeInit pentru a fi activ: public OnGameModeInit() { SetTimer("PaydayIndividual", 1000, 1);// se verifica odata pe secunda daca jucatorul a stat pe server o ora. // liniile voastre return 1; } Si ca atunci cand jucatorul se inregistreaza pentru prima data, sa nu primeasca payday adaugam la dialogul de register: case DIALOG_REGISTER: { if(!response) return Kick(playerid); if(response) { if(!strlen(inputtext) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Introdu-ti o parola pentru a te inregistra pe server! \n", "Inregistreaza", "Exit"); GetPlayerIp(playerid, ip, sizeof(ip)); mysql_format(handle, query, sizeof(query), "INSERT INTO conturi (Nume, Parola, IP) VALUES ('%s', '%e', '%s')", GetName(playerid), inputtext, ip); mysql_tquery(handle, query); P_Data[playerid][pTimePayday] = 60 * 60; mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `TimePayDay`='%d' WHERE `Nume`='%e'", P_Data[playerid][pTimePayday], GetName(playerid));// facem update tuturor jucatorilor mysql_query(handle, query);//trimitem update-ul in baza de date. // liniile voastre.. } return 1; } Iar apoi facem in baza de date tabelele. ATENTIE: Daca va folositi de metoda universala, nu completati tabel cu TimePayDay. EXPLICATIE: Atunci cand jucatorul se in registreaza, el primeste 60 * 60 = 3600 secunde = 60 minute. In timp ce este conectat i se scade secunda cu secunda jucatorului. Cand ajunge la secunda 0, adica cand a stat pe server 60 minute, primeste PayDay. Daca vreti sa vedeti cate minute mai sunt pana la urmatorul payday faceti un format de genu: format(string, sizeof(string), "Mai ai %d minute pana la urmatorul payday.", P_Data[playerid][pTimePayday] / 60); Impartim la 60 pentru a ne da un rezultat de 60 de ori mai mic, iar pentru ca avem intenger si nu float ne va da rezultatul rotunjit. Exemplu, noi mai avem 3100 secunde pana la urmatorul payday, impartim 3100 / 60 = 51,66666666(6 in perioada), iar pentru ca avem intenger ne va rezulta: 51, deci 51 minute pana la urmatorul payday.
  8. CreatePlayerTextDraw e pentru jucator. Daca ai nevoie sa aplici jucatorului o folosesti, si trebuie sa pui nla OnPlayerConnect. De ce? Pentru ca e mai optim sa se aplice fiecarui jucator cand e apelata functia, decat sa treaca prin toti jucatorii, apoi sa se aplice cand e apelata.
  9. Urmatoarea descriere am aflat-o acum ceva timp, dar am observat de-alungul timpului ca oamenii nu stiu sa o foloseasca, asa ca hai sa ii dam drumul. Azi am invatat cum se manipupleaza string-ul in mai multe cazuri. Trebuie sa definim un string. new string[100]; il fac de 100 , nu e neaparat sa il fac atat de mare. Sa spunem ca avem nevoie de un mesaj simplu. Il scriem in felul urmator. format(string, sizeof(string), "Mesajul meu este acesta."); SendClientMessage(playerid, culoare, string); Acesta este un mesaj simplu facut cu string. Desi folosit, multi nu inteleg modul de gandire pe care il are functia. format(string, sizeof(string), "MESAJ"); string = "MESAJ" Bun , dar noi putem defini si asa: new string[] = "mesaj"; scopul string-ului este de a marca in mesaj niste specificatii. de exemplu, nu putem face: new string[] = "ID-ul tau este %d", playerid; compilatorul ne va atentiona ca este eroare. Acum , sa spunem ca sunteti pe server, iar ID vostru este "3". Vom specifica cu format ID vostru: format(string, sizeof(string), "ID-ul tau este %d", playerid); SendClientMessage(playerid, -1, string); In acest caz: string = "ID-ul tau este 3" De aceea folosim string-ul, pentru ca altfel nu putem marca specificatiile. Dese ori am vazut ca se foloseste strcat pentru a scrie mesaje unele sub altele. Aceasta metoda, cea cu strcat, nu este la fel de sigura ca si format. Pentru a folosi aceasta metoda trebuie sa stiti cum se concepe: format(string, sizeof(string), " Primul mesaj \n"); format(string, sizeof(string), "%s Al 2-lea mesaj \n", string); format(string, sizeof(string), "%s Al 3-lea mesaj \n", string); SendClientMessage(playerid, culoare, string); ATENTIE: Pentru a afisa cele 3 mesaje , dupa primul string puneti '%s', iar ca specificatie puneti 'string'. Daca nu puneti cele 2, nu o sa primiti decat primul mesaj. Acelasi lucru putem face si in cazul dorim sa face un dialog de ori ce tip, eu voi prezenta MSGBOX, dar e la fel pentru orice tip de dialog. format(string, sizeof(string), " Primul mesaj \n"); format(string, sizeof(string), "%s Al 2-lea mesaj \n", string); format(string, sizeof(string), "%s Al 3-lea mesaj \n", string); ShowPlayerDialog(playerid, DIALOG, DIALOG_STYLE_MSGBOX, "Titlu", string, "Buton1", "Buton2");
  10. Pentru ca am vazut ca v-ati plans uni dintre voi ca primiti erori... era foarte simplu de rezolvat, dar daca nu ai cu cine.... am rezolvat si modificat. Bucurati-va de tutorial.
  11. De ce l-ai scoate de pe mysql? Nu stii cum se foloseste, cauta tutoriale. E mai simplu decat dini, dar si mai stabil. Ca sa treci de la mysql la dini trebuie sa cunosti foarte bine dini si sa transformi load si insert de la myql in dini.
  12. Ca sa nu stai sa stergi fiecare cont sau orice data apasa pe Empy(Golire) si se sterge tot ce contine acel tabel.
  13. Simplu. In timpul in care am jucat pe diferite servere, nu gaseam un server care sa imi placa si de aceea le schimbam des. Cand jucam, jucam numai in mafii, bine inteles eram lider imi aduceam colegii si intram peste alte mafii si faceam DM. Masini si case am detinut, deci stiu ce ar trebui sa contina, dar business nu am avut. Nu cunosc tot ce trebuie sa contina un server, este un avantaj si un dezavantaj. Avantajul este ca ma pot inspira de unde vreau eu, dezavantajul este ca GM-ul poate avea lipsa de siteme necesare cu care jucatorii de sa-mp s-au obisnuit. De exemplu, in afara de /cuff , /arrest si inca vro 2 comenzi de la PD nu cunosc nici o comanda, la fel si la alte factiuni, pentru ca nu am intrat decat in mafii si ce am mai auzit. Joburile de la serverele jucate nu-mi plac, de aceea voi face eu ceva frumos. Am cam depasit subiectul dar in fine, astept idei si lamuriri in privinta tipurilor de business-uri. La banca m-am lamurit, voi face eu ceva interesant, gun shop la fel, ce business-uri mai trebuie facute? Bai, idea e ok, dar e o chestie, anume ca nu prea pot face multe, gandindu-ma ca suma respectiva de bani fiind atinsa fiecare jucator isi va crea un job, dar, din acel job trebuie sa scoata bani. Daca sunt multe joburi, multe vor fi inutile... De aceea prefer sa fac eu 30-40 joburi dar benefice.
  14. Salut stimati membri sa-mp.ro, doresc sa ma ajutati cu niste informati. Experienta mea de jucator San Andreas Multi Player este una limitata, asa ca m-am gandit sa intreb aici ce e cu acest business system? Ce relevanta are el defapt? Din cate am vazut... business-urile sunt niste teleportari care mananca bani... in rest nimic.... nu am detinut pe vremea cand eram jucator nici un business... Poate imi puteti spune inafara de ce trebuie sa contina sistemul, ca a il pot creea, cateva idei noi care crede-ti ca ar fi interesante. Multumesc pentru atentie.
  15. E mult mai ok din diferite motive. Si eu foloseam de cativa ani Notepad++ , dar am vazut ca nu toti stiu de el, si chiar l-ar aprecia. PawnPlus l-am testat si e destul de OK, dar am inteles ca va fi refacut si imbunatatit, oricum are multe lucruri de imbunatati din punctul meu de vedere, lucruri pe care Notepad++ le are. Daca va iesi reusit , cred ca il voi folosi, dar momentan Notepad++ e super folositor.
  16. Salut SA-MP.RO. Vreau sa va arat cum puteti folosi Notepad ++ ca si compilator. Pe langa design-ul atractiv pe care il are, usurinta prin care poti selecta proiectele si varietatea de optiuni pe care le poti folosi(ex: combinatia de taste pentru compilare sau pentru orice actiune), auto-completarea mai este si multithreading. Ce este multithreading? Este abilitatea unui program/sistem de operare imparte actiunile la fiecare thread, acestea executandu-se mai repede. Daca ati observat, folosind PAWNO ca si compilator, daca aveti un numar mare de linii, compilatorul va da Non Responding, blocandu-se pentru o perioada mai mica sau mai mare de timp. Motivul pentru care se blocheaza este anume ca foloseste 1 singur thread, deci este single-thread. Notepad ++ nu va avea aceasta problema. Deci sa incepem In primul rand aveti nevoie de Notepad ++ https://notepad-plus-plus.org/download/v6.8.8.html Veti avea nevoie de 2 fisiere: userDefineLanguage.xml - pentru a evidentia limbajul si PAWN.xml - pentru design-ul limbajului. Am facut un winrar cu cele 2 fisiere. http://www.solidfiles.com/d/06d48873e9/ Pentru a nu exista discutii, am pus si virustotal: https://www.virustotal.com/ro/file/2a0688d8ef14a4804060c2433d3f2fad42b3fc7cc4595e415ad2488ccf850cf4/analysis/1452888736/ Acum ca avem tot ce e necesar, instalati Notepad ++ , intalarea este simpla Next>Next>Next> bifati sa se creeze pe desktop si finalizati instalarea. Acum intrati in My Computer si scrieti %appdata%\Notepad++: Introducem fisierul userDefineLanguage.xml Acum mergem in folderul instalarii Notepad ++ In folderul APIs Introducem PAWN.xml Acum mergem la Setari > Preference Asociem filele .pwn Executam auto-completarea , ATENTIE!!! bifati From 3 th character, pentru a executa auto-completarea la 3 caractere scrise Acum vom cauta plugin-ul care ne va ajuta la compilare: Bifam si instalam NppExec: Dupa ce instalati va necesita sa inchideti si sa redeschideti programul. Acum v-a trebui sa mergem la plugin-ul NppExec pentru a bifa No internal message. De ce? Pentru ca vor aparea mesaje inutile, si noi nu dorim acest lucru. Vom merge si vom face un folder cu Pawno. In acest folder vom adauga include-urile cu care vom compila orice fisier .pwn. De obicei eu il pun in Local Disk D. Pe urma v-a trebui sa ii luam adresa din Local Disk-ul in care se afla folderul Pawno. Mergem la plugin NppExec>Executare: Apoi introducem codul acesta: Apoi dati save si dati un nume, de preferat Pawn Compilator: Pentru a activa codul precedent mergem la Advanced Options: Bifati ca in imagine si dati OK: Setarile sunt realizate, acum va trebui sa bifam 2 chestii: 1) Mie personal imi place sa ma folosesc de F3 si F4 in cautarea unei denumiri. F3 e definit, dar F4 nu este setat pe back search. Asa ca il vom seta. 2) Vom seta tastele de pe care vom compila. Mie mi se pare confortabil sa compilez de pe CTRL + ALT + F5. Pentru ambele setari vom face in felul urmator: Mergem la Setari> Shoutcut Mapper: Vom modifica in felul urmator: Apoi mergem la Plugin Comands , iar la linia 35 vom gasi PAWNO Compilator: Si vom configura combinatia de taste pe care o vom face la compilare: Odata ce ne-am configurat Notepad ++ , recomandat ar fi sa folosim Zeex's Compilator. Este acelasi compilator folosit din totdeauna DAR este configurat de Zeek's care a rezolvat niste probleme, deci l-a imbunatatit. Link: http://forum.sa-mp.com/showthread.php?p=2768123 Mergem la Download> Executables Only iar dupa ce descarcam dezarhivam in folderul cu PAWNO pe care l-am facut anterior. Dezarhivati acolo si dati Copy and Replace. Nota: Dupa ce a-ti executat toti pasii compilati un fisier .pwn. Dupa ce compilati, adaugati niste caractere aiurea prin GM gen: apoi compilati. IN CAZ CA NU PRIMITI ERORI MERGETI LA Plugins > NppExec > BIFATI: Save all files on execute. Atentie: Inainte de a modifica combinatia de taste inchideti si deschideti programul pentru a-si face load la setarile facute. In caz ca nu se incarca plugin-urile dati inchideti si deschideti programul apoi cautati din nou. IN CAZ CA NU PUTETI INSTALA SAU GASI NPPEXEC LASATI REPLY SI IAR EU VOI RASPUNDE. Cam atat cu acest tutorial, multumesc pentru atentie!
  17. Problema poate fi caci tu posibil nu ai adaugat probabil ip... , pt ca ai query-ul cu ip si posibil in baza de date nu.
  18. Nu il ai mysql, asta nu conteaza, tu faci cum ti am zis, ii dai o culoare si e exact ca acolo, daca nu te pricepi, iti sugerez sa incetezi cu edit ul si sa iti continui viata de jucator de SA-MP.... si sa lasi scriptingul.
  19. Pt ce promiti? Inveti pentru mine, imi faci mie sisteme? NU. Inveti pentru tine, si oricum daca iti fac, degeaba fac asa ca mai bine nu imi bat capul. Ai 48 ore la dispozitie sa te ajute cineva, daca nici un membru/moderator nu raspunde in cele 48 ore topicul va fi inchis.
  20. Pai no? Aveti la topicul de la discutii scripting facut de Mister(chiar primul topic, e pin) cateva notiuni in + despre functii si timpul de executie, am testat si prezentat cu argumentele necesare pentru sustine unele idei.
  21. multumesc colega, apreciez >:D< Merci, dar vorbeste la persoana a 2 pronume personal(tu) nu sunt asa in varsta sa imi pui "dumneavoastra"
  22. Verifica locatia cnn cu ifplayerinrangeofpoint, pune un format cu textul introdus in chat, aplica sendclientmessagetoall , nu uita sa pui la comanda parametru de text. In alcatuirea parametrilor iti recomand sscanf by y_less.
  23. Prietene, mentionez ca nu am absolut nimic cu tine si sper sa iti dea de gandit ce o sa iti spun acum. Tu efectiv nu cred ca stii un bob de scripting. Nu cred ca distingi un array de un bool sau un float. Nu ai habar cu ce se mananca , dar vrei server.De ce? Bun, sa trecem peste asta, tu ceri sa iti facem noi anumite lucruri. Tu nu incerci nimic, postezi intr-o sectiune gresita(topicurile de genu se posteaza la discutii scripting) si vrei sa mai fi si ajutat. Invata basic ul de pe wiki, din tutoriale, aplicale, deschide un fisier new.pwn si acolo joaca-te cu functiiile de pe wiki apoi testeaza. Invata mysql, invata sa te joci cu variabilele, sa le manipulezi, sa iti faci sisteme singur. Unde nu stii, arunca un ochi intr un GM de pe aici, si vezi cum a fost facut respectivul cod, intelege-l apoi reprodu-l. Daca ar fi o reteta a succesului ar fi aceasta: Invata Aplica Testeaza Sterge Refa Alplica iarasi Sterge Reconstruieste Si repeta pasii pana iti iese bine, asa inveti concret, nu sta si astepta sa iti faca alti, poate doar sa iti dea un sfat. Si ca sa nu ma abat de la topic: Creaza obiectul respectiv, defineste-l, verifica daca playerul care vrea sa il mute(coboare poarta) detine bizz ul respectiv, daca detine muta obiectul, daca nu pune return 0; Acesta a fost un pont, nu iti fac eu nici un script.
  24. Bun , sa clarificam: OPTIMIZÁRE, optimizări, s. f. 1. Alegerea și aplicarea soluției (economice) optime (dintre mai multe posibile). 2. (Mat.) Raționament sau calcul care permite găsirea valorilor unuia sau mai multor parametri corespunzând maximului unei funcții. – Cf. fr. optimiser, optimisation. In sa-mp optimizarea este procesul prin care faci un cod sa fie mai rapid la executare. Am facut niste teste: 1) Variabila normala este mai rapida decat array. Sa zicem ca avem nevoie de 3 variabile de pozitie pentru GetPlayerPos, sunt 2 cazuri: fie definim un array: new Float:Pos[3]; GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]); fie definim 3 variabile: new Float:PosX, Float:PosY, Float:PosZ; GetPlayerPos(playerid, PosX, PosY, PosZ); La prima vedere, e mai simplu sa ne folosim de array(cel putin asa am crezut eu), un mic test pe care l-am facut foarte recent legat de viteza array si viteza variabilei normale este: [21:32:49] Speed Test NORMAL VARIABLE 31550 [21:34:07] Speed Test ARRAY TEST 77967 [21:34:31] Speed Test NORMAL VARIABLE 24034 [21:35:11] Speed Test ARRAY TEST 39904 [21:35:35] Speed Test NORMAL VARIABLE 24056 [21:36:15] Speed Test ARRAY TEST 39867 [21:36:39] Speed Test NORMAL VARIABLE 24163 [21:37:14] Speed Test ARRAY TEST 35011 [21:37:36] Speed Test NORMAL VARIABLE 22375 [21:38:13] Speed Test ARRAY TEST 36687 Concluzie: Array este mai lent decat variabila normala. 2) SWITCH este mai rapid decat if(ceva = altceva) O sa dau cateva exemple: Sa presupunem ca avem nevoie sa ne folosim de OnDialogResponse: enum { Dialog1, Dialog2 }; public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { return 1; } putem accesa cele 2 dialoguri in felul urmator: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == Dialog1) { } if(dialogid == Dialog2) { } return 1; } sau public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case Dialog1: { } case Dialog2: { } } return 1; } putem accesa in acest fel si lista dialogurilor de la tipul: DIALOG_STYLE_LIST public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case Dialog1: { switch(listitem) { } } case Dialog2: { switch(listitem) { } } } return 1; } tot in acest fel putem accesa si butonul selectat: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case Dialog1: { switch(response) { switch(listitem) { } } } case Dialog2: { switch(response) { switch(listitem) { } } } } return 1; } Nu doar OnDialogResponse poate fi accesat asa: varianta 1: forward Functie(parametru, tip) public Functie(parametru, tip) { if(tip == ceva) { } if(tip == ceva2) { } return 1; } varianta 2: forward Functie(parametru, tip) public Functie(parametru, tip) { switch(tip) { } return 1; } Am testat diferenta intre switch si if(ceva == altceva) Rezultatele testelor mele sunt: [21:59:24] Speed Test if(i = ceva) 7713 [21:59:27] Speed Test switch 2537 [21:59:34] Speed Test if(i = ceva) 7475 [21:59:37] Speed Test switch 2430 [21:59:44] Speed Test if(i = ceva) 7471 [21:59:47] Speed Test switch 2431 [21:59:54] Speed Test if(i = ceva) 7558 [21:59:57] Speed Test switch 2423 [22:00:05] Speed Test if(i = ceva) 8645 [22:00:09] Speed Test switch 3683 CONCLUZIE: SWITCH ESTE MAI RAPID DECAT IF(CEVA == ALTCEVA) 3)SetPVarInt vs variabila normala Am vorbit cu stuntman candva si imi spuse ca poti optimiza scriptul cu SetPVarInt/GetPVarInt Am testat si teoria lui, iar rezultatul testelor mi-a dat: [22:17:11] SetPVarInt TEST : 4743 [22:17:15] normal variabile TEST : 4119 [22:17:19] SetPVarInt TEST : 4078 [22:17:22] normal variabile TEST : 3282 [22:17:26] SetPVarInt TEST : 3937 [22:17:29] normal variabile TEST : 3065 [22:17:33] SetPVarInt TEST : 3643 [22:17:36] normal variabile TEST : 2869 [22:17:40] SetPVarInt TEST : 4734 [22:17:44] normal variabile TEST : 3464 [22:17:47] SetPVarInt TEST : 3545 [22:17:50] normal variabile TEST : 2708 [22:17:55] SetPVarInt TEST : 4792 [22:17:59] normal variabile TEST : 4543 Am testat si marimea fisierului, iar SetPVarInt stocheaza mai multa memorie decat variabila definita cu new. 4)ENUM VS #DEFINE Am testat si cele 2 functii ale limbajului pawn: [23:11:19] Timp scurs(enum): 2086 [23:11:21] Timp scurs(define): 1808 [23:11:23] Timp scurs(enum): 2050 [23:11:25] Timp scurs(define): 1937 [23:11:27] Timp scurs(enum): 1953 [23:11:29] Timp scurs(define): 1868 [23:11:31] Timp scurs(enum): 2034 [23:11:33] Timp scurs(define): 1837 [23:11:35] Timp scurs(enum): 2150 [23:11:37] Timp scurs(define): 1937 Desi define este mai rapid putin decat enum, recomandat pentru dialoguri este enum pentru a nu se incurca dialogurile intre ele. 5)Diferenta intre small si large array Am testat si diferentele intre 2 array-uri, unul de 2000 si unul de 200: new array[2000]; vs new array[200]; Timpul de executie pentru cele 2 array-uri: [23:14:50] Timp scurs(array large): 3254 [23:14:51] Timp scurs(array small): 616 [23:14:54] Timp scurs(array large): 3469 [23:14:55] Timp scurs(array small): 876 [23:14:59] Timp scurs(array large): 3856 [23:15:00] Timp scurs(array small): 746 [23:15:12] Timp scurs(array large): 12562 [23:15:15] Timp scurs(array small): 3190 [23:15:38] Timp scurs(array large): 22416 [23:15:43] Timp scurs(array small): 5344 Pe langa timpul scurs, array large(cel de 2000) are marimea mai mare decat array small(array 200). Am testat si for vs while, si dupa ce le-am comparat dar dupa ce le-am comparat, am vazut ca variaza timpul intre cele 2, si pe rand timpul pentru for devine mai mare si mai mic decat cel al lui while, deci sunt instabile, si cam egale ca viteza. Am adus dovezi concrete legate de optimizare. Nu am reusit sa compar iteratia facuta cu foreach si loop-ul normal facut de for, dar din cate am inteles foreach e mai rapid decat for. Acestea fiind spuse, sper ca am mai lamurit, daca aveti intrebari sau vreti sa compar ceva dati reply iar eu voi face cu mare placere.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.