Server restart = dateien gehen verloren

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
  • Moin..
    Ich habe das problem, dass wenn ich den Server restarte (AB UND ZU) sämtliche Dateien verloren gehen.
    Dann hat ein Spieler auf einmal den Skin 0 (CJ) , Level 0 , Geld 0 , Respekt 0 , AdminLevel 0 , Fraktion 0



    wie kommt das?
    wie kann ich das beheben?
    Kann mir da jemand weiter helfen?


    Wenn ihr was aus dem Script wissen müsst, schreibt einfach drunter was ihr braucht.


    MfG HellFire

  • Wenn du per Befehl den Server restartest, musst du auch in dem Befehl die Speicherfunktion einfügen.
    Wenn du in die Konsole 'gmx' eingibst, restartet der Server auch, aber da hab' ich kein Plan wie du die Spielerdaten speicherst.

    Ich hab DoodleJump zuende gespielt oO

  • new Spielerdatei[64];
    new Sname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Sname,sizeof(Sname));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",Sname);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Skinid",GetPlayerSkin(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",SpielerInfo[playerid][Adminlevel]);
    dini_IntSet(Spielerdatei,"Fraktion",SpielerInfo[playerid][Fraktion]);


    das dann bei OnGameModeExit eingeben?
    oder was genau muss ich dort eintragen?


    Das ist aus dem "stock SpielerSpeichern"


  • public OnGameModeExit()
    {
    SpielerSpeichern();
    return 1;
    }


    oder bau den stock ein:



    stock SaveAllPlayerAccounts()
    {
    for(new playerid = 0; playerid < GetMaxPlayers(); playerid++)
    {
    if(IsPlayerConnected(playerid) && playerid != INVALID_PLAYER_ID)
    {
    SpielerSpeichern(playerid);
    }
    }
    return 1;
    }


    und dan bei OnGameModeExit



    public OnGameModeExit()
    {
    SaveAllPlayerAccounts();
    return 1;
    }




    ich rate dir die 2 Variante mit dem stock für SpielerSpeichern habe ich auch und funktioniert auch alles ;)

  • es kam nach 2 Restart wieder :(


    scriptfiles\Accounts\ ..


    Skinid=0
    Level=0
    Geld=0
    Adminlevel=0
    Fraktion=0
    Banned=0



    (e):


    Kann das was mit dem stock zu tun haben?


    stock ResetVariablen(playerid)
    {
    SpielerInfo[playerid][Adminlevel]=0;
    SpielerInfo[playerid][Fraktion]=0;
    SpielerInfo[playerid][Skinid]=0;


    return 1;
    }


    Das der irgendwie falsch geladen wird?

  • So ein Timer wäre mir lieber.. :S
    Wenn zum beispiel mal der GameMode crasht , oder kein Admin da ist um /saveall zu machen, so würde ich die ganzen Daten wieder verlieren..


    So ein Timer muss ja nicht schlafen gehen oder mal kurz aufs Klo :D


    Wie erstelle ich so einen?


    Ich würde es so machen:


    forward saveall();


    SetTimerEx("saveall", 1000*3, 0, "i", playerid);


    public saveall(playerid)
    {
    SaveAllPlayerAccounts();
    return 1;
    }


    stock SaveAllPlayerAccounts()
    {
    for(new playerid = 0; playerid < GetMaxPlayers(); playerid++)
    {
    if(IsPlayerConnected(playerid) && playerid != INVALID_PLAYER_ID)
    {
    SpielerSpeichern(playerid);
    }
    }
    return 1;
    }


    oder wäre dies falsch? ^^

  • Wie mache ich so eine Nachrricht an alle Admins?


    Habe bis jetzt nur mit SendClientMessage und SendClientMessageToAll gearbeitet..


    und wo muss ich den Timer hinsetzten?
    SetTimerEx("saveall", 1000*3, 0, "i", playerid);


    weil ich denke das der bei OnGameModInit probleme mit dem "playerid" bekommt.

  • Machs doch so:
    stock SaveAllPlayerAccounts()
    {
    // Die ganzen Sachen speichern ...
    }


    public OnGameModeExit()
    {
    SaveAllPlayerAccounts();
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    // Die ganzen Befehle
    // Dann in /restart auch SaveAllPlayerAccounts(); einfügen.
    }

    Ja, das sollte am besten beim Serverstart ausgeführt werden, nicht wenn die Sachen gespeichert werden. Könnte zwar nach dem Speichern ausgeführt werden, hat da aber dann keinen Sinn.

  • Also mit dem Timer weis ich das selber nciht so genau, weil ich damit nicht arbeiten tuhe.


    Ehm also das mit den Admins kannst du so machen:




    public saveall(playerid)
    {
    SaveAllPlayerAccounts();
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    //Adminabfrage
    {
    format(string,sizeof(string),"Alle Useraccounts wurden gespeichert.");
    SendClientMessage(i,Rot,string);
    }
    }
    }
    return 1;
    }