3 dimensionaler Array durchgehen

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 arbeite derzeit an einem Farmer System.
    Alle Koordinaten (der Checkpoints) sind in einem 3 dimensionalen Array gespeichert.


    Meine Frage lautet jetzt:
    Der Spieler gibt den Befehl zum starten des Jobs an, nun soll der komplette Array durchgegangen werden und an jeder Koordinate ein Objekt erstellt werden, welcher nur für den Spieler sichtbar ist.
    Wie funktioniert das genau? Ich habe leider keine Ahnung.


    new Float:Checkpoints[MAX_FARMER_CHECKPOINTS][3]=
    {
    {1966.8560,-1459.9512,13.1004},
    {1966.8560,-1459.9512,13.1004}
    };


    Homez 8)

  • for(new i = 0; i < MAX_FARMER_CHECKPOINTS; i++) SetPlayerCheckpoint(playerid, Checkpoints[i][0], Checkpoints[i][1], Checkpoints[i][2]);


    Wenn du das gemeint hast.
    Du kannst anstatt SetPlayerCheckpoint auch ein Objekt setzen.


    Checkpoints[i][0] = X Coord
    Checkpoints[i][1] = Y Coord
    Checkpoints[i][2] = Z Coord

  • Hab das jetzt so, lediglich die erste Pflanze wird erstellt.
    for(new i = 0; i < MAX_FARMER_CHECKPOINTS; i++)
    {
    Pflanzen[playerid] = CreateObject(806,Checkpoints[Aktueller_Farmer_CP[playerid]][0],Checkpoints[Aktueller_Farmer_CP[playerid]][1],Checkpoints[Aktueller_Farmer_CP[playerid]][2] - 1.3, 0.0, 0.0, 90);
    }

  • Wie groß ist dein define von MAX_FARMER_CHECKPOINTS?


    Versuch ansonsten mal das
    for(new i = 0; i <= MAX_FARMER_CHECKPOINTS; i++)


    /edit
    Checkpoints[Aktueller_Farmer_CP[playerid]][0]
    Warum machst du das mit der Variable?
    Aktueller_Farmer_CP[playerid]


    Die Schleife erstellt jede Pflanze bzw. soll es tun.
    Wenn du nur eine willst erstell sie immer wenn du ein Checkpoint betrittst.


    Checkpoints[i][0]

  • Funktioniert nun.
    Die Pflanze in dessen Checkpoint ich mich befinde wird aber nicht gelöscht.
    Wollte das ganze eigentlich hiermit machen.
    for(new i = 0; i <= MAX_FARMER_CHECKPOINTS; i++)
    {
    Pflanzen[playerid] = DestroyObject(Pflanzen[playerid]);
    }

  • Pflanzen[playerid] = DestroyObject(Pflanzen[playerid]);


    zu


    DestroyObject(Pflanzen[playerid][i]);


    und bei dem CreateObject


    Pflanzen[playerid] = CreateObject(806, ...


    zu


    Pflanzen[playerid][i] = CreateObject(806, ...


    Beim erstellen der Variable machst du


    new Pflanzen[MAX_PLAYERS];


    zu


    new Pflanzen[MAX_PLAYERS][MAX_FARMER_CHECKPOINTS];

  • ich darf an anfügen, dass es kein 3 dimensionaler Array ist.
    so ist dein 2 dimensionaler Array : new Float:Checkpoints[MAX_FARMER_CHECKPOINTS][3]
    das wäre zb. ein 3 dimensionaler Array: new Float:Checkpoints[MAX_PLAYERS][MAX_FARMER_CHECKPOINTS][3]


    d.h. in meinem Fall


    PHP
    Checkpoints //Variable
    [MAX_PLAYERS] //1. dimension
    [MAX_FARMER_CHECKPOINTS] //2. dimension
    [3] //3. dimension

    Mit Freundlichen Grüßen
    Whitetiiger aka. Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.

  • Nun werden alle Pflanzen gelöscht, wenn ich in den ersten Checkpoint fahre..
    public OnPlayerEnterCheckpoint(playerid)
    {
    if(Aktueller_Farmer_CP[playerid] != INVALID_FARMER_CP && GetVehicleModel(GetPlayerVehicleID(playerid)) == 532)
    {
    if(Aktueller_Farmer_CP[playerid] == LAST_FARMER_CHECKPOINT)
    {
    for(new i = 0; i <= MAX_FARMER_CHECKPOINTS; i++)
    {
    DestroyObject(Pflanzen[playerid][i]);
    }
    DisablePlayerCheckpoint(playerid);
    Aktueller_Farmer_CP[playerid] = INVALID_FARMER_CP;
    GivePlayerMoney(playerid,FARMER_GEHALT);
    SendClientMessage(playerid,-1,"Du hast deinen Job als Farmer beendet. Gehalt am PayDay: $"#FARMER_GEHALT"");
    }
    else
    {
    for(new i = 0; i <= MAX_FARMER_CHECKPOINTS; i++)
    {
    DestroyObject(Pflanzen[playerid][i]);
    }
    Aktueller_Farmer_CP[playerid]++;
    SetPlayerCheckpoint(playerid,Checkpoints[Aktueller_Farmer_CP[playerid]][0],Checkpoints[Aktueller_Farmer_CP[playerid]][1],Checkpoints[Aktueller_Farmer_CP[playerid]][2], 5.0);
    }
    }
    return 1;
    }

  • Weil eine Schleife genau das bezwecken soll, du hast dich vollkommen falsch ausgedrückt was du eigentlich möchtest.


    entferne die ganze Schleife und mache folgendes rein:


    DestroyObject(Pflanzen[playerid][Aktueller_Farmer_CP[playerid]]);


    Ich empfehle dir auch die Grundlagen von PAWN nochmals anzuschauen falls du das noch nicht getan hast. :)


    Lg

  • Wie kann ich hierdurch eine gesamte Schleife machen, die alles durchgeht?
    new Farmer_Checkpoints[][j_Farmer] =
    {
    {-74.2252,-1128.7936,1.6359,5.0}
    };


    //e:
    So funktioniert es leider nicht..
    for(new i = 0; i < Farmer_Checkpoints; i++)
    {
    Pflanzen[playerid] = CreateObject(806,Farmer_Checkpoints[i][playerid]][F_jX],Farmer_Checkpoints[i][playerid][F_jY],Farmer_Checkpoints[i][playerid][F_jZ] 0, 0.0, 0.0, 90);
    }

  • for(new i;i<sizeof Farmer_Checkpoints;i++)
    {
    Farmer_Checkpoints[i][...] = ...;
    }


    Bei den "..." natürlich das entsprechende eintragen ;)

  • Soweit war ich ja, nur hier komme ich nicht weiter.
    Pflanzen[playerid] = CreateObject(806,Farmer_Checkpoints[i][playerid]][F_jX],Farmer_Checkpoints[i][playerid][F_jY],Farmer_Checkpoints[i][playerid][F_jZ] 0, 0.0, 0.0, 90);
    Dort scheint ein Fehler vorhanden zu sein.

  • new Pflanzen[MAX_PLAYERS][sizeof Farmer_Checkpoints];//unter new Farmer_Checkpoints[][] erstellen!!
    for(new i;i<sizeof Farmer_Checkpoints;i++)
    {
    Pflanzen[playerid][i] = CreateObject(806,Farmer_Checkpoints[i][F_jX],Farmer_Checkpoints[i][F_jY],Farmer_Checkpoints[i][F_jZ],0.0,0.0,0.0,90);
    }