Spezielle Koordinaten in ein Textdokument speichern

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
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Ok. Textdokument = Dini?


    Wenn ja, dann versuche doch mal, dich an diesem Tutorial ([jTuT] Fraktions-Fahrzeug-System mit Dini 1.6) entlang zu hangeln. Du musst nur Teile davon übernehmen (z.B. ein Timer um alles zu Speichern brauchst du ja nicht, oder einen /parken Befehl).


    Was zu eigentlich erst mal brauchst:
    Lade-Funktion bei OnGameModeInit
    Erstellen Befehl
    (gegebenenfalls Löschen Befehl)


    Dinge wie Model und Fraktion kannst du alles weg lassen, du brauchst ja nur die Koordinaten.
    Fange am besten so an, dass du eine Datei manuell erstellst, mit den Koordinaten des ersten Pakets, dann erstellst du die Lade-Funktion, und wenn die klappt, den Befehl zum Erstellen von Paketen. Danach dann den zum Löschen, falls gewünscht.


    Versuche mal ob du damit klar kommst.

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • An sich war das schonmal gut was du gemacht hast.
    Nur das mit der VehicleID hat dich anscheinend etwas verwirrt, das war nämlich das einzig wirkliche Problem, was sich durch den ganzen Code gezogen hat. Da wir das hier nicht brauchen, habe ich das einfach entfernt, und die Speicherung beim "Check" mit dem Index "i" gemacht.


    Teste es so, das sollte dann alles klappen:
    #include <a_samp>
    #include <Dini>
    #include <ocmd>
    #include <streamer>


    #define MaxGifts 10


    enum fracVehEnum
    {
    Float:e_x,
    Float:e_y,
    Float:e_z,
    Float:e_a,
    e_oID
    };
    new GiftBox[MaxGifts][fracVehEnum];



    public OnFilterScriptInit()
    {
    LoadGiftBoxs();
    return 1;
    }


    LoadGiftBoxs()
    {
    new CreatedGiftBoxes, path[64];
    //Schleife durch alle Dateien:
    for(new i=0; i<MaxGifts; i++)
    {
    //Es wird geprüft, ob ein Fahrzeug mit der ID existiert, wenn nicht, wird diese ID übersprungen
    format(path, sizeof(path), "/GiftBoxs/%d.ini", i);
    if(!fexist(path)) continue;
    //Fahrzeug existiert im GiftBoxs-Ordner, wir laden die Daten jetzt aus der Datei.
    GiftBox[i][e_x] = floatstr(dini_Get(path, "x"));
    GiftBox[i][e_y] = floatstr(dini_Get(path, "y"));
    GiftBox[i][e_z] = floatstr(dini_Get(path, "z"));
    GiftBox[i][e_a] = floatstr(dini_Get(path, "a"));

    GiftBox[i][e_oID] = CreateDynamicObject(19054, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z], 0.0, 0.0, GiftBox[i][e_a]);


    CreatedGiftBoxes++;
    if(CreatedGiftBoxes == MaxGifts) return print("Es können keine weiteren Geschenke geladen werden, Limit (MaxGifts) erreicht.");
    }
    return 1;
    }


    stock SaveFracVehCheck(i)
    {
    //Deklaration neuer temporärer Variablen:
    new path[64];
    if(i > -1 && i < sizeof(GiftBox))
    {
    //Es wird der Pfad gesetzt:
    format(path, sizeof(path), "/GiftBoxs/%d.ini", i);
    //Und wir speichern die Daten:
    dini_FloatSet(path, "x", GiftBox[i][e_x]);
    dini_FloatSet(path, "y", GiftBox[i][e_y]);
    dini_FloatSet(path, "z", GiftBox[i][e_z]);
    dini_FloatSet(path, "a", GiftBox[i][e_a]);
    return 1; //Es gibt ja keine zwei gleichen Fahrzeuge
    }
    return 0; //Fahrzeug ist kein Fraktions-Fahrzeug
    }


    forward SaveAllFracVehs();
    public SaveAllFracVehs()
    {
    //Deklaration neuer temporärer Variablen:
    new path[64];
    //Schleife durch alle Fraktions-Fahrzeuge:
    for(new i=0; i<MaxGifts; i++)
    {
    //Es wird der Pfad gesetzt:
    format(path, sizeof(path), "/GiftBoxs/%d.ini", i);
    //Und wir speichern die Daten:
    dini_FloatSet(path, "x", GiftBox[i][e_x]);
    dini_FloatSet(path, "y", GiftBox[i][e_y]);
    dini_FloatSet(path, "z", GiftBox[i][e_z]);
    dini_FloatSet(path, "a", GiftBox[i][e_a]);
    }
    return 1;
    }


    ocmd:geschenk(playerid, params[])
    {
    for(new i=0; i<MaxGifts; i++)
    {
    if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0)
    {
    //Daten werden übergeben
    new Float:x, Float:y, Float:z, Float:a;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    GiftBox[i][e_x] = x;
    GiftBox[i][e_y] = y;
    GiftBox[i][e_z] = z - 0.4;
    GiftBox[i][e_a] = a;
    GiftBox[i][e_oID] = CreateDynamicObject(19054,x, y, z - 0.4, 0.0, 0.0,a);


    //Zuletzt wird die Datei angelegt und das Fahrzeug gespeichert.
    new path[64];
    format(path, sizeof(path), "/GiftBoxs/%d.ini", i);
    dini_Create(path);
    SaveFracVehCheck(i);
    return SendClientMessage(playerid, 0x00FF00FF, "Geschenke gespeichert.");
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit für Geschenke erreicht.");
    }



    //Stocks
    stock strtok2(const string[], &index) //©Jeffry
    {
    new result[20], length = strlen(string), i = index;
    while ((i < length) && (string[i] == ' ')) i++;
    strmid(result,string,i,((index = strfind(string, " ", false, i)) == -1) ? (index = length) : (index) , 20);
    index++;
    return result;
    }
    stock IsNumeric(string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if ((string[i] > '9' || string[i] < '0')) return 0;
    }
    return 1;
    }

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Wenn du es mit dem System machen willst, dann wäre es am sinnvollsten, alles einheitlich zu machen, sprich du erstellst einfach 40 dieser Geschenke, geladen werden sie ja dann automatisch.


    Dann würde auch die Chance bestehen, diese leicht zu ändern.

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Die ID ist das i das in den eckigen Klammern steht.
    Wenn du da einen Befehl machst, dann kannst du das zum Beispiel mit sscanf eingeben, und die eingegebene Nummer dann in eine Variable speichern, die du zum Beispiel i nennst, und dann so wie sonst auch auf die Werte zugreifen.
    SetPlayerPos(playerid, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]);

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Da du ein 2 dimensionales Array hast, musste auch schon die 2. Dimension angeben :D


    Also so schreiben:


    DestroyDynamicObject( GiftBox[i][e_oID] );

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen