Inhalt:
- Warn System
- Dini
- ocmd
- sscanf
Um was geht es in diesem Tutorial?
Ich erkläre euch Heute mal wie ihr ein, Warn System erstellen könnt.
Falls einige nicht wissen was damit gemeint ist, erkläre ich es mal.
Ein warn System ist dazu da um andere Spieler eine Verwarnungen zu geben,
bei einer bestimmten anzahl an Verwarnungen könnt ihr den Spieler vom Server bannen lassen, oder was auch immer ihr mit ihm anstellen wollt
Was benötigen wir?
- Dini ( Zum Speichern/Laden der Warns )
- OCMD ( Zum erstellen der Befehle )
- sscanf ( Für die einzelnen Parameter für die Befehle. Für mehr Infos dazu hier KLICKEN )
Die Erstellung der einzelnen Befehle:
Befehl zum verteilen der Verwarnungen:
ocmd:setwarn(playerid, params[])
{
if(IsPlayerAdmin(playerid))return SendClientMessage(playerid, WEIS, " Du bist kein Rcon Admin!"); // Hier wird jetzt abgefragt ob der Spieler Rcon Admin ist. Natürlich könnt ihr diese Abfrage mit eure ersetzen.
new warnid, warnanzahl, warngrund[60];
if(sscanf(params,"uds",warnid, warnanzahl, warngrund))return SendClientMessage(playerid, WEIS,"Verwendung: /setwarn [Name/ID] [Warn-Anzahl] [Warn-Grund]"); // Sollte sich eigentlich von selbst erklären. wenn nicht KLICK
if(!IsPlayerConnected(warnid))return SendClientMessage(playerid, WEIS, " Dieser Spieler ist nicht Online!"); // Falls der Spieler (Warnid) sich nicht auf den Server befindet erhält man eine Fehlermeldung.
if(strlen(warngrund) > 60)return SendClientMessage(playerid,0xC34600FF,"Benutzung: [Warn-Grund darf Maximal nur 60 Zeichen beinhalten!]"); // die 60 steht für die anzahl der Zeichen die Verwendet werden dürfen.
{
new string[150]; // Hier erstellen wir den Array für die Nachrichten die wir nun mit der 'format' Funktion formatieren werden.
format(string,sizeof(string), "Du hast an den Spieler %s %d Warns verteilt, Grund: %s", SpielerName(warnid), warnanzahl, warngrund);SendClientMessage(playerid, WEIS, string);
SendClientMessage(warnid, WEIS, string);format(string,sizeof(string),"%s vergibt dir %d Warns, sein Grund: %s",SpielerName(playerid), warnanzahl, warngrund);
SetPVarInt(playerid,"Warns",GetPVarInt(playerid,"Warns")+warnanzahl);
if(GetPVarInt(warnid, "Warns") >= 3) // Falls der Spieler nun 3 Warns oder mehr hat soll was passieren?. Ich sage er soll eine Nachricht erhalten und im Anschluss gebannt werden.
{
SendClientMessage(warnid, WEIS, "Du hast die Maximale Warn anzahl erreicht und wirst nun gebannt!"); // eine Nachricht an den Spieler wird ausgegeben.
Ban(warnid); // hier durch wird der Spieler gebannt und vom Server gekickt
}
}
return 1;
}
Befehl zum löschen der Verwarnungen:
ocmd:delwarn(playerid, params[])
{
if(IsPlayerAdmin(playerid))return SendClientMessage(playerid, WEIS, " Du bist kein Rcon Admin!"); // Hier wird jetzt abgefragt ob der Spieler Rcon Admin ist. Natürlich könnt ihr diese Abfrage mit eure ersetzen.
new warnid, warnanzahl, warngrund[60];
if(sscanf(params,"uds",warnid, warnanzahl, warngrund))return SendClientMessage(playerid, WEIS,"Verwendung: /givewarn [Name/ID] [Warn-Anzahl] [Warn-Grund]"); // Sollte sich eigentlich von selbst erklären. wenn nicht KLICK
if(strlen(warngrund) > 60)return SendClientMessage(playerid,0xC34600FF,"Benutzung: [Warn-Grund darf Maximal nur 60 Zeichen beinhalten!]"); // die 60 steht für die anzahl der Zeichen die Verwendet werden dürfen.
if(!IsPlayerConnected(warnid))return SendClientMessage(playerid, WEIS, " Dieser Spieler ist nicht Online!"); // Falls der Spieler (Warnid) sich nicht auf den Server befindet erhält man eine Fehlermeldung.
if(GetPVarInt(warnid,"Warns") - warnanzahl >= 0)return SendClientMessage(playerid,GRUN," Der Spieler hat entweder 0 Warns oder die Warn-Anzahl ist zu groß!"); //Wenn der Spieler 0 Warns hat erhält der Admin diese Fehlermeldung. Oder wählt der Admin mehr Warns aus als der Spieler eigentlich hat erhält er diese Nachricht.
{
new string[128]; // Hier erstellen wir wieder den Array für die Nachrichten die wir nun mit der 'format' Funktion formatieren werden.
format(string,sizeof(string), "Du hast vom Spieler %s %d Warns gelöscht, Grund: %s", SpielerName(warnid), warnanzahl, warngrund);
SendClientMessage(playerid, WEIS, string);format(string,sizeof(string),"%s löscht dir %d Warns, sein Grund: %s",SpielerName(playerid), warnanzahl, warngrund);
SendClientMessage(warnid, WEIS, string);
SetPVarInt(playerid,"Warns",GetPVarInt(playerid,"Warns")-warnanzahl);
}
return 1;
}
Jetzt müsst ihr nur noch den stock SpielerName erstellen:
stock SpielerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
}
Bei eurem stock Laden muss es so aussehen:
SetPVarInt(playerid,"Warns",dini_Int(Spielerdatei,"Warns"));
Bei eurem stock SpielerSpeichern muss es so aussehen:
dini_IntSet(Spielerdatei,"Warns",GetPVarInt(playerid,"Warns"));
So das war nun das kleine Tutorial wie man sich ein Warn-System erstellt.
Ich werde es so gut es geht noch weiter ausbessern, falls ihr Fehler im Code findet bitte Posten sie mir doch hier im Thread damit ich diese ausbessern kann.
Über Positives Feedback würde ich mich freuen
Hoffe euch hat das Tut gefallen. Klein aber Fein
Edit: einige Fehler ausgebessert. Danke @west123
Grüße