Zufällige Textur Auswahl

Willkommen in der OMSI-WebDisk!
Als Gast kannst du nur Inhalte in deiner ausgewählten Sprache sehen. Registrierte Nutzer können die Sichtbarkeit anderer Sprachen in ihrem Kontrollzentrum aktivieren, weitere Infos hier.
Alle Themen sind in den Foren mit einer Sprachflagge gekennzeichnet: = Englisch [EN], = Deutsch [DE], = Französisch [FR]. Wenn du die angegebene Sprache nicht beherrschst, schreibe auf Englisch!
  • Moin, ich habe ein Haltestellenhaus gebaut und würde nun gerne verschiedene Werbungen in der vorgesehenen Fläche anzeigen lassen.

    Leider habe ich keinen Plan wie genau ich das machen muss und wollte hier fragen ob mir da jemand weiter helfen kann.




    Ich bedanke mich schonmal im Voraus.

  • Moin, im Prinzip kannst du da genau so vorgehen, wie bei Bussen mit Repaints. Das funktioniert vom Prinzip bei Objekten genau so, nur dass halt beim laden des Objektes ein zufälliges Repaint gewählt werden muss. Das ist mit einem Script einfach umsetzbar.


    Zunächst brauchst du natürlich alle Werbungen, die du hast als Texturen, die du dir mit verschiedenen Namen (am besten durchnummeriert) im Texturordner abspeicherst.

    Dann brauchst du auch - genau, wie bei Fahrzeugen eine cti-Datei, die alle Werbungen enthält:


    Code
    [item]
    Name der Werbung (ist eigentlich hier egal, kannste einfach irgendwas eintragen, muss nur bei jeder Werbung anders heißen)
    farbschema (Name der Change-Textur, s.u.)
    deineTextur.dds


    Damit das auch verwendet wird, musst du dann in der sco noch die ChangeTextures definieren.

    Außerdem musst du Scripts einbinden

    Die oben eingebundenen Script-Dateien musst du natürlich noch anlegen und mit Inhalt füllen.

    In der Varlist wird die Variable für die Wechseltextur eingetragen, womit du das anzuzeigende "Repaint" festlegen kannst

    Code: werbung_varlist.txt
    Werbung

    Im Script trägst du dann einen Init-bereich ein, in dem der Variable "Werbung" ein zufälliger Wert zugewiesen wird.

    Die Zahl, die dort steht (hier 8) musst du ggf. so anpassen, dass sie der Anzahl der existierenden Werbungen entspricht.

    Der Frame-Bereich wird nicht benötigt, bleibt daher leer, ich würde ihn dennoch sicherheitshalber immer definieren und halt nur leer lassen.

    Code: werbung.osc
    {init}
        8 random (S.L.Werbung)
    {end}
    {frame}{end}

    Ich hoffe, dieses kleine "Tutorial" ist verständlich.

  • [...] im Prinzip kannst du da genau so vorgehen, wie bei Bussen mit Repaints.

    Kurz gesagt - ja :)


    Wenn du das Skript, was ma7t3 oben erklärt hat im {init}-Bereich einträgst, dann wird beim Laden des Busses eine zufällige der Texturen ausgewählt. Im {frame}-Bereich widerrum würde der Bus die Textur in jedem Frame des laufenden Spiels wechseln. Dabei kannst du z. B. einen Timer einbauen.

  • [...] im Prinzip kannst du da genau so vorgehen, wie bei Bussen mit Repaints.

    Kurz gesagt - ja :)


    Wenn du das Skript, was ma7t3 oben erklärt hat im {init}-Bereich einträgst, dann wird beim Laden des Busses eine zufällige der Texturen ausgewählt. Im {frame}-Bereich widerrum würde der Bus die Textur in jedem Frame des laufenden Spiels wechseln. Dabei kannst du z. B. einen Timer einbauen.


    Grundsätzlich korrekt, allerdings sollte man natürlich beachten: Jeder Bus hat ja schon quasi ein "normales" Repaint, was man ganz regulär bei der Busauswahl mit auswählt.

    Fügt man nun einfach neue Einträge hinzu, würde das dazu führen, dass alle Werbungen (z.B. in der Werbetafel im Bus oder wo auch immer) ebenfalls als reguläre Bus-Repaints angezeigt würden.

    Ein Timer würde dann auch alle regulären Repaints zufällig mit umschalten, was vermutlich nicht gewollt ist. ^^


    Allerdings habe ich kürzlich herausgefunden, dass OMSI scheinbar kein Problem damit hat, wenn ein Objekt (bei Bussen gehe ich mal auch davon aus) mehrere Repaints gleichzeitig besitzt, indem man einfach mehrere [CTC]-Befehle verwendet.


    Müsste man aber mal ausprobieren, wonach sich OMSI richtet, welches Repaint für die Auswahl im Bus-Menü verwendet wird, vielleicht einfach das erste?


    Hier nochmal der Ausschnitt, bei mir handelt es sich hier um ein Wartehäuschen mit Werbung, jedoch besitzt es zwei Werbeflächen, die unabhängig voneinander "geschaltet" werden sollen. Daher gibt es zwei seperate Repaint-Einträge, welche jedoch in diesem Fall auf den gleichen Ordner und somit auf eine gemeinsame "Repaintsammlung" zugreifen. Könnte man aber natürlich auch anders machen. Aber so können beide Werbeflächen unabhängig voneinander verschiedene Werbungen zeigen.

    (Objekt ist ursprünglich von IREgio612 - mit Erlaubnis von mir modifiziert)


    Hier im Script gibt es dann halt einfach zwei verschiedene Variablen für beide Repaints, die beide nacheinander mit verschiedenen Zufallswerten initialisiert werden.

    Code: Scriptdatei
    {init}
        16 random (S.L.WerbungIndex1)
        16 random (S.L.WerbungIndex2)
    {end}


    Ich hoffe, das hilft weiter. :)


    wie baue ich so nen Timer ein?

    Auch, wenn's schon etwas offtopic ist: Ein Timer im Script dient im Prinzip dazu, die ganze Zeit mitzuzählen, wie lange etwas dauert, um irgendetwas in einem bestimmten Interval (jedoch nicht in jedem Frame) auszuführen, wie bspw. den Wechsel einer Textur oder was auch immer. Dazu brauchst du eine "Zählvariable" hier "Timer" genannt, die du natürlich in einer Varlist zunächst definieren musst.

    Dein Script sieht dann ungefähr so aus:



  • Moin, nach langer zeit habe ich mich jetzt einmal drangesetzt und es Probiert.


    Hier ist ein Bild von dem HST haus ohne den Script versuch usw...


    und hier der versuch die tausch Texturen einzufügen.


    Hier einmal die Objekt SCO:

    Haltestellenhaus Werbung.sco


    Hier die Scripts


    Die Texturen:




    Ich weiß ehrlich gesagt leider nicht was ich falsch mache.