MapBuyableObject

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hier gibt es ein TUT wie man die kaufbaren Objekte in eine Map einbaut.




    Map Buyable Object.



    Skript: Bluebaby210
    Layout:
    Desperados93

    Hier gibt es ein kleines TUT wie man die MapBuyableObject in eine Map einbaut, bzw wie man Objekte richtig einstellt damit man sie später in Game kaufen/verkaufen kann.

    Hier gibt es die benötigte Zip, die ihr nur in den ModsOrdner kopieren müsst:
    [MP] Map Buyable Object - Webdisk - modPortal


    Trigger zum Mapeinbau gibt es hier: Sample MapBuyableObject - Webdisk - modPortal

    Bei Fragen und Problemen bitte hier posten: [MP] Map Buyable Object - [LS13] Released modPortal-Mods Feedback - modPortal


    Importiert euch am besten das buyable_Sample in eure Map, dann habt ihr schonmal die Attribute und richtigen onCreate aufrufe. Im Grunde kann man alles zum kaufen/verkaufen machen was man will. Der Fantasie sind hier wohl keine Grenzen gesetzt, zumindest habe ich beim Testen keine Grenzen gefunden was nicht machbar ist. Es kommt immer drauf an wie man es einbaut. Da alles über Indexe geregelt ist, kann den Einbau beliebig gestalten.
    Im buyable_Sample findet ihr das shape buyableObject, was den Trigger darstellt, darin dann unterschiedliche TGs, diese dienen nur als kleine Vorgabe auch um euch am Beispiel leichter zu erklären wie man etwas einbaut. Bzw wenn ihr euch beim Einbau an den TGs orientiert, so habe ich es leichter euch bei eventuellem Support zu helfen, wenn es zu Fehlern kommen sollte.
    Bei einfachen Projekten reicht immer nur eine Indexangabe, den Rest macht das Skript automatisch. Bei komplexeren Projekten muss man unter Umständen auch mal mehrere Index angeben.

    Funktionen:





    • Kann Objekte "verkaufen", oder gleichzeitig "kaufen". Auch ein einzelner Einbau ist Möglich, nur etwas kaufen/verkaufen.
    • Trigger kaufen/verkaufen, mit aktualisierung des PDAs, wenn es sich um Verkaufstationen handelt, Namen und Preise werden angepasst.
    • Erlaubt das erstellen eines neuen Karriere Start Punktes (erst aktiv nachdem gekauft und gespeichert bzw neugeladen wurde), beispielsweise wenn man einen neuen Hof kaufen kann, der an einer anderen Stelle ist wie der alte.
    • Erlaubt es neue Zurücksetzpunkte für Fahrzeuge zu erstellen, auch neue Händlerplätze könnne erstellt werden, beispielsweise zum Karriere Start gar keine Händlerplätze auf der Map.
    • Texte und Preise werden in einer XML erstellt, die XML muss in der Map.zip sein.
    • Preise können auch negative sein, also werden dem "käufer" gutgeschrieben, z.B wenn man seinen "alten Hof" verkaufen will.
    • Stündliches Einkommen kann eingebaut werden, auch ein stündlicher Abzug ist möglich, z.B für die "Pacht" eines Hofes.
    • Erlaubt es Objekte nach de Kauf rotieren zu lassen, Beispiel fest eingebaute Windräder in einer Map, diese drehen nach dem Kauf. Achse, Drehrichtung und Speed frei einstellbar.
    • Objekte können nicht nur gekauft/verkauft werden, auch ein versetzen von A nach B ist möglich.
    • Vorschau Modus auf ein neues Objekt, man kauft die Katze ja nicht im Sack... ;)
    • Sounds beim Kaufen, 3 feste stehen zur Auswahl, sowie ein freier Sound den ihr in eure Map einfügen könnt.




    Kleines Einbaubeispiel:
    Nach dem Import des buyable_sample habt ihr folgendes im Scenegraph stehen:



    buyableObject: Alle Attribute und der OnCreate Aufruf. Hier werden die Indexe und Einstellungen gemacht.
    --IconJumping: Hier wird er Icon hinterher in Game sichtbar, der Unterpunkt "DoNotDelete_forPositioning_Icon" dient dabei zur Orientierung wo der Icon ist, die TG kann bei 0 0 0 stehen bleiben.
    --Buy_Objects_in_TG:Hier könnt ihr eure Objekte zum Kauf reinkopieren, Alles was Static ist, Häuser Hallen usw. Die Objekte müssen so sitzen das sie nicht in den Trigger reinrangen.
    --Delete_Objects_in_TG:Hier könnt ihr eure Objekte zum Verkauf reinkopieren, Alles was Static ist, Häuser Hallen usw. Die Objekte müssen so sitzen das sie nicht in den Trigger reinrangen.
    --Buy_Triggers: Hier könnt ihr die Trigger reinkopieren, die erst nach dem Kauf eines Objektes genutzt werden können, neue Verkaufstrigger, oder auch z:b der Farm Trigger zum einlagern.
    --Delete_Triggers: Hier könnt ihr die Trigger reinkopieren, die beim Kauf eines Objektes "deaktiviert" werden sollen, z.B bei neuen Verkaufsstellen, die alten Verkaufstrigger.
    --Translate_Objects: Hier könnt ihr Objekte reinkopieren die beim Kauf eines Objektes von A nach B gesetzt werden sollen.Dient dazu um gleiche Objekte nicht doppelt in die Map zu bauen.
    --NewCarrerStartPoint: Wenn ihr einen Neuen Karriere Start nutzen wollt, nachdem die User ein Objekt gekauft haben. Der Würfel "DoNotDelete..." dient auch hier zur Platzierung.

    Kommen wir nun zu den Attributen im buybaleObject, dort wo ihr alles einstellen müsst:



    Buy_Objects, Delete_Objects, Buy_Triggers, Delete_Triggers, New_Carrer_Start, Translate_Objects:
    Hier gebt ihr die Indexe an, zur jeweiligen TG in der die Objekte sind. Nur den Index zur TG, also für Buy_Objects z.B die 1, für Delete_Objects die 2, Buy_Triggers die 3 und Delete_Triggers die 4.
    Die Objekt kopiert ihr dann einfach in die jeweilige TG und gebt den Index an. Es können auch Objekt mit vielen Unterobjekten eingebaut werden. Es wird bis zur 9.Ebene ausgelesen:



    Ich denke, das sollte für alle Objekte reichen. Zur Not müsst ihr hier eure Objeke etwas umbauen, so das sie nicht noch "tiefer" gehen. Um das Objekt aus dem Beispiel auszulesen, ist nur der Index zur TG Buy_Objects_in_TG notwendig, also die 1.
    Es können auch beliebig viele Objekte in die TG eingefügt werden, da ist es egal, ob dort ein Objekt drin ist, oder ob ihr 20 drin habt. Wichtig ist nur das es nicht tiefer wie 9 Ebenen geht.
    Bei den Delete_Objects und en Triggern ist es genau das gleiche.

    Einzig bei Translate_Objects, müsst ihr den Index zu jedem Objekt angeben. Dies hat den Grund, das ihr bei jedem Objekt was versetzt werden soll, die neue Position als Attribute anlegen müsst. Später mehr dazu an einem Beispiel.

    Die Attribute: Buy_Triggers_Auto und Delete_Triggers_Auto:
    Diese sind für Trigger, bei komplexen Projekten muss man die Indexe zu den Triggern einzeln angeben, dann wird nur der direkte Index genommen. Für normale Projekte sollte der haken drin bleiben, damit ihr nicht 4 Index angeben müsst um einen Silo Trigger zu kaufen.

    NewResetPlaces und NewStorePlaces:
    Wenn bei diesem Objekt neue Händler Plätze und Zurücksetz Plätze aktiviert werden sollen, muss hier ein Haken rein.
    Number_new_ResetPlaces undNumber_new_StorePlaces:
    Hier kommt die Anzahl der neuen Plätze rein.
    Wichtig beim Einbau der neuen Store/Reset Places ist folgendes. Die neuen Plätze brauchen nicht ins buyableObject kopiert werden, können ganz normal unter den normalen erstellt werden. Also anstatt (wie Standart Map) 3 Plätze wollt ihr 6 haben, 3 beim KarriereStart und 3 neue. nach dem kauf eines Objektes. Dann dupliziert ihr einfach die orginalen 3 Plätze und verschiebt sie dahin wo ihr sie haben wollt. Dann gebt ihr die Nummer an, und einen haken rein, Speichern.
    Hier müsst ihr auch testen, welche Places beim KarriereStart aktiv sind, als neue werden vom Skript die letzten erkannt. Also kann es sein, das es bei euch nun erstmal andersrum ist, bei Karrierestart sind eure neuen aktiv und nach dem Kauf, die alten. Dann braucht ihr nur die neuen exportieren, speichern und neu importieren oder ihr ändert in der i3d die ID der 3 neuen. Die alten müssen kleinere IDs haben wie die neuen. Dann geht alles, etwas umständlich, aber besser wie die StorePlaces komplett per Skript zu erstellen.

    Object_Ident_Icon:
    Identifiziert den Icon der zum Objekt gehört. Am besten immer fortlaufend nummerieren. Die nummer muss auch in der TG Icon_Jumping eingefügt werden.

    In der TG Icon_Jumping könnt ihr nun noch einstellen ob der Icon springen soll, drehen soll, oder beides. Oder ob er nur still steht.

    PreviewSound und PreviewTime:
    Sound ist fest belegt und wird solange gespielt wie die Vorschau aktiv ist.
    Die Zeit kann eingestellt werden, zählt in Sekunden, kann um Missbrauch vorzubeugen, nicht länger wie 30 Sekunden sein, und muss 5 Sekunden länge haben. Kleiner bzw größere werte werden ignoriert und die Zeit auf 10 Sekunden gesetzt.

    Sound_Allowed:
    Wenn beim Kauf eines Objektes ein Sound gespielt werden soll. Dann muss hier der Haken rein.
    Sound_is_01, _02, _03:
    3 festbelegte Sounds die im Skript sind, einfach mal testen welchen ihr davon nehmen wollt.
    Sound_File:
    Hier kann ein eigener Sound angegeben werden, der Sound muss dann in eurer Map sein und der Pfad zum Sound hier eingetragen werden, der Sound wird immerhalb der Map angegeben,, Beispiel: map/sounds/meinNeuerSound.wav

    TextName:
    Identifiziert das Objekt, bzw liest mit dem Namen den Text aus der XML aus. In meinem Beispiel lautet der TextName: MapBuyableObjects01 und spiegelt sich nachher auch in der XML wieder.

    xmlFilePath:
    Ist der Pfad zur xml wo die Texte, Preise usw festgelegt sind. Die XML muss in eurer Map sein, der Pfad wird ebenfalls auch nur innerhalb der Map angegeben, Beispiel: map/buyable/buyableHelpText.xml



    Weiter gehts an einem Beispiel mit der XML Datei

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8" standalone="no" ?>
    2. <MapBuyableObjects>
    3. <MapBuyableObject01>
    4. <price_Object price = "38500" maximalMinus = "-10000"/>
    5. <de Headline ="Ausbau des Hofes" fontSize = "0.05" headlinePositionHeight = "0.75" headlinePositionFromLeft = "0.32">
    6. <description textFontSize = "0.025" textPositionHeight = "0.55" textPositionFromLeft = "0.35"/>
    7. <line description = "Wollen sie den im ersten Schritt gekauften"/>
    8. <line description = "Unterstand wieder abrreißen um hier Unterstände"/>
    9. <line description = "für größere und mehr Maschinen bauen zu lassen?"/>
    10. <line description = "Auch die gepflasterte Fläche würde wieder weg-"/>
    11. <line description = "gerissen werden und eine größere Fläche"/>
    12. <line description = "entsprechend um die neuen Unterstände gepflastert."/>
    13. <line description = " "/>
    14. <line description = " "/>
    15. <line description = "Da sich die Zeiten ändern, auch die Gesetze,"/>
    16. <line description = "müsste das alte Pflaster entsorgt werden."/>
    17. <line description = "Alles in allem rechnen wir mit Kosten um die"/>
    18. <line description = "35000€ für den Umbau.Die Rechnung kann sich im"/>
    19. <line description = "Entbetrag aber im Rahmen von 10% nach oben bzw."/>
    20. <line description = "unten bewegen."/>
    21. </de>
    22. <fr Headline ="Storage" fontSize = "0.02" textPositionHeight = "0.5" PositionFromRight = "0.15">
    23. <description textFontSize = "0.03" textPositionHeight = "0.5" textPositionFromLeft = "0.15"/>
    24. <line description = "Franzoesisch: Youn want to buy this storage"/>
    25. </fr>
    26. <en Headline ="Storage"fontSize = "0.02" textPositionHeight = "0.5" PositionFromRight = "0.15">
    27. <description textFontSize = "0.03" textPositionHeight = "0.5" textPositionFromLeft = "0.15"/>
    28. <line description = "Englisch: Youn want to buy this storage"/>
    29. </en>
    30. </MapBuyableObject01>
    31. </MapBuyableObjects>
    Alles anzeigen


    Dieser Text hat folgende Wirkung hinterher in Game:


    Also Schritt für Schritt...

    XML-Quellcode

    1. <MapBuyableObjects>

    Ist der Eintrag in dem ALLE MapBuyableObjects eingestellt werden.

    XML-Quellcode

    1. <MapBuyableObject01>

    Ist der im 1.Beitrag erwähnte Text zur identifizierung des Objektes. TextName:, die Namen sind hierbei wollkommen egal, könnt ihr auch Objekt bezogene nehmen, z:B Hof, Strasse; Windräder, Hallen, Stall, wie ihr wollt, ihr könnt auch eure Bankpinnummer als Namen nehmen, 8746... es ist egal. Wichtig ist nur, das beide Namen gleich sind, also in der i3d und in der XML. Ich habe sie immer durchnummeriert, so behält man einen schnelleren Überblick.

    XML-Quellcode

    1. <price_Object price = "38500" maximalMinus = "-10000"/>

    Diese Zeile ist für alle Sprachen gültig. Und enthält den Preis des Objektes und das Maximale Minus, was das Konto nach dem Kauf haben darf. Heißt, soll der User nach dem Kauf noch 10000€ auf dem Konto haben, so muss man hier ein 48500 eintragen. Ich denke der Sinn ist klar, braucht man nicht viel zu erklären.

    XML-Quellcode

    1. <de Headline ="Ausbau des Hofes" fontSize = "0.05" headlinePositionFromLeft = "0.32">

    Erster Sprachbezogener Eintrag. Überschrift des Objektes, bzw was Ingame zwischen den 2 Linien stehen soll. Hierbei kann man dann schon etwas einstellen, nämlich die Schriftgröße (fontSize) sowie die Position innerhalb des Layouts (headlinePositionFromLeft), dient vorallem dazu um euch die Möglichkeit zu geben, die Überschrift mittig zu platzieren. Standart wert ist hier 0.415. Dieser Eintrag muss dann für jede Sprache gamcht werden, also die komplette Zeile. Ihr müsst nix anpassen, könnt dies aber gerne tun um auch anderen Spielern aus anderen Ländern eine schöne Beschreibung zu präsentieren.

    XML-Quellcode

    1. <description textFontSize = "0.025" textPositionHeight = "0.55" textPositionFromLeft = "0.35"/>

    Hier ist die Schrift der Beschreibung festgelegt, also die Größe(textFontSize) sowie die Positionen, einmal die Höhe, also wo der Text anfängt (textPositionHeight) und wie weit der Text von Links her eingerückt ist (textPositionFromLeft), dies ist besonders für lange Beschreibungen von Vorteil, hier kann man kleinere schriftgrößen nutzen und den Text weiter nach links rücken um alles aufs Layout zu bekommen.

    XML-Quellcode

    1. <line description = "Wollen sie diesen kleinen Unterstand abreißen"/>

    Logisch was das ist, die Beschreibung, Zeile für Zeile. Je mehr ihr in eine Zeile schreibt, desto länger ist sie auch, hier seit ihr gefordert eure Texte so zu schreiben das alles im Layout zu sehen ist und nicht die Hälfte neben dem "Blatt" steht. Hier kann man dann die Werte der description Zeile gut nutzen um alles schön in Form zu bringen.
    Weitere Zeilen werden einfach kopiert und eingefügt, keine Nummerierung der Zeilen notwendig. Leerzeilen werden einfach mit einem Leerzeichen zwischen den "" erstellt. siehe Zeilen 7 und 8.

    Das ganze war es dann auch schon fast. Ihr könnt in der XML 11 verschiedene Sprachen einstellen, die da wären:
    de, fr, en, jp, pl, cz, es, ru, it, pt und cn.
    EN sollte immer genommen werden, denn wenn die Sprache nicht vorhanden ist, also z.B spielt ein User aus Russland eure Map, ihr habt aber den RU Text nicht angelegt, dann wird in diesem Fal der EN Text genommen.

    Weiter Objekte werden einfach unter den Eintrag:

    XML-Quellcode

    1. </MapBuyableObject01>

    drunterkopiert, also immer zwischen:

    XML-Quellcode

    1. <MapBuyableObjects>
    2. </MapBuyableObjects>


    Da ihr auch ein stündliches Einkommen einbauen könnt, also jemand kauft ein Objekt und hat nun ein Einkommen, kann man z.B nutzen, wenn man als Objekt die Häuser im Dorf einbaut, das der User sein Geld in Immobilien anlegen kann, kauft er die Häuser so hat er ein stündliches einkommen. Es kann auch abgezogen werden, beispielsweise als Pachtgebühr.
    Der Eintrag sieht dann wie folgt aus:

    XML-Quellcode

    1. hourIncome = "1000"

    und wird in die price Zeile eingebaut:

    XML-Quellcode

    1. <price_Object price = "2000" maximalMinus = "-10000" hourIncome = "1000"/>



    UPS, der MasterTrigger, den habe ich ganz vergessen, sowie das SearchBuyableObjectsSkript.
    MasterTrigger:
    Wir einfach in die Map importiert, Trigger geht über die komplette Map. Also braucht er nicht angepasst oder verschoben werden. Dieser Trigger hat folgende Funktion. Einmal zum KarriereStart hat der Spieler die Chance sich zu entscheiden, bzw er MUSS sich entscheiden. Ist er eine Lusche oder ein harter Arbeiter, will er ohne zukaufbare Objekte spielen oder nimmt der die Herausforderung an. Die Player ist festgesetzt solange man sich nicht entschieden hat.
    Will man ohne zukaufbare Objekte spielen, so werden alle Objekte freigeschaltet, ohne Geldabzug. Aber mit dem Einkommen, falls sie das haben.

    SearchBuyableObjectsSkript:
    Wird über die Moddesc eingebunden, dieses Skript sucht nach der MapBuyableObject.zip im Mods Ordner. Ist diese vorhanden so passiert nix. Fehlt diese zip, so bekommt der User eine Warnmeldung angezeigt das er die zip nicht im Mods Ordner hat.
    Beide Dinge (MAsterTrigger SearchBuyableObjectsSkript) können aber müssen nicht eingebaut werden.
    Die angehängte zip einfach entpacken und die lua in eure Map kopieren und in der Moddesc wie beschrieben einbauen.


    Nachtrag zu
    Translate_Objects:

    Wie im ersten Post erwähnt muss bei TranslateObjects, jeder Index einzeln angegeben werden, zudem benötigt man ein neues UserAttribute, welcher die neuen Werte enthält, sprich die Werte wohin das Object gesetzt werden soll.
    Beispiel, wir haben eine Halle die nach dem Kauf eines großeren Stalls um XXmeter versetzt werden soll, zudem soll die Halle auch um 90 Grad gedreht werden.
    Nun macht ihr folgendes, ihr kopiert diese Halle bei dem zukaufenden Stall (welcher das buyable_Object ist) in die TG Translate_Object, gebt den Index zur Halle ganz normal an. Die Halle posititioniert ihr nun an der Stell wo sie nach dem Kauf stehen soll, also z.B auf der Translation 100 150 100 und in der Rotation 0 0 0, dann klickt ihr die Halle an und fügt der Halle 2 Attribute hinzu:

    Quellcode

    1. <UserAttribute nodeId="XXX">
    2. <Attribute name="Rotation" type="string" value="0 0 0"/>
    3. <Attribute name="Translation" type="string" value="100 150 100"/>
    4. </UserAttribute>

    Die Werte beziehen sich auf die Translation und Rotation Position des Objektes nach dem Kauf, und können einfach aus den Attributen kopiert werden also Translation X Y Z und Rotation X Y Z.
    Dann verschiebt ihr die Halle an die Stelle wo sie bis zum Kauf stehen kann/soll.



    Das ganez ist z.B in der Vogelsberg map bei den Windrädern mit dem Sound gemacht. Dieser muss nach dem Kauf der Windräder oben am Rotor sein, also Translation 0 0 0 und Rotaation 0 0 0, diese Attribute wurden dem Sound hinzugefügt und dann würde er einfach unter das Terrain gezogen, so das man ihn nicht hört wenn die Windräder noch nicht gekauft sind. Nach dem Kauf wird der Sound auf 0 0 0 und 0 0 0 gesetzt und ist somit zu hören.




    Dann können wir noch Animationen spielen, siehe Windräder in der Vogelsberg mao, diese Drehanimation läuft mit den MapBuyableObjects. Diese animation wird ebenfalls erst nach dem Kauf eines Objektes abgespielt.
    Dazu baut man das Objekt ganz normal ein, gibt den Index zum Kaufenden Objekt an, dann klickt man direkt das Objekt an was sich drehen soll, hier also den Rotor. Natürlich den RigidBody rausnehmen. Dann neue Attribute beim Rotor anlegen:

    Quellcode

    1. <UserAttribute nodeId="XXX">
    2. <Attribute name="RotateX" type="float" value="0"/>
    3. <Attribute name="RotateY" type="float" value="0"/>
    4. <Attribute name="RotateZ" type="float" value="-0.0025"/>
    5. </UserAttribute>

    Bei den Werten kann man mit einem - die Drehrichtung ändern. Mit dem Speed müsst ihr selber mal testen wie es dann bei euch aussieht. Die -0.0025 sind die Werte die bei den Windrädern den Speed vorgeben. Es kann auf allen 3 Achsen Rotiert werden.

    Speichern und fertig.


    Bei Fragen und Problemen bitte hier posten: Sample MapBuyableObject - [LS13] Released modPortal-Mods Feedback - modPortal
    Dateien

    8.471 mal gelesen