Nach /restart wird alles resettet.

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 Community!
    Wenn ich mich registriere, mir ein Skin auswähle läuft alles gut.
    Alles wird gespeichert wenn ich mich auslogge.
    Wenn ich mein Server restarte indem ich den Server schließe und wieder öffne, bleibt auch alles wie vorher.
    Doch wenn ich den Server INGAME restarte dann krieg ich wieder den CJ Skin, Adminlevel wird auf 0 gesetzt und mein Geld auch. Alles einfach.


    Hier mal vielleicht nützliche Codes:



    ocmd:restart(playerid,params[])
    {
    if(IsPlayerAnAdmin(playerid,3))
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    SaveAcc(i);
    }
    SendRconCommand("gmx");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,c_falsch,"Das dürfen nur Admins!");
    return 1;
    }
    }



    stock LoadAcc(playerid)
    {
    new Spielerdatei[64],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    // Gespeicherte Sachen
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPlayerSkin(playerid,dini_Int(Spielerdatei,"Skin"));
    SetPVarInt(playerid,"Waffenschein1",dini_Int(Spielerdatei,"Waffenschein1"));
    SetPVarInt(playerid,"Waffenschein2",dini_Int(Spielerdatei,"Waffenschein2"));
    SetPVarInt(playerid,"Waffenschein3",dini_Int(Spielerdatei,"Waffenschein3"));
    SetPVarInt(playerid,"Autoschein",dini_Int(Spielerdatei,"Autoschein"));
    SetPVarInt(playerid,"Motorradschein",dini_Int(Spielerdatei,"Motorradschein"));
    SetPVarInt(playerid,"Flugschein",dini_Int(Spielerdatei,"Flugschein"));
    return 1;
    }


    stock SaveAcc(playerid)
    {
    new Spielerdatei[64],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    // Gespeicherte Sachen
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));
    dini_IntSet(Spielerdatei,"Waffenschein1",GetPVarInt(playerid,"Waffenschein1"));
    dini_IntSet(Spielerdatei,"Waffenschein2",GetPVarInt(playerid,"Waffenschein2"));
    dini_IntSet(Spielerdatei,"Waffenschein3",GetPVarInt(playerid,"Waffenschein3"));
    dini_IntSet(Spielerdatei,"Autoschein",GetPVarInt(playerid,"Autoschein"));
    dini_IntSet(Spielerdatei,"Motorradschein",GetPVarInt(playerid,"Motorradschein"));
    dini_IntSet(Spielerdatei,"Flugschein",GetPVarInt(playerid,"Flugschein"));
    return 1;
    }


  • ocmd:restart(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,c_falsch,"Das dürfen nur Admins!");
    if(IsPlayerConnected(i))
    for(new i = 0; i < MAX_PLAYERS; i++)return SaveAcc(i);
    SendRconCommand("gmx");
    return 1;
    }


  • Du solltest dich mal Informieren was ein return macht und wo man es einsetzen sollte, denn dein Code ist absoluter Schwachsinn wie du den da stehen hast

    All in all it's just another brick in the wall


  • ocmd:restart(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,c_falsch,"Das dürfen nur Admins!");
    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) SaveAcc(i);
    SendRconCommand("gmx");
    return 1;
    }


    so sollte es klappen


    Bedanke dich bitte, wenn du den Beitrag als hilfreich empfandest!



  • Erstell eine Varriable wie z.B. pEingeloggt[MAX_PLAYERS] und dann fragst du in deinem stock SaveAcc ab ob der Spieler eingeloggt ist, und speicherst nur den Account wenn dieser auch Eingeloggt ist. (Diese muss natürlich beim Einloggen auf 1 gesetzt werden oder true, jenachdem ob du es als boolische Varriable machst.)


    Bei deinem Restart Befehl speicherst du dann den Account und setzt die Eingeloggt Varriable auf 0.
    So wird verhindert das der Account nochmal gespeichert und vllt überschrieben wird. Bei PVars hatte ich damals auch das Problem das diese immer nicht richtig gespeichert wurden bei nem GMX, die Enum Varriabeln aber schon. Die PVars setzen sich irgendwie schon früher zurück oder so ähnlich. Und da der Account beim Disconnecten nochmal gespeichert wird, überschreibt dieser alles mit 0 weil die PVars schon wieder resetet sind.


    Ich hoffe das konnte man jetzt verstehen xD

  • Genau, zunno hat recht. Die pvars werden beim restart schon vorher zuruckgsetzt. Wie gesagt, musst du den account schon davor speichern und verhindern, dass der Account beim onplayerdisconnect nicht nochmal gespeichert wird.