Ban Problem

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,


    Ich habe ein Ban system aber anstatt das es sich auf 1 setzt, setzt es sich auf -1 oder bleibt auf 0 kann mir jemand helfen?




    enum SpielerDaten
    {
    pid,
    pName[50],
    pPass[128],
    pLevel,
    pAdminLevel,
    pGeld,
    pIP,
    pKills,
    pTode,
    pWarns,
    pKD,
    pRegistrierdatum,
    pLetzterLogin,
    pSkin,
    pBan,
    pBanGrund[32],
    pBanAdmin[32],
    pBanZeit[32],
    pTimeBan,
    pTimebangrund,
    pTimebanadmin,
    pTimebanzeit,
    pPremium,
    pSpielSekunden,
    pMute,
    pWanteds,
    pInPrison,
    pPrisonCPsgegeben,
    pPrisonCPsgelaufen,
    pPrisonDMWarns,
    pLogins,
    pLoginfails,
    pEingeloggt,
    pAdminduty,
    Float:pHealth
    }



    ocmd:ban(playerid,params[])
    {
    new pID, reason[20], string[126], query[126];
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,COLOR_RED,"Du bist kein Teammitglied./Du hast nicht den jeweiligen Adminrang.");
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid, COLOR_RED,"{FFD200}Benutze:{FEFEFE}/Ban [ID] [Grund]");
    format(string, sizeof(string), "* Du wurdest vom Administrator %s vom Server gebannt. Grund: %s", PlayerName(playerid), reason);
    SendClientMessage(playerid, COLOR_RED, string);
    format(query, sizeof(query), "INSERT INTO `bans` (`IP`,`name`,`grund`,von,zeit) VALUES ('%s','%s','%s','%s','Permanent')",SpielerIP(pID),PlayerName(pID),reason,PlayerName(playerid),gettime());
    mysql_query(query);
    mysql_SetInt("bans", "ban", 1, "Name", PlayerName(pID));
    Kick(pID);
    return 1;
    }




    stock Checkban(playerid)
    {
    new query[235];




    format(query, sizeof(query), "SELECT * FROM bans WHERE (name = '%s') AND ban = 1", PlayerName(playerid));
    mysql_query(query);



    mysql_store_result();
    if(mysql_num_rows() >= 1)
    {
    new dialogText[399];
    while(mysql_fetch_row_format(query,"|"))
    {
    format(PlayerInfo[playerid][pBanGrund], 32, mysql_GetString("bans", "grund", "Name", PlayerName(playerid)));
    format(PlayerInfo[playerid][pBanAdmin], 32, mysql_GetString("bans", "von", "Name", PlayerName(playerid)));
    format(PlayerInfo[playerid][pBanZeit], 32, mysql_GetString("bans", "zeit", "Name", PlayerName(playerid)));
    format(dialogText, sizeof(dialogText), "Du wurdest von ausgeschlossen.\nHier sind Informationen, die für z.B. einen Entbannantrag nützlich sein könnten.\n\nGrund der Sperre: %s\nGesperrt von: %s\nTyp der Sperre: Account-Sperre\nDauer der Sperre: %s\n\nDie Verbindung wird nun getrennt",PlayerInfo[playerid][pBanGrund],PlayerInfo[playerid][pBanAdmin],PlayerInfo[playerid][pBanZeit]);
    ShowPlayerDialog(playerid, dialogThreadBanned, DIALOG_STYLE_MSGBOX, "» Baninformation", dialogText, "Schliessen", "");
    }
    return 1;
    }
    mysql_free_result();



    return 0;
    }

  • Wieso machst du dir das so umständlich ?
    Füg es doch direkt mit in der Spielerspalte ein statt unnötige weitere Einträge in der SQL Datenbank anzulegen.
    Und du hast bei Zeit nur gettime stehen. Statt die Anzahl umgerechnet dazu zu rechnen. Das kann nicht funktionieren also selbst wenn er dein Wert richtig gesetzt hätte.


    mfg

    RFT

  • Füg es doch direkt mit in der Spielerspalte ein statt unnötige weitere Einträge in der SQL Datenbank anzulegen.

    Das ist eine schlechte Idee, vor allem für Auswertungen und wenn man mal eine IP sperren will, die mit keinem Spieler verbunden ist.


    Und du hast bei Zeit nur gettime stehen. Statt die Anzahl umgerechnet dazu zu rechnen. Das kann nicht funktionieren also selbst wenn er dein Wert richtig gesetzt hätte.

    Das war in dem Fall egal, da der Parameter im format nicht genutz wurde, da er direkt im Wert "Permanent" eingetragen hat, so gab es keinen fünften Platzhalter, in den gettime gefüllt werden würde.



    Versuche es so:
    ocmd:ban(playerid,params[])
    {
    new pID, reason[20], string[145], query[256];
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,COLOR_RED,"Du bist kein Teammitglied./Du hast nicht den jeweiligen Adminrang.");
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid, COLOR_RED,"{FFD200}Benutze:{FEFEFE}/Ban [ID] [Grund]");
    format(string, sizeof(string), "* Du wurdest vom Administrator %s vom Server gebannt. Grund: %s", PlayerName(playerid), reason);
    SendClientMessage(playerid, COLOR_RED, string);
    format(query, sizeof(query), "INSERT INTO `bans` (`ban`,`IP`,`name`,`grund`,von,zeit) VALUES ('1','%s','%s','%s','%s','Permanent')",SpielerIP(pID),PlayerName(pID),reason,PlayerName(playerid));
    mysql_query(query);
    Kick(pID);
    return 1;
    }


    Ich habe die Query-Länge angepasst, die war etwas kurz, und den "ban" Wert direkt im INSERT Query auf 1 gesetzt, das ist besser.