Admin System Bug - Benötige Dringend Hilfe!

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,


    Ich habe mir in meinem Selfmade nun ein Admin System gemacht (Tut von MrMonat). Hab dann noch den kick befehl, ban befehl und makeadmin befehl gemacht (ocmd). Doch wenn ich InGame Gehe, und mir Admin geben will (auch RCON eingeloggt) meint er, ich wäre kein Admin. Wenn ich das Adminlevel dann in meiner .txt Datei meines Accounts ordner ändere, wird das Level (Adminlevel) komischerweise zurückgesetzt und habe dann wieder kein Admin.


    Kann wer helfenß0

    Einmal editiert, zuletzt von DefiNe_ ()

  • Load Account stock:



    stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",name);
    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,"Baned",dini_Int(Spielerdatei,"Baned"));
    //SpielerInfo[playerid][Adminlevel]=dini_Int(Spielerdatei,"Adminlevel");
    //SpielerInfo[playerid][Fraktion]=dini_Int(Spielerdatei,"Fraktion");
    if(GetPVarInt(playerid,"Baned")==1)
    {
    SendClientMessage(playerid,0xE10000FF,"Du bist von GFR gebannt");
    Kick(playerid);
    }
    return 1;
    }


    OCMD-Befehle:



    ocmd:kick(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ERROR_ROT,"Du bist kein Administrator.");
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,0xFFFA00FF,"Nutze /kick [ID] [Grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s von GFR gekickt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(0xC41400FF,string);
    Kick(pID);
    return 1;
    }


    ocmd:ban(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ERROR_ROT,"Du bist kein Administrator.");
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,0xFFFA00FF,"Nutze /ban [ID] [Grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s von GFR gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(0xC41400FF,string);
    SetPVarInt(pID,"Baned",1);
    Kick(pID);
    return 1;
    }


    ocmd:makeadmin(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,6))return SendClientMessage(playerid,ERROR_ROT,"Du bist kein Administrator.");
    new pID, rank;
    if(sscanf(params,"ui",pID,rank))return SendClientMessage(playerid,0xE10000FF,"Nutze /makeadmin [ID] [Adminlevel]");
    if(rank<1||rank>5)return SendClientMessage(playerid,0xE10000FF,"Bitte gültigen Rank angeben (1-6)");
    SetPVarInt(pID,"Adminlevel",rank);
    SpielerSpeichern(pID);
    SendClientMessageToAll(0x00B9FFFF,"Es wurde jemand zum Admin gemacht.");
    return 1;
    }

  • Ich glaube das Problem liegt eher beim Speichern.


    Wie speicherst du denn dein Account?



    ocmd:makeadmin(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,6) || !IsPlayerAdmin(playerid))return SendClientMessage(playerid,ERROR_ROT,"Du bist kein Administrator.");
    new pID, rank;
    if(sscanf(params,"ui",pID,rank))return SendClientMessage(playerid,0xE10000FF,"Nutze /makeadmin [ID] [Adminlevel]");
    if(rank<1||rank>5)return SendClientMessage(playerid,0xE10000FF,"Bitte gültigen Rank angeben (1-6)");
    SetPVarInt(pID,"Adminlevel",rank);
    SpielerSpeichern(pID);
    SendClientMessageToAll(0x00B9FFFF,"Es wurde jemand zum Admin gemacht.");
    return 1;
    }


    So solltest du auch als RCON-Admin dir die Rechte geben können.

  • Beitrag von Sheplin ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",name);
    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,"Baned",dini_Int(Spielerdatei,"Baned"));
    //SpielerInfo[playerid][Adminlevel]=dini_Int(Spielerdatei,"Adminlevel");
    //SpielerInfo[playerid][Fraktion]=dini_Int(Spielerdatei,"Fraktion");
    if(GetPVarInt(playerid,"Baned")==1)
    {
    SendClientMessage(playerid,0xE10000FF,"Du bist von GFR gebannt");
    Kick(playerid);
    }
    return 1;
    }
    stock Register(playerid,key[])
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",name);
    dini_Create(Spielerdatei);
    dini_Set(Spielerdatei,"Passwort",key);
    SendClientMessage(playerid,0x00A5FFFF,"Wir begrüßen dich rechtherzlich auf GFR!");
    SetPlayerScore(playerid,1);
    return 1;
    }
    stock Login(playerid,key[])
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",name);
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    {
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    SendClientMessage(playerid,0x00A5FFFF,"Willkommen zurück auf GFR!");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,0x00A5FFFF,"Du hast ein falsches Passwort eingegeben!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Dein Account existiert in unserer Datenbank. Tippe dein Passwort ein, um fortzufahren.","Einloggen","Abbrechen");
    return 1;
    }
    }
    stock SpielerSpeichern(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.ini",name);
    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,"Baned",GetPVarInt(playerid,"Baned"));
    return 1;
    }
    IsPlayeranAdmin:
    stock isPlayerAnAdmin(playerid,rang)
    {
    if(GetPVarInt(playerid,"Adminlevel")>=rang)return 1;
    return 0;
    }

    Einmal editiert, zuletzt von seegras ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hallo Freunde, bitte zukünftig Code mit posten, ist übersichtlicher.
    Wenn ihr noch weitere hilfe braucht schreibt mir bitte eine PN, dann helfe ich euch, mittels Skype oder sogar Teamviewer, wenn nötig,
    damit das Problem mal gelöst wird, ich helfe euch dafür, ohne große Gegenleistung, also schreibt mich ruhig an, auf anhib, kann ich da keine Abfrage sehen
    ob pID connected ist. Diesweiteren ist die Rankabfrage falsch, wenn es wirklich 6 Ränge geben soll, muss es so sein.


    if(rank<0||rank>6)return .....


    So wie es jetzt ist, kannst du keinem das Adminlevel 0 geben, oder ist User bei dir adminlevel oder rank 1 ?
    Dann kannn ich das vielleicht noch nachvollziehen. Die ganze Adminabfrage ist diesweiteren auch noch falsch, es sollte eher so sein.


    if(!isPlayerAnAdmin(playerid,6)&&!IsPlayerAdmin(playerid))return ...


    Also das wollte ich jetzt auch einmal klarstellen, das kann so nichts werden.
    LG Dr.Brummer

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.

  • Spontan sehe ich hier einen Fehler ^^



    ocmd:makeadmin(playerid,params[])
    {
    if(GetPVarInt(playerid,"Adminlevel") <= 5 || !IsPlayerAdmin(playerid))return SendClientMessage(playerid,ERROR_ROT,"Du bist kein Administrator.");
    new pID, rank;
    if(sscanf(params,"ui",pID,rank))return SendClientMessage(playerid,0xE10000FF,"Nutze /makeadmin [ID] [Adminlevel]");
    if(rank<1||rank>5)return SendClientMessage(playerid,0xE10000FF,"Bitte gültigen Rank angeben (1-6)");
    SetPVarInt(pID,"Adminlevel",rank);
    SpielerSpeichern(pID);
    SendClientMessageToAll(0x00B9FFFF,"Es wurde jemand zum Admin gemacht.");
    return 1;
    }



    @Dr.Brummer:


    Das ist auch falsch, da die Abfrage falsch formuliert ist. D.h. man muss beides sein, was ja nicht nötig ist..



    if(!isPlayerAnAdmin(playerid,6)&&!IsPlayerAdmin(playerid))return ...


    Mein Code müsste eigentlich klappen, warum dein Adminlevel falsch abgespeichert wird, kann ich dir jedoch nicht sagen.


  • Spontan siehst du keinen Fehler ? Dann mach dochmal deine Augen auf bitte, ich habe es schon richtig forumliert, denn bei mir funktioniert das so, wie ich es geschrieben habe, also wirklich, jetzt gehts los, bei deinem Befehl, kann man den Spieler zwar zum Admin machen, jedoch nicht wieder wegnehmen und du siehst da keine Fehler ? Du hast ja noch nicht einmal abgefragt, ob der Spieler eingeloggt ist, wirklich und du erkennst da keinen Fehler, ich fasse es nicht. LG Dr.Brummer

    Ich suche (Beta) Server-Tester für meinen Server.
    Bei Intresse bitte bei mir per PN melden.