Timer Tutorial

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey Leute,


    da ich mitbekommen habe, dass noch immer viele Leute Probleme mit Timern haben, habe ich mich entschlossen ein Tutorial rund um die Timer in PAWN zu beschäftigen.


    Nun welche Befehle gibt es überhaupt für die Timer?
    Es gibt 3 Befehle die sich hauptsächlich mit den Timern beschäftigen, diese lauten:
    SetTimer
    SetTimerEx
    KillTimer


    SetTimer:


    SetTimer wird verwendet um z.B. automatische Servernachrichten auszugeben.
    Die Funktion lautet:
    SetTimer((funcname[], interval, repeating);
    funcname = Wie du die Funktion bennenst, ist frei wählbar, darf aber nicht mehrmals vorkommen. z.B. "TestTimer"
    interval = Wann der Timer ausgelöst werden soll in Millisekunden. 1 Sekunde = 1000 Millisekunden. => 1 Minute = 60000 Millisekunden.
    repeating = Fragt ab, ob der Timer immer wieder wiederholt werden soll oder nicht. (true / false)
    Noch dazu musst SetTimer "publiced" sprich auch "forwarded" werden.


    So sieht der Befehl in der Anwendung aus:


    SetTimer("TimerTest", 1000*60, true); // Setzt einen Timer namens TimerTest jede Minute, und dieser wiederholt sich immer (true)


    forward TimerTest(); // forwarded den Timer


    public TimerTest()
    {
    SendClientMessageToAll(farbe_rot, "Ich bin eine Test-Nachricht!"); // sendet eine nachricht zu Allen
    return 1;
    }


    SetTimerEx:


    Nun SetTimerEx wird verwendet um Timer mit Parametern wie z.B. playerid auszudrücken.
    Die Funktion lautet:
    SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...);
    funcname = Wie du die Funktion bennenst, ist frei wählbar, darf aber nicht mehrmals vorkommen. z.B. "TestTimer"
    interval = Wann der Timer ausgelöst werden soll in Millisekunden. 1 Sekunde = 1000 Millisekunden. => 1 Minute = 60000 Millisekunden.
    repeating = Fragt ab, ob der Timer immer wieder wiederholt werden soll oder nicht. (true / false)
    const format = Bedeutet welcher Parameter ausgedrückt werden soll, hierbei gibt es folgende:
    i interger
    d gleich wie i
    a steht für einen Array
    s steht für einen string
    f steht für einen float
    b steht für boolean
    Float = Erklärt den Parameter, z.B. bei "d", könnte dieser playerid lauten, aber unten ein genaueres Beispiel.
    Auch SetTimerEx muss "publiced" und "forwarded" werden.


    So sieht es in der Anwendung aus:


    if (strcmp("/test", cmdtext, true, 10) == 0)
    {
    SendClientMessage(playerid, farbe_rot, "In 1 Minute bekommst du eine automatische Nachricht!"); // sendet eine Nachricht
    SetTimerEx("TestTimer", 1000*60, false, "d", playerid); // setzt einen Timer namens TestTimer 1 Minute nach dem /test-Befehl für denjenigen der den Befehl benützt
    return 1;
    }


    forward TimerTest(playerid); // forwarded den Timer mit den Parameter playerid


    public TimerTest(playerid)
    {
    SendClientMessage(playerid, farbe_rot, "Deine Timer-Nachricht ist angekommen!"); // sendet die automatische Nachricht nach 1 Minute
    return 1;
    }


    KillTimer:


    KillTimer wird verwendet, um Timer zu löschen bevor sie ausgelöst werden.
    Die Funktion lautet:
    KillTimer(timerid);
    timerid = Der Name bzw. die ID des Timers die zerstört werden soll.


    So sieht es in der Anwendung aus:


    new Timer1;


    Timer1 = SetTimer("TimerTest", 1000*60, true);


    if (strcmp("/killtimer", cmdtext, true, 10) == 0)
    {
    KillTimer(Timer1); // killt den Timer
    SendClientMessage(playerid, farbe_rot, "Du hast den Timer zerstört!");
    return 1;
    }


    Ich hoffe euch wird die Arbeit mit den Timern nun leichter fallen.


    Lg,
    playerid

  • Ich habe eine Frage. :d


    Wieso '1000*60' und nicht direkt '60000'?


    Grüße
    Gredsoft

  • Ich weiss nicht so recht,deine Wortwahl passt irgendwie teilweise nicht.

    Zitat

    SetTimer("TimerTest", 1000*60, true); // Setzt einen Timer namens TimerTest jede Minute, und dieser wiederholt sich immer (true)


    Setzt das tatsächlich einen Timer mit dem Namen TimerTest ? Eigentlich nicht.Es erstellt einen Timer,der die Funktion TimerTest jede Minute aufruft. Ich kann die Funktion auch irgendwo Anders aufrufen OHNE das es mit dem Timer in irgendeiner Verbindung steht. Du hast es mehrfach so beschrieben.


    Zitat

    KillTimer wird verwendet, um Timer zu löschen bevor sie ausgelöst werden.


    Was ist wenn ich einen Timer habe,der sich Wiederholt ? Darf ich den dann nur löschen,bevor er zum 1x die Funktion aufgerufen hat ? Eventuell nicht ganz so gut ausgedrückt von dir.

  • Du kannst auch Sonderzeichen angeben, nur ist die Frage lässt der compiler in den Funktionsnamen zu :D

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Schick ;)
    Hilft Anfänger bestimmt weiter :thumbup:
    10/10 points!


    Außerdem finde ich dein Avatar geil xDD

    Spoiler anzeigen
    10 Beiträge [X]
    50 Beiträge [X]
    100 Beiträge [X]
    150 Beiträge [X]
    200 Beiträge [X]
    250 Beiträge [X]
    300 Beiträge [X]
    350 Beiträge [X]
    400 Beiträge [X]
    450 Beiträge [X]
    500 Beiträge [X]
    550 Beiträge []
    600 Beiträge []
    650 Beiträge []
    700 Beiträge []
    750 Beiträge []

  • Zitat


    Nun fragen sich Neulinge jedoch bestimmt, wo die einzelnen Timer ihren Platz im Script finden?


    Das müsste man selber am besten wissen.
    Am besten wäre, sich Gedanken machen, wo es als erstes aufgerufen werden sollte.
    Timer die bis zum Ende durchlaufen sollten, wären bei OnGameModeInit ( ) am besten geeingnet

  • Am besten wäre, sich Gedanken machen, wo es als erstes aufgerufen werden sollte.
    Timer die bis zum Ende durchlaufen sollten, wären bei
    OnGameModeInit ( )
    am besten geeingnet


    Das nutzt man nur bei SetTimer am besten, SetTimerEx z.B. verwendet man meistens bei OnPlayerConnect ^^


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen