Dynamisches Car System

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
  • Guten Tag,
    ich habe vor mir ein Dynamisches Car zu schreiben. Ich weiß wie, kann es auch umsetzen.


    Nur jetzt weiß ich nicht wie ich eigentlich die wichtigste Sache machen soll. Ich will die Cars voerst als Dini Speichern.
    Es sollte dann halt geben:


    • Carid
    • Farbe 1
    • Farbe 2
    • x
    • y
    • z
    • Nummernschield

    Wie bekomme ich jetzt hin, das er Automatisch beim Server Start, alles ausliest? Also z.B 12 Fahrzeuge. Wie krieg ich hin das er es Automatisch alles macht.
    Mit freundlichen Grüßen
    Barney'

  • Du fragst einfach ab, ob die Datei vorhanden ist, wenn sie das ist, lässt du sie laden.



    for(new i=0;i<50;i++){ new blub[64]; format(blub,64,"Cars/%i",i); if(dini_Exists(blub)) { }}

  • Hier ein Beispiel wie ich meine Autos lade, es wird so ziemlich alles geladen und gespeichert was möglich ist(schladensmodell mach ich heute)
    for(new i = 1; i <=MAX_VEHICLES; i++)
    {
    format(Autodatei,50,"/Autos/%d.txt",i);
    if(!fexist(Autodatei))
    {
    format(Vehicle[i][Nummernschild],50,"0");
    }
    else
    {
    Vehicle[i][modelid] = dini_Int(Autodatei,"modelid");
    Vehicle[i][HP] = dini_Int(Autodatei,"HP");
    format(Vehicle[i][Nummernschild],50,dini_Get(Autodatei,"Nummernschild"));
    Vehicle[i][Farbe1] = dini_Int(Autodatei,"Farbe1");
    Vehicle[i][Farbe2] = dini_Int(Autodatei,"Farbe2");
    Vehicle[i][Paintjob] = dini_Int(Autodatei,"Paintjob");
    Vehicle[i][posx] = dini_Int(Autodatei,"posx");
    Vehicle[i][posy] = dini_Int(Autodatei,"posy");
    Vehicle[i][posz] = dini_Int(Autodatei,"posz");
    Vehicle[i][posa] = dini_Int(Autodatei,"posa");
    Vehicle[i][Abgeschlossen] = dini_Int(Autodatei,"Abgeschlossen");
    Vehicle[i][engine] = dini_Int(Autodatei,"engine");
    Vehicle[i][bonnet] = dini_Int(Autodatei,"bonnet");
    Vehicle[i][lights] = dini_Int(Autodatei,"lights");
    Vehicle[i][alarm] = dini_Int(Autodatei,"alarm");
    Vehicle[i][boot] = dini_Int(Autodatei,"boot");
    Vehicle[i][Spoiler] = dini_Int(Autodatei,"Spoiler");
    Vehicle[i][Wheels] = dini_Int(Autodatei,"Wheels");
    Vehicle[i][Nitro] = dini_Int(Autodatei,"Nitro");
    Vehicle[i][Roof] = dini_Int(Autodatei,"Roof");
    Vehicle[i][Hood] = dini_Int(Autodatei,"Hood");
    Vehicle[i][Sideskirt] = dini_Int(Autodatei,"Sideskirt");
    Vehicle[i][Lamps] = dini_Int(Autodatei,"Lamps");
    Vehicle[i][Exhaust] = dini_Int(Autodatei,"Exhaust");
    Vehicle[i][Stereo] = dini_Int(Autodatei,"Stereo");
    Vehicle[i][Hydraulics] = dini_Int(Autodatei,"Hydraulics");
    Vehicle[i][VentRight] = dini_Int(Autodatei,"VentRight");
    Vehicle[i][VentLeft] = dini_Int(Autodatei,"VentLeft");
    Vehicle[i][FrontBumper] = dini_Int(Autodatei,"FrontBumper");
    Vehicle[i][RearBumper] = dini_Int(Autodatei,"RearBumper");
    car[i]=CreateVehicle(Vehicle[i][modelid],Vehicle[i][posx],Vehicle[i][posy],Vehicle[i][posz]+1.5,Vehicle[i][posa],-1,-1,-1);
    SetVehicleNumberPlate(car[i],dini_Get(Autodatei,"Nummernschild"));
    SetVehicleHealth(car[i],Vehicle[i][HP]);
    SetVehicleParamsEx(car[i],Vehicle[i][engine],Vehicle[i][lights],0,Vehicle[i][Abgeschlossen],Vehicle[i][bonnet],Vehicle[i][boot],0);
    if(Vehicle[i][Paintjob] >= 0)
    {
    ChangeVehiclePaintjob(car[i],Vehicle[i][Paintjob]);
    }
    if(Vehicle[i][Farbe1] >= 0 || Vehicle[i][Farbe2] >= 0)
    {
    ChangeVehicleColor(car[i],Vehicle[i][Farbe1],Vehicle[i][Farbe2]);
    }
    if(Vehicle[i][Spoiler] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Spoiler]); }
    if(Vehicle[i][Hood] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Hood]); }
    if(Vehicle[i][Roof] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Roof]); }
    if(Vehicle[i][Sideskirt] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Sideskirt]); }
    if(Vehicle[i][Lamps] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Lamps]); }
    if(Vehicle[i][Nitro] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Nitro]); }
    if(Vehicle[i][Exhaust] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Exhaust]); }
    if(Vehicle[i][Wheels] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Wheels]); }
    if(Vehicle[i][Stereo] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Stereo]); }
    if(Vehicle[i][Hydraulics] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][Hydraulics]); }
    if(Vehicle[i][FrontBumper] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][FrontBumper]); }
    if(Vehicle[i][RearBumper] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][RearBumper]); }
    if(Vehicle[i][VentRight] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][VentRight]); }
    if(Vehicle[i][VentLeft] >= 1000) { AddVehicleComponent(car[i],Vehicle[i][VentLeft]); }
    }
    }
    Erstellen tu ich dir fahrzeuge per dcmd und folgendem codeausschnitt:
    format(Autodatei,50,"/Autos/%d.txt",globale[nextcarID]);
    GetPlayerPos(playerid,x,y,z);
    GetPlayerFacingAngle(playerid,Float:a);
    dini_Create(Autodatei);
    dini_IntSet(Autodatei,"modelid",model);
    dini_FloatSet(Autodatei,"HP",1000.00);
    dini_FloatSet(Autodatei,"posx",x);
    dini_FloatSet(Autodatei,"posy",y);
    dini_FloatSet(Autodatei,"posz",z);
    dini_FloatSet(Autodatei,"posa",a);
    dini_IntSet(Autodatei,"Abgeschlossen",1);
    dini_IntSet(Autodatei,"engine",0);
    dini_IntSet(Autodatei,"alarm",0);
    dini_IntSet(Autodatei,"lights",0);
    dini_IntSet(Autodatei,"boot",0);
    dini_IntSet(Autodatei,"bonnet",0);
    dini_IntSet(Autodatei,"Farbe1",color1);
    dini_IntSet(Autodatei,"Farbe2",color2);
    dini_IntSet(Autodatei,"Paintjob",-1);
    dini_Set(Autodatei,"Nummernschild",nummernschild);
    dini_IntSet(Autodatei,"Spoiler",GetVehicleComponentInSlot(globale[nextcarID],0));
    dini_IntSet(Autodatei,"Hood",GetVehicleComponentInSlot(globale[nextcarID],1));
    dini_IntSet(Autodatei,"Roof",GetVehicleComponentInSlot(globale[nextcarID],2));
    dini_IntSet(Autodatei,"Sideskirt",GetVehicleComponentInSlot(globale[nextcarID],3));
    dini_IntSet(Autodatei,"Lamps",GetVehicleComponentInSlot(globale[nextcarID],4));
    dini_IntSet(Autodatei,"Nitro",GetVehicleComponentInSlot(globale[nextcarID],5));
    dini_IntSet(Autodatei,"Exhaust",GetVehicleComponentInSlot(globale[nextcarID],6));
    dini_IntSet(Autodatei,"Wheels",GetVehicleComponentInSlot(globale[nextcarID],7));
    dini_IntSet(Autodatei,"Stereo",GetVehicleComponentInSlot(globale[nextcarID],8));
    dini_IntSet(Autodatei,"Hydraulics",GetVehicleComponentInSlot(globale[nextcarID],9));
    dini_IntSet(Autodatei,"FrontBumper",GetVehicleComponentInSlot(globale[nextcarID],10));
    dini_IntSet(Autodatei,"RearBumper",GetVehicleComponentInSlot(globale[nextcarID],11));
    dini_IntSet(Autodatei,"VentRight",GetVehicleComponentInSlot(globale[nextcarID],12));
    dini_IntSet(Autodatei,"VentLeft",GetVehicleComponentInSlot(globale[nextcarID],13));
    nextcarid = globale[nextcarID];
    car[nextcarid]=CreateVehicle(model, x, y, z+3, 0, color1, color2, -1);
    SetVehicleNumberPlate(car[nextcarid],dini_Get(Autodatei,"Nummernschild"));
    Vehicle[nextcarid][modelid] = dini_Int(Autodatei,"modelid");
    Vehicle[nextcarid][HP] = dini_Int(Autodatei,"HP");
    format(Vehicle[nextcarid][Nummernschild],50,dini_Get(Autodatei,"Nummernschild"));
    Vehicle[nextcarid][Farbe1] = dini_Int(Autodatei,"Farbe1");
    Vehicle[nextcarid][Farbe2] = dini_Int(Autodatei,"Farbe2");
    Vehicle[nextcarid][Paintjob] = dini_Int(Autodatei,"Paintjob");
    Vehicle[nextcarid][posx] = dini_Int(Autodatei,"posx");
    Vehicle[nextcarid][posy] = dini_Int(Autodatei,"posy");
    Vehicle[nextcarid][posz] = dini_Int(Autodatei,"posz");
    Vehicle[nextcarid][posa] = dini_Int(Autodatei,"posa");
    Vehicle[nextcarid][Abgeschlossen] = dini_Int(Autodatei,"Abgeschlossen");
    Vehicle[nextcarid][engine] = dini_Int(Autodatei,"engine");
    Vehicle[nextcarid][bonnet] = dini_Int(Autodatei,"bonnet");
    Vehicle[nextcarid][alarm] = dini_Int(Autodatei,"alarm");
    Vehicle[nextcarid][lights] = dini_Int(Autodatei,"lights");
    Vehicle[nextcarid][boot] = dini_Int(Autodatei,"boot");
    Vehicle[nextcarid][Spoiler] = dini_Int(Autodatei,"Spoiler");
    Vehicle[nextcarid][Wheels] = dini_Int(Autodatei,"Wheels");
    Vehicle[nextcarid][Nitro] = dini_Int(Autodatei,"Nitro");
    Vehicle[nextcarid][Roof] = dini_Int(Autodatei,"Roof");
    Vehicle[nextcarid][Hood] = dini_Int(Autodatei,"Hood");
    Vehicle[nextcarid][Sideskirt] = dini_Int(Autodatei,"Sideskirt");
    Vehicle[nextcarid][Lamps] = dini_Int(Autodatei,"Lamps");
    Vehicle[nextcarid][Exhaust] = dini_Int(Autodatei,"Exhaust");
    Vehicle[nextcarid][Stereo] = dini_Int(Autodatei,"Stereo");
    Vehicle[nextcarid][Hydraulics] = dini_Int(Autodatei,"Hydraulics");
    Vehicle[nextcarid][VentRight] = dini_Int(Autodatei,"VentRight");
    Vehicle[nextcarid][VentLeft] = dini_Int(Autodatei,"VentLeft");
    Vehicle[nextcarid][FrontBumper] = dini_Int(Autodatei,"FrontBumper");
    Vehicle[nextcarid][RearBumper] = dini_Int(Autodatei,"RearBumper");
    SetVehicleHealth(nextcarid,Vehicle[nextcarid][HP]);
    SetVehicleParamsEx(nextcarid,Vehicle[nextcarid][engine],Vehicle[nextcarid][lights],0,Vehicle[nextcarid][Abgeschlossen],Vehicle[nextcarid][bonnet],Vehicle[nextcarid][boot],0);
    globale[nextcarID] ++;


  • Das ist aus dem "Tutorial" von Simon...

  • Das tutorial diente mir als grundlage weil ich es auch nicht wusste aber anderst kann man ein auto nicht laden darum siet der ein oder andere code gleich aus bei mir werden autos per dcmd erstellt dabei ist das nummernschild die koordinaten angle farbe und modelid dynamisch das wird in einer datei gespeichert und das auto ist im spiel.
    Der code oben ist aus dem tutorial rauskopiert und dynamisch für meine Zweche umgeschrieben.

  • Nagut dann erstelle ein auto :
    if(sscanf(params, "ddds", model, color1, color2, nummernschild)) return SendClientMessage(playerid,COLOR_RED, "Nutze: /createcar [model] [color1] [color2] [nummerschild]");//damit erstelle ich ein auto
    x y z und a bekomm ich vom Spieler
    format(Autodatei,50,"/Autos/%d.txt",globale[nextcarID]);//damit wird das erstellte auto bei mir gespeichert
    dini_Create(Autodatei);//dann erstellst du die datei
    dini_IntSet(Autodatei,"modelid",model);//und speicherst alles, was du für wichtig empfindest
    dini_FloatSet(Autodatei,"HP",1000.00);//alles was nach einem servercrash erhalten bleiben soll
    Wenn ein Spieler bei mir ein Auto verlässt, so speichere ich die neuen Koordinaten hier
    format(Autodatei,50,"/Autos/%d.txt",vehicleid);
    GetVehiclePos(vehicleid,x,y,z);
    GetVehicleZAngle(vehicleid,a);
    GetVehicleHealth(vehicleid,Vehicle[vehicleid][HP]);
    dini_FloatSet(Autodatei,"posx",x);
    //. . .usw
    wie ich das auto lade siehst du oben das mach ich bei OnGameModeInit()


  • Das weiß ich ja alles. :b Ich weiß nur nicht, wie ich das dann Automatisch auslesen lasse. Gib mal ein genaues Beispiel mit Schleife etc bei OnGameModeInit.

  • Okey angenommen du hast 2000 Dateien für Autos auf deinem server und möchstest diese nun laden
    Dann:
    Speichere alle Autos in einer Arry
    new Vehicle[MAX_VEHICLE][vehicle_daten];
    enum vehicle_daten
    {
    modelid,
    Float:HP,
    Nummernschild[32],
    Float:posx,
    Float:posy,
    Float:posz,
    Float:posa,
    Abgeschlossen,
    engine,
    lights,
    alarm,
    bonnet,
    boot,
    Farbe1,
    Farbe2,
    Paintjob,
    Spoiler,
    Hood,
    Roof,
    Sideskirt,
    Lamps,
    Nitro,
    Exhaust,
    Wheels,
    Stereo,
    Hydraulics,
    FrontBumper,
    RearBumper,
    VentRight,
    VentLeft
    }
    das ist alles was man laden kann aus einem auto,
    ich weise nochmal darauf hin das mir das tutorial als grundlage diente ich trotzdem alles auf meine Weise mach es gibt bei mir keine autohäuser
    jeder code der dem im tutorial ähnelt ist nicht gewollt bzw für manches gibt es nur eine Möglichkeit
    for(new i = 1; i <=MAX_VEHICLES; i++)//machst du eine Schleife die bei serverstart alle Fahrzeuge durch geht
    {
    format(Autodatei,50,"/Autos/%d.txt",i);//lade das auto i
    if(!fexist(Autodatei))
    {
    format(Vehicle[i][Nummernschild],50,"0");//Sollte es ein Auto nicht geben setze ich das Nummernschild auf 0 ohne diesen code buggte manches
    }
    else//wenn es das auto dann gibt
    {
    Vehicle[i][modelid] = dini_Int(Autodatei,"modelid");//lade die dinge die du für wichtig empfindest
    Vehicle[i][HP] = dini_Int(Autodatei,"HP");
    format(Vehicle[i][Nummernschild],50,dini_Get(Autodatei,"Nummernschild"));//das nummernschild als string
    car[i]=CreateVehicle(Vehicle[i][modelid],Vehicle[i][posx],Vehicle[i][posy],Vehicle[i][posz]+1.5,Vehicle[i][posa],-1,-1,-1);//erstelle das fahrzeug i die dafür nötigen parameter hast du nun schon aus der datei geladen(nicht im beispiel)
    SetVehicleNumberPlate(car[i],dini_Get(Autodatei,"Nummernschild"));//nun das nummernschild setzen
    SetVehicleHealth(car[i],Vehicle[i][HP]);
    SetVehicleParamsEx(car[i],Vehicle[i][engine],Vehicle[i][lights],0,Vehicle[i][Abgeschlossen],Vehicle[i][bonnet],Vehicle[i][boot],0);//das ist optional
    if(Vehicle[i][Paintjob] >= 0)
    {
    ChangeVehiclePaintjob(car[i],Vehicle[i][Paintjob]);
    }
    }
    }

    Einmal editiert, zuletzt von carlos1710 ()