[TUT] Adminlevel mit enum-Struktur

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 Tag liebe Brotfisher,


    wie ich hier sehe arbeiten viele von euch mit RCON Administratoren. Doch ist das nicht etwas nervig sich immer wieder mit /rcon login [Passwort] einzuloggen? Grade bei einem RL-Server ist das extrem nervig für Admins. Deswegen zeige ich euch hier wie man es einfach machen kann.
    Die Vorteile:


    -bessere Einteilung im Script(Meinungssache)
    -fasst viele Dinge auf einmal(Passwort,Adminlevel usw)
    -Variable verwendbar(PlayerInfo,Zufallsspawnkoordinaten usw.)
    -sobald man online kommt, hat man das Level


    Zu nächst brauchen wir eine enum Struktur.


    enum PlayerInfo
    {
    Admin,
    }
    Warum es enum heißt kann ich euch leider nicht sagen.
    Das
    PlayerInfo nach enum ist eine Variable. Diese kann durch jedes Wort/Buchsabe/Zahl ersetzt werden.
    Danach öffnen wir die Struktur mit einer "{"-Klammer.
    Nach demn wir das haben kommt eingerückt die Variable um WAS es sich handeln soll, in diesem Falle "Admin", was das Administratorlevel werden soll.
    Nach jeder Variable, auf die eine weitere folgt, kommt ein ",". Nach der letzten Variable muss eine "}"-Klammer sein.
    Ein Beispiel wie es oft verwendet wird:
    enum PlayerInfo
    {
    Pass[255], // Das Passwort, es kann bis zu 255 Zeichen lang sein
    Admin, // Das Adminlevel
    Money, // Geld
    Kills;// Kills eben^^
    }


    Kommen wir nun zu der Spielerinformation(PlayerInfo).
    new pInfo[MAX_PLAYERS][PlayerInfo];
    das
    pInfo ist ein 2 dimensionaler Array. Defacto eine Variable.
    MAX_PLAYERSist nur ein Wert der mit 200 definiert ist. Man könnte genauso gut 200 statt MAX_PLAYERS schreiben.
    PlayerInfo verweist auf die enum-Struktur. PlayerInfo kann durch jede Variable ersetzt werden, jedoch muss der Name dem Namen einer enum Struktur gleichen, ansonsten bekommt man errors.
    In der If-Abfrage kann PlayerInfo für die Werte die unter der Struktur aufgelistet sind stehn.

    If-Abfrage:

    Der Command kann ganz normal aufgebaut werden, man muss eben nur die If-Abfrage für PlayerInfo hinzufügen.
    if(pInfo[playerid][Admin] >= 3 )
    Die If-Abfrage ist wieder ganz normal aufgebaut. Man fängt an mit "if(" Nun kommt die Variable die wir bei "
    new"definiert haben. In diesem Falle ist es pInfo.
    Danach öffnen wir ein weiteres Feld mit "["-Klammer. Dort wir entweder ein Parammeter(Ziel) oder
    playerid eingetragen. Playerid bezieht sich auf den CMD-Ausführenden Spieler.
    Admin ist unsere Variable die wir bei der enum-Struktur eingetragen haben. In unserem Fall wollen wir somit ein Administratorsystem aufbauen.
    >= 3 besagt welches Level man haben muss um den Command ausführen zu können. Hier kommt zum ersten mal das Level bei dem Adminsystem ins Spiel. Dies so definiert wie man es gerne hätte. ">" sollte jedem aus dem Mateh unterricht bekannt sein. [Admin] > X /*und*/ X < [Admin] bedeutet, dass die Variable größer als bzw kleiner als der Nachfolgende Wert X ist(bei Abfragen sein muss). Wenn man nunein "=" Einfügt heißt es größer/kleiner gleich. So viel zum Thema Mathematik.
    Im prinzip ist nun unser Administrator-Level-System fertig. Die Nachstehende Variable "X"(siehe Beispiel) kann jeden Wert annehmen.
    Nach dem Selben Prinzip funktioniert ein Levelsystem mit ALLEM.


    Doch was wäre ein Adminsystem wenn es nicht gespeichert wird?
    dini_IntSet(pFile,"Admin",pInfo[playerid][Admin]);
    Dies wäre das Kommando beim Verlassen des Servers das Adminlevel zu speichern.
    Nun wird in der Dini Datei folgendes gespeichert:
    Admin: [Zahl = Level des Spielers]
    Natürlich wird dazu noch der Dini Code beim regestrieren usw benötigt.


    Ein gutes Tut für Dini Kommandos gibt es bei uns im Foum schon: [ SCRIPTING ] Dateiensystem dini - Dateien erstellen, löschen, speichern, laden
    Ein Tut für ein Registersystem ist ebenfalls vorhanden:[ SCRIPTING ] Ein einfaches Register/Login System machen


    Wenn ihr nun ein Adminlevelsystem erstellen wollt benötigt ihr für fast alle Administatorcmds Parameter. Hierzu gibt es ein exellentes Tut von goldkiller. Ich habe es mir 2 durchgelesen und verstehe das nun: [ SCRIPTING ] Commands mit Parametern



    Einma vorbei schaun lohnt sich
    www.prt-clan.com der GamerClan für GTA-SAMP.Wir haben einen leistungsstarken vServer und ein hoch entwickeltes RealLife Script der Marke eigenbau, zu 100% Selfmade.
    Bald geht der RL-Server on, seid alle dabei. Regestriert euch und fiebert mit!!!


    2 Mal editiert, zuletzt von Weed ()

  • Na dann viel Spaß mit diesem fehlerhaften Tutorial.


    1. Erklärung ist fehlerhaft
    2. die Codes darin sind zum Teil fehlerhaft.
    3. Woher bitte soll man in Abschnitt 3 wissen was der String "pFile" für einen Inhalt hat?!

  • Also mal locker bleiben, erklärung is falsch???? Eig nit nein, der Code funktioniert wunderbar bei mir, und auf das mit dini wollt ich nicht weiter eingehen da hab ich nen link gegeben bei mir heißt das pFile muss ja nit bei jedem so sein
    und so schlecht kanns nit sein, sonst hätt das nen mod nicht zugelassen

  • Zitat

    Nach der letzten Variable muss ein ";" stehn und dann mit einer "}"-Klammer geschlossen werden.


    Falsch. Dort kann entweder ein "," stehen oder es wird einfach nichts hingeschrieben und nurnoch die Klammer geschlossen.


    Zitat

    das pInfo ist der Name der Abrage


    Falsch. pInfo ist nur ein 2 dimensionaler Array. Defacto eine Variable.


    Zitat

    MAX_PLAYERS ist wie immer dabei, sie besage(so weit ich weiß) das jeder Spieler die Variable vorher(in diesem Falle pInfo) haben kann.


    Stimmt teilweise, ist aber falsch. MAX_PLAYERS ist einfach nur ein Wert der mit 200 definiert ist. Man könnte genauso gut 200 statt MAX_PLAYERS schreiben.


    Zitat

    dini_IntSet(pFile,"Admin",pInfo[playerid][Admin]);


    Pawno weiß nicht dass pFile ein String ist => Fehler.


  • Pawno weiß nicht dass pFile ein String ist => Fehler.

    klappt aber bei mir supergut also kein fehler drin oder so

  • Schön, würde bei mir auch klappen wenn ich pFile deklariere.


    Aber in diesem Tutorial wird nirgends pFile erstellt und auch nicht deklariert.

  • public OnPlayerDisconnect(playerid, reason)
    {
    dini_IntSet(pFile,"Admin",pInfo[playerid][Admin]);
    return 1;
    }


    Folge =>


    \pawno\new.pwn(74) : error 017: undefined symbol "pFile"
    \pawno\new.pwn(74) : warning 215: expression has no effect
    \pawno\new.pwn(74) : error 001: expected token: ";", but found "]"
    \pawno\new.pwn(74) : error 029: invalid expression, assumed zero
    \pawno\new.pwn(74) : fatal error 107: too many error messages on one line

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Zitat

    Warum es enum heißt kann ich euch leider nicht sagen.


    Weiss nicht ob es stimmt,hab es aber immer damit verbunden.
    to enumerate


    Pass[255], // Das Passwort, es kann bis zu 255 Zeichen lang sein

    Kannst mal erklären wofür man das Passwort in einer Variablen speichern sollte :\ ?
    Ich brauch das Passwort nur beim einloggen (/login) oder Passwört ändern (/changepw).Da reicht es auch wenn ich es temporär speicher oder direkt als return nur benutzte.


    - - - - - - - - - - - - - - -
    Ansonsten nettes Tutorial.Wollen wir mal hoffen,dass es auch welche gebrauchen ;).

  • Äh nochmal auf deutsch Gold das rall ich nit was du meinst,
    BrighT ihc habe nichts bei onplayerdisconnect drin muss ihc noch machen wo kann man den pFile deklariren?

  • Und welcher Teil ist nicht auf Deutsch X__x?
    Erklär doch einfach mal mal wozu der Eintrag Passwort[255!!!] gut ist in enum PlayerInfo.

    Zitat

    BrighT ihc habe nichts bei onplayerdisconnect drin muss ihc noch machen wo kann man den pFile deklariren?


    Muss man dir jetzt bei deinem eigenen Tutorial etwas erklären :0 ?

  • ne es klappt ja bei mir wunderbar, nur iwie bringt bright mich durcheinander
    die 255 steht für die Passwortlänge, die kann bis zu 255 Zeichen sein

  • BrighT ihc habe nichts bei onplayerdisconnect drin muss ihc noch machen wo kann man den pFile deklariren?


    Du benützt die "dini_IntSet" Funktion welche 3 Parameter braucht.
    1. Filename (Ein String)
    2. Key (Der Punkt unter dem der Wert gespeichert wird, wieder ein String)
    3. Value (Der gespeicherte Wert, ein Integer)


    So, die letzten beiden Parameter sind vorhanden, das stimmt.


    Nur der erste nicht. Nirgends in deinem Tutorial wird "pFile" erstellt und auch nicht formatiert. Logisch, hast es ja nicht erstellt.


    Nun kommt einer drauf das ganze einfach mal in den Compiler zu werfen, und prompt kommen diese vier Errors raus:
    \pawno\new.pwn(74) : error 017: undefined symbol "pFile"
    \pawno\new.pwn(74) : warning 215: expression has no effect
    \pawno\new.pwn(74) : error 001: expected token: ";", but found "]"
    \pawno\new.pwn(74) : error 029: invalid expression, assumed zero
    \pawno\new.pwn(74) : fatal error 107: too many error messages on one line


    Und du kannst mir nicht weißmachen, dass du ohne irgendwo in deinem Script "pFile" zu deklarieren, diesen Code mit dini_IntSet, einfach kompilieren kannst.

  • Also @ Gold, warum muss man genau wissen WARUM es immer alles so is? Warum besteht alles aus Atomen??? Warum is die Natur nicht immer zu erklären? Man kann nicht alles erklären, ich weiß nicht genau worauf du hinauswillst das was in dem TUT steht weiß ich mehr nicht. Ich weiß WIE es funtkioniert und ich weiß DASS es frunktioniert, reicht das nicht? Ich bin eben kein genie im Scripten

  • Also habe jetzt mal so gelesen und manche müssen ja mal wieder richtig rumprotzen nur weil man nicht alle sperfekt erklärt also da gibt man einen Tipp wenn was falsch ist aber mann muss sich ja nicht so aufspielen

    Ich wurde angesteckt:


    o.o
    o-o
    8|
    ^^


    So nun steckt euch auch an::

  • Und am Ende heulen wieder alle rum dass es nicht funktioniert.......


    Was zur Hölle bitte bringt ein Tutorial das voller Fehler ist?!


    Und jeder der das dann auch noch positiv bewertet hat sichs nicht durchgelesen.