Vehicle System (Dini)

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • So ;)
    Ein zweites Tutorial.
    Fangen wir an.
    Als erstes brauchen wir 2 Includes.
    #include <zcmd>
    #include <dini>
    Na ? War doch nicht so schwer.


    Jetzt definieren wir 2 Sachen ;)
    #undef MAX_VEHICLES
    #define MAX_VEHICLES 5 // Erstmal 5 das könnt ihr beliebig ändern



    So nun machen wir noch ein enum wo wir alles speichern und aufbewahren.


    enum vInfo
    {
    vModel, // Vehicle Model
    Float:vPosx, // Vehicle X Position
    Float:vPosy, // Vehicle Y Position
    Float:vPosz, // Vehicle Z Position
    Float:vPosa, // Vehicle A Position
    vColor1, // Vehicle Farbe ID 1
    vColor2, // Vehicle Farbe ID 2
    vvw, // Virtuelle Welt vom Fahrzeug
    vPlate[10], // Nummernschild. Nicht nötig aber warum nicht?
    }


    new VehicleInfo[][vInfo] = //
    {
    {540,-2937.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 0"}, // Das ist ID 0 , wird nie benutzt aber lass es hier ;)
    {540,-2947.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 1"}, // ID 1
    {540,-2957.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 2"}, // ID 2
    {540,-2967.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 3"}, // ID 3
    {540,-2977.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 4"} // ID 4
    };


    So nun unter OnGameModeInit schreiben wir jetzt


    LoadVehicles(); // Läd alle Fahrzeuge wenn der Server startet


    Das können wir aber nicht so stehen lassen also erstellen wir uns ein Stock.


    stock LoadVehicles()
    {
    for(new i = 1; i < sizeof(VehicleInfo); i++) // Läd die Autos
    {
    if( !dini_Exists( CarFile(i) ) ) // Wenn die Datei nicht existiert.
    {
    dini_Create(CarFile(i)); // Wird erstellt
    printf("%s created!", CarFile(i)); // Die Fahrzeug ID wird in die Console geschrieben
    new iStr[10]; // Für das Nummernschild
    dini_IntSet(CarFile(i), "model", VehicleInfo[i][vModel]); // Hier wird das Model gesetzt.
    dini_FloatSet(CarFile(i), "x", VehicleInfo[i][vPosx]); // Hier die X Position
    dini_FloatSet(CarFile(i), "y", VehicleInfo[i][vPosy]); // Die Y Position
    dini_FloatSet(CarFile(i), "z", VehicleInfo[i][vPosz]); // Die Z Position
    dini_FloatSet(CarFile(i), "a", VehicleInfo[i][vPosa]); // Die A Position
    dini_IntSet(CarFile(i), "color1", VehicleInfo[i][vColor1]); // Farbe 1
    dini_IntSet(CarFile(i), "color2", VehicleInfo[i][vColor2]); // Farbe 2
    dini_Set(CarFile(i), "plate", "Platte"); // Nummernschild
    CreateVehicle(VehicleInfo[i][vModel],VehicleInfo[i][vPosx], VehicleInfo[i][vPosy],VehicleInfo[i][vPosz],VehicleInfo[i][vPosa], VehicleInfo[i][vColor1],VehicleInfo[i][vColor2], 500000); //Auto wird erstellt. Die 500000 ist der Respawntimer
    format(iStr, sizeof(iStr), "Platte - %d", i); //
    SetVehicleNumberPlate(i, iStr); // Hier wird das Nummernschild gesetzt mit der ID vom Fahrzeug.
    }
    else
    {
    LoadVehicle(i); // Wenn die Datei doch existiert. Wird das hier geladen
    }
    }
    }
    // NOTE: Wenn ihr das jetzt ausführt bekommt ihr jedemenge Errors



    stock LoadVehicle(i) // Wenn die .ini Datei existiert wird das hier geladen
    {
    // Diese ganzen Zeilen hier werden alles laden.
    new iStr[10];
    VehicleInfo[i][vModel] = dini_Int(CarFile(i), "model");
    VehicleInfo[i][vPosx] = dini_Float(CarFile(i), "x");
    VehicleInfo[i][vPosy] = dini_Float(CarFile(i), "y");
    VehicleInfo[i][vPosz] = dini_Float(CarFile(i), "z");
    VehicleInfo[i][vPosa] = dini_Float(CarFile(i), "a");
    VehicleInfo[i][vColor1] = dini_Int(CarFile(i), "color1");
    VehicleInfo[i][vColor2] = dini_Int(CarFile(i), "color2");
    myStrcpy(VehicleInfo[i][vPlate],dini_Get(CarFile(i), "plate"));
    CreateVehicle(VehicleInfo[i][vModel],VehicleInfo[i][vPosx], VehicleInfo[i][vPosy],VehicleInfo[i][vPosz],VehicleInfo[i][vPosa], VehicleInfo[i][vColor1],VehicleInfo[i][vColor2], 500000);
    format(iStr, sizeof(iStr), "Platte - %d", i);
    SetVehicleNumberPlate(i, iStr);
    SetVehicleToRespawn(i); // Das Auto wird respawnt
    }


    So und jetzt der CarFile Stock:


    stock CarFile(vID)
    {
    new fn[20];
    format(fn, sizeof(fn), "Cars/Car%d.txt", vID);
    return fn;


    }


    Und zuletzt:


    stock myStrcpy(dest[], src[])
    {
    new i = 0;
    while ((dest[i] = src[i])) i++;
    }


    Danke ich hoffe es gefällt euch und es ist nützlich.
    Ihr könnt nun immer was zu dem Enum hinzufügen.


    Credits:
    Yoran (Tutorial)
    NeonReflexe(Übersetzer)

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Bei PAWN fängt man immer bei 0 an -.-
    Nicht einfach sagen, das wird nie benutzt ^^


    6/10

    Danke :3
    Das mit ID 0 stimmt klar also erst denken ;)


    LG

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • #undef MAX_VEHICLES
    #define MAX_VEHICLES 5 // Erstmal 5 das könnt ihr beliebig ändern
    Das hättest du vielleicht erklären können
    Desweiteren sollte man den Define anders nennen da einige mit MAX_VEHICLE arbeiten um
    Jedes Fahrzeug zu durchlaufen wo das dann echt doof ist
    Aber okay, das Tutorial ist nicht wirklich GUT
    Es gibt schon eins das hätte ich mal gesehen
    Das ist definitv besser


    Du solltest das hier überarbeiten SRY
    Für die mühe des übersetzen bekommst du 5/10 Punkten

  • Desweiteren sollte man den Define anders nennen da einige mit MAX_VEHICLE arbeiten um
    Jedes Fahrzeug zu durchlaufen wo das dann echt doof ist
    Aber okay, das Tutorial ist nicht wirklich GUT
    Es gibt schon eins das hätte ich mal gesehen
    Das ist definitv besser

    Du solltest das hier überarbeiten SRY
    Für die mühe des übersetzen bekommst du 5/10 Punkten

    Jo danke :3

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Wenn ich das richtig verstehe definierst du die Fahrzeuge einmal im Script und dann noch in einem DINI Dokument?



    new VehicleInfo[][vInfo] = //
    {
    {540,-2937.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 0"}, // Das ist ID 0 , wird nie benutzt aber lass es hier ;)
    {540,-2947.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 1"}, // ID 1
    {540,-2957.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 2"}, // ID 2
    {540,-2967.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 3"}, // ID 3
    {540,-2977.5,-2927.5, 19.2819, 268.0262,1,1,0,"Platte - 4"} // ID 4
    };


    Du stellst es hier fest, dann speicherst du das und dann lädst du das selbe wieder raus? Wo ist der Sinn??

  • Wenn du schon die maximale Fahrzeuganzahl definierst, würde es dann nicht mehr Sinn machen, dass so zu machen?


    #include <ZCMD>#include <sscanf2>
    #define MAX_CARS 5
    enum vInfo{ vID, vModel, vPX, vPY,
    vPZ,
    vPA,
    vC1, vC2 vVW, vPlate[10]}
    new Auto[MAX_CARS][vInfo];
    //dann könnte man ja Fahrzeuge erstellen Speichern auch Sinn.
    CMD:createveh(playerid, params[]){ new model, c1, c2, plate[10], p[4]
    if(sscanf(params, "ddds[10]", model,c1, c2, plate[10])) return SendClientMessage(playerid, farbe, "USAGE: /createveh [color1] [color2] [plate]"); GetPlayerPos(playerid, p[0], p[1], p[2]); GetPlayerFacingAngle(p[3]); Auto[][vID] = CreateVehicle(model, p[0], p[1], p[2], p[3],c1, c2, 50000);}



    So würde das zwar wahrscheinlich nicht direkt funktionieren(bin im Urlaub; leider gibts auf dem iPad kein Pawno ;( ), aber so macht das Speichern wenigstens Sinn.

  • Ich sehe hier keien Funktion die Fahrzeuge speichert ^^ ?


    Zitat

    So würde das zwar wahrscheinlich nicht direkt funktionieren(bin im Urlaub; leider gibts auf dem iPad kein Pawno ;( ), aber so macht das Speichern wenigstens Sinn.


    Und wenn es nicht funktioniert, dann bringt es auch nichts..

  • Ich find hier ehrlich keinen Fehler, bzw. sinnloses :/ ?

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Das Sinnlose ist ja, dass du Informationen bereits in einer Variable speicherst.
    Trotzdem speicherst du es nochmal mit Dini. Du könntest genauso gut einfach eine Schleife bei OnGameModeInit laufen lassen, und die Fahrzeuge dann spawnen lassen.

  • Warum benutzt du 2 stocks um die vehicles zu laden ? Das geht auch nur mit einem stock...


    OnGameModeInit()

    for(new i = 0; i <MAX_VEHICLES; i++)
    {
    LoadVehicle(i);
    }

    Somit kannst du deine zwei stocks in eine packen und die sache wäre ressourcenschonender

  • Wieso fragt ihr mich ? Fragt den ders geschrieben hat.
    >.> Ich habs übersetzt.

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox