
Zufällige Textur Auswahl
- KNSH
- Unerledigt
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:
-
-
-
Würde dir da die Standard Omsi Wartehäuser als Grundlage empfehlen.
-
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
Code
Alles anzeigen[CTC] Werbung Texture\Werbungen (hier den Ordner eintragen, in dem deine cti-Datei liegt) 0 [CTCTexture] farbschema Standardtextur.dds (hier der Name der Standard-Werbe-Textur, die in Blender gemappt ist), kann auch ein Dummy sein) [varnamelist] 1 Script\werbung_varlist.txt [script] 1 Script\werbung.osc
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
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.
Ich hoffe, dieses kleine "Tutorial" ist verständlich.
-
Kann man das beim Bus genau so anwenden?
-
[...] 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.
-
wie baue ich so nen Timer ein?
-
[...] 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)
Code: sco-Datei
Alles anzeigen[CTC] WerbungIndex1 texture\Werbung_Flensburg_Unterstand 0 [CTCTexture] Werbung Flensburg_Unterstand_Werbevitrine_Werbung_1.png [CTC] WerbungIndex2 texture\Werbung_Flensburg_Unterstand 0 [CTCTexture] Werbung Flensburg_Unterstand_Werbevitrine_Werbung_2.png [varnamelist] 1 script\Flensburg_Unterstand_Zufallswerbung.txt [script] 1 script\Flensburg_Unterstand_Werbung_Zufallswerbung.osc
Hier im Script gibt es dann halt einfach zwei verschiedene Variablen für beide Repaints, die beide nacheinander mit verschiedenen Zufallswerten initialisiert werden.
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:
Code: Script
Alles anzeigen'Dieser ganze Abschnitt wird grundsätzlich in jedem einzelnen Frame, den OMSI rendert einmal ausgeführt {frame} 'Hier wird der Timer immer erhöht und zwar genau um so viele Sekunden, wie der letzte Frame gedauert hat ("Timegap", normalerweise natürlich eine Dezimalzahl < 0) 'Das hat den Sinn, dass sich das Interval mit schwankender Framerate nicht verändert. 'Konkret gesagt, wird der aktuell Timer-Wert geladen, dann der aktuelle Timegap (letzte Framedauer) dazu addiert und der neue Wert wieder im Timer gespeichert. (L.L.Timer) (L.S.Timegap) + (S.L.Timer) 'Jetzt prüfen wir, ob der Timer ein bestimmtes Limit überschritten hat (hier z.B. "3", damit wird der "innere" Abschnitt alle 3 Sekunden ausgeführt (L.L.Timer) 3 >= {if} 'Hier kannst du jetzt das programmieren, was du machen willst, was in diesem Fall alle 3 Sekunden einmal ausgeführt werden soll 'Danach noch den Timer durch eine Modulorechnung (Restrechtung) wieder zurücksetzten (L.L.Timer) 1 % (S.L.Timer) 'Theoretisch könnte man ihn auch einfach direkt auf Null setzen, so ist es aber etwas cleaner, damit ein ggf. überschrittener "Rest" niübrig bleibt und nicht verschwindet, was den Timer etwas ungenau machen würde: 'Beispiel: 3.01 % 1 = 0.01 Da wir in diesem Durchgang statt 3 Sekunden schon bei 3.01 Sekunden waren, starten wir den Timer nicht wieder bei 0 sondern direkt bei 0.01. {endif} {end}
-
Das ist sehr ausführlich, das mit den mehreren CTC hab ich auch getestet. Hat Omsi nicht akzeptiert, er hat mir dann nur noch das Repaint geladen wo die Eintragung drinnen war.
-
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
Code
Alles anzeigen[CTC] Werbung Texture\Werbungen (hier den Ordner eintragen, in dem deine cti-Datei liegt) 0 [CTCTexture] farbschema Standardtextur.dds (hier der Name der Standard-Werbe-Textur, die in Blender gemappt ist), kann auch ein Dummy sein) [varnamelist] 1 Script\werbung_varlist.txt [script] 1 Script\werbung.osc
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
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.
Ich hoffe, dieses kleine "Tutorial" ist verständlich.
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:
Hier die Scripts
Die Texturen:
Ich weiß ehrlich gesagt leider nicht was ich falsch mache.
-
-