Timeban-System (Zeit wird falsch gespeichert oder ausgelesen)

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
  • zuerst der Befehl, dort habe ich mit SetPVarInt gearbeitet da mein Accountsystem damit verknüpft ist:


    ocmd:tban(playerid,params[])
    {
    new pID,grund[64],str[165],dauer;
    new timestamp;
    timestamp = gettime();
    new sekunden = dauer * 60;
    timestamp += sekunden;
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ERROR,""#NOTADMIN"");
    if(sscanf(params, "uis", pID, dauer, grund))return SendClientMessage(playerid,ROT,"FEHLER: {FAFAFA}/tban [SpielerName] [Dauer(in Minuten)] [Grund]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"FEHLER: {FAFAFA}Der Spieler ist nicht online.");
    format(str,sizeof(str),"[TIMEBAN] %s (ID:%i) wurde von %s (ID:%i) für %d Minuten gebannt. Grund: %s",SpielerName(pID),pID,SpielerName(playerid),playerid,dauer,grund);
    SendClientMessageToAll(COLOR_LIGHTRED,str);
    ShowTBox(playerid, "TIMEBAN" ,"~g~Spieler wurde gebannt.",3);
    ShowTBox(pID, "TIMEBAN" ,"~r~Du wurdest gebannt.",3);
    SetPVarInt(playerid,"tban",timestamp);
    Kick(playerid);
    return 1;
    }


    und die Speicherung funktioniert zumindest kommen da viel stellige Zahlen und wenn mann sich connectet wird es so abgefragt:


    if(gettime() < GetPVarInt(playerid,"tban"))
    {
    new differenz = GetPVarInt(playerid,"tban") - gettime();
    new minuten = differenz / 60;
    new str[64];
    format(str,sizeof(str),"Du bist noch %i Minuten gebannt,du wirst nun Automatisch gekickt.",minuten);
    SendClientMessage(playerid,COLOR_LIGHTRED,str);
    ShowTBox(playerid, "KICK" ,"~r~Du wurdest gekickt.",3);
    Kick(playerid);
    }
    else
    {
    SetPVarInt(playerid,"tban",0);
    }


    Problem ist das ich mich normal einloggen kann und ich weiß nicht was ich da falsch gemacht habe, speichern tut es viele Zahlen.
    Danke im Voraus für weitere hilfe (ist mein Erstes mal mit Timeban).


    MFG

  • Du erstellst die Variable "dauer", rechnest dann 60 * dauer und liest dann den Wert ein. Es wird also immer 60 * 0 gerechnet. Auf Codestruktur achten!

  • also so? würdest du mir das bitte etwas deutlicher erklären bzw. zeigen?
    ocmd:tban(playerid,params[])
    {
    new pID,grund[64],str[165],dauer;
    new timestamp;
    timestamp = gettime();
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ERROR,""#NOTADMIN"");
    if(sscanf(params, "uis", pID, dauer, grund))return SendClientMessage(playerid,ROT,"FEHLER: {FAFAFA}/tban [SpielerName] [Dauer(in Minuten)] [Grund]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"FEHLER: {FAFAFA}Der Spieler ist nicht online.");
    format(str,sizeof(str),"[TIMEBAN] %s (ID:%i) wurde von %s (ID:%i) für %d Minuten gebannt. Grund: %s",SpielerName(pID),pID,SpielerName(playerid),playerid,dauer,grund);
    SendClientMessageToAll(COLOR_LIGHTRED,str);
    new sekunden = dauer * 60;
    timestamp += sekunden;
    ShowTBox(playerid, "TIMEBAN" ,"~g~Spieler wurde gebannt.",3);
    ShowTBox(pID, "TIMEBAN" ,"~r~Du wurdest gebannt.",3);
    SetPVarInt(playerid,"tban",timestamp);
    Kick(playerid);
    return 1;
    }

  • Korrekt. Funktioniert es? Speicherst du denn den Timestamp, mit welchem du anschließend vergleichst?