Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: letecitanjur poslato Maj 11, 2024, 16:25:20 POSLE PODNE

Naslov: Problem sa y_timers
Poruka od: letecitanjur poslato Maj 11, 2024, 16:25:20 POSLE PODNE
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 :)

Naslov: Odg: Problem sa y_timers
Poruka od: letecitanjur poslato Maj 11, 2024, 16:32:42 POSLE PODNE
Ispricavam se radi spama, nisam stigo editat a zaboravio sam ubaciti iz server loga

https://pastebin.com/UTc93hD6 (https://pastebin.com/UTc93hD6)
Naslov: Odg: Problem sa y_timers
Poruka od: Ljubiša poslato Maj 11, 2024, 17:17:22 POSLE PODNE
Zato sto dodajes repeat u timeru, zato svaki put pozoves dodatne tajmere

U OnGameModeInit stavi
repeat HostNameChanger();
Naslov: Odg: Problem sa y_timers
Poruka od: letecitanjur poslato Maj 11, 2024, 17:40:19 POSLE PODNE
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
Naslov: Odg: Problem sa y_timers
Poruka od: noddy_ poslato Maj 11, 2024, 17:43:17 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 je, sto znaci da ce se pozivati svako 7 sekundi u tvom primjeru.
I ne moras koristiti nikakav defer ili repeat.
Naslov: Odg: Problem sa y_timers
Poruka od: letecitanjur poslato Maj 11, 2024, 17:47:30 POSLE PODNE
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
Naslov: Odg: Problem sa y_timers
Poruka od: V01D poslato Maj 11, 2024, 18:06:52 POSLE PODNE
https://balkan-samp.com/forum/index.php?topic=133363.msg957472#msg957472
Naslov: Odg: Problem sa y_timers
Poruka od: letecitanjur poslato Maj 11, 2024, 18:09:55 POSLE PODNE
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;
}
Naslov: Odg: Problem sa y_timers
Poruka od: 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.
Naslov: Odg: Problem sa y_timers
Poruka od: letecitanjur poslato Maj 11, 2024, 18:26:33 POSLE PODNE
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
Naslov: Odg: Problem sa y_timers
Poruka od: noddy_ poslato Maj 11, 2024, 18:28:56 POSLE PODNE
Rjeseno, lock