Evo molim pomoc u vezi ove teme. Ja uobicajeno skriptam na obican nacin. Na godfather nacin. Ubacijem nesto svoje, radim dosta svojega ali neznam puno o optimizaciji moda. Zelim da mi server manje lagga, u bilo kojem pogledu (to ne znaci da on lagga), nego jednostavno da bude bolji.
Sad to je pitanje za one iskusnije skriptere. Kako mogu optimizirati mode? Znam da se moze pomocu dcmd, zcmd... ali kako jos?
Optimizacija.
2,722
pregleda
7
postova
2. Jun 2010.
2. Jun 2010.
Prestani koristiti 256 stanica za formatirane poruke koje koriste SendClientMessage / SendClientMessageToAll jer SA:MP MAX_IO je 128 a ne 256, i za sva ostala polja za koja ti ne trebaju te stanice.
Koristi makroje.
Ne koristi previše tajmera, koristi zcmd + sscanf2 plugin za komande.
Koristi plugin-streamer za sve što trebaš (objekti, map ikone, 3d tekstovi, ..).
Pazi kako koristiš for/while loopove (naprimjer: ako imaš u skripti samo 200 vozila i ako koristiš MAX_VEHICLES za polja i za loopove onda to nije dobro, jer MAX_VEHICLES je definiran kao 2000). Možeš koristiti foreach za ovo ili re-definirati na svoj broj:
#undef MAX_VEHICLES
#define MAX_VEHICLES (200)
ili jednostavno otvoriš a_samp.inc include file i potražiš "MAX_VEHICLES" i promijeniš, ali to će utjecati na svaku skriptu za koju budeš koristio taj include file.
Koristi foreach funkciju koju je napravio Y_Less, tako ne trebaš koristiti ni MAX_PLAYERS ni GetMaxPlayers() u loopovima.
Ova koda:
for(new u = 0; u < MAX_PLAYERS; u++)
{
if(IsPlayerConnected(u))
{
SendClientMessage(u, 0xFFFFFFFF, "Tekst.");
mojaFunkcija(u);
}
}
će postati ovakva:
foreach(Player, u)
{
SendClientMessage(u, 0xFFFFFFFF, "Tekst.");
mojaFunkcija(u);
}(ne treba ti ni IsPlayerConnected provjera jer to je već automatsko u foreach funkciji)
I proćitaj ovo:
http://forum.sa-mp.com/index.php?topic=79810.0
Koristi makroje.
Ne koristi previše tajmera, koristi zcmd + sscanf2 plugin za komande.
Koristi plugin-streamer za sve što trebaš (objekti, map ikone, 3d tekstovi, ..).
Pazi kako koristiš for/while loopove (naprimjer: ako imaš u skripti samo 200 vozila i ako koristiš MAX_VEHICLES za polja i za loopove onda to nije dobro, jer MAX_VEHICLES je definiran kao 2000). Možeš koristiti foreach za ovo ili re-definirati na svoj broj:
#undef MAX_VEHICLES
#define MAX_VEHICLES (200)
ili jednostavno otvoriš a_samp.inc include file i potražiš "MAX_VEHICLES" i promijeniš, ali to će utjecati na svaku skriptu za koju budeš koristio taj include file.
Koristi foreach funkciju koju je napravio Y_Less, tako ne trebaš koristiti ni MAX_PLAYERS ni GetMaxPlayers() u loopovima.
Ova koda:
for(new u = 0; u < MAX_PLAYERS; u++)
{
if(IsPlayerConnected(u))
{
SendClientMessage(u, 0xFFFFFFFF, "Tekst.");
mojaFunkcija(u);
}
}
će postati ovakva:
foreach(Player, u)
{
SendClientMessage(u, 0xFFFFFFFF, "Tekst.");
mojaFunkcija(u);
}(ne treba ti ni IsPlayerConnected provjera jer to je već automatsko u foreach funkciji)
I proćitaj ovo:
http://forum.sa-mp.com/index.php?topic=79810.0
4. Jun 2010.
ako imas macro slican:
i ako ga koristis vise od jednog puta, bolje ti je koristiti:
Sad da objasnjavam zasto nebi skuzio nitko, ali ovo primjeni ako imas tako.
Macro-i su dvosjekli mac:
npr.
i sada koristis
akcija koja ce se dogoditi je tzv. "undefined behaviour" tj. ne zna se.
Ali opet u nekim situacijama nesto i pomaze jer smanjuje vrijeme potrebno za izvrsavanje koda(dok bi pozivanja funkcije oduzelo nesto vremena).
#define SOME_STRING "ThisIsString"
i ako ga koristis vise od jednog puta, bolje ti je koristiti:
new const SOME_STRING[] = "ThisIsString";
Sad da objasnjavam zasto nebi skuzio nitko, ali ovo primjeni ako imas tako.
Macro-i su dvosjekli mac:
npr.
#define DO_ADD(%1, %2) ((%1)+(%2))
i sada koristis
new i = 0;
while(i < 500)
{
result += DO_ADD(i++, i++)
}
akcija koja ce se dogoditi je tzv. "undefined behaviour" tj. ne zna se.
Ali opet u nekim situacijama nesto i pomaze jer smanjuje vrijeme potrebno za izvrsavanje koda(dok bi pozivanja funkcije oduzelo nesto vremena).
4. Jun 2010.
Quote from June 4, 2010, 9:52 pm:
sto biste jos preporucili za optimizaciju moda i samnjivanje laga?
Da napravis tzv. Unit Testing te vidis koji ti je dio skripte najsporiji, takoder eliminiraj nepotrebne loopove.
5. Jun 2010.
JoeBullet v2.1 wrote on June 4, 2010, 9:41 pm:
Sad da objasnjavam zasto nebi skuzio nitko
Au, vidi Joa, samo on pametan pa zna Å¡ta to znaÄi znaÄi, a svi ostali su gl*pi na ovom forumu.
Nemaš tu šta za skužit, samo otvori pawn-lang.pdf i proćitaj objašnjenje ili pogledaj direktno ovdje.
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava