Hilfe beim Adminsystem

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
  • Hallo liebe Leute,


    ich bin sehr neu in der SAMP Entwicklszene. Gerne möchte ich nun auch PAWN lernen und brauche hierzu noch ein wenig Unterstützung.
    Ich bin derzeit dabei ein Adminsystem aufzustellen. Das Kick System funktioniert soweit schonmal.
    Nun möchte ich den Banbefehl vervollständigen bzw erstellen.


    Derzeit habe ich folgendes aufgestellt



    ocmd:ban(playerid,params[])
    {
    if(PlayerInfo[playerid][adminlevel]< 1)return SendClientMessage(playerid,Adminfarbe,"Du darf diesen Befehl nicht verwenden!");
    new reason[40],string1[256];
    if(sscanf(params,"us",p_id,reason))return SendClientMessage(playerid,Adminfarbe,"Adminbefehl: ban [Player ID] [Grund]");
    format(string1,sizeof(string1),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerName(p_id),SpielerName(playerid),reason);
    SendClientMessageToAll(Adminfarbe,string1);
    getdate(jahr,monat,tag);
    format(string1,sizeof(string1),"INSERT INTO users(bannick,Typ,Grund,Tag,Monat,Jahr,timestamp)VALUES('%s','%s',%i,%i,%i,%i)",SpielerName(p_id),4,reason,tag,monat,jahr,gettime());
    MySQL_SetupConnection();
    PlayerInfo[p_id][banned] = 1;
    Kick(p_id);
    return 1;
    }


    Allerdings speichert er mir nicht die Werte wie gewünscht also in die Datenbank. Was habe ich hierbei vergessen oder falsch gemacht ?



    enum pDataEnum{ p_id, bool:pLoggedIn, pName[MAX_PLAYER_NAME], pLevel, pMoney, pKills, pDeaths, adminlevel, banned}


  • ocmd:ban(playerid,params[])
    {
    if(PlayerInfo[playerid][adminlevel]< 1)return SendClientMessage(playerid,Adminfarbe,"Du darf diesen Befehl nicht verwenden!");
    new reason[40],string1[256],query[125];;
    if(sscanf(params,"us",p_id,reason))return SendClientMessage(playerid,Adminfarbe,"Adminbefehl: ban [Player ID] [Grund]");
    format(string1,sizeof(string1),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerName(p_id),SpielerName(playerid),reason);SendClientMessageToAll(Adminfarbe,string1);
    getdate(jahr,monat,tag);
    format(query,sizeof(query),"INSERT INTO `users` (`bannick`,`Typ`,`Grund`,`Tag`,`Monat`,`Jahr`,`timestamp`) VALUES ('%s','%s',%i,%i,%i,%i)" ,SpielerName(p_id),4,reason,tag,monat,jahr,gettime());
    mysql_query(query);
    PlayerInfo[p_id][banned] = 1;
    Kick(p_id);
    return 1
    }

  • ocmd:ban(playerid,params[]){if(PlayerInfo[playerid][adminlevel]< 1)return SendClientMessage(playerid,Adminfarbe,"Du darf diesen Befehl nicht verwenden!");new reason[40],string1[256],query[125];;if(sscanf(params,"us",p_id,reason))return SendClientMessage(playerid,Adminfarbe,"Adminbefehl: ban [Player ID] [Grund]");format(string1,sizeof(string1),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerName(p_id),SpielerName(playerid),reason);SendClientMessageToAll(Adminfarbe,string1);getdate(jahr,monat,tag);format(query,sizeof(query),"INSERT INTO `users` (`bannick`,`Typ`,`Grund`,`Tag`,`Monat`,`Jahr`,`timestamp`) VALUES ('%s','%s',%i,%i,%i,%i)" ,SpielerName(p_id),4,reason,tag,monat,jahr,gettime());mysql_query(query);PlayerInfo[p_id][banned] = 1;Kick(p_id);return 1}

    nope



    Überprüfe nochmal die Query, da scheint ziemlich viel nicht zu stimmen.
    Außerdem führst du die Query nirgends aus.

    Wäre nett wenn du mir dabei behilflich wärst. Denn wiegesagt ich bin erst seit gestern dabei. Und luscher mir das alles zusammen

  • Versuche den Query mal so:


    format(string1,sizeof(string1),"INSERT INTO users (bannick, Typ, Grund, Tag, Monat, Jahr, timestamp) VALUES ('%s','%i','%s','%i','%i','%i','%i')",SpielerName(p_id), 4, reason, tag, monat, jahr, gettime());


    Und eben noch die Query ausführen. Wie du diese ausführst, kann ihr dir gerade nicht sagen, weil die Funktion von Plugin zu Plugin anders heißt.
    Falls es nicht geht, einfach nochmal melden.

  • Versuche den Query mal so:


    format(string1,sizeof(string1),"INSERT INTO users (bannick, Typ, Grund, Tag, Monat, Jahr, timestamp) VALUES ('%s','%i','%s','%i','%i','%i','%i')",SpielerName(p_id), 4, reason, tag, monat, jahr, gettime());Und eben noch die Query ausführen. Wie du diese ausführst, kann ihr dir gerade nicht sagen, weil die Funktion von Plugin zu Plugin anders heißt.
    Falls es nicht geht, einfach nochmal melden.


    Also wie folgt

    ocmd:ban(playerid,params[])
    {
    if(PlayerInfo[playerid][adminlevel]< 1)return SendClientMessage(playerid,Adminfarbe,"Du darf diesen Befehl nicht verwenden!");
    new reason[40],string1[256];
    if(sscanf(params,"us",p_id,reason))return SendClientMessage(playerid,Adminfarbe,"Adminbefehl: ban [Player ID] [Grund]");
    format(string1,sizeof(string1),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerName(p_id),SpielerName(playerid),reason);
    SendClientMessageToAll(Adminfarbe,string1);
    getdate(jahr,monat,tag);
    format(string1,sizeof(string1),"INSERT INTO users (bannick, Typ, Grund, Tag, Monat, Jahr, timestamp) VALUES ('%s','%i','%s','%i','%i','%i','%i')",SpielerName(p_id), 4, reason, tag, monat, jahr, gettime()); MySQL_SetupConnection();
    mysql_pquery(query);
    PlayerInfo[p_id][banned] = 1;
    Kick(p_id);
    return 1;
    }


    Er zeigt mir dann aber an das query nicht definiert ist. Definiere ich es folgen weitere Fehler

    Code
    C:\Users\valen\Desktop\MySQL Sciptfiles\gamemodes\beispiel.pwn(467) : warning 202: number of arguments does not match definitionC:\Users\valen\Desktop\MySQL Sciptfiles\gamemodes\beispiel.pwn(467) : warning 202: number of arguments does not match definitionPawn compiler 3.2.3664              Copyright (c) 1997-2006, ITB CompuPhase
    
    
    2 Warnings.
  • die Tabelle "users" ist deine "Haupt"-Tabelle oder?
    Da stehen Passwort, Name etc. wenn ja dann würd ich doch Update benutzen hinten mit WHERE und dann schreibt er nicht immer einen neuen Eintrag in die Tabelle es sei denn du willst das so.

  • die Tabelle "users" ist deine "Haupt"-Tabelle oder?
    Da stehen Passwort, Name etc. wenn ja dann würd ich doch Update benutzen hinten mit WHERE und dann schreibt er nicht immer einen neuen Eintrag in die Tabelle es sei denn du willst das so.

    Die Tabelle users ist meine Haupttabelle richtig.


    Also wäre es besser wenn man es wie folgt aufbaut:


    format(string1,sizeof(string1),"UPDATE users SET bannkic=%s,Typ=%i,Grund=%s,Tag=%i, Monat=%i,Jahr=%i,timestamp=%i WHERE FID =%d",SpielerName(p_id), 4, reason, tag, monat, jahr, gettime()); MySQL_SetupConnection(); mysql_pquery(handle,query);


    ???


    Scheinbar bin ich einfach zu Blöd denn er speichert noch immer nicht trotz der query ausführung



    format(string1,sizeof(string1),"UPDATE users SET bannkic=%s,Typ=%i,Grund=%s,Tag=%i, Monat=%i,Jahr=%i,timestamp=%i WHERE FID =%d",SpielerName(p_id), 4, reason, tag, monat, jahr, gettime()); MySQL_SetupConnection();
    mysql_pquery(handle,query);


  • [list=1][*]format(string1,sizeof(string1),"UPDATE users SET bannkic=%s,Typ=%i,Grund=%s,Tag=%i, Monat=%i,Jahr=%i,timestamp=%i WHERE FID =%d",SpielerName(p_id), 4, reason, tag, monat, jahr, gettime()); MySQL_SetupConnection();
    [*] mysql_pquery(handle,string1);
    [/list]


    Probier das mal

  • Dieser Code sieht mir eher aus als hättest du eine andere Tabelle, in die extra die Bans eingetragen werden:


    Hier wurde noch nicht der Inhalt von FID angegeben:


    Ich glaube das du `banned` in der user Tabelle auf 1 setzen möchtest, Grund, Tag, Monat, usw. ist dort bestimmt nicht enthalten.
    Versuche es mal so: (Habe jetzt mal nur vermutet, du musst das natürlich auf deine Tabelle anpassen)

  • Dein gedanke ist Richtig. Allerdings speichert er es nicht

  • Poste mal die MySQL Log befindet sich auch da wo die server_log.txt ist. Wenn nicht vor mysql_connect mysql_log(LOG_ALL); setzen und dann die Log posten nach dem du den Spieler gebannt hast.

  • Poste mal die MySQL Log befindet sich auch da wo die server_log.txt ist. Wenn nicht vor mysql_connect mysql_log(LOG_ALL); setzen und dann die Log posten nach dem du den Spieler gebannt hast.

    [19:11:53] [ERROR] mysql_format - no value for specifier "%d" available


    Jetzt setzt er in banned eine 1 rein das ist schonmal gut