gettime | Timestamp

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
  • Guten Abend,


    Mein Name lautet CIBERKILLER.
    Und zwar hätte ich da mal eine Frage.


    Ich möchte einen Timeban in mein Skript hinzufügen & frage mich dann immer.


    Wie genau soll das ganze Funktionieren.


    SpielerInfo[playerid][sTimeBan] = gettime() * 60;


    Ich hatte an sowas hier gedacht, aber wie läuft das ding automatisch ab.


    Läuft es noch automatisch ab wenn der Server sich kurz neustartet.


    Wie kann ich bei einloggen so eine nachricht übergeben lassen, (du bist noch für %i Tage | %i Stunden | %i Minuten | %i Sekunden gebannt)


    Und da hätte ich an sowas gedacht.


    days = floatround(restzeit / 86400,floatround_floor);
    hours = restzeit - (days * 86400);
    hours = floatround(hours / 3600,floatround_floor);
    mins = restzeit - ( (days * 86400) + (hours * 3600) );
    mins = floatround(mins / 60,floatround_floor);


    Aber sicher bin ich mir nicht!



    mfg :thumbup:

  • Eine kleine Erklärung zum UNIX Timestamp:


    Die Funktion gettime() liefert einen UNIX Timestamp zurück, welcher die Sekunden seit dem 01.01.70 beinhaltet.
    Mittels dieser Funktion lassen sich gewissen Zeitpunkte / Zeitdifferenzen berechnen und standardisiert ausgeben.


    Wenn Du also einen Timeban erstellen möchtest, musst Du einfach den Timestamp des Ablaufdatums speichern, bspw. so:


    //Dauer in Minuten = 5, Sekunden = 300
    new duration = gettime() + 300;


    Diesen Wert speicherst Du nun in der Datenbank, Datei, whatever.


    Nun musst Du beim Login nur noch abfragen, ob eben genau dieser Wert in der Zukunft liegt.
    Also wie war das noch mal mit dem Timestamp?
    Sekunden seit dem 01.01.1970.
    Daraus lässt sich erblicken, dass ein Timestamp von der Zukunft größer sein muss, als der aktuelle.


    duration = /* Hier den Wert aus der Datenbank auslesen */;
    if(duration > gettime()){ //mittels gettime() wieder den aktuellen Timestamp auslesen und vergleichen.
    //noch gesperrt
    }else{
    //nicht (mehr) gesperrt
    }


    Die Dauer der noch gebannten Zeit berechnest Du, indem Du den aktuellen Timestamp von dem Wert aus der DB abziehst.
    Dies sind dann die noch verbleibenden Sekunden.


    Umrechnen dann so:
    Sekunden umrechnen ?

  • Ich habe das ganze nun mal so geschrieben.


    SpielerInfo[userid][sTimeBan] = gettime() + (60*value);


    if((gettime()<SpielerInfo[playerid][sTimeBan] && SpielerInfo[playerid][sTimeBan] != 0))
    {
    new days,hours,mins,wartezeit = SpielerInfo[playerid][sTimeBan],restzeit= wartezeit -gettime();
    days = floatround(restzeit / 86400,floatround_floor),
    hours = restzeit - (days * 86400),
    hours = floatround(hours / 3600,floatround_floor),
    mins = restzeit - ( (days * 86400) + (hours * 3600) ),
    mins = floatround(mins / 60,floatround_floor);
    format(string, sizeof(string), "Timeban: {FFFFFF}Du bist noch für %i Tage %i Stunden und %i Minuten gesperrt!", days, hours, mins),
    SendClientMessage(playerid, Orange, string), KickEx(playerid);
    return 1;
    }
    SpielerInfo[playerid][sTimeBan] = 0;


    Dies klappt ganz gut.


    Auserdem habe ich nun das Prinzip des "Systems" verstanden.


    So später es wird, so größer wird der Timestamp in gettime().


    Das heißt also wenn ich das ganze mal 60 nehme, und wenn dann nach jedem login abgefragt wird ob der aktuell timestamp größer als der alte, dann ist der spieler noch gesperrt!


    mfg :thumbup: