Admin System mit 4 Leveln

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
  • Hi,
    da ein freund mich gerade gefragt hat ob ich ihm ein Tutorial für ein Admin System mit 4 Leveln schreibe, mache ich das jetzt mal für alle, damit nicht nur er was lernt ;).


    Wir wollen also ein Admin System machen mit 4 Leveln, welche diese sind:

    • Support
    • Moderator
    • Super Moderator
    • Fulladmin


    Diese hat er sich auch ausgedacht, deshalb nehmen wir jetzt diese ^^.


    Gut, was wird benötigt? :

    • Wir brauchen ein Login & Register System damit wir das ganze auch darein Scripten können, er hat jetzt schon ein MySQL Login & Register System von mir und dort wird alles mit pInfo abgefragt, dieses könnt ihr dann nachher beliebig ändern.
    • Wir benötigen dcmd, damit wir die Befehle 1. schneller haben und 2. einfacher schreiben können.


    Mehr benötigen wir eigentlich nicht.
    Nun überlegen wir mal was das Admin System so alles für den Anfang haben soll, dafür habe ich mir schon etwas ausgedacht.
    Es gibt ein paar Befehle für den Anfang nur welche folgenden sein werden:

    • /MakeAdmin (Um Andere Admin zu machen)
    • /Ban (Um andere Spieler zu bannen)
    • /Kick (Um andere Spieler zu kicken)
    • /Veh (Um sich ein Admin Fahrzeug zu erstellen)


    Dafür brauchen wir, wie oben schon erwähnt dcmd, weil man damit die Befehle viel leichter Scripten kann, und wieso sollte es schwer gemacht werden wenn es auch Leicht geht ?


    Fangen wir nun an mit dem Scripten.


    Als erstes fügen wir die DCMD Funktion ein, diese sollte am besten ganz oben sein.
    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1



    Damit haben wir nun die DCMD Funktion eingebunden und können damit nun auch scripten, diese erkläre ich jetzt nicht wie sie oben steht sondern werde sie im Laufe des Tutorials erklären.


    Zuerst machen wir beim einloggen folgendes rein, damit der Spieler auch weiss was er für einen Rang hat.


    if(pInfo[playerid][Admin] == 1)//Fragt ab ob der Spieler Supporter ist{ SendClientMessage(playerid,0xFF0000AA,"Du wurdest erfolgreich als Supporter eingeloggt!");}if(pInfo[playerid][Admin] == 2)//Fragt ab ob der Spieler Moderator ist{ SendClientMessage(playerid,0xFF0000AA,"Du wurdest erfolgreich als Moderator eingeloggt!");}if(pInfo[playerid][Admin] == 3)//Fragt ab ob der Spieler Super Moderator ist{ SendClientMessage(playerid,0xFF0000AA,"Du wurdest erfolgreich als Super Moderator eingeloggt!");}if(pInfo[playerid][Admin] == 4)//Fragt ab ob der Spieler Fulladmin ist{ SendClientMessage(playerid,0xFF0000AA,"Du wurdest erfolgreich als Fulladmin eingeloggt!");}



    So, damit haben wir unsere Ränge schonmal ein wenig für die Team Member deutlicher gemacht ^^.


    Nun machen wir als erstes den /MakeAdmin Befehl.
    Aber vorher sollte ich euch noch zeigen wie die Befehle bei OnPlayerCommandText stehen müssen:
    dcmd(MakeAdmin,9,cmdtext); //Makeadmin für den Befehl /MakeAdmin und die 9 ist dafür, wie viele Buchstaben MakeAdmin hat.dcmd(Ban,3,cmdtext);//Selbe wie obendcmd(Kick,4,cmdtext);//Selbe wie obendcmd(veh,3,cmdtext);//Selbe wie oben



    Nun fahren wir fort mit dem Befehl.
    dcmd_MakeAdmin(playerid,params[]){ new pID, AdminLevel;//Das sind die Variablen, /MakeAdmin [pID] [AdminLevel] if(sscanf(params, "ud",pID,AdminLevel))//Damit werden die einzelnen Variablen unterschieden in playerid und d = Integer { return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /Makeadmin [playerid] [Admin Level]");//Nachricht wird gesendet wenn der Spieler /MakeAdmin nur eingibt. } if(!IsPlayerConnected(pID))//Wenn der Spieler nicht Online ist { return SendClientMessage(playerid,COLOR_GRAD2,"Kein Spieler mit angegebener ID Online!"); } if(pInfo[playerid][Admin] == 4)//Prüft ob der Spieler Fulladmin ist { new string[256];//Definition des Strings für den Spieler new astring[256];//Definition des Strings für den Admin new AdminName[MAX_PLAYER_NAME];//AdminName, z.B. Hugo new Name[MAX_PLAYER_NAME];//Spieler Name z.B. Hans GetPlayerName(playerid, AdminName, sizeof(AdminName));//Prüft den Namen des Admins GetPlayerName(pID, Name, sizeof(Name));//Prüft den Namen des Spielers if(AdminLevel >= 5)//Wenn das Admin Level über 5 ist { SendClientMessage(playerid,COLOR_WHITE,"Das Admin Level kann nur von 1 - 4 Sein!"); return 1; } if(AdminLevel == 0)//Wenn das Admin Level auf 0 gesetzt wird = Keine Rechte { format(string, sizeof(string),"Fulladmin %s hat dir die Team Mitglieder Rechte entzogen!",AdminName);//String für den Spieler den er bei SendClientMessage bekommt format(astring, sizeof(astring),"Du hast %s Team Mitglieder Rechte entzogen!",Name);//String für den Admin den er bei SendClientMessage bekommt SendClientMessage(pID,COLOR_GREEN,string);//String wird als Nachricht an den Spieler gesendet SendClientMessage(playerid,COLOR_GREEN,astring);//AString wird als Nachricht an den Spieler gesendet pInfo[pID][Admin] = 0;//Admin Level wird auf 0 gesetzt } if(AdminLevel == 1)//Selbe wie oben nur mit Level 1 {//Alles was jetzt kommt ist genauso wie oben nur das er diesmal als Supporter eingetragen wird format(string, sizeof(string),"Fulladmin %s hat dich zum Supporter gemacht!",AdminName); format(astring, sizeof(astring),"Du hast %s zum Supporter gemacht!",Name); SendClientMessage(pID,COLOR_GREEN,string); SendClientMessage(playerid,COLOR_GREEN,astring); pInfo[pID][Admin] = 1; } else if(AdminLevel == 2) { format(string, sizeof(string),"Fulladmin %s hat dich zum Moderator gemacht!",AdminName); format(astring, sizeof(astring),"Du hast %s zum Moderatoren gemacht!",Name); SendClientMessage(pID,COLOR_RED,string); SendClientMessage(playerid,COLOR_RED,astring); pInfo[pID][Admin] = 2; } else if(AdminLevel == 3) { format(string, sizeof(string),"Fulladmin %s hat dich zum Super Moderator gemacht!",AdminName); format(astring, sizeof(astring),"Du hast %s zum Super Moderator gemacht!",Name); SendClientMessage(pID,COLOR_LIGHTBLUE,string); SendClientMessage(playerid,COLOR_LIGHTBLUE,astring); pInfo[pID][Admin] = 3; } else if(AdminLevel == 4) { format(string, sizeof(string),"Fulladmin %s hat dich zum Fulladmin gemacht!",AdminName); format(astring, sizeof(astring),"Du hast %s zum Fulladmin gemacht!",Name); SendClientMessage(pID,COLOR_LIGHTBLUE,string); SendClientMessage(playerid,COLOR_LIGHTBLUE,astring); pInfo[pID][Admin] = 4; } } else//Wenn er kein Fulladmin ist { return SendClientMessage(playerid,COLOR_RED,"Du bist kein Fulladmin!"); } return 1;}



    So, nun fahren wir fort mit dem Ban Befehl.
    dcmd_ban(playerid,params[]){ new banID;//Definiert die Spielerid if(sscanf(params, "u",banID))//u ist wieder playerid { return SendClientMessage(playerid,COLOR_WHITE,"{f86464}Benutze:{FFFFFF} /ban [playerid]");//Wenn er nur /ban macht } if(pInfo[playerid][Admin] >= 3)//Prüft ob der Spieler Super Mod ist. { new banstring[256];//Der String für den Ban gleich new BanName[MAX_PLAYER_NAME];//Der Name des Spielers der gebannt werden soll GetPlayerName(banID,BanName,sizeof(BanName));//Prüft den Spieler Namen der gebannt werden soll new AdminName[MAX_PLAYER_NAME];//Der Name des Super Mods. GetPlayerName(playerid,AdminName,sizeof(AdminName));//Prüft den Namen des Super Mods. format(banstring, sizeof(banstring),"{f86464}AdminCMD{FFFFFF} - {f86464}%s{FFFFFF} wurde von {f86464}%s{FFFFFF} gebannt.",BanName,AdminName);//Macht einen string für die Nachricht welcher Spieler von wem gebannt wurde. SendClientMessageToAll(COLOR_WHITE,banstring);//Sendet den string ab Ban(banID);//Bannt den Spieler } else//Wenn er kein Super Mod. oder darüber ist. { SendClientMessage(playerid,COLOR_WHITE,"Du hast nicht die benötigten Rechte dazu!"); } return 1;}



    Weiteres unten.....

  • Weiter gehts:
    Nun fahren wir fort mit dem Kick Befehl.


    dcmd_kick(playerid,params[]){ new pID;//Definiert die playerid if(sscanf(params, "u",pID))// u ist wieder playerid { return SendClientMessage(playerid,COLOR_WHITE,"{f86464}Benutze:{FFFFFF} /kick [playerid]");//Wenn er nur /kick macht } if(!IsPlayerConnected(pID))//Wenn der Spieler nicht Online ist { return SendClientMessage(playerid,COLOR_GRAD2,"Kein Spieler mit angegebener ID Online!"); } if(pInfo[playerid][Admin] >= 2)//Wenn der Spieler Mod oder höher ist. { new Kickstring[256];//Definiert den String new KickName[MAX_PLAYER_NAME];//Der Name des Spielers der gekickt wird GetPlayerName(pID,KickName,sizeof(KickName));//Der Name wird geprüft von dem Spieler der gekickt wird new AdminName[MAX_PLAYER_NAME];//Der Name des Mods. GetPlayerName(playerid,AdminName,sizeof(AdminName));//Der Name vom Mod. wird geprüft. format(Kickstring, sizeof(Kickstring),"{f86464}AdminCMD{FFFFFF} - {f86464}%s{FFFFFF} wurde von {f86464}%s{FFFFFF} gekickt.",KickName,AdminName);//Macht einen string indem der Spieler der gekickt wird und von wem gemacht ist. SendClientMessageToAll(COLOR_WHITE,Kickstring);//Sendet den string ab Kick(pID);//Kickt den Spieler } else//Wenn er kein Mod. oder höher ist. { SendClientMessage(playerid,COLOR_WHITE,"Du hast nicht die benötigten Rechte dazu!"); } return 1;}



    Nun kommen wir zum letzten Befehl, dem /veh Befehl.


    dcmd_veh(playerid,params[]){ new vehID, ColorA, ColorB;//Definiert die Fahrzeug ID, Farbe1 und Farbe2 if(sscanf(params, "ddd",vehID,ColorA,ColorB))//Selbe wie oben { return SendClientMessage(playerid,COLOR_WHITE,"{f86464}Benutze:{FFFFFF} /veh [vehicleid] [Farbe1] [Farbe2]");//Wenn er nur /veh eingibt. } if(pInfo[playerid][Admin] >= 1)//Wenn der Spieler höher als ein Supporter ist { new Float:X, Float:Y, Float:Z, Float:R;//Die Floats für das Fahrzeug GetPlayerPos(playerid,X,Y,Z);//Prüft die Spieler Position CreateVehicle(vehID,X,Y,Z,R,ColorA,ColorB,0);//Erstellt das Fahrzeug mit unseren Angaben new string[256];//Macht einen string für die Nachricht format(string, sizeof(string),"Du hast dir folgendes Fahrzeug gespawnt: ID: [{f86464}%d{FFFFFF}], Farbe1: [{f86464}%d{FFFFFF}], Farbe2: [{f86464}%d{FFFFFF}]",vehID,ColorA,ColorB);//Definiert die Fahrzeug ID, Farbe 1 und Farbe2 SendClientMessage(playerid,COLOR_WHITE,string);//Sendet den String ab } else//Wenn der Spieler kein Admin oder höher ist. { SendClientMessage(playerid,COLOR_WHITE,"Du hast nicht die benötigten Rechte dazu!"); } return 1;}



    So, nun sind wir fertig und ich hoffe das euch mein kleines aber sehr feines Tutorial geholfen hat.
    Sollte es Probleme geben, fragt hier nach .


    Lg,
    Stefan_Wayne.

  • schönes tuto nur dein Avatar lenkt etwas ab.. das wackelt so viel...

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Die sind eigentlich untereinander jedoch wenn ich es editiere und so mache, sind sie beim Absenden wieder so wie jetzt.

  • Ist der make admin befehl so richt?
    dcmd_MakeAdmin(playerid,params[])
    {
    new pID, AdminLevel;//Das sind die Variablen, /MakeAdmin [pID] [AdminLevel]
    if(sscanf(params, "ud",pID,AdminLevel))//Damit werden die einzelnen Variablen unterschieden in playerid und d = Integer
    {
    return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /Makeadmin [playerid] [Admin Level]");//Nachricht wird gesendet wenn der Spieler /MakeAdmin nur eingibt.
    }
    if(!IsPlayerConnected(pID))//Wenn der Spieler nicht Online ist
    {
    return SendClientMessage(playerid,COLOR_GRAD2,"Kein Spieler mit angegebener ID Online!");
    }
    if(pInfo[playerid][Admin] == 4)//Prüft ob der Spieler Fulladmin ist
    {
    new string[256];//Definition des Strings für den Spieler
    new astring[256];//Definition des Strings für den Admin
    new AdminName[MAX_PLAYER_NAME];//AdminName, z.B. Hugo
    new Name[MAX_PLAYER_NAME];//Spieler Name z.B. Hans
    GetPlayerName(playerid, AdminName, sizeof(AdminName));//Prüft den Namen des Admins
    GetPlayerName(pID, Name, sizeof(Name));//Prüft den Namen des Spielers
    if(AdminLevel >= 5)//Wenn das Admin Level über 5 ist
    {
    SendClientMessage(playerid,COLOR_WHITE,"Das Admin Level kann nur von 1 - 4 Sein!");
    return 1;
    }
    if(AdminLevel == 0)//Wenn das Admin Level auf 0 gesetzt wird = Keine Rechte
    {
    format(string, sizeof(string),"Fulladmin %s hat dir die Team Mitglieder Rechte entzogen!",AdminName);//String für den Spieler den er bei SendClientMessage bekommt
    format(astring, sizeof(astring),"Du hast %s Team Mitglieder Rechte entzogen!",Name);//String für den Admin den er bei SendClientMessage bekommt
    SendClientMessage(pID,COLOR_GREEN,string);//String wird als Nachricht an den Spieler gesendet
    SendClientMessage(playerid,COLOR_GREEN,astring);//AString wird als Nachricht an den Spieler gesendet
    pInfo[pID][Admin] = 0;//Admin Level wird auf 0 gesetzt
    }
    if(AdminLevel == 1)//Selbe wie oben nur mit Level 1
    {//Alles was jetzt kommt ist genauso wie oben nur das er diesmal als Supporter eingetragen wird
    format(string, sizeof(string),"Fulladmin %s hat dich zum Supporter gemacht!",AdminName);
    format(astring, sizeof(astring),"Du hast %s zum Supporter gemacht!",Name);
    SendClientMessage(pID,COLOR_GREEN,string);
    SendClientMessage(playerid,COLOR_GREEN,astring);
    pInfo[pID][Admin] = 1;
    }
    else
    if(AdminLevel == 2)
    {
    format(string, sizeof(string),"Fulladmin %s hat dich zum Moderator gemacht!",AdminName);
    format(astring, sizeof(astring),"Du hast %s zum Moderatoren gemacht!",Name);
    SendClientMessage(pID,COLOR_RED,string);
    SendClientMessage(playerid,COLOR_RED,astring);
    pInfo[pID][Admin] = 2;
    }
    else
    if(AdminLevel == 3)
    {
    format(string, sizeof(string),"Fulladmin %s hat dich zum Super Moderator gemacht!",AdminName);
    format(astring, sizeof(astring),"Du hast %s zum Super Moderator gemacht!",Name);
    SendClientMessage(pID,COLOR_LIGHTBLUE,string);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,astring);
    pInfo[pID][Admin] = 3;
    }
    else
    if(AdminLevel == 4)
    {
    format(string, sizeof(string),"Fulladmin %s hat dich zum Fulladmin gemacht!",AdminName);
    format(astring, sizeof(astring),"Du hast %s zum Fulladmin gemacht!",Name);
    SendClientMessage(pID,COLOR_LIGHTBLUE,string);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,astring);
    pInfo[pID][Admin] = 4;
    }
    }
    else//Wenn er kein Fulladmin ist
    {
    return SendClientMessage(playerid,COLOR_RED,"Du bist kein Fulladmin!");
    }
    return 1;
    }


    ich komme da oben net klar das ist so unübersichtlich..

    MfG Mayo :love:

  • ich bekomme diese fehler


    C:\Users\Niklas\Desktop\GTA SERVER\filterscripts\Adminsystem.pwn(43) : error 017: undefined symbol "pInfo"
    C:\Users\Niklas\Desktop\GTA SERVER\filterscripts\Adminsystem.pwn(43) : warning 215: expression has no effect
    C:\Users\Niklas\Desktop\GTA SERVER\filterscripts\Adminsystem.pwn(43) : error 001: expected token: ";", but found "]"
    C:\Users\Niklas\Desktop\GTA SERVER\filterscripts\Adminsystem.pwn(43) : error 029: invalid expression, assumed zero
    C:\Users\Niklas\Desktop\GTA SERVER\filterscripts\Adminsystem.pwn(43) : fatal error 107: too many error messages on one line


    in dieser zeile


    public OnPlayerSpawn(playerid)
    {
    if(pInfo[playerid][Admin] == 1) // Fragt ab ob der Spieler Supporter ist <----FEHLER
    {
    SendClientMessage(playerid, Gelb, "Du wurdest erfolgreich als Supporter eingeloggt!");
    }
    if(pInfo[playerid][Admin] == 2) //Fragt ab ob der Spieler Moderator ist
    {
    SendClientMessage(playerid, Gelb, "Du wurdest erfolgreich als Moderator eingeloggt!");
    }
    if(pInfo[playerid][Admin] == 3) //Fragt ab ob der Spieler Super Moderator ist
    {
    SendClientMessage(playerid, Gelb, "Du wurdest erfolgreich als Super Moderator eingeloggt!");
    }
    if(pInfo[playerid][Admin] == 4) //Fragt ab ob der Spieler Fulladmin ist
    {
    SendClientMessage(playerid, Gelb, "Du wurdest erfolgreich als Full Admin eingeloggt!");
    }
    return 1;