Brauche Hilfe bezüglich des Adminsystem

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 Ihr Lieben Ich habe ein Kleinen Bug in meinem Adminsystem festgestellt und zwar könnten Leute die Administratoren sind zum beispiel Administratoren+ und höher bis zum Projektleiter Bannen. (nur ein Beispiel also nicht fragen wo der Untersched zwischen Admin und Admin+ wäre)


    Ich frage ja so:

    Code
    isAdmin(playerid,a_level) //Hiermit überprüfen wir das Adminlevel der Spieler!
    {
    	if(sInfo[playerid][alevel]>=a_level)return 1;
    	return 0;
    }


    ab ob jemand Admin ist


    also Inpreziep frage ich so in einem Befehl ab ob er das nötige Level hat

    Code
    if(!isAdmin(playerid,3))return SendClientMessage(playerid,Color_Red,"Du bis kein GJ Teammitglied oder dein Admin Level ist zu niedrig");


    wie kann ich aber beim Ban noch eine Abrfrage dazwischenbauen ob der ARang des Admins kleiner als des des Projektleiters zum Beispiel ist

  • Zeig mal dein Ban Befehl her :)

    Das ist der Banbefehl

  • @ChrisJewels


    Kann's nicht testen aber ich würde es so machen.
    Mit einer Warnung falls ein Admin mit dem gleichen oder einem niedrigerem Level versucht ein Admin zu bannen ;)



    ocmd:ban(playerid,params[])
    {
    if(!isAdmin(playerid,3))return SendClientMessage(playerid,Color_Red,"Du bis kein GJ Teammitglied oder dein Admin Level ist zu niedrig");
    new banid,bangrund[60], str[144];
    if(sInfo[playerid][alevel] <= sInfo[banid][alevel])return SendClientMessage(playerid, Color_Red, "Der Admin hat ein gleiches oder höheres Level als du, unterlass es!");
    format(str, sizeof(str),"{%06x}%s {FF0000}hat versucht dich zu bannen!", GetPlayerColor(playerid) >>> 8, getPlayerName(playerid));
    SendClientMessage(banid, -1, str);
    if(sscanf(params,"uds",banid,bangrund))return SendClientMessage(playerid, Color_Orange,"INFO: /BAN [Name/ID][Ban-Grund]");
    if(!IsPlayerConnected(banid))return SendClientMessage(playerid,Color_Red,"FEHLER:Der angegebene Spieler ist nicht online");
    if(strlen(bangrund)<=5)return SendClientMessage(playerid,Color_Red,"FEHLER:Bangrund zu kurz[Mindestens 5 Zeichen]");
    if(strlen(bangrund)>60)return SendClientMessage(playerid,Color_Red,"FEHLER:Bangrund zu lang[MAX. 60 Zeichen]");
    {
    format(str,sizeof(str),"Du hast den Spieler %s aus dem Grund %s dauerhaft vom Projekt ausgeschlossen!",getPlayerName(banid),bangrund);
    SendClientMessage(playerid,Color_Green,str);
    format(str,sizeof(str),"Du wurdest von %s dauerhaft aus dem Projekt ausgeschlossen! Grund: %s",getPlayerName(playerid),bangrund);
    SendClientMessage(banid,Color_Red,str);
    Ban(banid);
    format(str,sizeof(str),"%s hat %s vom Server gebannt",getPlayerName(playerid),getPlayerName(banid));
    SendClientMessageToAll(Color_Brown,str);
    }
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

    Einmal editiert, zuletzt von JustMe.77 () aus folgendem Grund: Doppelstring Definition nicht nötig :)

  • Reihenfolge ist entscheident. Du fragst erst ab ob das Ziel ein niedrigeres level hat bevor du überhaupt ausliest wer das ziel ist somit würde immer nur ID 0 geprüft werden.
    Also erst die sscanf abfrage danach die level abfrage im beispiel oben zeile 5 mit 8 tauschen.