ohne Roleplaynamen Serverkick

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,
    ich werde in diesem Tutorial erklären wie man herrausfinden ob die spieler die dem server betreten, Roleplay namen haben wie z.b. 'Jamy_Wagner' oder 'Fritz_Müller'.



    benötigt wird:
    - Pawn Grundkenntnisse
    - Keine Angst vorm lesen
    - Lernbereitschaft

    Namen herrausfinden & Speichern

    Spoiler anzeigen
    erstmal schreiben wir alles in diesen Public:
    public OnPlayerConnect(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    Dieser public wird immer dann aufgerufen wenn ein Spieler versucht dem Server beizutreten.
    da schreiben wir erstmal folgendes rein:

    Spoiler anzeigen
    new PName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,PName,sizeof(PName));

    Spoiler anzeigen
    mit ' new ' erstellen wir eine neues variable die können wir nennen wie wir wollen, in diesem fall habe ich sie ' PName ' genannt. dass [MAX_PLAYER_NAME] bedeutet wieviele Zeichen ich in diese Variable rein packen kann, man kann genau sogut irrgendeine zahl schreiben wie z.b. ' 30 ' dann würden maximal 30 Zeichen in diese Variable passen. Aber in diesem fall die Maximale Spieler Namenlänge, [MAX_PLAYER_NAME] klingt logisch oder?

    Spoiler anzeigen
    GetPlayerName bedeutet folgendes ' Get ' ist dass englische wort für holen/bekommen ,' Player ' is dass englische wort für Spieler und ' Name ' ist dass englische wort für Name. Also zusammen HolSpielerName kann man also übersetzten mit ' Hol den Namen des Spielers ' okay in den klammern ' (...) ' schreiben wir dann die parameter.

    Spoiler anzeigen
    Der erste parameter bedeutet von welcher spieler id wir uns den namen holen wollen. die ids stehen wenn man ingame auf die ' tabulator ' taste drückt links vom spieler.

    aber wir kennen ja die id des spielers nicht, deswegen schreiben wir ' playerid ' hin also die id des spielers so einfach.
    Als nächstes müssen wir angeben in welcher variable/string wir den namen speichern wollen, in diesem falle ist es unsere variable/string ' PName ' . In den nächsten parameter schreiben wir wieviele Buchstaben unsere variable/string maximal speichern kann. Da wir es schon oben mit 'new PName[MAX_PLAYER_NAME]; ' definiert haben als [MAX_PLAYER_NAME] können wir einfach schreiben ' sizeof(PName) ' dass soviel heißt wie die größe von unserer variable/string ' PName ' dass in diesem falle die Maximale Spieler Namenlänge ist.


    Abfrage

    Spoiler anzeigen
    Okay jetzt haben wir den Namen gespeichert nun müssen wir abfragen ob der name ein ' _ ' enthält dass machen wir mit.

    Spoiler anzeigen
    if ( strfind ( string, sub, ignorecase ,ignorecase ) Position && !IsPlayerNPC (playerid) )

    Spoiler anzeigen
    okay was bedeutet dass? 'if' is eine abfrage und heißt übersetzt 'wenn'.
    strfind bedeutet soviel wie 'string find' dass übersetzt bedeutet 'Zeichen/Zeichenkette finden' also Buchstaben/Zahlen oder wörter aus einem Wort finden. okay dann haben wir als ersten parameter 'string' da gehört der string hin in dem wir die Zeichen(Buchstaben/Zahlen) finden wollen. In diesem fall unsere Variable/string 'PName'.

    Spoiler anzeigen
    Okay der nächste parameter ist 'sub' da schreiben wir rein welche Zeichen(Buchstaben/Zahlen) wir in unserem String suchen in diesem Fall "_" also schreiben wir in solchen zeichen "_" was wir suchen darein.

    Spoiler anzeigen
    als nächsten parameter haben wir 'ignorecase' dass bedeutet soviel wie 'groß und kleinschreibung ignorieren' also fragt er uns ob er die groß und kleinschreibung ignorieren soll. da schreiben wir 'false' oder ' 0 ' für nein hin er soll die groß und kleinschreibung beachten oder wir schreiben 'true' oder '1' dafür dass er die groß und kleinschreibung ignorieren soll. Dass danach müssen wir nochmal 'true' oder 'false' machen für die Zeichenkette die wir suchen in diesem fall "_".

    Spoiler anzeigen
    schön und gut nun kommen wir zu 'position' da schreiben wir "== -1" hin dass soviel bedeutet wie 'gleich -1' wieso dass da stehen muss weiß ich selber nicht genau und ich möchte auch durch meine vermutungen hier nichts verbreiten dass nicht stimmt aber ohne dies funktioniert es nicht. Es können ja mal erfahrenere scripter schreiben was es bedeutet. Dann werde ich es noch dazu editieren. Aber wichtig ist dass da "== -1" stehen muss.

    Spoiler anzeigen
    Dann haben wir ein '&&' dass bedeutet einfach 'und' also fragen wir noch was undzwar ob '!IsPlayerNPC(playerid)'. dass '!' bedeutet 'nicht'. 'IsPlayerNPC' heißt übersetzt 'Ist Spieler ein NPC' also fragen wir ob er ein NPC/Bot ist und kein Spieler. wenn wir es vereinen fragen wir also mit !IsPlayerNPC (playerid) ab, ob der Spieler kein NPC ist. In den klammern kommt wieder die Spieler id, da schreiben wir in diesem Falle wieder 'playerid' hin.
    Die abfrage sollte bei euch nun so aussehen.

    if ( strfind ( PName, "_", false, false) == -1 && !IsPlayerNPC (playerid) )
    {


    Spieler kicken

    Spoiler anzeigen
    In diesen Klammern ' { } ' schreiben wir nun rein was passiert wenn bei dem Spieler kein '_' gefunden wurde. Dass wäre folgendes.

    Spoiler anzeigen
    if ( strfind ( PName, "_", false , false) == -1 && !IsPlayerNPC (playerid) )
    {
    SendClientMessage(playerid,0xFF0000FF,"Sie haben keinen Roleplay Namen.");
    Kick(playerid);
    return 1;
    }

    Spoiler anzeigen
    Wir schreiben dem Spieler eine Nachricht mit SendClientMessage(playerid,Farbe(Farb Code/#define),Message); wo drin steht dass er kein Roleplay Namen hat, ich denke darauf muss ich nicht weiter eingehen. Dann werfen wir den Spieler vom Server mit Kick(playerid); hier steht 'playerid' wieder für die id vom Spieler. Und am schluss ein return 1; dass wars.


    Ich würde mich sehr über Bewertungen von Scriptanfängern freuen, damit ich weiß ob es gut zum lernen geholfen hat und ich würde mich auch freuen wenn Professionellere Scripter meine fehler(falls vorhanden) verbessern.
    mfg. Grek

    >> sPa.M << go, go,Bann me, Bann me

    2 Mal editiert, zuletzt von Grek () aus folgendem Grund: - strfind erklärungen vergessen, vertan - bessere überschrift


  • Du glaubst wohl kaum, dass er Namen wie "./&4_name" ablehnt oder?
    Dann müsste er jedem Namen der "Roleplay-Mäßig" ist, sagen wir, auf die "Whitelist" setzen.

  • Du glaubst wohl kaum, dass er Namen wie "./&4_name" ablehnt oder?
    Dann müsste er jedem Namen der "Roleplay-Mäßig" ist, sagen wir, auf die "Whitelist" setzen.


    Zumindest auf dem Wege, wie er es umgesetzt hat. Allerdings gibt es da eindeutig schönere Alternativen, die, wenn ich mich nicht irre, sogar schon hier im Forum veröffentlicht wurden. Auch wenn Juan sich etwas wortkarg artikuliert hat, hat er im Kern seiner Aussage nicht ganz Unrecht. Das Script erfüllt nicht den erzielten Zweck, nämlich den Namen auf Roleplay-tauglichkeit zu prüfen.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Ich würde etwas in der Art von



    (Pseudo Code:)
    function TesteSpielerNamen
    if (Name enthält kein "_") lehne ab
    if (Mehr als ein "_" kommt vor) lehne ab
    if ("_" sitzt an erster bis dritter oder vorvorletzer bis letzter Stelle) lehne ab
    if (Erster Buchstabe und Buchstabe nach "_" sind nicht großgeschrieben) lehne ab
    if (Anzahl Selbstlaute < MIN_SELBSTLAUTE) lehne ab
    return


    empfehlen, ist mit den String-Funktionen von Pawno recht leicht machbar, schätze ich :)
    Für die Großbuchstaben kann man die chars als integer interpretieren und auf der Liste nachschauen, welches Intervall die großgeschriebenen Buchstaben beinhaltet.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • C:\Dokumente und Einstellungen\Phil\Eigene Dateien\SAMP 0.3x [SERVER NORMALE VERSION]\gamemodes\GeTmyselfmade.pwn(14340) : error 017: undefined symbol "string"
    C:\Dokumente und Einstellungen\Phil\Eigene Dateien\SAMP 0.3x [SERVER NORMALE VERSION]\gamemodes\GeTmyselfmade.pwn(14340) : error 017: undefined symbol "Position"
    C:\Dokumente und Einstellungen\Phil\Eigene Dateien\SAMP 0.3x [SERVER NORMALE VERSION]\gamemodes\GeTmyselfmade.pwn(14340) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Phil\Eigene Dateien\SAMP 0.3x [SERVER NORMALE VERSION]\gamemodes\GeTmyselfmade.pwn(14340) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.

  • Hat jemand ne Lösung?

    Einmal editiert, zuletzt von GameCrumb ()

  • Zitat

    Hat jemand ne Lösung?

    soweit ich das sehe hast du strings/variablen nicht definiert.
    und hast eine message die zu lang ist, das der string sie nicht ganz speichern kann.
    schick am besten die zeilen die der error betrifft.


    Danke an alle für die verbesserungsvorschläge bei zeiten werde ich das system verbessern.

    >> sPa.M << go, go,Bann me, Bann me