gettime statt Timer benutzen

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
  • 1. Das geht überhaupt nicht, da der public nur aufgerufen wird, wenn ein Befehl eingegeben wird
    2. kannst du nicht 5 == 10 setzen
    -> if(sekunde == sekunde +5)
    Der Parameter sekunde wird jedes Mal neu gesetzt.
    3. Ohne Timer kannst du das eig. so gut wie nicht lösen außer du benutzt eine sleep funktion(gibts irgendwo bei den CodeSchnipseln
    4. Das ist mir noch aufgefallen, du removest nur die Box und sonst keine anderen Textdraws( du zeigst 4 an und machst nur 1 weg)

  • 3. Ohne Timer kannst du das eig. so gut wie nicht lösen außer du benutzt eine sleep funktion(gibts irgendwo bei den CodeSchnipseln)

    das stimmt so NICHT.
    Bei dem Beispiel geht es nicht ohne Timer.
    Aber z.B. bei Jobbefehlen (Du musst noch x Minuten warten) ist das sehr hilfreich.


    Benutze einen Timer, und beachte die Sachen meines Vorposters.

  • Das funktioniert schon mit Timestamps. Oftmals verwende ich einen Sekunden-Timer im Script, der Dinge wie spielerspezifische Paydays (3600 Sekunden) etc. handhabt. Also:



    #pragma unused onSecondTimerHandle;


    new oneSecondTimerHandle,
    commandFailureTimestamp[MAX_PLAYERS] = {-1, ...};


    public OnGameModeInit() {
    oneSecondTimerHandle = SetTimer("oneSecondTimer", 1000, true);
    }


    forward oneSecondTimer();
    public oneSecondTimer() {
    if(commandFailureTimestamp[playerid] != -1 && gettime() - commandFailureTimestamp[playerid] >= 5) {
    PlayerTextDrawHide(playerid, noCmdBox[playerid]);
    PlayerTextDrawHide(playerid, noCmdText[playerid]);
    PlayerTextDrawHide(playerid, noCmdBad[playerid]);
    PlayerTextDrawHide(playerid, noCmdBefehl[playerid]);
    commandFailureTimestamp[playerid] = -1;
    }
    }


    public OnPlayerCommandPerformed(playerid,cmdtext[],success) {
    if(!success && commandFailureTimestamp[playerid] == -1) {
    PlayerTextDrawShow(playerid, noCmdBox[playerid]);
    PlayerTextDrawShow(playerid, noCmdText[playerid]);
    PlayerTextDrawShow(playerid, noCmdBad[playerid]);
    PlayerTextDrawShow(playerid, noCmdBefehl[playerid]);
    commandFailureTimestamp[playerid] = gettime();
    }


    return 1;
    }



  • 3. Ohne Timer kannst du das eig. so gut wie nicht lösen außer du benutzt eine sleep funktion(gibts irgendwo bei den CodeSchnipseln


    Ja die gibts... hier nennt sie sich "wait" aber auch hier läuft eine Schleife, was nicht wirklich sparender ist :/

    stock wait(seconds)
    {
    new _newTime[4], _oldTime[4];
    gettime(_oldTime[0], _oldTime[1], _oldTime[2]);
    _oldTime[3] = _oldTime[2] + (_oldTime[1] * 60) + (_oldTime[0] * 600);
    while(_newTime[3] != (_oldTime[3] + seconds)) //Hier die Schleife, die dann die sekunden abläuft
    {
    gettime(_newTime[0], _newTime[1], _newTime[2]);
    _newTime[3] = _newTime[2] + (_newTime[1] * 60) + (_newTime[0] * 600);
    }
    }

  • Er meint wohl das:
    [ MAKRO ] Sleep Funktion
    Funktioniert aber mit Timer.
    Dein Code lässt den ganzen Server einfrieren ... Nicht besonders zu empfehlen.