Mesas tajmere i nacin na koji se pozivaju. Pozvao si jednom RazboleliSteSe iz GM init, znaci kad start server pozvace s e jednom i to je to (verovatno si hteo svakih 30 minuta ili nesto tako da se poziva ali nije vezano za trenutni problem).
U tom callbacku startujes za svakog igraca po jedan tajmer BolesniSte ali ne prosledjujes ID. Plus ne proveravas da li je igrac online.
Znaci ako imas MAX_PLAYERS 100 onda ces pozvati 100x taj callback svakih 100 sekundi.
A u BolesniSte opet imas loop za svakog igraca i opet ne proveravas da li je konektovan. Uglavnom po ideji ovo te ubije odmah svakih 10 sekundi (skine ti po 20hp 100x za manje od sekund).
Posto imas bolesttimer predpostavljam da si to hteo da bude za svakog igraca. Onda trebas da prosledis id igraca koji se razbolio:
bolesttimer = SetTimerEx("BolesniSte", 10000, true, "d", i);
I u BolesniSte da dodas playerid kao argument i da maknes loop. Ispravljeni kod ispod:
forward RazboleliSteSe();
public RazboleliSteSe()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
new Float:health;
TextDrawShowForPlayer(playerid, Bolest_TD);//Samo igracu koji se razbolio (to jest svima posto su u loop)
GetPlayerHealth(i, health);
SetPlayerHealth(i, health - 20);
PlayerInfo = 1;
//Prosledjujemo playerid to jest i kao argument
SetTimerEx("BolestTDHide", 3500, false, "d", i);
bolesttimer = SetTimerEx("BolesniSte", 10000, true, "d", i);
SacuvajAkaunt(i);
}
return 1;
}
forward BolesniSte(playerid);
public BolesniSte(playerid)
{
if(!IsPlayerConnected(playerid)) return 0;
new Float:health;
TextDrawShowForPlayer(playerid, Bolest_TD);
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health - 20);
//Ispravio sam i prosledio sam playerid
//Ali jesi li siguran da si ovde hteo ovo? :D
SetTimerEx("BolestTDHide", 90000, false, "d", playerid);
return 1;
}
Ostaje ti jos BolestTDHide da promenis da ti prima playerid kao argument i naravno da sakrijes TD za tog igraca i sta vec tamo radis. Znaci nema loop-a za sve igrace kao ni u BolesniSte