Jump to content

Optimizare. (sugestii / parerii).


Recommended Posts

Salut. Astazi o sa aducem in discutie una dintre cele mai discutate lucruri legate de script, Optimizarea.

- Ei bine cum am putea noi să optimizăm un gamemode? Ce metode ar putea fi pentru aceasta?

- Ei bine dragilor, time-ul (timerele, task-urile, gettime-urile), etc, in mare partea, timpul conteaza foarte mult, pe baza unui gamemode.

- Am facut acest topic pentru că doresc să aud si alte păreri inafară de ale mele, eu fiind nou aici, chiar mutat, unii, in mare parte ati auzit de mine, altii nu (sunt oleaca cam bătrân). :)

- Well, in fiecare zi primesc noi mesaje, spre exemplu, m-ai putea ajuta să scriptez? eu făcând o serie de live-uri pe youtube, acum o lună, 2.. 

- (Q) Ce scriptai?

- (R) Am undeva la 33 de live-uri puse pe privat, am inceput un gamemode de la 0, continand cateva variabile globale, restul a fost, după părerea mea cât se poate de clean.

- 1. In primul rând vreau să încep cu array-urile, să zicem că avem nevoie de comanda /mark si /gotomark. Ei bine, avem 2 solutii, fie definim new Float: thePos[3], Ori fie new Float: x, Float: y, Float: z;

- Au fost discutii si discutii despre optimizarii, puteti vedea asta si pe comunitate, la acel an (2015-2016) eram si eu pe atunci un ușor avansat.

- Ei bine da, este adevărat ca un array consumă mai mult decât o variabilă normală. Deci o sa ne folosim de x,y,z.

- 2. s/pVar-urile sau variabila normala? Este adevărat, si asta nu are rost să negăm, toti am crezut la un moment dat că var-urile ajută mai mult la performanta gamemode-ului / sau la întărirea acestuia. Ulterior, diferentele s-au văzut, nu era mai performantă ca o variabilă normală. Dar asta tot nu ne împiedică să le folosim, cel putin pe mine ! :)

- Small array sau large/big array?! Hm, toti am facut greseala de a face mari array-urile la inceput, asta este drept, nu are rost să folosesti mai mult de 144 de caractere (cât duce chat-ul, si credeți-mă, chiar nu e nevoie, cel putin eu nu am întâlnit acest caz, very useless). De ce ai folosi 256 de caractere la un mesaj de tip: Welcome to Etadon RPG! Please tap your password in the case.

- Nu vreau să par crazy, dar să stiti ca pentru asta, ar fi mai bine să numărati caracterele, si să puneti cât este necesar.

- By the way, 0 = numar null, exemplu: W = litera 0, e = litera 1. Tineti cont de asta.

- 3. Define sau enum?!  Ei bine da, define-ul este little more faster, enum-ul este formatat astfel încât să nu incurci dialogurile, exemplu: #define alextare 112, #define alextare112, 2 define-uri, acestea pot duce la oprirea compilarii sau probabil la ceva errori, in alte locatii.

- 4. Dialogurile, if sau switch?! Ei bine, stiintific, switch este mai rapid din orice punct de vere, pentru că vedeti voi, sau hai mai bine să vă dau un exemplu, si ca design, si ca utilitate. Avem nevoie de un mesaj, aici o sa intervin cu librăria YSI.

- new mesaj[2]; switch(playerVariables[ x ] [ pVIP ] == 1) { 

case 0: mesaj = "nu"

case 1: mesaj = "da"

}

va_SendClientMessage( x , "cont vip: %s", mesaj);

- 5. Nu are rost sa faceti o noua functie (forward, public), daca o utilizatii doar o dată (vorbesc din experiență), încercați să evitații acest lucru.

- 6. OnPlayerUpdate - ei bine, aceasta functie se executa la absolut fiecare update al jucatorului (de x ori intr-o secunda), eu sincer, prefer chiar să n-o folosesc absolut deloc, pentru că dacă ai sa zic, 100 de jucatori online, performantele se vor vedea destul de eficient..

- 7. Evitarea folosirii timerelor / task-urilor direct, spre exemplu sunt foarte multe metode pentru a evita asta, să nu vorbim de loop-uri că nu vreau să aud de ele.

- 8. IsPlayerConnect - Ahm.. Daca esti deja conectat, de ce ai face incă o verficare ca să vezi daca acel jucator e conectat?..

- 9. Evitarea callback-urilor, loop-urilor, iar ceea ce poti face doar la un jucator, recomand ptask, am vazut foarte multii cum pur si simplu creeaza un task doar ca să formateze o actiune. :)

- 10. Primesc multe mesaje, cu text-ul, dacă lucrezi pe module, totul va fi mai ok, va fi mai bine? va duce server-ul mai multii jucatorii?! Ei bine, nu. Totul va fi la fel, doar că acesta este modul meu de a lucra, nu are nimic de a face.

11. Procesorul de comenzii! Hmm, inca mai tin minte acum 3 ani cand ma laudam cu dc cmd, what a time, anyway, din cate stim totii, nu am putea să proclamăm încă un top 1 procesor de comenzii. Bătălia se lasa intre y_commands si Pawn.CMD.

- Sincer să fiu, eu ma multumesc foarte bine cu pawn cmd, y_commands e doar dacă vrei ceva mai multe functii. Intotdeauna am fost bazat pe Simplitate, Optimizare și stil.

- Râdem, glumim, f^tem plătim. Nu trebuie să tii cont de toate functiile posibile. Optimizare vine din părtii, si vine chiar de unde nu te astepti. (putin de aici, putin de acolo), cel putin, asta am realizat eu in anii petrecutii.

- Time-ul este cel mai important in fata optimizarii, acolo e cheia, btw, un consum de kb nu inseamna nimic dacă tu stii că gamemode-ul va suporta si îndura. Deci daa, urmăresc de mult discutii cu scripterii ăstia si mai noi, si mai vechi, ma tot consultam cu AlexRap, cu souund cu baietii, daca vreti in smecheri geng, imi ziceti si gen va bag, discord.io/aleksanderadv. Astept noii parerii / sugestii dragilor! Va pup, cu stima si respect, Alexandru al vostru.

Edited by AleksanderAdv
  • Confused 1
Link to comment
Share on other sites

Acum 1 oră, AleksanderAdv a spus:

Salut. Astazi o sa aducem in discutie una dintre cele mai discutate lucruri legate de script, Optimizarea.

- Ei bine cum am putea noi să optimizăm un gamemode? Ce metode ar putea fi pentru aceasta?

- Ei bine dragilor, time-ul (timerele, task-urile, gettime-urile), etc, in mare partea, timpul conteaza foarte mult, pe baza unui gamemode.

- Am facut acest topic pentru că doresc să aud si alte păreri inafară de ale mele, eu fiind nou aici, chiar mutat, unii, in mare parte ati auzit de mine, altii nu (sunt oleaca cam bătrân). :)

- Well, in fiecare zi primesc noi mesaje, spre exemplu, m-ai putea ajuta să scriptez? eu făcând o serie de live-uri pe youtube, acum o lună, 2.. 

- (Q) Ce scriptai?

- (R) Am undeva la 33 de live-uri puse pe privat, am inceput un gamemode de la 0, continand cateva variabile globale, restul a fost, după părerea mea cât se poate de clean.

- 1. In primul rând vreau să încep cu array-urile, să zicem că avem nevoie de comanda /mark si /gotomark. Ei bine, avem 2 solutii, fie definim new Float: thePos[3], Ori fie new Float: x, Float: y, Float: z;

- Au fost discutii si discutii despre optimizarii, puteti vedea asta si pe comunitate, la acel an (2015-2016) eram si eu pe atunci un ușor avansat.

- Ei bine da, este adevărat ca un array consumă mai mult decât o variabilă normală. Deci o sa ne folosim de x,y,z.

- 2. s/pVar-urile sau variabila normala? Este adevărat, si asta nu are rost să negăm, toti am crezut la un moment dat că var-urile ajută mai mult la performanta gamemode-ului / sau la întărirea acestuia. Ulterior, diferentele s-au văzut, nu era mai performantă ca o variabilă normală. Dar asta tot nu ne împiedică să le folosim, cel putin pe mine ! :)

- Small array sau large/big array?! Hm, toti am facut greseala de a face mari array-urile la inceput, asta este drept, nu are rost să folosesti mai mult de 144 de caractere (cât duce chat-ul, si credeți-mă, chiar nu e nevoie, cel putin eu nu am întâlnit acest caz, very useless). De ce ai folosi 256 de caractere la un mesaj de tip: Welcome to Etadon RPG! Please tap your password in the case.

- Nu vreau să par crazy, dar să stiti ca pentru asta, ar fi mai bine să numărati caracterele, si să puneti cât este necesar.

- By the way, 0 = numar null, exemplu: W = litera 0, e = litera 1. Tineti cont de asta.

- 3. Define sau enum?!  Ei bine da, define-ul este little more faster, enum-ul este formatat astfel încât să nu incurci dialogurile, exemplu: #define alextare 112, #define alextare112, 2 define-uri, acestea pot duce la oprirea compilarii sau probabil la ceva errori, in alte locatii.

- 4. Dialogurile, if sau switch?! Ei bine, stiintific, switch este mai rapid din orice punct de vere, pentru că vedeti voi, sau hai mai bine să vă dau un exemplu, si ca design, si ca utilitate. Avem nevoie de un mesaj, aici o sa intervin cu librăria YSI.

- new mesaj[2]; switch(playerVariables[ x ] [ pVIP ] == 1) { 

case 0: mesaj = "nu"

case 1: mesaj = "da"

}

va_SendClientMessage( x , "cont vip: %s", mesaj);

- 5. Nu are rost sa faceti o noua functie (forward, public), daca o utilizatii doar o dată (vorbesc din experiență), încercați să evitații acest lucru.

- 6. OnPlayerUpdate - ei bine, aceasta functie se executa la absolut fiecare update al jucatorului (de x ori intr-o secunda), eu sincer, prefer chiar să n-o folosesc absolut deloc, pentru că dacă ai sa zic, 100 de jucatori online, performantele se vor vedea destul de eficient..

- 7. Evitarea folosirii timerelor / task-urilor direct, spre exemplu sunt foarte multe metode pentru a evita asta, să nu vorbim de loop-uri că nu vreau să aud de ele.

- 8. IsPlayerConnect - Ahm.. Daca esti deja conectat, de ce ai face incă o verficare ca să vezi daca acel jucator e conectat?..

- 9. Evitarea callback-urilor, loop-urilor, iar ceea ce poti face doar la un jucator, recomand ptask, am vazut foarte multii cum pur si simplu creeaza un task doar ca să formateze o actiune. :)

- 10. Primesc multe mesaje, cu text-ul, dacă lucrezi pe module, totul va fi mai ok, va fi mai bine? va duce server-ul mai multii jucatorii?! Ei bine, nu. Totul va fi la fel, doar că acesta este modul meu de a lucra, nu are nimic de a face.

11. Procesorul de comenzii! Hmm, inca mai tin minte acum 3 ani cand ma laudam cu dc cmd, what a time, anyway, din cate stim totii, nu am putea să proclamăm încă un top 1 procesor de comenzii. Bătălia se lasa intre y_commands si Pawn.CMD.

- Sincer să fiu, eu ma multumesc foarte bine cu pawn cmd, y_commands e doar dacă vrei ceva mai multe functii. Intotdeauna am fost bazat pe Simplitate, Optimizare și stil.

- Râdem, glumim, f^tem plătim. Nu trebuie să tii cont de toate functiile posibile. Optimizare vine din părtii, si vine chiar de unde nu te astepti. (putin de aici, putin de acolo), cel putin, asta am realizat eu in anii petrecutii.

- Time-ul este cel mai important in fata optimizarii, acolo e cheia, btw, un consum de kb nu inseamna nimic dacă tu stii că gamemode-ul va suporta si îndura. Deci daa, urmăresc de mult discutii cu scripterii ăstia si mai noi, si mai vechi, ma tot consultam cu AlexRap, cu souund cu baietii, daca vreti in smecheri geng, imi ziceti si gen va bag, discord.io/aleksanderadv. Astept noii parerii / sugestii dragilor! Va pup, cu stima si respect, Alexandru al vostru.

Frumos tutorial, in opinia mea nu imi place si tot tutorialul este probabil luat de pe un alt site.

La experienta pe care zici ca o ai tutorialul este mult prea usor, de aici si idea ca l-ai copiat si ca tu de fapt nici nu scriptezi.

Ai raspuns intr-un topic cum ca un gamemode apare cu unknown cand e 'bum bum' in gm .. cand de fapt unknown iti iei in mare parte de la variantele diferite dintre plugin si .inc.

  • Upvote 1

Ce inseamna cuvantul "Unic" este atunci cand Chestia / Obiectul / Idea / etc... nu exista in alta parte.

Copii, nu mai veniti cu vorbe de "Am gamemode unic", nu exista asa ceva, la ora actuala totul este pe net.

Aveti grija pe cine ajutati, majoritatea sunt caini.

Link to comment
Share on other sites

"Buenos dias", de "KEY_SECONDARY_ATTACK" ce zici?

Am vazut 90% din GM-uri care au loop la case/biz/locatii cu peste 500 "IsPlayerInRangeOfPoint", ce se intampla la 200+ jucatori cand toti folosesc tasta F/Enter pentru a intra/iesi din vehicul, sau orice alta activitate?

Luati aminte.

Bun tutorial, 80% din script-urile de pe wiki/SA-MP Forum (strain, nu asta) n-au nici o treaba cu optimizarea.

Edited by Eyser
  • Upvote 2

The best of the best!

Awesome !!!

Link to comment
Share on other sites

Acum 5 ore, Eyser a spus:

"Buenos dias", de "KEY_SECONDARY_ATTACK" ce zici?

Am vazut 90% din GM-uri care au loop la case/biz/locatii cu peste 500 "IsPlayerInRangeOfPoint", ce se intampla la 200+ jucatori cand toti folosesc tasta F/Enter pentru a intra/iesi din vehicul, sau orice alta activitate?

Luati aminte.

Bun tutorial, 80% din script-urile de pe wiki/SA-MP Forum (strain, nu asta) n-au nici o treaba cu optimizarea.

pe burned e jale cu intrarea in masina loop de max vehiucle (2000) si intrarea case bizuri etc =))

Link to comment
Share on other sites

35 minutes ago, HPQ123 said:

pe burned e jale cu intrarea in masina loop de max vehiucle (2000) si intrarea case bizuri etc =))

Te cred...

========================

Puneti Pickup la orice intrare, folositi-va de "OnPlayerPickUpPickup" (este declansat cand sunteti in aprox. 2m* in preajma pickup-ului, nu cand intrati in el neaparat) si 2 variabile, setati ID-ul Pickup-ului in functie, pentru cealalta variabila aveti in vedere (CreatePickup) si setatii un ID unic sa stiti care locatie este si unde trebuie sa intre jucatorul.

Folositi-va dupa de un "switch" in "KEY_SECONDARY_ATTACK" si ati facut acest sistem de intrare/iesire din locatii foarte folosit, cu 90% mai rapid.

Pentru iesire se poate ceva asemanator, fara pickup necesar neaparat.

  • Like 1

The best of the best!

Awesome !!!

Link to comment
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.

×
×
  • 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.