Timer auslesen?

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
  • Gibt es eine Möglichkeit, die Restzeit von einem Timer auszulesen bzw. auszugeben? Könnte natürlich jede Sekunde abfragen, aber das frisst doch sehr viele Ressourcen, oder nicht? Gibt es andere Techniken?

    Greetz

  • Naja, wenn ich einen Timer auf eine Minute stelle und ich nach 30 Sekunden bspw. einen Befehl eingebe und mir wird die Restzeit angezeigt, die noch fehlt, bis der Timer aufgerufen wird ..
    PawnLike: Schade, auch nicht mit einer umständlichen Methode? :thumbup:

    Greetz

  • Ich denke, wenn er z.B. einen Timer hat, der alle 5 Minuten aufgerufen wird, und dann eine SendClientMessage kommt.
    Wenn der aber dann nach 2 Minuten offline geht, bleibt logischerweise ja nur noch 3 Minuten über.
    Ich denke mal, er will das so machen, wenn er dann wieder connected, die restlichen 3 Minuten weiter laufen, und dann die SendClientMessage kommt.
    Wenn ich da falsch liege, dann korrigiert mich.
    Ob das funktioniert, das weiß ich nicht, aber ich denke schon, funktioniert bei einem PayDay Script ja auch ^^


    Grüße,
    TheBester


  • Das ist genau das, was ich machen will.. Irgendwie muss es ja gehen!

    Greetz

  • easy ;)
    Variablen:
    new TimerCount;
    wenn du den Timer abrufst:
    TimerCount = gettime()+60*5 //60 Sekunden * 5 = 5 Minuten
    Restzeit abrufen:
    new RestZeit = TimerCount-gettime();//Gibt die Sekunden aus


    Erklärung: gettime() gibt die Zeit seit dem 1.1.1970 (oder sowas) in Sekunden aus. Dann addierst du deine Zeit und beim Abfragen ziehst du die neue gettime() ab,



    mfg HB :thumbup:

  • Anstatt einen Timer mit der gesamten Zeit zu setzen setzt du einen Timer auf z.B. 1 Sekunde.
    SetTimer("Timername",1000,false);
    So, jetzt zählst du eine Variable immer weiter hoch:
    TimerCounter;
    public Timername(){
    TimerCounter++;
    }
    Und jetzt können wir damit ganz einfach arbeiten:
    public Timername(){
    TimerCounter++;
    if(TimerCounter >= 60){ // Eine Minute (60 Sekunden) ist vergangen
    //Hier ne Aktion
    }
    }


    Hoffe du hast das Prinzip verstanden.
    Du kannst dir die Zeit natürlich immer über die Variable ausgeben lassen.



    //EDIT: Die Lösung von HardBase ist für solche Fälle natürlich ebenfalls, wenn nicht sogar besser geeignet.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Resourcenverbrauch ist natürlich geringer, da hast du Recht ;)
    Habe ja die Anmerkung unter meinen Post hinzugefügt.


    Meine Methode kannst du unter Umständen aber in einen bereits bestehenden Timer Integrieren.
    Dann tut sich da auch nicht viel, weil ne Abfrage nicht wirklich viel Zeit in Anspruch nimmt.

  • Meine Methode kannst du unter Umständen aber in einen bereits bestehenden Timer Integrieren.
    Dann tut sich da auch nicht viel, weil ne Abfrage nicht wirklich viel Zeit in Anspruch nimmt.


    Deine Methode ist an sich schon gut, verwende ich bei großen Abständen.
    Mit dem Integrieren in bestehende bin ich eher vorsichtig,
    wenn der Timer so ausgelegt ist, dass er alle X Minuten aufgerufen werden soll, ist es nicht so gut wenn die User jede Sekunde einen EXP Punkt bekommen :D
    Nur ein kleines Beispiel ^^

  • Eine Frage hätte ich schon noch^^ Wenn ich jetzt bspw. mit meinem Jailsystem arbeite und die Zeit ausgeben will, die noch verbleibt, wenn man einen Command eingibt, wie mache ich das am besten? Der Timer wird ja woanders aufgerufen (/jail) als im Command (/test) und somit ist die Variable auch nur dort deklariert..

    Greetz

  • Du hast mehrere Optionen:
    1. Meine Lösung von oben
    - Kann man hier eigentlich ganz gut verwenden, benutze ich an der Stelle ebenfalls.



    2. Die Variable für die Zeit Global als Array für alle Spiele Definieren
    - Kannst du dann ganz leicht wieder rechnen wie HardBase es dir empfohlen hat.
    new KnastZeit[MAX_PLAYERS];
    // Ein Array in dem wir die Zeit abspeichern wann der Timer eigentlich endet
    //----
    // Beim Einbuchten dann
    KnastZeit[playerid] = gettime()+gesamtzeit;


    Zurückrechnen:
    new rest = KnastZeit[playerid]-gettime();