MySQL Ban System 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
  • Guten Tag,


    ich arbeite derzeit an meinem Ban System, welches wiederum in den Account des gebannten den Grund des bannes, sowie den Admin der den Spieler gebannt hat speichert.
    Letztendlich wird es nicht gespeichert, hier mal ein bisschen Code. :whistling:
    ocmd:ban(playerid,params[])
    {
    new pID,string[128],reason[31];
    if(!isPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,COLOR_GRAU,"Du kannst diesen Befehl nicht benutzen.");
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,COLOR_WRONG,"Benutze: /ban [ID/Teilname][Grund]");
    if(strlen(reason) > 30)return SendClientMessage(playerid,COLOR_WRONG,"Benutze: /ban [ID/Teilname][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 bannen.");
    if(playerid != pID)
    {
    if(SpielerInfo[pID][pAdminlevel] > SpielerInfo[playerid][pAdminlevel])return SendClientMessage(playerid,COLOR_GRAU,"Diesen Befehl kannst du bei dieser Person nicht benutzen.");
    }
    SpielerInfo[pID][pGebannt] = 1;
    format(string,sizeof(string),"%s hat den Spieler %s gebannt, Grund: %s",SpielerInfo[playerid][pName],SpielerInfo[pID][pName],reason);
    SendAdminMessage(COLOR_ROT,string);
    format(string,sizeof(string),"Name:%s | Admin:%s | Grund:%s\n",SpielerInfo[pID][pName],SpielerInfo[playerid][pName],reason);
    Log("Banlog",string);
    mysql_SetString("accounts", "Ausfuehrender", SpielerInfo[playerid][pName], "Name", SpielerInfo[playerid][pName]);
    mysql_SetString("accounts", "Grund",reason, "Name", SpielerInfo[playerid][pName]);
    BanUser(pID,SpielerInfo[playerid][pName],"Gebannt");
    return 1;
    }


    und das auslesen klappt irgendwie auch nicht ganz :whistling:
    new string[128];
    format(string,sizeof(string),"Dieser Account ist gesperrt, mit ihm kann nicht mehr gespielt werden.\n\nAusführendes Team-Mitglied: %s\nGrund: %s\nDauer: Permanent",SpielerInfo[playerid][pAusfuehrender],SpielerInfo[playerid][pGrund]);
    ShowPlayerDialog(playerid,DIALOG_GEBANNT,DIALOG_STYLE_MSGBOX,"{00AFFF}"#SERVERNAME"{FFFFFF}: Information",string,"Verlassen","");

  • Ich glaube ich laufe gerade komplett an deiner Hilfe vorbei, kann das sein? :whistling:
    mysql_SetString("accounts", "Ausfuehrender", SpielerInfo[playerid][pName], "Name", SpielerInfo[playerid][pName]);
    mysql_SetString("accounts", "Grund",reason, "Name", SpielerInfo[playerid][pName]);
    BanUser(pID,SpielerInfo[playerid][pName],"Gebannt");
    mysql_query(string);

  • Mein System mag mich glaube ich nicht, zumindest also hier.
    In der MySQL Log wird es kurz gesetzt bzw wiedergeben, wird aber nach der Funktion danach wieder überspielt.

    Code
    [21:18:08] CMySQLHandler::Query(UPDATE `accounts` SET `Ausfuehrender`='Excuse',`Grund` = 'Hacker' WHERE `Name`='Excuse') - Successfully executed.
    [21:18:08] >> mysql_query( Connection handle: 1 )
    [21:18:08] CMySQLHandler::Query(UPDATE `accounts` SET `Gebannt` = '1',`Ausfuehrender` = '',`Grund` = '' WHERE Name='Excuse') - Successfully executed.
    [21:18:09] >> mysql_query( Connection handle: 1 )


    new query[128];
    format(query,128,"UPDATE `accounts` SET `Ausfuehrender`='%s',`Grund` = '%s' WHERE `Name`='%s'",SpielerInfo[playerid][pName],reason,SpielerInfo[playerid][pName]);
    mysql_query(query);

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du verstehst das falsch:


    %s ist ein Platzhalter für einen string ;)


    einen string sollte man formatieren


    den platzhalter für das format sollte man angeben


    Der letze parameter für format heißt {Float,_}:...)
    Da vo du die werte eintragen lässt für den jeweiligen platzhalter also %.

  • Successfully executed.
    Succesfully heißt erfolgreich und executed ausgeführt
    Also kurz gesagt erfolgreich ausgeführt


    Verstehe nun dein Prob nicht ;)


    Hier wird das nach dem richtigen Wert direkt wieder überschrieben.

    Code
    [21:18:08] CMySQLHandler::Query(UPDATE `accounts` SET `Gebannt` = '1',[b]`Ausfuehrender` = '',`Grund` = '' WHERE Name='Excuse') - [/b]Successfully executed.
    [21:18:09] >> mysql_query( Connection handle: 1 )


    Warum willst du dich eigendlich selber bannen?


    Habe keine zum testen da. :D

  • Du gibst ja am ende WHERE Name = '%s' dass muss du auch am ende angeben so z.B


    stock getPlayerName(playerid){
    new name[24];
    GetPlayerName(playerid, name, 24);
    return name;
    }


    new query[128];
    format(query, sizeof(query), "UPDATE table SET variable = '%s' WHERE Name = '%s' ", string, getPlayerName(playerid));
    mysql_query(query);

  • Das ist unnötig, kann ich genauso SpielerInfo[pID][pName] benutzen.