Problem beim Speichern in eine Ini Datei

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 Abend.


    Leider komme ich derzeit bei einem kleinen Problem nicht weiter.


    Funktionsweise


    Sobald ein Spieler sich ausloggt, sollen seine Daten in seiner .ini Datei gespeichert werden.


    Problembeschreibung


    Die Daten werden trotz Speicherfunktions Angabe nicht gespeichert.



    Code



    #include <dini>


    enum sInfo
    {
    Adminlevel,
    Score,
    Banned,
    LoggedIn,


    }
    new SpielerInfo[MAX_PLAYERS][sInfo];



    stock LoadAccount(playerid)
    {
    new Spielerdatei[200];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",name);
    SpielerInfo[playerid][Adminlevel]=dini_Int(Spielerdatei,"Adminlevel");
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Score"));
    SpielerInfo[playerid][Banned]=dini_Int(Spielerdatei,"Banned");
    SpielerInfo[playerid][LoggedIn]=dini_Int(Spielerdatei,"LoggedIn");


    return 1;
    }


    stock SpielerSpeichern(playerid)
    {
    new Spielerdatei[200];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",name);
    dini_IntSet(Spielerdatei,"Adminlevel",SpielerInfo[playerid][Adminlevel]);
    dini_IntSet(Spielerdatei,"Score",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Banned",SpielerInfo[playerid][Banned]);
    dini_IntSet(Spielerdatei,"LoggedIn",SpielerInfo[playerid][LoggedIn]);



    return 1;
    }
    Wenn der Spieler jetzt gebannt wird, dann setzte ich:


    SpielerInfo[playerid][Banned] = 1;


    und bei OnPlayerDisconnect:


    SpielerSpeichern(playerid);


    Leider klappt dieser Weg nicht. In der Benutzer Ini steht weiterhin: Banned = 0


    Ich würde mich auf ein paar Lösungsansätze freuen.



    Steven

  • Vielen Dank für die Antwort ElDiablo.


    Ich habe es jetzt so versucht:


    Unter stock SpielerSpeichern(playerid)


    ini_IntSet(Spielerdatei,"Banned",GetPVarInt(playerid, "Banned"));




    und beim Ban Command:


    SetPVarInt(playerid, "Banned", 1);



    Leider ohne erfolg. In der Ini des Spielers steht weiterhin: 0

  • @Goldhamster genau ich möchte mich bannen aber es bleibt auf 0.


    @ Int:


    Ich verwende das stock SpielSpeichern unter den Forwards oben im Gamemode.
    Unter OnPlayerDisconnect rufe ich es dann auf.


    #include <dini>


    enum sInfo
    {
    Adminlevel,
    Score,
    Banned,
    LoggedIn,


    }
    new SpielerInfo[MAX_PLAYERS][sInfo];



    stock LoadAccount(playerid)
    {
    new Spielerdatei[200];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",name);
    SpielerInfo[playerid][Adminlevel]=dini_Int(Spielerdatei,"Adminlevel");
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Score"));
    SpielerInfo[playerid][Banned]=dini_Int(Spielerdatei,"Banned");
    SpielerInfo[playerid][LoggedIn]=dini_Int(Spielerdatei,"LoggedIn");


    return 1;
    }


    stock SpielerSpeichern(playerid)
    {
    new Spielerdatei[200];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",name);
    dini_IntSet(Spielerdatei,"Adminlevel",SpielerInfo[playerid][Adminlevel]);
    dini_IntSet(Spielerdatei,"Score",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Banned",SpielerInfo[playerid][Banned]);
    dini_IntSet(Spielerdatei,"LoggedIn",SpielerInfo[playerid][LoggedIn]);



    return 1;
    }

  • Du musst ja auch das PVar auf 1 setzen.
    So :
    ocmd:ban(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,Rot,"Du bist kein Administrator");
    if(!isPlayerAnSupporter(playerid,1))return SendClientMessage(playerid,Rot,"Du bist kein Supporter!");
    new pID, reason[128], string[128];
    if(sscanf(params,"us"))return SendClientMessage(playerid,Hellblau,"Benutzung: /ban [ID] [GRUND]");
    format(string,sizeof(string),"AdminCMD: %s wurde von %s gebannt! Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessage(playerid,Rot,string);
    SetPVarInt(pID,"Baned",1);// Das ist wichtig!
    Kick(pID);
    return 1;
    }


    //Edit : Mein Befehl. Vllt hilft der dir.

    Mit unfreundlichen Grüßen
    Buschmensch

  • Habe jetzt etwas herrausgefunden.


    Undzwar habe ich mir schnell einen Befehl geschrieben /saves der SpielerSpeichern aufruft und siehe da er speichert.
    Aber nur bei OnPlayer Disconnect nicht.



    //Edit habe es nun hinbekommen. Beim registrieren wurden nicht alle Keys eingetragen.



    Ich bedanke mich für die ganzen Lösungswegen und wünsche einen schönen Sonntag.



    /close

    Einmal editiert, zuletzt von .Steven. ()