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
erstmal schreiben wir alles in diesen Public:
public OnPlayerConnect(playerid)
{
return 1;
}
public OnPlayerConnect(playerid)
{
return 1;
}
Dieser public wird immer dann aufgerufen wenn ein Spieler versucht dem Server beizutreten.
da schreiben wir erstmal folgendes rein:
da schreiben wir erstmal folgendes rein:
new PName[MAX_PLAYER_NAME];
GetPlayerName(playerid,PName,sizeof(PName));
GetPlayerName(playerid,PName,sizeof(PName));
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?
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.
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.
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
Okay jetzt haben wir den Namen gespeichert nun müssen wir abfragen ob der name ein ' _ ' enthält dass machen wir mit.
if ( strfind ( string, sub, ignorecase ,ignorecase ) Position && !IsPlayerNPC (playerid) )
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'.
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'.
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.
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 "_".
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.
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) )
{
Die abfrage sollte bei euch nun so aussehen.
if ( strfind ( PName, "_", false, false) == -1 && !IsPlayerNPC (playerid) )
{
Spieler kicken
In diesen Klammern ' { } ' schreiben wir nun rein was passiert wenn bei dem Spieler kein '_' gefunden wurde. Dass wäre folgendes.
if ( strfind ( PName, "_", false , false) == -1 && !IsPlayerNPC (playerid) )
{
SendClientMessage(playerid,0xFF0000FF,"Sie haben keinen Roleplay Namen.");
Kick(playerid);
return 1;
}
{
SendClientMessage(playerid,0xFF0000FF,"Sie haben keinen Roleplay Namen.");
Kick(playerid);
return 1;
}
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