Timeban ~ gettime()

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, habe eben ein Timeban Befehl gemacht, doch wenn ich mich für eine Stunde banne, steht in der Spielerdatei:


    Zitat

    TBan=1370441323


    ???


    ocmd:tban(playerid,params[],string[128])
    {
    if(!isPlayerAnAdmin(playerid,4))return SendClientMessage(playerid,Rot,"Du bist kein 4*Admin!");
    new pID,zeit, reason[128];
    new Spielerdatei[64];
    if(sscanf(params,"uds",pID,zeit,reason))return SendClientMessage(playerid,HBlau,"Benutzung: /ban [ID] [Zeit (in Stunden)] [Grund]");
    //if(GetPVarInt(pID,"Adminlevel") >1338)return SendClientMessage(playerid,Rot,"Du darfst keinen (Co-)Owner bannen!");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s für %d Stunden gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),zeit,reason);
    SendClientMessageToAll(Rot,string);
    SpielerSpeichern(pID);
    dini_IntSet(Spielerdatei,"Banned",1);
    SetPVarInt(pID,"Banned",1);
    dini_IntSet(Spielerdatei,"TBan",gettime() + zeit);
    SetPVarInt(pID,"TBan",gettime() + zeit);
    Kick(pID);
    return 1;
    }


    Hab ich was falsch gemacht?

  • Wenn du gettime(); schreibst gibt er dir die Sekunden seit dem 1.1.1970 ab 1 Uhr raus. Das ist eine ganze Menge


    Du machst jetzt new stamp =gettime()+ 3600;


    Dann hast du die Sekundenzahl.


    Beim Login frägst du dann ab


    if(gettime() > stamp)


    Die Speicherung ist dir überlassen

  • hier erstellst du die Spielerdatei variable:
    new Spielerdate[64];



    und hier verwendest du die Spielerdatei variable:
    dini_IntSet(Spielerdatei,"Banned",1);
    dini_IntSet(Spielerdatei,"TBan",gettime() + zeit);


    ABER WO setzt du die Spielerdatei variable ? In der variable steht zu keinem Zeitpunkt der Pfad zur Spielerdatei, da dieser Pfad nirgends in Spielerdatei gespeichert wird...

  • Habs so gemacht:


    dini_IntSet(Spielerdatei,"TBan",gettime() + zeit*60*60);
    SetPVarInt(pID,"TBan",gettime() + zeit*60*60);


    &


    dini_IntSet(Spielerdatei,"TBan",gettime() + zeit/60/60);
    SetPVarInt(pID,"TBan",gettime() + zeit/60/60);


    Aber trotzdem noch so:


    Zitat

    TBan=1370446753



    Kommt genau das Gleiche


  • Stimmt noch nicht ganz.
    Du musst deine Zeit in Stunden in Sekunden umrechnen und zu dem aktuellen Timestamp addieren. Dann hast du die Zeit raus, bis wann der Spieler gebannt ist.


    zeit = (gettime()+(zeit*3600));


    Das Speicherst du in deiner Spielerdatei, doch du musst, wie d0. sagte den Pfad angeben.


    Wenn der Spieler connected, fragst du folgendes ab:


    if(gettime() < varausderdateigebanntbis)


    Dann musst du den Spieler kicken, da die aktuelle Zeit noch kleiner als die Zeit, bis wann er gebannt ist, ist. varausderdateigebanntbis ist hierbei die Spielervariable, die beim Laden gesetzt wird und den Gebannt bis Wert vom timeban hat.


  • new Spielerdatei[64];
    format(Spielerdatei,64,"/Accounts/%s.ini",SpielerName(playerid));


    Ich weiß wie du es meinst...



  • Habs so gemacht:


    zeit = (gettime()+(zeit*3600));
    dini_IntSet(Spielerdatei,"TBan",zeit);
    SetPVarInt(pID,"TBan",zeit)


    Aber immer noch das Gleiche X(

  • Was ist denn daran so schlimm? Der timestamp hat nun mal einen hohen Wert?


    Evtl solltest du dir klar machen, was ein timestamp ist.


    Ein timestamp gibt dir die Zeit in Sekunden seit dem 1.1.1970 zurück. Wenn du jetzt jmd für eine bestimmte Zeit bannen willst, kann man damit wunderbar arbeiten. Du musst die Zeit, für die du ihn bannen willst, in seks umrechnen und auf den aktuellen timestamp addieren. Dadurch bekommst du heraus, bis zu welcher Sekunde nach dem 1.1.1970 der Spieler gebannt ist. Wenn er nun connected, kannst du den neuen aktuellen timestamp mit dem gespeicherten vergleichen. Wenn der aktuelle timestamp größer als der gespeicherte ist, ist der Spieler nicht mehr gebannt, ansonsten ist er es noch.