Was zeige ich euch?
-
Wie ihr Fraktionsfahrzeuge Ingame erstellen & speichern tut.
Was brauchen wir?
-
Ocmd
Im Ordner "Sciptfiles" brauchen wir folgende Ordner..
-
Fcars
Und in diesen Ordner brauchen wir weitere Ordner..
-
LSPD
usw...
Wie lange dauert das?
-
Je nach dem wie ihr euch Anstellt
Zuerst schreibt ihr oben in Script
#define MAX_FRAKTCARS 350
Dann erstellen wir ein Enum..
enum Fraktcars
{
modelid, //Das ist die FahrzeugID
Float:fposx, //Position X
Float:fposy, //Position Y
Float:fposz, //Position Z
Float:fposa, //Blickrichtung des Autos
cc1, //Farbe nummer 1
cc2, // Farbe nummer 2
};
new Fraktautos[MAX_FRAKTCARS][300][Fraktcars];
Unter dieses Enum schreiben wir ein
new LSPDcar[MAX_FRAKTCARS];
weil wir für die Fraktion LSPD Autos erstellen möchten.
Damit die Fahrzeuge beim Serverstart dann auch geladen werden, schreiben wir unter OnGameModeInit folgendes..
for(new i=0;i<MAX_FRAKTCARS;i++)
{
new Fraktauto[200];
format(Fraktauto,sizeof(Fraktauto),"/Fcars/LSPD/%d.ini",i);
if(dini_Exists(Fraktauto))
{
Fraktautos[i][1][modelid] = dini_Int(Fraktauto,"modelid");
Fraktautos[i][1][fposx] = dini_Float(Fraktauto,"FPosX");
Fraktautos[i][1][fposy] = dini_Float(Fraktauto,"FPosY");
Fraktautos[i][1][fposz] = dini_Float(Fraktauto,"FPosZ");
Fraktautos[i][1][fposa] = dini_Float(Fraktauto,"FPosA");
Fraktautos[i][1][cc1] = dini_Int(Fraktauto,"cc1");
Fraktautos[i][1][cc2] = dini_Int(Fraktauto,"cc2");
LSPDcar[i] = AddStaticVehicleEx(Fraktautos[i][1][modelid],Fraktautos[i][1][fposx],Fraktautos[i][1][fposy],Fraktautos[i][1][fposz],Fraktautos[i][1][fposa],Fraktautos[i][1][cc1],Fraktautos[i][1][cc2],-1);
SetVehicleNumberPlate(LSPDcar[i],"LSPD");//Nur falls ihr eun Nummernschild mit "LSPD" haben wollt. sonst löschen oder ausklammern
}
}
Und unter OnGameModeExit schreiben wir.
new Fraktauto[200];
for(new i=0;i<MAX_FRAKTCARS;i++)
{
format(Fraktauto,sizeof(Fraktauto),"/Fcars/LSPD/%d.ini",i);
if(dini_Exists(Fraktauto))
{
dini_IntSet(Fraktauto,"modelid",Fraktautos[i][1][modelid]);
dini_FloatSet(Fraktauto,"FPosX",Fraktautos[i][1][fposx]);
dini_FloatSet(Fraktauto,"FPosY",Fraktautos[i][1][fposy]);
dini_FloatSet(Fraktauto,"FPosZ",Fraktautos[i][1][fposz]);
dini_FloatSet(Fraktauto,"FPosA",Fraktautos[i][1][fposa]);
dini_IntSet(Fraktauto,"cc1",Fraktautos[i][1][cc1]);
dini_IntSet(Fraktauto,"cc2",Fraktautos[i][1][cc2]);
}
}
Nun wollen wir die Fahrzeuge wenn wir sie erstellt haben (befehl dazu folgt noch..) parken..
dazu schreiben wir unter OnPlayerCommandText
if(strcmp(cmdtext,"/fpark",true) == 0 || strcmp(cmdtext,"/fparken",true) == 0)
{
if(IsPlayerInAnyVehicle(playerid))
{
new veh=GetPlayerVehicleID(playerid);
new Float:x,Float:y,Float:z,Float:a;
for(new i=0;i<MAX_FRAKTCARS;i++)
{
new Fraktauto[200];
if(veh==LSPDcar[i])
{
format(Fraktauto,sizeof(Fraktauto),"/Fcars/LSPD/%d.ini",i);
GetVehiclePos(LSPDcar[i],x,y,z);
GetVehicleZAngle(LSPDcar[i],a);
Fraktautos[i][1][fposx]=x;
Fraktautos[i][1][fposy]=y;
Fraktautos[i][1][fposz]=z;
Fraktautos[i][1][fposa]=a;
dini_FloatSet(Fraktauto,"FPosX",Fraktautos[i][1][fposx]);
dini_FloatSet(Fraktauto,"FPosY",Fraktautos[i][1][fposy]);
dini_FloatSet(Fraktauto,"FPosZ",Fraktautos[i][1][fposz]);
dini_FloatSet(Fraktauto,"FPosA",Fraktautos[i][1][fposa]);
SendClientMessage(playerid,COLOR_GANGFARBE,"Fraktionsfahrzeug erfolgreich geparkt!");//Farbe bitte Anpassen
}
}
}
return 1;
}
Jenachdem, ob ihr alle damit fahren lassen wollt, oder nur die Jewahlige Fraktion, ist euch überlassen.. falls ihr sie nur wie die Fraktion LSPD zugänglich machen wollt schreibt ihr unter OnPlayerStateChange folgendes
if(newstate==PLAYER_STATE_DRIVER)
{
for(new i=0; i<sizeof(LSPDcar); i++)
{
if(GetPlayerVehicleID(playerid)==LSPDcar[i])
{
new member = sDatei[playerid][pMember];//anpassen
if(member !=1)
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,COLOR_GRAU,"Fehler: Du bist kein Cop!");//Farbe anpassen
}
}
}
}
nun sind sie nur für Fraktion 1, also das LSPD betretbar..
Jetzt kommen wir dazu, wie die Autos erstell werden..
Ihr erstell einen Stock..
stock CreateFCar(playerid,fraktid,mid,c1,c2)
{
new Fraktauto[200];
new Float:x,Float:y,Float:z,Float:a;
GetPlayerPos(playerid,x,y,z); //Findet die Position für den Spieler heraus damit er weiß wo das auto hin muss
GetPlayerFacingAngle(playerid,a); //Da die Blickrichtung auch für das Auto
if(fraktid!=0) //Damit es nicht geht als Zivicar
{
for(new i=0;i<MAX_FRAKTCARS;i++)
{
if(fraktid==1)
{
format(Fraktauto,sizeof(Fraktauto),"/Fcars/LSPD/%d.ini",i);
if(!dini_Exists(Fraktauto)) //Wenn die Fahrzeugid noch nicht vergeben ist
{
dini_Create(Fraktauto); //Er Createt die Datei
dini_IntSet(Fraktauto,"modelid",mid);
dini_FloatSet(Fraktauto,"FPosX",x);
dini_FloatSet(Fraktauto,"FPosY",y);
dini_FloatSet(Fraktauto,"FPosZ",z);
dini_FloatSet(Fraktauto,"FPosA",a);
dini_IntSet(Fraktauto,"cc1",c1);
dini_IntSet(Fraktauto,"cc2",c2);
Fraktautos[i][1][modelid] = dini_Int(Fraktauto,"modelid");
Fraktautos[i][1][fposx] = dini_Float(Fraktauto,"FPosX");
Fraktautos[i][1][fposy] = dini_Float(Fraktauto,"FPosY");
Fraktautos[i][1][fposz] = dini_Float(Fraktauto,"FPosZ");
Fraktautos[i][1][fposa] = dini_Float(Fraktauto,"FPosA");
Fraktautos[i][1][cc1] = dini_Int(Fraktauto,"cc1");
Fraktautos[i][1][cc2] = dini_Int(Fraktauto,"cc2");
LSPDcar[i] = CreateVehicle(mid,x,y,z,a,c1,c2,-1);
PutPlayerInVehicle(playerid,LSPDcar[i],0);
return 1;
}
}
}
}
return 1;
}
um die Autos nun zu erstellen, benutzen wir mal OCMD, falls nötig herunterladen.
ocmd:createfcar(playerid,params[])//falls gewünscht befehlsname umändern
{
if(sDatei[playerid][pAdmin] == 2000)//adminabfrage anpassen
{
new fraktid;
new mid;
new c1,c2;
if(sscanf(params,"iiii",fraktid,mid,c1,c2))
{
SendClientMessage(playerid,COLOR_GRAU,"Benutze: /createfcar [Frakt-ID][Model-ID][Farbe][Farbe]");
SendClientMessage(playerid,COLOR_GRAU,"Fraktion 1:LSPD");
}
else
{
if(fraktid < 1 || fraktid > 16)return SendClientMessage(playerid,COLOR_GRAU,"Fehler: Fraktions-ID kann nicht unter 1 oder über 3 sein.");
if(mid < 400 || mid > 611)return SendClientMessage(playerid,COLOR_GRAU,"Fehler: Model-ID kann nicht über 611 oder unter 400 sein."); //Da die Vehicles nur von 400-611 gehen
CreateFCar(playerid,fraktid,mid,c1,c2); //da wird der stock aufgerufen
}
}
return 1;
}
Falls ihr nun ausversehen das falsche auto gespawn habt, oder ihr ein löschen wollt.. müssen wir einen weiteren befehl schreiben..
ocmd:desfcar(playerid,params[])
{
if(sDatei[playerid][pAdmin] == 2000)
{
if(IsPlayerInAnyVehicle(playerid))
{
new veh=GetPlayerVehicleID(playerid); //Definiert veh als GetPlayerVehicleID
new Fraktauto[200];
for(new i=0;i<MAX_FRAKTCARS;i++)
{
if(veh==LSPDcar[i]) //Wenn der in irgendeinem LSPDcar ist
{
format(Fraktauto,sizeof(Fraktauto),"/Fcars/LSPD/%d.ini",i);
dini_Remove(Fraktauto);
DestroyVehicle(LSPDcar[i]);
SendClientMessage(playerid,COLOR_GANGFARBE,"Fraktionsauto erfolgreich gelöscht.");
} //Zerstört der das Vehicle und die Veh-Datei
}
}
}
return 1;
}
Und das war es soweit erstmal, wenn ihr das in euerm Script habt, die ordner angelegt und es so gemacht habt wie es hier steht.. müsste alles einwandfrei funktionieren..
Bewertet mich bitte nicht allzu hart, es ist mein erstes Tutorial, und vielleicht folgt ja noch eins zum Thema Fraktion.
bei fragen posten!