Kann man in "define"s eigentlich Arrays 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
  • Hab' folgendes Problem:
    Ich möchte in einem Include bestimmte Punkte hinterlegen.
    Bin bis jetzt so weit:
    // Punkte speichern: X, Y, Z, R (Rotation), Interior, Virtuelle Welt
    #define Float:POINTS \
    {\
    {123.0, 456.0, 789.0, 147.0, 0.0, 0.0}, /* Kommentar 1 */ \
    {123.0, 456.0, 789.0, 147.0, 0.0, 0.0} /* Kommentar 2 */ \
    }
    Doch irgendwie klappt das nicht so ganz...
    Die Werte für Interior und Virtuelle Welt werden im Script auf Integer gerundet... (Dort besteht also kein Problem)
    Das Problem besteht im eigentlichen Auslesen der Dateien.
    Über euere Hilfe würde ich mich sehr freuen...


    MFG
    freund17



    //EDIT
    Oder liegt es doch eher am Aufruf?
    public teleToPointWithVehicle(playerid, pointid)
    {
    teleWithVehicle(playerid, POINTS[pointid][0], POINTS[pointid][1], POINTS[pointid][2], POINTS[pointid][3], floatround(POINTS[pointid][4], floatround_floor), floatround(POINTS[pointid][5], floatround_floor));
    }
    (Forward wurde gesetzt)

  • Nicht das ich wüsste, defines sind ja eigentlich dazu da Textersetzungen und nicht dazugedacht um Werte zu speichern. (Fällt grad der Begriff dazu nicht ein)
    Bei dir werden die Werte ja nich als Ausdruck gewertet.
    Macht keinen Sinn für mich.


    Hier arbeitest du am besten mit Enum´s, Floats sind hier sowieso Unsinn wenn deine Rotation 0 ist.
    Da sparste dir wieder was ein, da reicht dir ein Integer.


    Wäre auch hilfreich wenn du folgende Funktion mal angeben könntest


    teleWithVehicle


    Tutorials zu Enums findest du auf der Sa-mp.com Wikipedia Seite.

    [align=center]
    Mta Script Editor - Work in Progress

  • Enums kenne ich...
    Der Grund, warum ich Arrays verwende ist der: Sie sind übersichtlicher.
    Bei Enums müsste ich, was hier einer Zeile ist so schreiben:


    enum PointsEnum
    {
    Float:X,
    Float:Y,
    Float:Z,
    Float:R,
    inter,
    vw
    }
    new Points[???][PointsEnum]; // ??? = ich müsste ja schon wissen, wie viele Objekte ich anlegen muss -.-


    // Und dann die aufwändige, mehrzeilige deklaration...
    Points[0][X] = blablabla;
    Points[0][Y] = blablabla;
    Points[0][Z] = blablabla;
    Points[0][R] = blablabla;
    Points[0][inter] = blablabla;
    Points[0][vw] = blablabla;

    Points[1][X] = blablabla;
    Points[1][Y] = blablabla;
    Points[1][Z] = blablabla;
    Points[1][R] = blablabla;
    Points[1][inter] = blablabla;
    Points[1][vw] = blablabla;
    Nein danke... das muss doch übersichtlicher / einfacher gehen...


    Außerdem soll das als Include gemacht werden... Da wäre die Methode, es über ein "new" abzuwickeln doch unpraktisch oder?




    Was meine Funktion angeht:public teleWithVehicle(playerid, Float:X, Float:Y, Float:Z, Float:R, inter, vw)
    {
    new sVehicle = GetPlayerStreamVehicleID(playerid);
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    teleStreamVehicle(sVehicle, X, Y, Z, R, inter, vw);
    teleWithoutVehicle(playerid, X, Y, Z + 2, R, inter, vw);
    PutPlayerInStreamVehicle(playerid, sVehicle, 0);
    SetCameraBehindPlayer(playerid);


    return 1;
    }
    else
    return teleWithoutVehicle(playerid, X, Y, Z, R, inter, vw);
    }(Forward wurde gesetzt; funktion funktioniert, wenn sie von aufgerufen wird. Nur eben nicht mit den besagten Werten...)