Checkpoints aus Datei

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
  • Hallo,
    ich habe in einer Datei Checkpoint-Koordinaten.


    Code
    x, y, z
    x2, y2, z2
    x3, y3, z3
    ...


    Wie kann ich diese in einzelne Variablen speichern? Ansonsten gäbe es vielleicht die Möglichkeit diese erstmal in einen String zu speichern und diesen dann irgendwie zu nutzen, um Checkpoints zu erstellen.


    Hoffe auf schnelle Hilfe


    Mit freundlichen Grüßen


    Artus

  • Ich möchte Dateien durchgehen, welche 1.txt, 2.txt und so weiter gehen. Diese sind auch mehrzeilig mit mehreren Koordinaten.


    Variablen aus der Datei 1.txt soll beim Array in 1 gespeichert werden.
    bei der 2.txt im 2. Array und so weiter.


    Wie mache ich es dann mit der Schleife und so? Blicke da gerade nicht durch :(

  • new Float:cPos[10][3]; //10 CPs
    new i, string[128], fstr[16], File:rFile;
    for(new f=0; f<10; f++) //0.txt bis 9.txt
    {
    format(fstr, sizeof(fstr), "%d.txt", f);
    if(fexist(fstr))
    {
    rFile = fopen(fstr, io_read);
    if(rFile)
    {
    while(fread(rFile, string))
    {
    new idx;
    cPos[i][0] = floatstr(strtok(string, idx));
    cPos[i][1] = floatstr(strtok(string, idx));
    cPos[i][2] = floatstr(strtok(string, idx));
    i++;
    }
    }
    fclose(rFile);
    }
    }

  • Du bist der größte Schatz. ^^ :) Danke.


    Habe erst wieder angefangen mit dem Scripten und tue mich noch ein bisschen schwer :D



    Edit1:


    Tut mir Leid, aber ich bin einfach zu blöd dafür. :D


    Eine Beispieldatei:



    1. Zeile ist die ID (auch Name der txt)
    2. Zeile ist die Pickup ID
    3. Pickup-Koordinaten
    4. Fahrzeug-Model
    5. Fahrzeug-Spawn
    6. Testzahl beim Schreiben der Datei :D
    7+ Zeilen. Checkpoint-Koordinaten



    ich schaffe es nicht. die ersten Zeilen sollen in ein Array.
    Die Checkpoints hingegen sollen in ein anderes Array.


    Beide sozusagen mit der ID 5.


    Bei der nächsten Datei (6.txt) sollen alle Informationen in die Arrays bei 6 eingespeichert werden.


    Zusatzinfo:


    1. Array [ID][blabla] --> also ID wäre 5 und blabla halt pickupid, pickup-koordinaten usw.
    2. Array[ID][Checkpoint] [blabla] -->ID wäre auch 5, Checkpoint ist halt der wievielte es ist und blabla halt die XYZ-Positionen

    Einmal editiert, zuletzt von Artus ()

  • new Float:cPos[7][10][3]; //7 Dateien mit max. 10 CPs
    new vehID[7];
    new Float:vehPos[7][3];
    new picID[7];
    new Float:picPos[7][3];
    new string[128], fstr[16], File:rFile;
    for(new f=0; f<10; f++) //0.txt bis 9.txt
    {
    format(fstr, sizeof(fstr), "%d.txt", f);
    if(fexist(fstr))
    {
    rFile = fopen(fstr, io_read);
    if(rFile)
    {
    new line, i;
    while(fread(rFile, string))
    {
    new idx;
    switch(line)
    {
    case 0: {}
    case 1: vehID[f] = strval(strtok(string, idx));
    case 2:
    {
    vehPos[f][0] = floatstr(strtok(string, idx));
    vehPos[f][1] = floatstr(strtok(string, idx));
    vehPos[f][2] = floatstr(strtok(string, idx));
    }
    case 3: picID[f] = strval(strtok(string, idx));
    case 4:
    {
    picPos[f][0] = floatstr(strtok(string, idx));
    picPos[f][1] = floatstr(strtok(string, idx));
    picPos[f][2] = floatstr(strtok(string, idx));
    }
    case 5: {}
    case 6..15: //max. 10 CPs, ansonsten hier auch erhöhen.
    {
    cPos[f][i][0] = floatstr(strtok(string, idx));
    cPos[f][i][1] = floatstr(strtok(string, idx));
    cPos[f][i][2] = floatstr(strtok(string, idx));
    i++;
    }
    }
    line++;
    }
    }
    fclose(rFile);
    }
    }


    Du kannst den ganzen Kram auch in ein Enum packen, bleibt dir überlassen.

  • Danke :) So war es vorher bei mir. Werde es morgen früh umgestalten und hoffen, dass ich es hinbekomme. :) Gute Nacht. ^^
    public OnFilterScriptInit()
    {
    for(new i = 1; i <= 25; i++)
    {
    new string[16], save[128], idx;
    format(string, sizeof(string), "%i.txt", i);
    if(!fexist(string))
    {
    continue; // Wenn die Datei nicht existiert wird i erhöht.
    }
    new File:job = fopen(string, io_read); // Öffnet die Datei
    if(job) // Wenn die Datei erfolgreich geöffnet wurde
    {
    switch (i)
    {
    case 1: fread(job, JobDaten[i][cpJobID]);
    case 2: fread(job, JobDaten[i][cpPickupID]);
    case 3:
    {
    fread(job, save);
    JobDaten[i][cpPickupPosX] = floatstr(strtok(save, idx));
    JobDaten[i][cpPickupPosY] = floatstr(strtok(save, idx));
    JobDaten[i][cpPickupPosZ] = floatstr(strtok(save, idx));
    }
    case 4: fread(job, JobDaten[i][cpVehicleModel]);
    case 5:
    {
    fread(job, save);
    JobDaten[i][cpVehiclePosX] = floatstr(strtok(save, idx));
    JobDaten[i][cpVehiclePosY] = floatstr(strtok(save, idx));
    JobDaten[i][cpVehiclePosZ] = floatstr(strtok(save, idx));
    JobDaten[i][cpVehiclePosA] = floatstr(strtok(save, idx));
    }
    case 6: fread(job, JobDaten[i][cpGeld]);
    case 7..(MAX_CPS+6):
    {
    for (new x=1; x<= MAX_CPS; x++)
    {
    fread(job, save);
    JobCheckpoint[i-6][x][PosX] = floatstr(strtok(save, idx));
    JobCheckpoint[i-6][x][PosY] = floatstr(strtok(save, idx));
    JobCheckpoint[i-6][x][PosZ] = floatstr(strtok(save, idx));
    }
    }
    }
    fclose(job); // Schließt die Datei
    }
    AddStaticPickup(JobDaten[i][cpPickupID], 1, JobDaten[i][cpPickupPosX], JobDaten[i][cpPickupPosY], JobDaten[i][cpPickupPosZ]);
    new str[128];
    format(str, sizeof(str), "/starten\nFahrzeug: %s", GetVehicleName(JobDaten[i][cpVehicleModel]));
    Create3DTextLabel(str, 0xFFFF00FF, JobDaten[i][cpPickupPosX], JobDaten[i][cpPickupPosY], JobDaten[i][cpPickupPosZ], 30, 0);
    }
    return 1;
    }