Hallo,
Hier mein erstes TUT zum Thema Adminbefehle bzw. zum Autos erstellen:
Also legen wir gleich mal los..
Als Erstes müsst ihr euer Script für OCMD vorbereiten (Falls noch nicht vorhanden!)
Dazu einfach ganz nach oben ins Script: (Ihr solltet natürlich die richtigen Includes besitzen)
#include <ocmd>
Als nächstes geht ihr in die Zeile:
public OnPlayerText(playerid, text[])
So jetzt zum /Veh Befehl, Scritt für Schritt erklärt:
Als erstes legen wir den Befehl fest, ihr könntet in auch /auto oder /car nennen, das bleibt letztendlich euch überlassen.
Also muss die Erste Zeile so aussehen:
ocmd:veh(playerid,params[])
//Der Befehl den ihr ingame verwendet ist /veh er kommt OHNE "/" hinter ocmd:
Als zweites brauchen wir eine Klammer,sollte sich von selbst erklären
{
So, nachdem das getan wäre kommen wir nun dazu was passieren soll wenn man /veh eingibt:
Also als Erstes mal ein "New":
new ModelID, color[2],Float:VehPos[4], vehicleid;
Als zweites sagen wir was passieren soll wenn der Player, also der Admin schon in einen Car sitzt.
if(GetPlayerState(playerid)!=PLAYER_STATE_ONFOOT) return SendClientMessage(playerid,DeineFarbe,"Du bist bereits in einem Car!"); // Fragt ab ob der Player in einem Car ist, wenn ja kommt die Message "Du bist bereits in einem Car!..
So, nun bestimmen wir was der Player mindestens eingeben muss damit er ein Car spawnen kann.
if(sscanf(params, "ddd",ModelID,color[0],color[1])) return SendClientMessage(playerid,DeineFarbe, "/veh [vehicleid] [color1] [color2]");//er muss mindestens Modelid, Farbe1 & Farbe2 eingeben ansonsten kommt die Meldung wie man es richtig benutz..
So, hier müssen wir nun festlegen welche ID ein Car mindestens haben muss und welche Maximal, jedes Car hat seine eigene ID (unten verlinkt)
if(ModelID < 400 || ModelID > 611) return SendClientMessage(playerid,DeineFarbe, "Es muss eine Fahrzeug ID zwischen 411 und 611 sein!");
// Wenn der Player z.B. 700 eingibt kommt eine Meldung wie es richtig sein muss..
Jetzt machen wir genau das selbe mit der Farbe, denn es gibt nur Color IDs von 0-255 und da es verschiedene Cars gibt, also zum Beispiel den Bullet wo man zwei Farben nutzen kann machen wir das ganze direkt zweimal..
if(color[0] < 0 || color[0] > 255 || color[1] < 0 || color[1] > 255) return SendClientMessage(playerid,rot, "Die Color-IDs müssen zwischen 0 und 255 sein!");
// Genau wie oben drüber, wenn man es falsch eingibt z.B. 300 nimmt kommt die Meldung wie man es richtig machen muss..
So, jetzt kommen wir zum eigentlichen Befehl, wir wollen ja schließlich irgendwann unser Car haben, zumindest die Admins
-->Also machen wir gleich mal die Abfrage ob der Spieler der den Befehl ausführt ein Admin ist, den Befehl könnte man Theoretisch auch ganz nach oben setzen, ich hab ihn jetzt aber ihr der Player kommt soweit, aber kann letztendlich kein Car spawnen wenn er kein Admin ist..
if(isPlayerAnAdmin(playerid,5) || CallRemoteFunction("PlayerIsAnAdmin","i",playerid)) // Müsst ihr an euer Admin System anpassen!
Dann brauchen wir wieder ne Klammer:
{
Jetzt kommen wir zum eigentlichen Befehl:
Erst mal ein GetPlayerPos, dieses Fragt ab an welcher Stelle sich der Spieler befindet der den Befehl /veh ausgeführt hat.
GetPlayerPos(playerid, VehPos[0],VehPos[1],VehPos[2]);//Prüft wo der Player sich aufhält..
Als nächstes legen wir fest das der Player in die Richtung guckt wo das Auto ist, wär ja en bisschen dumm wenn er beim Vorwärts fahren nach hinten guckt
GetPlayerFacingAngle(playerid, VehPos[3]); //Player guckt jetzt in die Auto Richtung
So.. Jetzt wirds interessant, denn jetzt holen wir uns Ingame ein Auto vom Himmel
vehicleid = CreateVehicle(ModelID,VehPos[0],VehPos[1],VehPos[2],VehPos[3],color[0],color[1],-1); //Erstellt das Car mit den Zuvor angegebenen Daten also Farbe, ModelID etc.
Das hier müsst ihr nicht unbedingt einfügen, denn es ist dazu da ein Car in einem Interrior sichtbar zu machen, sonst wäre es unsichtbar, Also wenn man es zum Beispiel im PD spawnen würde würde es unsichtbar sein..
LinkVehicleToInterior(vehicleid,GetPlayerInterior(playerid)); //Setzt Player & Car in das Int. wo man das Auto gespawnt hat
Hier setzt ihr das Car in die Virtuelle Welt wo ihr euch gerade aufhaltet:
SetVehicleVirtualWorld(vehicleid,GetPlayerVirtualWorld(playerid));// Setzt Player & Car in die eure Virtuelle Welt.
Als nächstes können wir dem gespawnten Vehicle noch ein Nummerschild verpassen, müsst ihr natürlich nicht
SetVehicleNumberPlate(vehicleid,"Was draufstehen soll!?");//Hier könnt ihr bestimmen was drauf stehen soll, z.B. Admin oder so
So, nun sagen wir das das Car wenn man es schrott fährt bzw. wenn es Explodiert wieder da spawnen soll wo man es erstellt hat..
SetVehicleToRespawn(vehicleid);//Setzt das Car wieder dahin wo es von Admin Hand erschaffen wurde :D
Und nun setzen wir den Spieler der das Car erstellt hat in das Car auf den Fahrersitz:
PutPlayerInVehicle(playerid, vehicleid, 0);// 0= Fahrersitz
Und jetzt können wir noch eine Message festlegen die der Admin bekommt wenn er das Car spawnt..
SendClientMessage(playerid,DeineFarbe,"Car gespawnt, Viel Spaß!");//Wer das nicht versteht sollte das scripten bleiben lassen! :D
und zu guter letzt sagen wir noch was passieren soll wenn der Player kein Admin ist:
}
else return SendClientMessage(playerid, rot, "Du bist kein Admin!");
return 1;
}
So sollte der Befehl dann komplett aussehen:
ocmd:veh(playerid,params[])
{
new ModelID, color[2],Float:VehPos[4], vehicleid;
if(GetPlayerState(playerid)!=PLAYER_STATE_ONFOOT) return SendClientMessage(playerid,rot,"Du bist nicht zu Fuss");
if(sscanf(params, "ddd",ModelID,color[0],color[1])) return SendClientMessage(playerid,COLOR_ORANGE, "/veh [vehicleid] [color1] [color2]");#Error kein C&P Tut.
if(ModelID < 400 || ModelID > 611) return SendClientMessage(playerid,rot, "Es muss eine Fahrzeug ID zwischen 411 und 611 sein!");
if(color[0] < 0 || color[0] > 255 || color[1] < 0 || color[1] > 255) return SendClientMessage(playerid,rot, "Die Color-IDs müssen zwischen 0 und 126 sein!");
if(isPlayerAnAdmin(playerid,5) || CallRemoteFunction("PlayerIsAnAdmin","i",playerid))
{
GetPlayerPos(playerid, VehPos[0],VehPos[1],VehPos[2]);
GetPlayerFacingAngle(playerid, VehPos[3]);
vehicleid = CreateVehicle(ModelID,VehPos[0],VehPos[1],VehPos[2],VehPos[3],color[0],color[1],-1);
LinkVehicleToInterior(vehicleid,GetPlayerInterior(playerid));
SetVehicleVirtualWorld(vehicleid,GetPlayerVirtualWorld(playerid));
SetVehicleNumberPlate(vehicleid,">> ADMIN <<");
SetVehicleToRespawn(vehicleid);#Error kein C&P Tut.
PutPlayerInVehicle(playerid, vehicleid, 0);
SendClientMessage(playerid,COLOR_PINK,"Car gespawnt, Viel Spaß!");
}
else return SendClientMessage(playerid, rot, "Du bist kein Admin!");
return 1;
}
Nützliche Links:
---> Farbcodes: http://wiki.sa-mp.com/wiki/Color_ID
---> Car IDs http://wiki.sa-mp.com/wiki/Vehicle_Model_ID_List
Viel Spaß damit, ich hoffe ich konnte euch weiterhelfen, bei weitern Fragen oder Anregungen oder auch wenn ihr Fehler entdeckt haben solltet schreibt es bitte in die Kommentare..
Mfg:
Atze_CJ, würde mich über Kritik freuen
//Edit
Danke für den Hinweiß das die Color Ids bis 255 gehen