Mini Optimizacija #1
1,617
pregleda
6
postova
Shot Caller
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
40 / 100 XP
Početnik(0)
116
Postovi:
2
Teme:
Pridružio se:Avg. 2020
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.
Shot Caller
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
40 / 100 XP
Početnik(0)
106
Postovi:
5
Teme:
Pridružio se:Jun 2020
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
686
Postovi:
39
Teme:
Pridružio se:Dec. 2018
Shot Caller
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
40 / 100 XP
Početnik(0)
116
Postovi:
2
Teme:
Pridružio se:Avg. 2020
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava
