Mini Optimizacija #1

1. Avg. 2020. Zaključano
1,569
pregleda
6
postova
Alhemičar v2
4
Shot Caller
1. Avg. 2020.
Mini Optimizacija #1


Ⅰ) Šta je ovo?
Ovako, planiram da započnem sa pisanjem "mini tutorijala" koje Vam mogu pomoći da rešite sve vaše probleme (gori sam od TOP Shop-a mjkm)
Ovo će biti uglavnom kratke greške koje budem pronalazio u većini objavljenih skripta a i možda se zavuče nešto što ne budete znali...


Ⅱ) Tema tutoriala
U ovo tutorialu sam izdovjio jednu grešku koja većina vas novih ovde pravi a to je (primer):
new nekiTajmer;

forward OgromanTajmer();

public OnGameModeInit()
{
SetTimer("OgromanTajmer", 1000, true);
}

public OnPlayerConnect(playerid)
{
nekiTajmer = 0;
}

public OgromanTajmer()
{
foreach(new i : Player)
{
if(nekiTajmer > 0) {
nekiTajmer --;
}
}
}

CMD:fixveh(playerid, params[])
{
if(nekiTajmer > 0) {
return SendClientMessage(playerid, -1, "Ovu komandu možete koristiti svakih 30 minuta!");
}
if(!IsPlayerInAnyVehicle(playerid)) {
return 1;
}

nekiTajmer = 1800;
RepairVehicle(GetPlayerVehicleID(playerid));

SendClientMessage(playerid, -1, "Popravili ste svoje vozilo!");

return COMMAND_OK; // YSI5
}

E sada, da se odmah razumemo, već sam pisao o ovome u jednim od prvih tutoriala koje sam otvorio na ovom forumu ali moram ponovo jer neki i dalje ovo ponavaljaju:
Vi u kodu gore pozivate tajmer svaku sekundu kako bi oduzeli vrednost varijabli za 1 po igraču, to znači da će se to izvršiti 1800 puta za 30 minuta (puta broj igrača kojem "teče" tajmer i da dodamo da se ovako loopuje kroz celu bazu igrača).
E sada, neki koriste ptask za ovo ali ne razumeju da je to samo wrapper koji je bukvalno isti kao SetTimerEx i da je efekat jednako loš.

Kako to možemo da uradimo?
new nekiTajmer;

CMD:fixveh(playerid, params[])
{
// Ako je trenutno vreme koje gettime() vrati manje od onog vremena koje smo dodelili varijabli
if(gettime() < nekiTajmer) {
return SendClientMessage(playerid, -1, "Ovu komandu možete koristiti svakih 30 minuta!");
}
if(!IsPlayerInAnyVehicle(playerid)) {
return 1;
}

nekiTajmer = gettime() + 1800; // Trenutno vreme (u sekundama) PLUS 1800 sekundi (30 minuta)
RepairVehicle(GetPlayerVehicleID(playerid));

SendClientMessage(playerid, -1, "Popravili ste svoje vozilo!");

return COMMAND_OK; // YSI5
}

// Evo jos jedan primer ukoliko imate manje vrednoti za tajmer (ispod 1 minuta)
new antiChatSpam;

public OnPlayerText(playerid, text[])
{
// Ako je trenutno vreme koje tickcount() vrati manje od onog vremena koje smo dodelili varijabli
if(tickcount() < antiChatSpam) {
SendClientMessage(playerid, -1, "Nemojte da spamujete chat!");
return 0;
}

// 3 sekunde = 3000ms (razlika izmedju tickcount i gettime je ta da na tickcount dodajete milisekunde a na gettime sekunde)!
antiChatSpam = tickcount() + 3000;

return 1;
}



Ⅲ) Šta smo uradili ovime?
Uradili smo to da smo totalno izbrisali tajmer koji se veoma brzo ponavlja za svakog konektovanog igrača i naučili smo za nove native - gettime i tickcount!
Da ponovim, znam da sam već otvarao sličan tutorijal ali nisam VS radio niti su ljudi videli jer očigledno nema Optimizacija u naslovu, pa neka ovo obeleži #1

31.
inquisitiveemmett
4
Shot Caller
1. Avg. 2020.
beskorisno
salim se dobar dobar  😁
Scripter Vladimir
5
Underboss
2. Avg. 2020.
Nije loše, fino je, dobar tutorial 🙂
Alhemičar v2
4
Shot Caller
3. Avg. 2020.
Quote from August 2, 2020, 8:29 am:
Nije loše, fino je, dobar tutorial 🙂

Hvala 🙂
Stevanovic.pwn
5
Made Man
6. Okt. 2021.
Simple, svidja mi se!
Drex
4
Shot Caller
7. Okt. 2021.
najs

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha