Beiträge von Manniac

    Oha, so weit hab ich gar nicht gedacht. Ist natürlich auch eine Möglichkeit.

    @Rocky: Das ist auch eine Variante, aber mir wäre das viel zu unübersichtlich.

    Sieht sehr nach c&p aus, sonst ist aber ziemlich nützlich! 9/10

    :huh: Ich habe das selbst geschrieben. Ich wüsste nicht, wo es ich es kopiert haben soll.


    Kann man die Objekte nicht einfach über die Datenbank erstellen lassen, oder würde dies zu Komplikationen kommen?
    Würde da die Datenbank überhaupt mitspielen, oder würde diese abstürzen?

    Klar, kann da gerne noch einen extra Absatz machen, der das ganze genau erklärt.

    Guten Abend,


    aufgrund eines Threads möchte ich nun eine gute und angenehme Technik erklären, mit der man Platzsparend und in weniger als 5 Minuten viele Objekte mit Texturen versehen kann.


    Schritt 1: Enum


    enum walls
    {


    }
    Aber warum? Es ist - einfach gesagt - eine große Box mit vielen kleinen Schubladen. Diese Schubladen werden wir später mit Daten füllen. ( Viele kennen das ja aus den Login & Registersystemen)


    Nun müssen wir neue Schubladen anlegen. Dazu überlegen wir nochmal, was wir wollen. Wir wollen ein Objekt erstellen. Deswegen schauen wir uns die Parameter von "CreateDynamicObject" an.
    Diese sind:


    Model - Modelid des Objektes


    X, Y & Z - Koordinaten des Objektes


    Rx, Ry & Rz - Rotation des Objektes


    World - ID der Welt ( default : -1 )


    Interior - Interiorid ( default : -1 )


    playerid - Playrid ( default : -1 )


    Streamdistance - Wann das Objekt streamt


    Drawdistance


    Wir füllen also die Box mit den Schubladen
    enum wall
    {
    mod, //modelid
    Float:x, //x achse
    Float:y, //y achse
    Float:z, // z achse
    Float:rx, // rotation auf der x achse
    Float:ry, // rotation auf der y achse
    Float:rz, // rotation auf der z achse
    world, // welt
    inter, // interior
    player, // player
    streamd, //streamdistance
    drawd //drawdistance
    }


    Schritt 2: Daten



    Die Box ist nun fertig. Nun ist es an der Zeit, diese zu füllen.
    Dies geschieht mit
    static const NAME[][NAME_DES_ENUMS] = {


    };



    Warum const? constbedeutet, dass die Daten immer gleich bleiben. Beispiel:
    const variable = 5;
    variable = 4;
    //Error! Ich darf "variable" nicht ändern


    A static variable is like a global new variable but with a more limited scope. When static is used globally the resulting created variables are limited to only the section in which they were created (see #section). So taking the earlier "new" example: - Wiki
    Das heißt, Variablen, die mit static deklariert werden, sind nur auf lokaler Ebene "sichtbar". Sie sind also für andere Script unsichtbar.


    Die Formatierung ist folgendermaßen


    static const NAME[][NAME_DES_ENUMS] = {
    {model..},
    {model..}
    };


    Schritt 3: Konvertieren



    Pro-Tipp:
    Zum konvertieren der MapDaten, empfiehlt sich http://convertffs.com/
    Hier kann man sein eigenes Format angeben. ( Change - add custom Format )
    In unserem Fall brauchen wir {{model},{x},{y},{z},{rx},{ry},{rz},-1,-1,-1,200,-1},


    Wenn wir also unserer Objekte konvertiert haben, können wir sie einsetzen.
    static const wall_obj[][wall] = { // WÄNDE
    {19446,219.6636000,1834.9028300,10003.3134800,0.0000000,0.0000000,0.0000000,-1,-1,-1,200,0},
    {..},
    {..} // <- letzter Eintrag hat kein Komma!


    };


    Nun haben wir die Schublade mit Informationen gefüllt, die wir zum erstellen brauchen.


    Schritt 4: Laden


    Jetzt erstellen wir die Objekte.
    Dazu gehen wir zu OnGameModeInit und erstellen eine Schleife, die die Daten der einzelnen Schubladen durchgeht.


    new g;
    for(;g< sizeof(wall_obj);g++)
    {
    CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
    wall_obj[g][streamd],wall_obj[g][drawd]);
    }


    Die Objekte werden nur erstellt. Nun wollen wir diese noch mit einer Textur versehen


    Dafür verwenden wir SetDynamicObjectMaterial


    Pro-Tipp: http://textures.future-elife.com/?page=textures . Hier suche ich meine Texturen. Super Seite mit vorgefertigtem Code.


    Ich mache das dann immer folgendermaßen.
    new g;
    for(;g< sizeof(wall_obj);g++)
    {
    // SetObjectMaterial(CreateObject(...), 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF); <- Ich kopiere also den Code von der Website.
    CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
    wall_obj[g][streamd],wall_obj[g][drawd]);
    }


    Nun schreibe ich vor CreateDynamicObject SetDynamicObjectMaterial(
    for(;g< sizeof(wall_obj);g++)
    {
    // SetObjectMaterial(CreateObject(...), 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF); <- Ich kopiere also den Code von der Website.
    SetDynamicObjectMaterial(CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
    wall_obj[g][streamd],wall_obj[g][drawd]);
    }


    Jetzt setze ich hinter die letzte rechteckige Klammer ein Komma "," und kopiere den Rest des Codes der Website. 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF);
    for(;g< sizeof(wall_obj);g++)
    {
    // SetObjectMaterial(CreateObject(...), 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF); <- Ich kopiere also den Code von der Website.
    CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
    wall_obj[g][streamd],wall_obj[g][drawd]), 0, 18202, "w_towncs_t", "hatwall256hi", 0xFFFFFFFF);
    }


    Fertig. Die Objekte sind nun fertig texturiert.


    Mit dieser Technik sparen wir uns sehr viel Arbeit und Mühe.


    Grüße, Raven.

    Ich wollte ihm nur einen Code zeigen, mit welchem er das machen könnte Wenn er in ein paar Monaten nochmal das selbe Problem hat, kann er ja - sofern er fortgeschrittener ist - den Code als Beispiel verwenden

    Es geht aber auch einfacher.


    Aus meinem Script bzw Map.pwn
    enum wall // WÄNDE
    {
    mod,
    Float:x,
    Float:y,
    Float:z,
    Float:rx,
    Float:ry,
    Float:rz,
    world,
    inter,
    player,
    streamd,
    drawd
    }


    static const wall_obj[][wall] = { // WÄNDE
    {19446,219.6636000,1834.9028300,10003.3134800,0.0000000,0.0000000,0.0000000,-1,-1,-1,200,0},
    {..},
    {..},
    {19427,213.7154100,1811.0428500,10003.3134800,0.0000000,0.0000000,0.0000000,-1,-1,-1,200,0} // <- letzter eintag darf kein "," haben


    };
    Unter OnGameModeInit
    new g;
    for(;g< sizeof(wall_obj);g++)
    {
    SetDynamicObjectMaterial(CreateDynamicObject(wall_obj[g][mod],wall_obj[g][x],wall_obj[g][y],wall_obj[g][z],wall_obj[g][rx],wall_obj[g][ry],wall_obj[g][rz],wall_obj[g][world],wall_obj[g][inter],wall_obj[g][player],
    wall_obj[g][streamd],wall_obj[g][drawd]),0, 8839, "vgsecarshow", "sw_wallbrick_06", 0xFFFFFFFF); //Objekt & Textur werden erstellt. So spart man sich viele viele Zeilen
    }

    Kleiner Tipp noch, weil ich das gerade sehe.


    Ich würde dir empfehlen, das Laden sowie das Speichern noch umzuschreiben. Bei vielen Daten zieht das ne' Menge an Ressourcen. Und das kann zu laggs führen. Man öffnet ja auch nicht jedes mal aufs Neue den Kühlschrank, wenn man 10 Sachen rausholen will.


    -Nur als Hinweis für später.


    /Edit.


    Wenn NUR der Projektleiter den Command ausführen soll, musst du einfach die Variable aus dem Array nehmen.
    if(SpielerInfo[playerid][pAdmin] != Level_für_PLeiter)return Send..(.."du bist kein Projektleiter");

    Guten Abend,


    ich arbeite seit gestern Abend/Nacht an eine Map, mit der ich fast fertig bin. Ursprünglich sollte es ein Irish Pub werden, allerdings ist das eher eine Bar mit Bühne geworden. Die Map ist eigentlich soweit fertig, ein paar kleine Details (Tischdeko etc) müssen noch hinzugefügt werden.


    ( Die Bilder sind etwas verzerrt, liegt an dem Firstpersonmod )












    Konstruktive Kritik erwünscht.


    Grüße, Raven.

    Textdraw2 = TextDrawCreate(542.000000, 392.000000, ".");
    TextDrawBackgroundColor(Textdraw2, 255);
    TextDrawFont(Textdraw2, 1);
    TextDrawLetterSize(Textdraw2, 9.249999, 1.000000);
    TextDrawColor(Textdraw2, -1);
    TextDrawSetOutline(Textdraw2, 0);
    TextDrawSetProportional(Textdraw2, 1);
    TextDrawSetShadow(Textdraw2, 1);


    Ist einfach ein Punkt, der in die Länge gezogen ist. ^ Da hat man dann diese abrundungen

    Warum nur die? Was macht denn "trusted" aus?

    Es gibt sicherlich auch andere Mittelsmänner, welchen man vertrauen kann & die keine Teammitglieder sind. Im Allgemeinen sind die Teammitglieder jedoch vertrauenswürdiger als ein dahergelaufener User mit 0 Bewertungen.


    Wenn du eh keine Ahnung hast, wieso schreibst du es dann überhaupt?

    Sorry, dass ich keine juristische Ausbildung habe. Es ist ein Tipp. Tipps sind dazu da, um anderen zu helfen.



    Deine Möglichkeit C. ist ja ganz toll... Wer die wählt kann sich sämtliche Ratschläge hier eh sonst wohin schmieren!

    Ich habe selber noch keine Transaktion durchgeführt. Deswegen lasse ich die Option offen. A & B sind die wohl die meist genutzten Methoden.

    Alles in allem ist dein Thread hier alles andere als hilfreich!


    Immer noch besser, als nichts zu tun.

    wurde hier bereits in mehreren Themen berichtet.

    Und? Es ist besser, wenn alles zusammengeschrieben ist. Keiner hat Lust, 1 691 089 Beiträge durchzulesen, um genau diesen Tipp zu bekommen.