Problem sa y_timers

pre 1 godinu
686
pregleda
11
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
letecitanjur
Hustler
pre 1 godinu
Problem(error/warning): error
Deo skripte:
//TIMER ZA HOSTNAMECHANGER
timer HostNameChanger()
{
    static
        index,
        str;

    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):
Vaš odgovor


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 🙂
letecitanjur
Hustler
pre 1 godinu
Ispricavam se radi spama, nisam stigo editat a zaboravio sam ubaciti iz server loga

https://pastebin.com/UTc93hD6
Ljubisa
Shot Caller
pre 1 godinu
Zato sto dodajes repeat u timeru, zato svaki put pozoves dodatne tajmere

U OnGameModeInit stavi
repeat HostNameChanger();
letecitanjur
Hustler
pre 1 godinu
Ljubiša wrote on May 11, 2024, 3:17 pm:
Zato 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
D1NO
Crime Lord
pre 1 godinu

task HostNameChanger()
{
    static
        index,
        str;

    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.
letecitanjur
Hustler
pre 1 godinu
noddy_ wrote on May 11, 2024, 3:43 pm:

task HostNameChanger()
{
    static
        index,
        str;

    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
Skrilew
Godfather
letecitanjur
Hustler
pre 1 godinu
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()
{
    static
        index,
        str;

    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;
}


V01D wrote on May 11, 2024, 4:06 pm:
https://gtablkn.gg/forum/tutorijali-u-vezi-sa-mpa/y-timers#post-728590


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 = {Timer:-1, ...};
/* Start the timer */
CMD:mycommand(playerid, params[])
{
    myTimer = 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(playerid)
{
    printf("The player who started timer %d has the ID %d.", _:myTimer, playerid);
    // This function will print the same message every second.
}
/* Stop the timer */
COMMAND:stoptimer(playerid, params[])
{
    if(myTimer != Timer:-1)
    {
        stop myTimer;
        myTimer = Timer:-1;
    }
    else
    {
        // The timer isn't running.
    }
    return 1;
}
D1NO
Crime Lord
pre 1 godinu


task HostNameChanger()
{
    static
        index,
        str;

    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.
letecitanjur
Hustler
pre 1 godinu
noddy_ wrote on May 11, 2024, 4:18 pm:


task HostNameChanger()
{
    static
        index,
        str;

    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
D1NO
Crime Lord
pre 1 godinu
Rjeseno, lock

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava