5 Arrays in ein System ?

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 Liebe Leute.


    Ich versuche gerade ein kleines Random System zu erstellen, was jedoch nicht ganz klappt bzw. mir paar Teile fehlen.


    Pro Array (Textur1,Textur2,Textur3,Textu4,Textur5) gibt es 24 Objekte. Für diese Objekte sollten verschiedene Texturen gesetzt werden. Damit es jedoch fair bleibt, soll es pro eine Textur 24 Objekte geben.

    19343 = Objekt ID, X,Y,Z


    new Textur1[][] ={
    { 19343, 146.07700, 1864.98975, 720.62543 },
    { 19343, 149.28700, 1857.98975, 720.62543 }
    //22 weitere
    };
    new Textur2[][] ={
    { 19343, 146.07700, 1864.98975, 720.62543 },
    { 19343, 149.28700, 1857.98975, 720.62543 }
    //22 weitere
    };



    // 3 Weitere Arrays Textur3,Textu4,Textur5



    Wie muss ich das dann hier eintragen?

    for( new i = 0; i< sizeof(Was muss ich hier eintragen?); i++ ) {
    new rand = random(sizeof(RandomTexture));
    SetObjectMaterial(Was muss ich hier eintragen?, RandomTexture[rand][0],RandomTexture[rand][1],RandomTexture[rand][2],RandomTexture[rand][3]); // ?!


    Muss ich dann, da wo steht "Was muss ich hier eintragen?", einfach textur1 bis textur 5 eingeben oder wie?
    Danke im vorraus.


    Mit freundlichen Grüßen,
    ArTeX

  • Vereinfache das ganze doch


    enum oDATA {
    objectid,
    Float:X,
    Float:Y,
    Float:Z,
    }


    new Textur[][][oDATA] = {
    {
    { 19343, 146.07700, 1864.98975, 720.62543 },
    { 19343, 149.28700, 1857.98975, 720.62543 }
    },
    {
    { 19343, 146.07700, 1864.98975, 720.62543 },
    { 19343, 149.28700, 1857.98975, 720.62543 }
    }
    };



    new rand;
    for( new i; i < sizeof(Textur); i++ ) {
    for( new x; x < sizeof(Textur[]); x++ ) {
    rand= random(sizeof(RandomTexture));
    SetObjectMaterial(CreateObject(Textur[i][x][objectid],Textur[i][x][X],Textur[i][x][Y],Textur[i][x][Z],0.0,0.0,0.0), RandomTexture[rand][0],RandomTexture[rand][1],RandomTexture[rand][2],RandomTexture[rand][3]);
    }
    }


    Sollte so möglich sein

  • enum oDATA {
    objectid,
    Float:X,
    Float:Y,
    Float:Z,
    }


    new RandomTexture[][] =
    {
    {0, 8839, "vgsecarshow", "lightred2_32"},
    {0, 8839, "vgsecarshow", "lightblue2_32"}
    };


    new Textur[][oDATA] ={
    { 19362, 120.39700, 1868.46973, 720.62543 },
    { 19362, 149.28700, 1864.98975, 720.62543 }
    },
    { // Fehler : Zeile 48
    { 19362, 146.07700, 1864.98975, 720.62543 },
    { 19362, 149.28700, 1857.98975, 720.62543 }
    },
    {
    { 19362, 142.86700, 1857.98975, 720.62543 },
    { 19362, 142.86700, 1850.98975, 720.62543 }
    },
    {
    { 19362, 120.39700, 1850.98975, 720.62543 },
    { 19362, 136.44701, 1836.98975, 720.62543 }
    }; // Zeile: 152


    public OnPlayerSpawn(playerid)
    {
    new rand;
    for( new i; i < sizeof(Textur); i++ ) {
    for( new x; x < sizeof(Textur[]); x++ ) {
    rand= random(sizeof(RandomTexture));
    SetObjectMaterial(CreateObject(Textur[i][x][objectid],Textur[i][x][X],Textur[i][x][Y],Textur[i][x][Z],0.0,0.0,0.0), RandomTexture[rand][0],RandomTexture[rand][1],RandomTexture[rand][2],RandomTexture[rand][3]); // Zeile 246
    }
    }
    return 1;
    }


    Folgende Fehlermeldung :



    IPrototypeI:

    Einmal editiert, zuletzt von ArTeX ()

  • Zitat von IPrototypeI:

    new Textur[][][oDATA] =
    {
    {
    { 19362, 120.39700, 1868.46973, 720.62543 },
    { 19362, 149.28700, 1864.98975, 720.62543 }
    },
    {
    { 19362, 146.07700, 1864.98975, 720.62543 },
    { 19362, 149.28700, 1857.98975, 720.62543 }
    },
    {
    { 19362, 142.86700, 1857.98975, 720.62543 },
    { 19362, 142.86700, 1850.98975, 720.62543 }
    },
    {
    { 19362, 120.39700, 1850.98975, 720.62543 },
    { 19362, 136.44701, 1836.98975, 720.62543 }
    }
    };

    Du hattest einen klammer fehler

  • Du kannst so keine multidimensionale Arrays initalisieren, da du unterschiedliche Datentypen hast.


    Zum Array du hast meinen oberen Code nicht ganz übernommen. (3 dimensionales Array);


    enum tDATA {
    index,
    modelid,
    txdname[30],
    texturename[30],
    };


    new RandomTexture[][tDATA ] =
    {
    {0, 8839, "vgsecarshow", "lightred2_32"},
    {0, 8839, "vgsecarshow", "lightblue2_32"}
    };



    new rand;
    for( new i; i < sizeof(Textur); i++ ) {
    for( new x; x < sizeof(Textur[]); x++ ) {
    rand= random(sizeof(RandomTexture));
    SetObjectMaterial(CreateObject(Textur[i][x][objectid],Textur[i][x][X],Textur[i][x][Y],Textur[i][x][Z],0.0,0.0,0.0), RandomTexture[rand][index],RandomTexture[rand][modelid],RandomTexture[rand][txdname],RandomTexture[rand][texturename]);
    }
    }

  • Was machst du da auch? :huh:


    Schreib es so:


    enum oDATA {
    objectid,
    Float:X,
    Float:Y,
    Float:Z,
    };


    new RandomTexture[][] = {
    {0, 8839, "vgsecarshow", "lightred2_32"},
    {0, 8839, "vgsecarshow", "lightblue2_32"}
    }, Textur[][oDATA] ={
    { 19362, 120.39700, 1868.46973, 720.62543 },
    { 19362, 149.28700, 1864.98975, 720.62543 },
    { 19362, 146.07700, 1864.98975, 720.62543 },
    { 19362, 149.28700, 1857.98975, 720.62543 },
    { 19362, 142.86700, 1857.98975, 720.62543 },
    { 19362, 142.86700, 1850.98975, 720.62543 },
    { 19362, 120.39700, 1850.98975, 720.62543 },
    { 19362, 136.44701, 1836.98975, 720.62543 }
    };


    //und das unten


    public OnPlayerSpawn(playerid)
    {
    new rand;
    for( new i; i < sizeof(Textur); i++ ) {
    for( new x; x < sizeof(Textur[]); x++ ) {
    rand= random(sizeof(RandomTexture));
    SetObjectMaterial(CreateObject(Textur[i][x][objectid],Textur[i][x][X],Textur[i][x][Y],Textur[i][x][Z],0.0,0.0,0.0), RandomTexture[rand][0],RandomTexture[rand][1],RandomTexture[rand][2],RandomTexture[rand][3]);
    }
    }
    return 1;
    }


    mfg. :rolleyes:

    ast2ufdyxkb1.png


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

  • Habs so:


    enum oDATA {
    objectid,
    Float:X,
    Float:Y,
    Float:Z,
    };


    new RandomTexture[][] = {
    {0, 8839, "vgsecarshow", "lightred2_32"},
    {0, 8839, "vgsecarshow", "lightblue2_32"}
    }, Textur[][oDATA] ={
    { 19362, 120.39700, 1868.46973, 720.62543 },
    { 19362, 149.28700, 1864.98975, 720.62543 }
    },
    {
    { 19362, 146.07700, 1864.98975, 720.62543 },
    { 19362, 149.28700, 1857.98975, 720.62543 }
    },
    {
    { 19362, 142.86700, 1857.98975, 720.62543 },
    { 19362, 142.86700, 1850.98975, 720.62543 }
    },
    {
    { 19362, 120.39700, 1850.98975, 720.62543 },
    { 19362, 139.65700, 1843.98975, 720.62543 }
    },
    {
    { 19362, 136.44701, 1843.98975, 720.62543 },
    { 19362, 136.44701, 1836.98975, 720.62543 }
    };


    Kaliber: Pro Textur sollen 24 Objekte belegt werden. Sprich Textur1 = 24 Objekte, Textur2 = 24 Objekte und so weiter.

  • Ich nehme einfach mal deinen Anfang und führe ihn fort, bei 5 Arrays ist das relativ egal, Hauptsache du verstehst das Prinzip und es tut.


    enum texturEnum {
    id,
    Float:x,
    Float:y,
    Float:z
    }


    new Textur1[][texturEnum] ={
    { 19343, 146.07700, 1864.98975, 720.62543 },
    { 19343, 149.28700, 1857.98975, 720.62543 }
    //22 weitere
    };
    new Textur2[][texturEnum] ={
    { 19343, 146.07700, 1864.98975, 720.62543 },
    { 19343, 149.28700, 1857.98975, 720.62543 }
    //22 weitere
    };


    new rand;


    //Textur1
    rand = random(sizeof(RandomTexture));
    for(new i=0; i<sizeof(Textur1); i++) SetObjectMaterial(CreateObject(Textur1[i][id],Textur1[i][x],Textur1[i][y],Textur1[i][z],0.0, 0.0, 0.0), RandomTexture[rand][0],RandomTexture[rand][1],RandomTexture[rand][2],RandomTexture[rand][3], 0);


    //Textur2
    rand = random(sizeof(RandomTexture));
    for(new i=0; i<sizeof(Textur2); i++) SetObjectMaterial(CreateObject(Textur2[i][id],Textur2[i][x],Textur2[i][y],Textur2[i][z],0.0, 0.0, 0.0), RandomTexture[rand][0],RandomTexture[rand][1],RandomTexture[rand][2],RandomTexture[rand][3], 0);


    //etc

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich bin davon ausgegangen, dass du das RandomTexture-enum übernimmst, aber gut:
    enum tDATA {
    index,
    modelid,
    txdname[30],
    texturename[30],
    };


    new RandomTexture[][tDATA ] =
    {
    {0, 8839, "vgsecarshow", "lightred2_32"},
    {0, 8839, "vgsecarshow", "lightblue2_32"}
    };


    new rand;


    rand = random(sizeof(RandomTexture));
    for(new i=0; i<sizeof(Textur1); i++) SetObjectMaterial(CreateObject(Textur1[i][id],Textur1[i][x],Textur1[i][y],Textur1[i][z],0.0, 0.0, 0.0), RandomTexture[rand][index],RandomTexture[rand][modelid],RandomTexture[rand][txdname],RandomTexture[rand][texturename]);


    rand = random(sizeof(RandomTexture));
    for(new i=0; i<sizeof(Textur2); i++) SetObjectMaterial(CreateObject(Textur2[i][id],Textur2[i][x],Textur2[i][y],Textur2[i][z],0.0, 0.0, 0.0), RandomTexture[rand][index],RandomTexture[rand][modelid],RandomTexture[rand][txdname],RandomTexture[rand][texturename], 0);


    Ich hab dir hinten mal einmal die 0 gelassen, ich weiß ja nicht wie du es mit der Farbe haben willst.



    Zu deinem Edit:
    Es fehlt natürlich die XYZ-Drehung (die 3x 0.0 in CreateObject). Das musst du zusätzlich noch in das Textur1(-5) Array einbauen, und in das enum.

  • Jeffry:
    Leider wird kein Objekt erstellt...


    Danke dir, soweit keine Fehler


    // Objekte werden komisch gestellt..


    Die Rotation ist 0 und der Code von Jeffry ist nicht das gelbe vom Ei wenn es um das setzen von der zufallstextur geht


    RandomTexture[rand][0],RandomTexture[rand][1],RandomTexture[rand][2],RandomTexture[rand][3]


    das funktioniert nicht erklärung oben. Du musst die rx oder rz anpassen einfach mal testen und auf 90 setzen

  • Prototyp wenn ich es so mache wie du, kriege vh den Fehler tag mismatch.


    Und wenn ich es so mache, das alle objekte ubter einem array sind, wird nur eine textur immer gesetzt und nicht eine verschirdene.


    Sprich:

    new Texturen[][texturEnum] ={
    { 19343, 146.07700, 1864.98975, 720.62543 },
    { 19343, 149.28700, 1857.98975, 720.62543 }
    //120 weitere ##################
    };


    new rand;


    rand = random(sizeof(RandomTexture));
    for(new i=0; i<sizeof(Texturen); i++) SetObjectMaterial(CreateObject(Texturen[i][id],Texturen[i][x],Texturen[i][y],Texturen[i][z],0.0, 0.0, 0.0), RandomTexture[rand][index],RandomTexture[rand][modelid],RandomTexture[rand][txdname],RandomTexture[rand][texturename]);

  • enum texturEnum {
    id,
    Float:x,
    Float:y,
    Float:z
    }


    enum tDATA {
    index,
    modelid,
    txdname[30],
    texturename[30],
    };


    new RandomTexture[][tDATA ] ={
    {0, 8839, "vgsecarshow", "lightred2_32"},
    {0, 8839, "vgsecarshow", "lightblue2_32"}
    }, Objekte[][texturEnum] ={
    { 19362, 120.39700, 1868.46973, 720.62543 },
    { 19362, 123.60700, 1868.46973, 720.62543 },
    { 19362, 136.44701, 1836.98975, 720.62543 }
    };

    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/event", cmdtext, true, 10) == 0)
    {
    SetPlayerPos(playerid,123.09380, 1877.21130, 733.06079);
    return 1;
    }
    if (strcmp("/event2", cmdtext, true, 10) == 0)
    {
    new rand;
    rand = random(sizeof(RandomTexture));
    for(new i=0; i<sizeof(Objekte); i++) SetObjectMaterial(CreateObject(Objekte[i][id],Objekte[i][x],Objekte[i][y],Objekte[i][z],0.00000, 90.00000, 90.00000), RandomTexture[rand][index],RandomTexture[rand][modelid],RandomTexture[rand][txdname],RandomTexture[rand][texturename]);
    return 1;
    }
    return 0;
    }


    Jeffry:

  • Wenn du ständig deinen Code änderst, und zwar komplett, dann wird es auch schwer dir zu helfen.


    Am Anfang hast du gesagt, du hast für jede Art von Textur ein Array mit 24 Objekten. Jetzt hast du nur noch ein Array, logischerweise haben dann alle die gleiche Textur.
    Warum machst du das nicht mehr so?



    Falls du an deiner neuen Methode hängst:
    Wie viele Objekte sind in diesem Array?
    Wie viele Objekte sollen die gleiche Textur erhalten?
    Sollen die Objekte der Reihe nach X Stück die gleiche Textur haben, oder soll es durcheinander sein?

  • Wie viele Objekte sind in diesem Array?
    Es sind 120 Objekte

    Wie viele Objekte sollen die gleiche Textur erhalten?

    Sollten einfach Random irgendwelche Texturen gesetzt werden.


    Sollen die Objekte der Reihe nach X Stück die gleiche Textur haben, oder soll es durcheinander sein?
    Es soll durcheinander sein :=)


    Danke dir!

  • So bekommt jedes Objekt eine zufällige Textur zugewiesen:
    if (strcmp("/event2", cmdtext, true, 10) == 0)
    {
    new rand;
    for(new i=0; i<sizeof(Objekte); i++)
    {
    rand = random(sizeof(RandomTexture));
    SetObjectMaterial(CreateObject(Objekte[i][id],Objekte[i][x],Objekte[i][y],Objekte[i][z],0.00000, 90.00000, 90.00000), RandomTexture[rand][index],RandomTexture[rand][modelid],RandomTexture[rand][txdname],RandomTexture[rand][texturename]);
    }
    return 1;
    }