Hier mein erstes Tutorial für Einsteiger von einem Einsteiger.
Für die Ausführung des Befehles habe ich die Includes OCMD, DINI und SSCANF verwendet. Downloadlinks am Ende des Tutorials.
Beginnend fange ich bei mir mit den Grundgerüsten an und baue darin hinnein die Funktionen und Variabeln die ich benötige.
In meinem Befehl sind verschiedene Abfragen zwecks Userlevel usw. Dies lasse ich an dieser Stelle aus, da diese sehr differenziert sind.
Das würde bei mir erstmal so anfangen:
ocmd:setmoney(playerid,params[])
{
new sID,Betrag;
if(sscanf(params,"ui",sID,Betrag)) return SendClientMessage(playerid, COLOR_YELLOW,"Benutze: /setmoney [SpielerID][Betrag]");
return 1;
}
Zur Erklärung: Befehle in OCMD verwenden nur die Definierung wie eben beschrieben, anders als wie in z.B. DCMD. Der Befehl an sich kann ganz am Ende vom Script stehen.
Um ein Befehl einzugeben der Parameter beinhalten soll kann man z.B. SSCANF benutzen.
In der Defininitionszeile geben wir die Parameter mittels Platzhalter an. In diesem Fall wollen wir 2 Integer (Ganzzahlen) übertragen.
Es werden hier verschiedene Platzhalter verwendet. Direkt auf Anhieb fallen mir diese ein:
"i" für Integer
"u" für SpielerIDs oder Namen
"s" für Strings
"f" für floats.
Da wir eine UserID und einen Integer übertragen wollen, verwenden wir also "ui" als Platzhalter.
An der Stelle weiss das Script um was für Parameter es sich handelt. Die Platzhalter benötigen jedoch genau wie beim Formatieren einer Zeichenkette noch Variablen.
Diese heissen sID und Betrag. sID steht für Spieler ID. Schreibt man den Befehl ohne Parameter wird eine SendClientMessage ausgegeben mit der richtigen Befehlsverwendung.
ocmd:setmoney(playerid,params[])
{
new sID,Betrag; // Erstellt unsere benötigten Variablen
if(sscanf(params,"ui",sID,Betrag)) return SendClientMessage(playerid, COLOR_YELLOW,"Benutze: /setmoney [SpielerID][Betrag]"); // Erstellt unsere Parameter und Sendet bei falscher Benutzung eine Message
{
SetPlayerMoney(sID,Betrag); // Ruft den Stock auf der unten nun Definiert ist/wird. Die Reihenfolge ist Identisch wie oben bei der Parameter Erstellung.
}
return 1;
}
}
SetPlayerMoney ist keine Funktion von SAMP sondern ein ersteller Stock (Funktion), doch dazu gleich mehr. Die Variabeln sind nun mit den Integern gefüllt und der Betrag des Spielers wurde angepasst.
In meinem Befehl lasse ich nun noch den neuen Betrag auch gleich mitspeichern. Ausserdem sende ich dem entsprechenden Spieler und auch mir eine SendClientMessage um Verwechslungen oder Zahlendreher auszuschliessen.
Betrachtet man das ganze als Rohmaterial, würde der Befehl nun auch so funktionieren.
Nun zum Stock. Ein Stock ist quasi eine eigens geschriebene Funktion die man natürlich auch aufrufen kann. Dieser Stock Resettet das Geld des Spielers und passt es um dem eingegeben Betrag an.
stock SetPlayerMoney(playerid, cash)
{
ResetPlayerMoney(playerid); // Resett das Geld des Spielers und
return GivePlayerMoney(playerid, cash); //gibt hier dem Spieler wieder Geld
}
Da dies mein erstes Tutorial ist, wäre es fein wenn ihr nicht zu hart bewertet. Sollte ich was vergessen haben oder es nicht richtig Erklärt ist, sagt es mir ruhig.
Downloads:
Edit: Korrekturen