Problem sa y_timers

Započeo letecitanjur, Maj 11, 2024, 16:25:20 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

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

Zato sto dodajes repeat u timeru, zato svaki put pozoves dodatne tajmere

U OnGameModeInit stavi
repeat HostNameChanger();
Poslednja Izmena: Maj 11, 2024, 17:48:03 POSLE PODNE od Ljubiša

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
Poslednja Izmena: Maj 11, 2024, 17:41:28 POSLE PODNE od letecitanjur

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.
Poslednja Izmena: Maj 11, 2024, 17:44:37 POSLE PODNE od noddy_
SPEED HACK (C++) https://github.com/nouddy/samp-speed-hack
Reliant GameMode (open.mp) https://github.com/nouddy/reliant-omp
SA:MP Landing Page https://github.com/nouddy/samp-landing-page


Kolko drama ima u 7 grama

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


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;
}
Poslednja Izmena: Maj 11, 2024, 18:11:35 POSLE PODNE od letecitanjur


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.
SPEED HACK (C++) https://github.com/nouddy/samp-speed-hack
Reliant GameMode (open.mp) https://github.com/nouddy/reliant-omp
SA:MP Landing Page https://github.com/nouddy/samp-landing-page


Kolko drama ima u 7 grama

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