Razgovarao sam sa hosterom i imam problema sa serverom... to su laggovi i povremeno gašenje servera.
Sad on mi priÄa da mi mod pocne laggati il neÅ¡, dodje do greÅ¡ke i CPU usage bude 99.0 %. Sad govori mi i da je normalno za SA;MP da ne prelazi preko 10 % Äak i sa 100 igraća online. Sad pokuÅ¡avam rijeÅ¡it tu greÅ¡ku ali nije mi jasno... u Äemu može bit greÅ¡ka? Kompajlan mod je velik 2.257 MB. I dosta je skriptan i ima dosta stvari u njemu... ali da je mod neznam kakav (normalan) nemože CPU ić do 100 %.
Molim pomoć, savjet...
Btw. U mogućnost dolazi i novi host, ali pokušavam riješit ovo ukoliko ZBILJA ima greška.
Greska u modu?
Započeo Obrisan korisnik
•31. Jul 2010.2,151
pregleda
17
postova
31. Jul 2010.
31. Jul 2010.
Kakvu kodu koristiš u callbacku OnPlayerUpdate? Koliko tajmera koristiš u skripti i koliko je SetTimerEx od tih tajmera?
Spremanje fajlova u OnPlayerUpdate će ubiti server, isto tako loop igraÄa na SetTimerEx.
Spremanje fajlova u OnPlayerUpdate će ubiti server, isto tako loop igraÄa na SetTimerEx.
31. Jul 2010.
173 timera.. od toga 90 SeTimerEx-a... wow jbt
Takodjer nisam napravio OnPlayerUpdate kao takav nego sam ga definirao kao UpdateIgraca (poÅ¡to se OnPlayerUpdate javlja svaki put kad igraÄ stišće neÅ¡to na tipkovnici itd.)
Šta trebam napraviti da bi riješio problem? KillTimer za ove Ex tajmere?
Takodjer nisam napravio OnPlayerUpdate kao takav nego sam ga definirao kao UpdateIgraca (poÅ¡to se OnPlayerUpdate javlja svaki put kad igraÄ stišće neÅ¡to na tipkovnici itd.)
Šta trebam napraviti da bi riješio problem? KillTimer za ove Ex tajmere?
31. Jul 2010.
Ne, to neće baÅ¡ rijeÅ¡iti problem. Kako koristiÅ¡ sve te tajmere? Kroz loop ili kako? Ako možeÅ¡, onda probaj skratiti tajmere i staviti sve u Äim manji broj tajmera.
31. Jul 2010.
ZnaÄi da smanjim broj timera?
EDIT: Baš sad vidim, u obićnom GodFatheru ima 25 timera, u LSLRP-u ima 50... a u mome 173... eh jbga
EDIT: Baš sad vidim, u obićnom GodFatheru ima 25 timera, u LSLRP-u ima 50... a u mome 173... eh jbga
31. Jul 2010.
Evo ti jedan primjer:
forward mojTajmer(playerid);
public mojTajmer(playerid)
{
/* koda */
mojaFunkcija(playerid);
SendClientMessage(playerid, 0xFFFFFFFF, "..poruka.. text..");
/* ostala koda */
return true;
}
public OnPlayerConnect(playerid)
{
/* koda */
SetTimerEx("mojTajmer", 1000, true, "i", playerid);
/* ostala koda */
return true;
}
A možeš napraviti ovako:
forward mojTajmer();
public mojTajmer()
{
foreach(Player, u) // foreach() funkciju koristim umjesto for statementa.
{
/* koda */
mojaFunkcija(u);
SendClientMessage(u, 0xFFFFFFFF, "..poruka.. text..");
/* ostala koda */
}
return true;
}
public OnGameModeInit()
{
/* koda */
SetTimer("mojTajmer", 1000, true);
/* ostala koda */
return true;
}
I još ako ne ubijaš tajmere kao u ovom primjeru sa SetTimerEx onda ćeš imati ++ tajmer za svaki konekt.
forward mojTajmer(playerid);
public mojTajmer(playerid)
{
/* koda */
mojaFunkcija(playerid);
SendClientMessage(playerid, 0xFFFFFFFF, "..poruka.. text..");
/* ostala koda */
return true;
}
public OnPlayerConnect(playerid)
{
/* koda */
SetTimerEx("mojTajmer", 1000, true, "i", playerid);
/* ostala koda */
return true;
}
A možeš napraviti ovako:
forward mojTajmer();
public mojTajmer()
{
foreach(Player, u) // foreach() funkciju koristim umjesto for statementa.
{
/* koda */
mojaFunkcija(u);
SendClientMessage(u, 0xFFFFFFFF, "..poruka.. text..");
/* ostala koda */
}
return true;
}
public OnGameModeInit()
{
/* koda */
SetTimer("mojTajmer", 1000, true);
/* ostala koda */
return true;
}
I još ako ne ubijaš tajmere kao u ovom primjeru sa SetTimerEx onda ćeš imati ++ tajmer za svaki konekt.
31. Jul 2010.
Pa tak i radim timere, samo mene zabrinjava ovih 90 timerExa koji ostaju kad se igrac disconnecta ili neÅ¡to drugo... to cu probat rijeÅ¡it 😳
31. Jul 2010.
Onda stavi kakvu kodu u ovu temu da vidim kako koristiš koji SetTimerEx ili objasni ako znaš.
31. Jul 2010.
Evo ukratko...
Imam neku komandu recimo /drink... to je za restorane i tako to da ljudi mogu pit'
OnDialogResponse
Tu je među ostalom i davanje one boce, i ProxDetector za igraće blizu tog igraća koji je odabrao piće (ono kao /me). To nije tako važno...
Na pocetku moda...
Ovo su samo neki zadani uvjeti... dakle bitan je KillTimer... prije ga nisam baÅ¡ koristio ali sad vjerujem da mi zbog toga mod tako lagga... igraÄ dobije timer i taj timer stalno stoji (zapravo dosta njih)... i vjerovatno on radi greÅ¡ku u modu, kao flood na neki nacin... I mislim da je to najvjerovatnije, jer uvijek kad ponovo pokrenem server sve je u redu, nema nikakvog lagga... sve divno i krasno, ali nakon par sati pocnu laggovi :S
Imam neku komandu recimo /drink... to je za restorane i tako to da ljudi mogu pit'
new PiceTimer;OnDialogResponse
PiceTimer = SetTimerEx("Trijezan", 180000, false, "i", playerid);Tu je među ostalom i davanje one boce, i ProxDetector za igraće blizu tog igraća koji je odabrao piće (ono kao /me). To nije tako važno...
forward Trijezan(playerid);Na pocetku moda...
public Trijezan(playerid)
{
if(IsPlayerConnected(playerid))
{
if(Pijan == 1) // ovo mi je uvjet..
{
Pijan = 0;
KillTimer(PiceTimer);
}
}
return 1;
}Ovo su samo neki zadani uvjeti... dakle bitan je KillTimer... prije ga nisam baÅ¡ koristio ali sad vjerujem da mi zbog toga mod tako lagga... igraÄ dobije timer i taj timer stalno stoji (zapravo dosta njih)... i vjerovatno on radi greÅ¡ku u modu, kao flood na neki nacin... I mislim da je to najvjerovatnije, jer uvijek kad ponovo pokrenem server sve je u redu, nema nikakvog lagga... sve divno i krasno, ali nakon par sati pocnu laggovi :S
31. Jul 2010.
I Äinilo se mi je da je neÅ¡to tako. To ti uopÄe ne treba, to može biti u jednom glavnom tajmeru. I najbolje je da ovakav tajmer bude svaku sekundu ako ga ponavljaÅ¡, neka nikada ne bude ispod jedne sekunde.
Stavit ćeÅ¡ "pijan_Var" p-var kao 180 (PIJAN_INTERVAL), znaÄi 180 sekundi ako koristimo to u jedna-sekunda-tajmeru jer si prije koristio 180000 milisekundi interval.
#define PIJAN_VAR ("pijan_Var")
#define PIJAN_INTERVAL (180)/* OnDialogResponse */
SetPVarInt(playerid, PIJAN_VAR, PIJAN_INTERVAL);Stavit ćeÅ¡ "pijan_Var" p-var kao 180 (PIJAN_INTERVAL), znaÄi 180 sekundi ako koristimo to u jedna-sekunda-tajmeru jer si prije koristio 180000 milisekundi interval.
foreach(Player, u)
{
/* koda u loopu tajmera */
if(GetPVarInt(u, PIJAN_VAR) == 0)
{
Pijan = false;
SetPVarInt(u, PIJAN_VAR, -1); // default je 0, zato ćemo staviti -1 jer ako bude uvijek 0 onda će se uvijek izvršiti ova koda.
}
else SetPVarInt(u, PIJAN_VAR, GetPVarInt(u, PIJAN_VAR) - 1);
/* ostala koda u loopu tajmera. */
}public OnPlayerConnect(playerid)
{
SetPVarInt(playerid, PIJAN_VAR, -1); // default je 0, zato ćemo staviti -1 jer ako bude uvijek 0 onda će se uvijek izvršiti koda u tajmeru.
return true;
}31. Jul 2010.
I po Äemu je to bolje od SetTimex, SetTimerEx i KillTimer? (ak se smije znat)
Sad trenutno u modu imam 120 timera, za svaki SetTimerEx imam KillTimer, a gotovo i za svaki SetTimer kao i za SetTimerEx (KillTimer) osim kod ograda od organizacija (/otvori pa tajmer za automatsko zatvaranje)...
Sad trenutno u modu imam 120 timera, za svaki SetTimerEx imam KillTimer, a gotovo i za svaki SetTimer kao i za SetTimerEx (KillTimer) osim kod ograda od organizacija (/otvori pa tajmer za automatsko zatvaranje)...
31. Jul 2010.
ZicMortal wrote on July 31, 2010, 5:57 pm:
I po Äemu je to bolje od SetTimex, SetTimerEx i KillTimer? (ak se smije znat)
Pa nisi valjda zaboravio svoj problem? LogiÄno da je bolje imati kodu u 2, 3 tajmera za igraÄe umjesto da imaÅ¡ 100 igraÄ-tajmera.
ZicMortal wrote on July 31, 2010, 5:57 pm:
Sad trenutno u modu imam 120 timera, za svaki SetTimerEx imam KillTimer, a gotovo i za svaki SetTimer kao i za SetTimerEx (KillTimer) osim kod ograda od organizacija (/otvori pa tajmer za automatsko zatvaranje)...
KillTimer nije važan trenutno. IgraÄi mogu sa svojim poslovima pokrenuti viÅ¡e igraÄ-tajmera koji će dovesti do laga.
31. Jul 2010.
Mene više zanima ta greška... promjenio sam sad par stvari oko svih timera, i trudim se da svi timeri budu killani (znam da ne koristi puno, ali ipak smatram da je potrebno)...
Neću se sad upustit u neke velike optimizacije poÅ¡to mislim da bi mod normalno trebao raditi bez pretjeranog zauzimanja CPUa i laggova 😳
Neću se sad upustit u neke velike optimizacije poÅ¡to mislim da bi mod normalno trebao raditi bez pretjeranog zauzimanja CPUa i laggova 😳
31. Jul 2010.
Kako god hoćeÅ¡, ali iako ti ubijeÅ¡ igraÄ-tajmere (SetTimerEx) svejedno ih se može nabrati puno i to može dovesti i do laga a i do server crasha.
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava