Dynamisches Fraktionscarsystem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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 :P





    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! :)


  • Beitrag von TheUltimateFighter ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Ich möchte dir ja nichts unterstellen,
    Aber das selbe Tutorial gab es schon einmal, du hast lediglich Farben hinzugefügt und die Adminabfrage geändert und die ganzen Tuningteile entfernt.
    Mehr ist mir nicht aufgefallen, ist mir zumindest gleich aufgefallen dass es das schon einmal gab ;)
    [ SCRIPTING ] Dynamisches Fraktionsfahrzeug-System