Započeo Neckiy
•9. Maj 2021.Pomoc u vezi sistema bolesti
405
pregleda
6
postova
Shot Caller
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
148
Postovi:
61
Teme:
Pridružio se:Mar. 2019
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:
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log):
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):
//Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,136
Postovi:
10
Teme:
Pridružio se:Maj 2015
Shot Caller
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
148
Postovi:
61
Teme:
Pridružio se:Mar. 2019
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.
Ovo je taj timer RazboleliSteSe:
I ovo je timer BolesniSte tj bolesttimer je:
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;
}Kingpin
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
1,136
Postovi:
10
Teme:
Pridružio se:Maj 2015
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:
I u BolesniSte da dodas playerid kao argument i da maknes loop. Ispravljeni kod ispod:
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
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
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava