TimeBan Tage

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,


    also ich möchte einfach ein TimeBan System Scripten mit Tagen.


    Der dann halt auch mit gettime usw arbeitet.


    Grundsachen sind alle vorhanden wie das enum pBanDauer wird alles gespeichert und geladen.


    Hab mich schon auf Breadfish usw umgeguckt, finde aber jetzt nur Tutorials


    mit Minuten oder Stunden, andere sind veraltet.


    Komme vorallem mit den Zeiten durcheinander wie viele Millisekunden, Minuten Tage sind usw usw.


    Könnte mir da jemand vielleicht eine erklärte Vorlage machen?


    mfg

  • timestamp = gettime(); //Der Timestamp ist der momentane Zeitpunkt in Sekunden nach 1. Januar 1970
    new sekunden = dauer * 86400; //Die Banzeit ist die dauer (Tage) mal 86400 damit es in Sekunden ist.
    timestamp = timestamp + sekunden; //Der Bann ist vorbei wenn die jetzige Zeit + die Banndauer vorbei ist

    In der Datenbank speicherst du dann die timestamp Variable, und bei der Bannabfrage guckst du ob gettime() mehr ist als der timestamp wenn Ja; Bann abgelaufen.

  • Was? Das kannst du nicht anders machen.
    Du speicherst so den Timestamp und fragst ihn dann ab.
    Du könntest höchstens das Datum in einem String speichern und dann vergleichen ob es das gleiche Datum ist, aber warum solltest du das machen?


    Ich verstehe nicht wirklich was du haben möchtest.
    So wie ich es gepostet habe, kannst du jemanden für x Tage Bannen. (Die variable dauer sind dann die Tage)

  • Das oben ist die Version mit Tagen, wenn du das nicht meinst, dann erklär uns bitte, worauf du hinausgehen möchtest.


    Dauer * 86400 sind X Tage in Sekunden.
    Setzt sich aus *60 für Minuten, *60 für Stunden und *24 für Tage zusammen.


    Wenn du richtige Hilfe magst, dann hör auf über Vorlagen zu reden und sag ganz genau, was du haben möchtest und bring wenigstens ein Konzept mit.


    Eine Version für Stunden gibt es nicht, man kann lediglich mit dem Timestamp arbeiten ohne es extrem kompliziert und unnötig zu gestalten.

  • Einfach einen genau erklärten Code, wo die die verschiedenen Funktionen erklärt und zugeorndet & gezeigt werden


    (in den einzelnen Publics )




    Der Code sieht bisher so aus, bisher funktioniert aber garnichts, da ich das alles mit gettime auch nicht wirklich raffe,


    wenn ich Online komme steht da meistens so was wie "du bist noch für -128459201 Minuten gebannt"


    ich meine wieso zieht man da einfach -gettime ab ? Woher soll der server denn eig wissen wann die banzeit vorbei ist?



    https://pastebin.com/5yaGyGX3

  • Du rechnest es auch falschrum.

    Nein, das ist schon richtig rum.



    Der Fehler liegt hier:
    new bisgebannt = cache_get_value_name_int(0, "pBanDauer", PlayerInfo[playerid][pBanDauer]);
    if(PlayerInfo[playerid][pBanDauer]>=1)
    zu:
    new bisgebannt;
    cache_get_value_name_int(0, "pBanDauer", bisgebannt);
    PlayerInfo[playerid][pBanDauer] = bisgebannt;
    if(PlayerInfo[playerid][pBanDauer]>=1)


    und
    new minuten = timebanned / 86400;
    zu:
    new minuten = timebanned / 60;

  • Der Wert "pBanDauer" liegt bei dem Spieler derzeit bei 4 (unverändert)

    Das kann nicht richtig sein, dort muss ein Timestamp drin stehen. Du gibst den Werte ja in Tagen an, rechnest ihn dann *60*60*24 plus den aktuellen Timestamp. 4 kann damit nicht richtig sein.
    Am besten du setzt das nochmal zurück und bannst den Spieler nochmal.

  • Davon bin ich ausgegangen. Du speicherst doch aber dort den Timestamp rein, bis wohin der Spieler gesperrt ist. 4 kann nicht sein. Das wäre 01.01.1970 00:00:04 Uhr.


    Edit:
    Sehe grade auch noch folgenden Fehler:
    if(gettime() > bisgebannt)
    Zu
    if(gettime() < bisgebannt)


    Sprich, wenn in der DB 4 steht, bist du eigentlich entsperrt.

  • Ahja, habe gerade nochmal nen neuen User genommen und den Befehl da ausgeführt, kann mich erinnern, gestern auf dem anderen


    account den wert per mysql auf 4 gesetzt zu haben.


    Hab alles so übernommen.



    Danke dir Jeffry, so klappts, jetzt sinds 4315 minuten mit 3 tagen bann ^^

  • Danke dir Jeffry, so klappts, jetzt sinds 4315 minuten mit 3 tagen bann

    Gerne!
    Noch als Tipp, du kannst es auch so schreiben:
    new tage = timebanned / 86400;
    timebanned -= tage * 86400;
    new stunden = timebanned / 3600;
    timebanned -= stunden * 3600;
    new minuten = timebanned / 60;
    timebanned -= minuten * 60;
    new sekunden = timebanned;
    new str[128];
    if(tage > 0) format(str,sizeof(str),"Du bist noch %i Tage, %i Stunden, %i Minuten und %i Sekunden gebannt!",tage,stunden,minuten,sekunden);
    else if(stunden > 0) format(str,sizeof(str),"Du bist noch %i Stunden, %i Minuten und %i Sekunden gebannt!",stunden,minuten,sekunden);
    else if(minuten > 0) format(str,sizeof(str),"Du bist noch %i Minuten und %i Sekunden gebannt!",minuten,sekunden);
    else format(str,sizeof(str),"Du bist noch %i Sekunden gebannt!",sekunden);