Pomoc u vezi sistema bolesti

Započeo Neckiy
9. Maj 2021.
390
pregleda
6
postova
Neckiy
4
Shot Caller
9. Maj 2021.
Problem(error/warning): Sto se tice razboljevanja sve lepo radi, pise kad se razbolim i na odredjeni timer mi skida helte, problem nastaje kada ukucam komandu /iskoristilek, koja treba da prekine timer ali nista se ne desi i helti nastavljaju da se gube.
Deo skripte:
CMD:iskoristilek(playerid, params[])
{
if(UlogovaniIgrac == 0) return SCM(playerid,-1,"{FF0000} {FFFFFF}Niste ulogovani.");
if(zamrznut == 1) return SCM(playerid,-1,"{FF0000} {FFFFFF}Ne mozes to sad!");
if(PlayerInfo == 0) return SCM(playerid,-1,"{FF0000} {FFFFFF}Niste bolesni!");
if(PlayerInfo == 0) return SCM(playerid,-1,"{FF0000} {FFFFFF}Nemate lek, kupite ga u apoteci!");
TextDrawShowForPlayer(playerid, Bolest_TD);
PlayerInfo = 0;
PlayerInfo -= 1;
KillTimer(bolesttimer);
SetTimerEx("BolestTDHide", 3500, false, "i", playerid);
SacuvajAkaunt(playerid);
return 1;
}

Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log):
//
TIMIC
4
Enforcer
10. Maj 2021.
Koristi y_timers lakše je a i bolje
NegativeIQ
5
Kingpin
10. Maj 2021.
Kako setujes tajmer bolesttimer ? I daj citav kod ne samo tu liniju
Neckiy
4
Shot Caller
10. Maj 2021.
Jbg, prosli put sam poslao ceo kod pa mi mod zatvorio objavu, poslacu ti sad sve lepo.
Komandu imas na pocetku.
Ovo je u OnGameModeInit, to je timer sa kojim se igrac razboljeva.
SetTimer("RazboleliSteSe",30000,false);

Ovo je taj timer RazboleliSteSe:
forward RazboleliSteSe();
public RazboleliSteSe()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
new Float:health;
TextDrawShowForAll(Bolest_TD);
GetPlayerHealth(i, health);
SetPlayerHealth(i, health - 20);
PlayerInfo = 1;
SetTimer("BolestTDHide", 3500, false);
bolesttimer = SetTimer("BolesniSte", 10000, true);
SacuvajAkaunt(i);
}
return 1;
}

I ovo je timer BolesniSte tj bolesttimer je:
forward BolesniSte();
public BolesniSte()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
new Float:health;
TextDrawShowForAll(Bolest_TD);
GetPlayerHealth(i, health);
SetPlayerHealth(i, health - 20);
SetTimer("BolestTDHide", 90000, false);
}
return 1;
}
NegativeIQ
5
Kingpin
10. Maj 2021.
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
Neckiy
4
Shot Caller
10. Maj 2021.
Hvala ti puno. I dalje se bas ne razumem najbolje u timere i kako funkcionisu pa nisam bas najbolje razumeo.

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha