Hallo liebe Brotfische,
Ich hab mich entschlossen wieder ein Tutorial zu machen. Dieses mal zeige ich euch einen /kick Befehl der aber auf ocmd & sscanf basiert.
So, erstmal was ihr braucht:
- ocmd.inc
- sscanf Plugin (ihr könnt auch den sscanf stock nutzen)
- bisschen Geduld
- Grundwissen
(Links für die inc bzw. Plugins findet ihr ganz unten im Thread!)
=========================================================================================================================
Kommen wir jetzt zum Script Teil:
Als erstes damit unser Kick Befehl auch funktioniert müsst ihr ganz oben folgendes einfügen:
#include <ocmd>
und
#include <sscanf>
Wenn ihr aber den sscanf stock benutzen wollt müsst ihr den ganzen stock ganz unten ins Script einfügen
(Link zum stock ist unten im Thread!)
So nun haben wir die beiden wichtigen Sachen um den Befehl zu erstellen, also gehen wir nun zu OnPlayerCommandText und fügen unter der Klammer die das
Callback schließt folgendes ein:
ocmd:kick(playerid,params[])
{
So, nun heißt der Befehl /kick. Der nächste Schritt wäre erstmal alles zu definieren was wir für den Befehl brauchen. Das wäre:
new pID,reason[20],givename[MAX_PLAYER_NAME],name[MAX_PLAYER_NAME],str[128];
Zur Erklärung:
pID = Der Spieler den wir kicken wollen
reason[20] = Der Grund, der nur maximal 20 Buchstaben/Zahlen/Zeichen lang sein kann
givename = Der Name des gekickten Spielers
name = Unser Name
str[128] = Der String den wir später für die Nachricht brauchen und die Länge
Ales nächstes Fragen wir ab, ob der Spieler der den Befehl eingibt auch ein Admin ist:
if(SpielerInfo[playerid][pAdmin] <= 1)return SendClientMessage(playerid,GRAU,"Du besitzt nicht die benötigten Rechte dafür!");
Dieser Code heißt nicht anderes als:
Ist der Spieler kleiner als Admin 1, wird ihm die Nachricht gesendet: "Du hast keine Rechte dafür!"
Ihr könnt natürlich euren beliebigen Admin Rang dort einfügen.
Als nächstes kommt jetzt die sscanf Abfrage, ob der Spieler auch "ID" und "Grund" eingibt. Die sieht dann so aus:
if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,GRAU,"Tippe: /kick [ID] [Grund]");
Zur Erklärung:
sscanf = Ist unser Programm
params = Sind die Parameter die wir danach setzen/auswählen
"us" = Das "u" steht für die Spieler ID (u = Userid) und "s" für die Nachricht die wir dann schreiben also den Grund.
pID = Die Userid vom ausgwählten Spieler
reason = Den Grund den wir eingeben
Also: Sollte der Spieler "ID" (pID) und "Grund" (reason) nicht angeben, kommt die nachricht:" Tippe: /kick ........."
Das hätten wir dann auch, jetzt muss nur noch was passieren wenn der Spieler das eingibt.
Wir wollen erstmal die Namen vom Spieler sowie vom Spieler der gekickt wird, deswegen fügen wir noch folgendes hinzu:
GetPlayerName(playerid,name,sizeof(name)),GetPlayerName(pID,givename,sizeof(givename));
Nun haben wir auch die Namen aller beiden. Doch bevor der Spieler gekickt wird, müssen wir eine Nachricht senden.
Und das machen wir so:
format(str,sizeof(str),"[Server]: %s hat den Spieler %s vom Server gekickt! Grund: %s",name,givename,reason);
Und damit auch jeder Spieler die Nachricht lesen kann, setzen wir dadrunter noch eine:
SendClientMessageToAll(ROT,str);
Jetzt kann jeder auf dem Server diese Nachricht lesen, nun fehlt nur noch das was den Befehl ausmacht:
Kick(pID);
Dann noch das return 1; und die geschlossene Klammer nicht vergessen und fertig ist der Befehl.
Ihr könnt natürlich noch ein paar Extras einfügen wie:
- man darf keine höheren Admin kicken also zum Beispiel so:
if(SpielerInfo[pID][pAdmin] > SpielerInfo[playerid][pAdmin])return SendClientMessage(playerid,ROT,""ADMINERROR"");
- oder auch, dass der gekickte Spieler die Nachricht lesen kann. Das würde man dann mit einem Timer machen und ihn dann nach z.B. 1 Sekunde kicken.
Wenn jemand durcheinander gekommen ist habe ich euch nochmal den ganzen Befehl hier eingefügt:
ocmd:kick(playerid,params[])
{
new pID,reason[128],name[MAX_PLAYER_NAME],givename[MAX_PLAYER_NAME],str[128];
if(SpielerInfo[playerid][pAdmin] <= 1)return SendClientMessage(playerid,GRAU,"Du besitzt nicht die benötigten Rechte dafür!");
if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,GRAU,"Tippe: /kick [ID] [Grund]");
GetPlayerName(playerid,name,sizeof(name)),GetPlayerName(pID,givename,sizeof(givename));
format(str,sizeof(str),"[Server]: %s hat den Spieler %s vom Server gekickt! Grund: %s",name,givename,reason);
SendClientMessageToAll(ROT,str);
Kick(pID);
return 1;
}
=============================================================================================================================
Das wars auch schon, falls ihr Fehler entdeckt und welche habt, könnt ihr mir gerne schreiben. Ich würde mich auch über positive Rückmeldungen freuen.
Hier noch die Download Links:
Ich hoffe mein 2 Tutorial hat euch gefallen.
MfG
Advanced