Problem(error/warning): error
Deo skripte:
//TIMER ZA HOSTNAMECHANGER
timer HostNameChanger[7000]()
{
static
index,
str[64];
if (index == sizeof(g_aServerNames) - 1)
index = 0;
format(str, sizeof(str), "hostname %s", g_aServerNames[index++]);
SendRconCommand(str);
print("TEST: PROMJENIO IME I ZA 7 SEKUNDI OPET MJENJAM");
repeat HostNameChanger();
return 1;
}
a hostnamechanger pozivam u jednom timeru koji pokrece sve timere nakon sta ucita sve server stvari.
defer HostNameChanger();
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [pawn]Vaš odgovor[/pawn]
Stvar je u tome sta nakon sta pokrene hostnamechanger,svakih 7 sekundi podupla citavu radnju, tipa prvi put dok je pozvan samo jednom promjeni u toj sekundu,pa nakon drugih 7 sekundi pozove 2 puta,i tako sve vise i vise svakih 7 sekundi,nakon 1 minutu server crasha jer pozove tu funkciju jedno 40 puta hahah.
pa eto ako netko zna u cemu grijesim, molim pomoc :)
Ispricavam se radi spama, nisam stigo editat a zaboravio sam ubaciti iz server loga
https://pastebin.com/UTc93hD6 (https://pastebin.com/UTc93hD6)
Zato sto dodajes repeat u timeru, zato svaki put pozoves dodatne tajmere
U OnGameModeInit stavi
repeat HostNameChanger();
Citat: Ljubiša poslato Maj 11, 2024, 17:17:22 POSLE PODNEZato sto dodajes repeat u timeru, zato svaki put pozoves dodatne tajmere
U OnGameModeInit stavi
defer HostNameChanger();
Hvala na odgovoru, isprobam kasnije ali ja bi htio da se on ponavlja svakih 7 sekundi, zato sam tamo koristio u timeru repeat, a defer koristim gdje ga pozivam da se pokrene
imam pitanje, kolko mi se isplati imat y_timers ? kolko je on ajmo rec precizniji i brzi od obicnih settimera ? da forsiram na y_timers ( potpuno nova stvar meni ) ili da se vratim na obicno
jel bi mogao to staviti pod neki svoj custom public ?
jer taj timer se pokrece nakon minute nakon sta server pokrenut
task HostNameChanger[7000]()
{
static
index,
str[64];
if (index == sizeof(g_aServerNames) - 1)
index = 0;
format(str, sizeof(str), "hostname %s", g_aServerNames[index++]);
SendRconCommand(str);
print("(task) : %s", str);
return 1;
}
Task je, sto znaci da ce se pozivati svako 7 sekundi u tvom primjeru.
I ne moras koristiti nikakav defer ili repeat.
Citat: noddy_ poslato Maj 11, 2024, 17:43:17 POSLE PODNEtask HostNameChanger[7000]()
{
static
index,
str[64];
if (index == sizeof(g_aServerNames) - 1)
index = 0;
format(str, sizeof(str), "hostname %s", g_aServerNames[index++]);
SendRconCommand(str);
print("(task) : %s", str);
return 1;
}
Task je, sto znaci da ce se pozivati svako 7 sekundi u tvom primjeru.
ahaaa, ja sam mislio da se task automatski pokrene cim ga definiras, sad mi jasno, znaci task isto moram rucno pozvati?
da objasnim, jer imam u glavi dosta sistema koje bi radio na slicnu semu,
cim pokrenem server, napravio sam prvo da prvu minutu ocitava ,postavlja sta je potrebno ( postavke,kuce ovo ono), i onda nakon tih 1 minutu, on bi krenuo svakih 7 sekundi mjenjati hostname
al sta task nije automatski pozvan? zato koristio timer, i pozovem ga rucno i zato koristio repeat da se odmah on i pozove
https://balkan-samp.com/forum/index.php?topic=133363.msg957472#msg957472
Evo kako sam ja to sad zamislio,i sada funkconira, jel ovako uredu?
u timer sam stavio kad se timer pozove da pozove opciju public HostNameChangerStarted,a taj isti public opet poziva timer hostnaamechanger.
ako ima tko bolju ideju, slobodno neka napise :)
task koristim za druge stvari i ne bih ubacio hostname changer, jer zelim da se pali kasnije,ali imam ideju da ubacim u task, i da definiram kad je server ucitan, i da taj task provjerava jel server ucitan, i ako je ucitan ( definiram tipa ServerLoaded = 1 nakon sta produ sva ucitavanja ) i onda kad je na 1, ovaj sistem bi radio da mjenja ime svakih 7 sekundi
//TIMER ZA HOSTNAMECHANGER
timer HostNameChanger[7000]()
{
static
index,
str[64];
if (index == sizeof(g_aServerNames) - 1)
index = 0;
format(str, sizeof(str), "hostname %s", g_aServerNames[index++]);
SendRconCommand(str);
print("TEST: PROMJENIO IME I ZA 7 SEKUNDI OPET MJENJAM");
HostNameChangerStarted();
return 0;
}
public HostNameChangerStarted()
{
defer HostNameChanger();
return 1;
}
Citat: V01D poslato Maj 11, 2024, 18:06:52 POSLE PODNEhttps://balkan-samp.com/forum/index.php?topic=133363.msg957472#msg957472
vidio sam englensku verziju i uhvatio se je citat, mislim da sam skuzio sada kako tocno funkconira y timers, cak sam i pronasao kako cu gasiti player timere
evo ovdje cu ubaciti pa ako netko novi u y timers da i on zna kako sta
/* Set all cells to -1 */
new Timer:myTimer[MAX_PLAYERS] = {Timer:-1, ...};
/* Start the timer */
CMD:mycommand(playerid, params[])
{
myTimer[playerid] = repeat MyOwnFunction(playerid);
/* MyOwnFunction will be called 1 second after we type the
command, due the delay parameter from timer, that's how it works. */
return 1;
}
/* Declare MyOwnFunction as a timer */
timer MyOwnFunction[1000](playerid)
{
printf("The player who started timer %d has the ID %d.", _:myTimer[playerid], playerid);
// This function will print the same message every second.
}
/* Stop the timer */
COMMAND:stoptimer(playerid, params[])
{
if(myTimer[playerid] != Timer:-1)
{
stop myTimer[playerid];
myTimer[playerid] = Timer:-1;
}
else
{
// The timer isn't running.
}
return 1;
}
task HostNameChanger[7000]()
{
static
index,
str[64];
if (index == sizeof(g_aServerNames) - 1)
index = 0;
format(str, sizeof(str), "hostname %s", g_aServerNames[index++]);
SendRconCommand(str);
print("(task) : %s", str);
return 1;
}
Task samo ovako napravis i to je to, task ne moras pozivati jer on je uvijek tu i vrti se.
Citat: noddy_ poslato Maj 11, 2024, 18:18:06 POSLE PODNE
task HostNameChanger[7000]()
{
static
index,
str[64];
if (index == sizeof(g_aServerNames) - 1)
index = 0;
format(str, sizeof(str), "hostname %s", g_aServerNames[index++]);
SendRconCommand(str);
print("(task) : %s", str);
return 1;
}
Task samo ovako napravis i to je to, task ne moras pozivati jer on je uvijek tu i vrti se.
taj task je dobar ako zelis da se odmah mjenja, ubacit cu samo da provjerava jel server ucitan, i ako je ucitan da funkconira hostnamechanger. sad sam totalno skuzio kako sta.
nisam vec par godina bio u pawnu, pa sam zahrdao hahah
hvala puno :)
moze lock
Rjeseno, lock