Adminlevel wird immer zurück gesetzt

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 Community!
    Immer wenn ich InGame /makeadmin MeinName Rang eingebe, sagt er mir noch das ich admin bin.
    Wenn ich dann den server restarte, und ein Admin-Befehl eingeben möchte Habe ich kein Adminrang mehr also wurde der wieder auf
    0 gesetzt.
    Was ist das.


    ocmd:makeadmin(playerid,params[])
    {
    if(!IsAdmin(playerid,2000))return SendClientMessage(playerid,GRAU,"Fehler: Du bist nicht befugt diesen befehl zu nutzen!");
    new pID, rang, string[128], string2[128];
    if(sscanf(params,"ui",pID, rang))return SendClientMessage(playerid,GRAU,"Verwendung: /makeadmin [playerid] [adminrang]");
    if(rang<0||rang>2000)return SendClientMessage(playerid,GRAU,"Fehler: Du kannst nur zwischen 0-2000 einen rang vergeben.");
    SetPVarInt(pID,"Adminlevel",rang);
    SaveSpieler(pID);
    format(string,sizeof(string),"Du hast %s den Adminrang %d vergeben.",SpielerName(pID),rang);
    SendClientMessage(playerid,BLAU,string);
    format(string2,sizeof(string2),"Admin %s hat dich zum Adminstrator %d befördert. Glückwunsch.",SpielerName(playerid),rang);
    SendClientMessage(pID,BLAU,string2);
    return 1;
    }


    stock Spielerladen(playerid)
    {
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",SpielerName(playerid));
    SetPlayerScore(playerid, dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Skin",dini_Int(Spielerdatei,"Skin"));
    return 1;
    }


    stock SaveSpieler(playerid)
    {
    new Spielerdatei[264];
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",SpielerName(playerid));
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Skin",GetPVarInt(playerid,"Skin"));
    return 1;
    }


    stock IsAdmin(playerid, arang)
    {
    if(GetPVarInt(playerid,"Adminlevel")>=arang)return 1;
    return 0;
    }

  • Wenn du die Console schließt bzw rcon gmx eingibst wird OnPlayerDisconnect nicht aufgerufen du müsstest also entweder einen globalen bspw 60 minuten timer erstellen und dort speichern und / oder ein command erstellen und du dem server zeit gibst die spieler zu speichern sollte nicht länger als 2-5 minuten dauern (das sind schon "extrem" zeiten)

  • OnGameModeExit würde ich nicht darauf vertrauen das dort (wenn es aufgerufen wird) die spieler als noch connected zählen. Ich speicher das vorher direkt im cmd und nach ca 10 sek wird neugestartet bisher nie probleme damit :D

  • OnGameModeExit würde ich nicht darauf vertrauen das dort (wenn es aufgerufen wird) die spieler als noch connected zählen


    klar OnGameModeExit wird aufgerufen sobald gmx, exit eingegeben wurde
    Sind noch user online kann man die im callback auch absichern
    alles was vor den return 1 ausgeführt wird macht er auch

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

  • OnGameModeExit würde ich nicht darauf vertrauen das dort (wenn es aufgerufen wird) die spieler als noch connected zählen. Ich speicher das vorher direkt im cmd und nach ca 10 sek wird neugestartet bisher nie probleme damit :D

    was machst du den wenn der server crasht? dann wird nichts gespeichert :)