Hallo Breadfish.
Ich dachte mir so ein /slap befehl kann sehr nütztlich sein.
So für alle die kein /slap kennen.
Wenn ein Admin jemanden "geslappt" dann wird er in die luft geportet.
Und wird dann runter fallen.Dies kann man z.b benutzen wenn ein Spieler nervt.
Oder bei anderen fällen.
So nun zum Befehl.
Was braucht ihr alles?
Ein Adminsystem.
Grundkenntnisse.
OCMD(geht auch mit dmcd oder mit anderen.Downloadlink gleich unten)
Sscanf(Ihr braucht den code für sscanf.Den werde ich dann unten mit paste bin verlinken.)
So mehr braucht ihr auch nicht.
=========================================Downloads=========================================
Sscanf code(Pastebin):http://pastebin.com/jAqvuh8h
Ocmd.Include:http://uploaded.to/file/ttos8rz7
=========================================Befehl=========================================
Erstmal definiert ihr das include ocmd:
#include <ocmd>
Danach könnt ihr auch gleich Farben definieren:
#define gelb 0xFFE600FF
#define rot 0xFF000FFF
Ihr könnt auch eure eigennen nehmen.Mir egale.
Jetzt sucht ihr euch ein geeigneten platzt.
Ihr müsst es irgendwo hin.
Aber nicht in publics.Und Wichtig!!!Ihr dürft es auch nicht bei OnPlayerCommandText!
Jetzt bauen wir mal das grundgestützt auf:
Das würde so aussehen:
ocmd:slap(playerid,params[])
{
return 1;
}
So jetzt zur erklärung:
ocmd://Damit das script weis jetzt kommt ein ocmd befehl.
slap//Das ist der name des befehles.Ihr braucht nicht wie bei OnplayerCommand /slap
(playerid,//Erklärt sich ja von selbst...
params[])//Das sind die parameter die wir dann gleich benutzen werden.
So jetzt machen wir es so das es nur Admins können.
Bei mir wär das so:
if(!IstSpielerAdmin(playerid,6))return SendClientMessage(playerid,rot,"Du bist kein Admin lvl 6!");
Ändert es einfach auf euer Admin abfrage aus.
So jetzt brauchen wir erstmal die Positionen.
Die wir brauchen.Damit wir überhaupt wissen.An welcher position der Spieler ist.
Um ihn dann in die höhe zu katapultieren!.
Dies lesen wir mits Float aus.
Das würde dann soh aussehen:
new Float:X,Float:Y,Float:Z;
So zur erklärung:
new//Damit das script weis es kommt eine neue Variable oder string etc...
Float:X//Das wird dann unsere X koordinaten auslesen!
Float:Y//Das wird dann unsere Y koordinaten auslesen!
Float:X//Das wird dann unsere Z koordinaten auslesen!/pwn]
Jetzt brauchen wir 2 Variablen die wir brauchen um die Spieler id und die Höhe auszulesen.
Dies würde so aussehen:
[pwn]new ID, hohe;
Zur erklärung:
new//Damit das script weis es kommt wieder eine Variablen(Mann konnte sie auch oben einfügen.Aber ich finde es so das es Viel orgninneler aussieht.
ID//Die variable id werden wir dann im sscanf abfrage umwandeln.
hohe//Ich nenne es hohe damit im Script keine fehler auftreten.Ich weis nicht wieso wegen diesem ö.Aber auch egal das werden wir auch umwandeln.
Sop nun zum sscanf abfrage.
Dies würde wenn es fertig ist so aussehen:
if(sscanf(params,"ui",ID,hohe))return SendClientMessage(playerid,gelb,"Benutze /slap [ID] [Höhe]!");
So zur erklärung:
if(sscanf//Es sagt dem script das jetzt eine Sscanf abfrage kommt.
(params//Das sind die parameter die wir gleich benutzen werden
,"u//Das u steht für.Einen parameter den wir gleich benutzen werden.Das u kann sowohl der spielername sowohl die Spieler id genutzt werden
i"//Das ist ein integer für die höhe das wir auch brauchen werden
,ID//Das ID erstezt dann das u somit es weis wenn wir im befehl irgendeine ID/Name nach slap eingeben das er es sofort weis.
,hoch))//DAs hoch erstezt dann das integer.Das wir dann brauchen werden für die Höhe
return SendClientMessage(playerid,gelb,"Benutze /slap [ID] [Höhe]");//Das heißt
//falls der Admin keine parameter als /slap eingibt dann kommt die fehler meldung.Oder falls er die /slap [ID] kommt diese fehler meldung auch
So jetzt können wir auch abfrage ob wir ene bestimmte höhe wollen:
Das würde so aussehen:
if(hohe<5||hohe>20)return SendClientMessage(playerid,gelb,"Benutze eine Höhe von [5-20]!");7
Jetzt zur erklärung:
if(hohe<5||hohe>20)//Das fragt ab ob die höhe kleiner als 5 ist oder ob die höher große als 20 ist.Allso wenn er z.b 50 eingibt würde diese fehler meldung //kommen!
return SendClientMessage(playerid,gelb,"Gib eine Höhe von [5-20] ein!");//Das ist die Fehler meldung das annkommt falls es halt höher ist..etc
So jetzt kommt noch die abfrage der Spieler position.
Dies würde so aussehen:
GetPlayerPos(ID,X,Y,Z)
Jetzt zur erklärung:
GetPlayerPos(//Fragt dann die Spieler position ab!
ID,//Fragt die position der Spieler ID/Name von oben!
X,//Das fragt dann die X koordinaten von oben ab.Und speichert sie dann als X
Y,//Das fragt dann die Y koordinaten von oben ab.Und speichert sie dann als Y
Z)//Das fragt dann die Z koordinaten von oben ab.Und speichert sie dann als Z
So jetzt nurnoch das der Spieler überhaupt hoch geportet wird:
Das würde so aussehen:
SetPlayerPos(ID,X,Y,Z+hohe);
Jetzt zur erklärung:
SetPlayerPos(//Das setzt die spieler position.
ID,//Die position wird von der Spieler ID/Name geändert nicht von uns!
X,//Das sind die X koordinaten die wir von oben abgelesen haben.
Y,//Das sind die Y koordinaten die wir von oben abgelesen haben.
X,//Das sind die Z koordinaten die wir von oben abgelesen haben.
So bei +hohe)//Das fügt dann die höhe hinzu die wir oben eingeben
//Das ist das wichtigste
Wenn ihr alles habt das würde dann so aussehen:
ocmd:slap(playerid,params[])
{
if(!IstSpielerAdmin(playerid,6))return SendClientMessage(playerid,rot,"Du bist kein Admin lvl 6!");
new Float:X,Float:Y,Float:Z;
new ID, hohe;
if(sscanf(params,"ui",ID,hohe))return SendClientMessage(playerid,gelb,"Benutze /slap [ID] [Höhe]!");
if(hohe<5||hohe>20)return SendClientMessage(playerid,gelb,"Benutze eine Höhe von [5-20]!");
GetPlayerPos(ID,X,Y,Z);
SetPlayerPos(ID,X,Y,Z+hoch);
return 1;
}
Das wärs auch.Ich hoffe ich konnte einigen mit diesem Tutorial helfen.
Falls ihr irgendwelche fehler findent.
Bitte gleich posten.Damit ichs verbessern kann.
//Edit:Fehler behoben bei SetPlayerPos(..+hoch zu +hohe
MFG K44n