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
  • Hallo, hier ist ein Tutorial für Timer. Viel Spaß xD


    Also, die Grundlage ist es einen Timer zu erstellen, man benutzt SetTimer und SetTimerEx:
    SetTimer(funcname[], interval, repeating);
    SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...);


    funcname: Die Funktion, die nach der abgelaufenen Zeit abgerufen werden soll.
    interval: Die Zeit des Timers bis zur Ausführung in MILLISEKUNDEN
    repeat: Soll der Timer wiederholt werden? 1=JA 0=NEIN
    Beide Timerfunktionen geben die TimerID zurück


    Beispiel:
    CheckTimer = SetTimer("CheckPlayers",5000,1); // Timer mit Wiederholung alle 5000ms = 5 Sekunden
    WerbungsTimer = SetTimer("Werbung",5*60*1000,1); // Timer mit Wiederholung alle 5*60*1000ms = 300000ms = 300 Sekunden
    DelayTimer[playerid] = SetTimerEx("Teleport",500,0,"iffff",playerid,X,Y,Z,A); // Timer ohne Wiederholung nach 500ms = 0,5 Sekunden


    Es Fällt auf: Da ist noch was bei SetTimerEx
    Hierbei werden Variablen mit dem Timer mitgeliefert. "iffff" bedeutet, es wird 1 Integer(playerid) gefolgt von 4 Floats(X,Y,Z,A) mitübertragen.
    Hier eine Übersicht, welche Buchstaben man für was einsetzen muss:
    i = Integer
    d = Dezimalzahl
    s = String
    b = Bool
    f = Float



    Die Funktion "Teleport" könnte so aussehen:
    public Teleport(id,Float:X,Float:Y,Float:Z,Float:A)
    {
    SetPlayerPos(id,X,Y,Z);
    SetPlayerFacingAngle(id,A);
    }


    VORSICHT: Sowas würde nicht mit Standardfunktionen wie SetPlayerPos funktionieren.


    Wenn ein Timer gestoppt werden soll, zum Beispiel beim Beenden des Gamemodes benutzt man KillTimer.
    KillTimer(timerid);


    timerid: Die TimerID die bei SetTimer(Ex) zurückgegeben wurde
    SetTimer und SetTimerEx können mit KillTimer beendet werden...



    Ich hoffe ich konnte euch damit weiterhelfen, sodass es reibungslos läuft.
    Ich werde es evtl noch etwas updaten...


    MfG, M4rciii :)


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

    3 Mal editiert, zuletzt von M4rciii ()

  • kann ich nicht auch einfach
    forward werbung;

    SetTimer(Werbung,90000,1);


    und dann


    public werbung
    {
    SendClientMessageToAll(blabla=)
    }
    machen?

  • ne eigentlich nicht weil dann sendest du jedes mal immer die gleiche Nachricht blablabla deswegen random Messages ;)

    Zitat

    Nimm die Dinge wie sie sind: schlag, wenn du schlagen musst, tritt, wenn du Treten musst
    -Bruce Lee

  • huhu
    wollte bei GF den PayDay auf 10min. setzen.
    habe gelesen, das man dort einen timer einfügen muss.
    verstehe aber nicht, was ich bei "SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...);"
    etc. irgendwie hinschreiben soll... bei SetTimer ist das selbe problem, was ich dort bei funcname schreiben soll...
    hab nicht ganz so die begarbung, brache daher noch hilfe!
    mfg

  • brauche ich also settimerex?


    public SyncTime()
    {
    new string[64];
    new tmphour;
    new tmpminute;
    new tmpsecond;
    gettime(tmphour, tmpminute, tmpsecond);
    FixHour(tmphour);
    tmphour = shifthour;
    if ((tmphour > ghour) || (tmphour == 0 && ghour == 23))
    {
    format(string, sizeof(string), "SERVER: Es ist jetzt %d:00 Uhr",tmphour);
    BroadCast(COLOR_WHITE,string);
    ghour = tmphour;
    SetTimer("funcname", 6000, 1); // <<<<<<<<<
    if (realtime)
    {
    SetWorldTime(tmphour);
    }
    }
    }


    so oder wie?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • public OnGameModeInit()
    {
    SetTimer("PayDay",60000,1);
    return 1;
    }


    forward PayDay();
    public PayDay()
    {
    PayDay();
    return 1;
    }