Adminlevel wird nicht gespeichert

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 mal wieder ein kleines Problem und zwar es ist so ich joine auf meinem Server mit Admin Level 7 nutze /makeadmin 1 3
    [1]= ID [3] = Adminlevel ich Disconnecte vom Server schaue in die Datenbank nur um zu schauen ob es funktioniert hat und bin trotzdem noch Adminlevel 7 woran kann das liegen?


    mein Stock wo es gespeichert wird:



    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;
    //Ansonsten speichere sie
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', alevel = '%d', WHERE id = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id], PlayerInfo[playerid][pAlevel], PlayerInfo[playerid][pFraktion], PlayerInfo[playerid][pRank]);
    //Das Query wird abgesendet
    mysql_pquery(handle, query);
    return 1;
    }



    Und ja ich habe es bei OnPlayerDisconnect drin!

    • Offizieller Beitrag

    Wenn du alleine auf dem Server bist, solltest du eigentlich ID 0 haben. Ansonsten zeig uns mal dein makeadmin-Command


    // EDIT


    Grad am Handy gewesen deswegen hab ich es voll übersehen, aber deine Parameter der SQL abfrage sind falsch gesetzt und irgendwie 2 zu viel (Franktion, Rank)



    Code
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', alevel = '%d',  WHERE id = '%d'",
    	PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pAlevel], PlayerInfo[playerid][p_id]);

    wichtig ist, dasss PlayerInfo[playerid][p_id] an letzter Stelle steht, da dies ja deine letzte Variable in der SQL-Abfrage ist. Wenn du also einen neuen Parameter hinzufügen möchtest, einfach zwischen pAlevel und p_id eintragen.

  • Ich habe ID 1 Da ich schon einen Bot auf dem Server habe @Whice.



    /edit @Whice.



    Also es sieht jetzt bei mir so aus:


    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;
    //Ansonsten speichere sie
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', alevel = '%d', WHERE id = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pAlevel], PlayerInfo[playerid][p_id]);
    mysql_pquery(handle, query);
    return 1;
    }



    Aber es wird trotzdem nicht gespeichert :huh:

    Einmal editiert, zuletzt von KinGRaPTiiC ()

    • Offizieller Beitrag

    Habs grade übersehen aber vor dem WHERE kommt kein Komma mehr


    • Offizieller Beitrag

    außer ich will einen neuen Abspeicherbaren Parameter einfügen?

    Nein, vor steht WHERE darf niemals ein Komma stehen, wenn du einen weiteren Parameter hast setzt du das Komma natürlich hinter alevel = '%d' und dahinter dann den neuen Parameter, danach allerdings keins mehr.


    Falls das jetzt verständlich war^^

  • Also ich hätte es jetzt so für die nächsten 2 erstellt @Whice. :



    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;
    //Ansonsten speichere sie
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', alevel = '%d', fraktion = '%d', rang = '%d' WHERE id = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pAlevel],PlayerInfo[playerid][pFraktion] ,PlayerInfo[playerid][pRang],PlayerInfo[playerid][p_id]);
    mysql_pquery(handle, query);
    return 1;
    }


    Und ich hätte noch eine Frage bin ziemlich weit aus dem Scripten raus und ich würde ganz gerne den String so erstellen das da steht:
    "Du wurdest von %s zu einem %i Admin ernannt!"


    mein Makeadminbefehl sieht so aus nicht wundern wegen den beiden SendClientMessages am Schluss:


    ocmd:makeadmin(playerid,params[])
    {
    print("makeadmin Befehl ausgeführt!");
    if(!isAdmin(playerid, 3))return SendClientMessage(playerid,DUNKELROT,"Dein Adminlevel ist zu Niedrig!");
    new pID,a_level,string[128];
    if(sscanf(params,"ui",pID,a_level))return SendClientMessage(playerid,GELB,"[INFO]: /makeadmin [playerid] [Level]");
    PlayerInfo[pID][pAlevel]=a_level;
    SaveUserStats(pID);
    format(string,sizeof(string),"Du wurdest von %s zu einem Admin %i ernannt",name);
    SendClientMessage(pID,GELB,"Dein Adminrang wurde geändert!");
    SendClientMessage(playerid,GELB,"Du hast den Adminrang geändert!");
    return 1;
    }

    • Offizieller Beitrag

    mein Makeadminbefehl sieht so aus nicht wundern wegen den beiden SendClientMessages am Schluss:

    Das kannst du am besten mit einem stock lösen, der den Namen einer PlayerID ausgibt, so kannst du nun immer wenn du den Namen brauchst "SpielerName(playerid)" verwenden.
    Das obere sollte so passen.