Zeit berechnen, bis Sanktion abgelaufen ist?

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 Tag,


    ich möchte derzeit ein Timeban System sowie ein Prison System erstellen, in diesem man(n) lediglich seine Zeit absitzen muss.
    Sprich ich banne den Spieler für eine gewisse Zeit und berechne die Zeit bis er wieder entbannt werden sollte und frage das dann ab.
    Wie funktioniert das genau? :whistling:

  • Würde das gehen?
    ocmd:tban(playerid,params[])
    {
    new pID,reason[31],zeit,string[256],cmd[15],zeitdauer,query[128];
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,COLOR_GRAU,"Du kannst diesen Befehl nicht benutzen.");
    if(sscanf(params,"udss",pID,zeit,cmd,reason))return SendClientMessage(playerid,COLOR_WRONG,"Benutze: /tban [ID/Teilname][Zeit][Minuten/Stunden/Tage/Wochen][Grund]");
    if(strlen(reason) > 30)return SendClientMessage(playerid,COLOR_WRONG,"Benutze: /tban [ID/Teilname][Zeit][Minuten/Stunden/Tage/Wochen][Grund]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_GRAU,"Der angegebene Spieler ist nicht eingeloggt.");
    if(IsPlayerNPC(pID))return SendClientMessage(playerid,COLOR_GRAU,"Einen NPC kannst du nicht timebannen.");
    if(SpielerInfo[playerid][pAdminlevel] == 2)
    {
    if(SpielerInfo[pID][pAdminlevel] > SpielerInfo[playerid][pAdminlevel])return SendClientMessage(playerid,COLOR_GRAU,"Diesen Befehl kannst du bei dieser Person nicht benutzen.");
    }
    if(strcmp(cmd,"Wochen",true) == 0)
    {
    zeitdauer = gettime()+(60*60*24*7*zeit);//in wochen
    format(string,sizeof(string),"%s hat den Spieler %s für %i Woche/n gebannt, Grund: %s",SpielerInfo[playerid][pName],SpielerInfo[pID][pName],zeit,reason);
    SendClientMessageToAll(COLOR_ROT,string);
    format(query,128,"UPDATE `accounts` SET `Ausfuehrender`='%s',`Grund` = '%s' WHERE `Name`='%s'",SpielerInfo[playerid][pName],reason,SpielerInfo[pID][pName]);
    mysql_query(query);
    format(query,128,"UPDATE `accounts` SET `Zeit`='%s' WHERE `Name`='%s'",zeitdauer,SpielerInfo[pID][pName]);
    mysql_query(query);
    BanUser(pID,SpielerInfo[playerid][pName],reason,zeitdauer);
    return 1;
    }
    if(strcmp(cmd,"Tage",true) == 0)
    {
    zeitdauer = gettime()+(60*60*24*zeit);//in tagen
    format(string,sizeof(string),"%s hat den Spieler %s für %i Tag/e gebannt, Grund: %s",SpielerInfo[playerid][pName],SpielerInfo[pID][pName],zeit,reason);
    SendClientMessageToAll(COLOR_ROT,string);
    format(query,128,"UPDATE `accounts` SET `Ausfuehrender`='%s',`Grund` = '%s' WHERE `Name`='%s'",SpielerInfo[playerid][pName],reason,SpielerInfo[pID][pName]);
    mysql_query(query);
    format(query,128,"UPDATE `accounts` SET `Zeit`='%s' WHERE `Name`='%s'",zeitdauer,SpielerInfo[pID][pName]);
    mysql_query(query);
    BanUser(pID,SpielerInfo[playerid][pName],reason,zeitdauer);
    return 1;
    }
    if(strcmp(cmd,"Stunden",true) == 0)
    {
    zeitdauer = gettime()+(60*60*zeit);//in stunden
    format(string,sizeof(string),"%s hat den Spieler %s für %i Stunde/n gebannt, Grund: %s",SpielerInfo[playerid][pName],SpielerInfo[pID][pName],zeit,reason);
    SendClientMessageToAll(COLOR_ROT,string);
    format(query,128,"UPDATE `accounts` SET `Ausfuehrender`='%s',`Grund` = '%s' WHERE `Name`='%s'",SpielerInfo[playerid][pName],reason,SpielerInfo[pID][pName]);
    mysql_query(query);
    format(query,128,"UPDATE `accounts` SET `Zeit`='%s' WHERE `Name`='%s'",zeitdauer,SpielerInfo[pID][pName]);
    mysql_query(query);
    BanUser(pID,SpielerInfo[playerid][pName],reason,zeitdauer);
    return 1;
    }
    if(strcmp(cmd,"Minuten",true) == 0)
    {
    zeitdauer = gettime()+(60*zeit);//in minuten
    format(string,sizeof(string),"%s hat den Spieler %s für %i Minute/n gebannt. Grund: %s",SpielerInfo[playerid][pName],SpielerInfo[pID][pName],zeit,reason);
    SendClientMessageToAll(COLOR_ROT,string);
    format(query,128,"UPDATE `accounts` SET `Ausfuehrender`='%s',`Grund` = '%s' WHERE `Name`='%s'",SpielerInfo[playerid][pName],reason,SpielerInfo[pID][pName]);
    mysql_query(query);
    format(query,128,"UPDATE `accounts` SET `Zeit`='%s' WHERE `Name`='%s'",zeitdauer,SpielerInfo[pID][pName]);
    mysql_query(query);
    BanUser(pID,SpielerInfo[playerid][pName],reason,zeitdauer);
    return 1;
    }
    return 1;
    }


    //Edit:Code bearbeitet
    //Edit:Code bearbeitet


    2 Mal editiert, zuletzt von SA:MP-Designs () aus folgendem Grund: //Edit:Code bearbeitet //Edit:Code bearbeitet

  • Wie frage ich nun ab, ob der momentane Timestamp größer als der in der Datenbank ist, um den Spieler zu entbannen?
    Habe das jetzt so, der Wert wird aber in der Datenbank nicht gesetzt.
    if(strcmp(cmd,"Minuten",true) == 0)
    {
    zeitdauer = gettime()+(60*zeit);//in minuten
    format(string,sizeof(string),"%s hat den Spieler %s für %i Minute/n gebannt. Grund: %s",SpielerInfo[playerid][pName],SpielerInfo[pID][pName],zeit,reason);
    SendClientMessageToAll(COLOR_ROT,string);
    format(query,128,"UPDATE `accounts` SET `Ausfuehrender`='%s',`Grund` = '%s' WHERE `Name`='%s'",SpielerInfo[playerid][pName],reason,SpielerInfo[pID][pName]);
    mysql_query(query);
    format(query,128,"UPDATE `accounts` SET `Zeit`='%s' WHERE `Name`='%s'",zeitdauer,SpielerInfo[pID][pName]);
    mysql_query(query);
    SavePlayer(pID);
    SetTimerEx("KickDelayed",100,0,"i",pID);
    return 1;
    }


    //Edit:text
    //Edit:text


    2 Mal editiert, zuletzt von SA:MP-Designs () aus folgendem Grund: //Edit:text //Edit:text

  • format(query,128,"UPDATE `accounts` SET `Zeit`='%d' WHERE `Name`='%s'",zeitdauer,SpielerInfo[pID][pName]);
    Zeit ist ein Integer, daher %d.



    Suchen, wer entbannt werden soll kannst du so:
    format(query, 128, "SELECT * FROM accounts WHERE Zeit < %d", gettime());

  • format(query,128,"UPDATE `accounts` SET `Zeit`='%d' WHERE `Name`='%s'",zeitdauer,SpielerInfo[pID][pName]);
    Zeit ist ein Integer, daher %d.



    Suchen, wer entbannt werden soll kannst du so:
    format(query, 128, "SELECT * FROM accounts WHERE Zeit < %d", gettime());


    Funktioniert nicht, der Wert wird nicht gesetzt..

  • Dann schalte mal den MySQL Debug Modus an und poste hier was in der Server_log steht wenn du den Befehl ausführst.


    Prüfe Bitte auch ob du in deiner Datenbank die Felder gleich genannt hast wie in dem query hier. Nicht dass da Tippfehler drin sind.