Script für Texturwechsel funktioniert nicht

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!
  • Schönen guten Abend,

    ich habe mich gestern mal daran gemacht, mit meinen wenigen Script-Kenntnissen ein Texturwechsel-Script (mit [matl_freetex]) geschrieben. Die Varlists geschrieben, in die .sco eingepflegt, funktioniert es natürlich nicht. :D In der Logfile steht (diesbezüglich) auch überhaupt nichts.



    Danke schon mal für jede Hilfe. :-)


    Gruß,

    Bamp

  • Hmmm, also ich hab ja wirklich auch nicht so viel Ahnung, aber musst du nicht der Variable "Timer" bei der Script-Initialisierung einen ersten Wert zuordnen, bevor du sie im {frame}-Abschnitt das erste Mal aufrufen kannst? Oder wird das automatisch auf Null oder so gesetzt?


    Und auch über den Timegap weiß ich nicht mehr, als das, was im Wiki steht. Zum Beispiel weiß ich nicht, wie genau er die Zeitspanne zwischen zwei Frames angibt, ich gehe aber davon aus, dass die kleinste gültige Ziffer wenigstens Zehntelsekunden angibt, denn wären es ganze Sekunden, wäre das ganze ein wenig witzlos und unbrauchbar. Dementsprechend könnte ich mir vorstellen, dass es vorkommen kann, dass die Zeitspannen zwischen mehreren Frames dergestalt sind, dass der Timer nie genau auf 1(s) oder 2(s) kommen wird. Was bei 1s noch weniger tragisch wäre, weil "nur" die Textur nicht getauscht würde, wäre bei 2s fatal, weil dann nicht einmal der Timer zurückgesetzt werden würde, ewig weiterliefe und somit nie wieder ein Texturtausch stattfände.

    Ich könnte mir also vorstellen, dass es an dieser Stelle besser wäre, mit < für den Texturtausch und > für die Rücksetzung des Timers zu arbeiten.


    Ich hoffe mal, das hilft dir irgendwie weiter. Ich bin mir leider absolut nicht sicher, weil ich mich erst ein Mal (für ein DFI-Script) mit dem OMSI-Scriptsystem auseinandergesetzt habe, was jetzt auch schon wieder über ein Jahr her ist. Sowas wie Timegap oder lokale Variablen habe ich dazu nicht bzw. kaum gebraucht... Vielleicht täusche ich mich ja komplett, oder missverstehe gar dein ganzes Script aber dann hab' ich wenigstens auch was dabei gelernt ;)


    Guten Abend wünscht

    Sherlock Holmes

  • Moin.


    Bin ein bisschen verwirrt. Was möchtest du denn mit dem Timer erreichen?


    Stutzig macht mich zum Beispiel das:


    {if}

    "Lampe aus.tga" (S.$.STD_an)

    "Lampe an.tga" (S.$.STD_aus) ????????????????? welche soll denn nun angezeigt werden?

    {else}

    [..]

    "Lampe an.tga" (S.$.STD_an)

    "Lampe aus.tga" (S.$.STD_aus) ????????????????? welche soll denn nun angezeigt werden?



    Da müsstest du dich schon mal für eine Textur entscheiden.


    Grundsätzlich würde der Timer funktionieren. Setze aber auch mal


    'Nach 15 Uhr und vor 22 Uhr?

    (L.S.Time) 54000 >

    (L.S.Time) 79200 < &&

    {if}

    1 (S.L.active)

    {else}

    "Lampe aus.tga" (S.$.STD_an)

    {endif}


    unter frame


    Und dann die nächste Frage :


    Soll das was du erreichen möchtest bei genau 1= passieren und nach 1 dann die ganze Zeit das was bei 2= passiert?

    Dann würde ich es so schreiben:


    (L.L.active) 1 =

    {if}

    (L.L.Timer) (L.S.Timegap) + (S.L.Timer) 2 <

    {if}

    "Lampe aus.tga" (S.$.STD_an)

    {else}

    "Lampe an.tga" (S.$.STD_an)

    {endif}

    {endif}


    Und falls nicht, was soll den passieren wenn 2= überschritten wurde?

    #NICHTSELBSTVERSTÄNDLICH

  • Ich verstehe es so, dass das Script erreichen soll, dass im Sekundentakt zwischen der An- und Aus-Textur gewechselt wird. Daher der Timer, der beim Erreichen von 2 wieder auf Null gesetzt werden soll. Solange er zwischen 0 und 1 liegt, soll wohl die Aus-Textur angezeigt werden, und solange er zwischen 1 und 2 liegt, soll die An-Textur angezeigt werden.

  • bei gleitkommaberechnungen wirst du in den seltensten fällen auf einen genauen Wert kommen, vorallem dann nicht, wenn du einen Timer nutzt.

    du solltest also immer Bedingungen nutzen, die auch wirklich erfüllt werden können. also quasi aus, wenn kleiner als 1, sonst an wenn kleiner als 2 und wenn beides nicht zutrifft, dann den Timer nullsetzen.


    Die Systemvariable Timegap enthält die Frametime, also einen Wert, wie lange der letzte und der aktuelle Frame außeinananderliegen. Bei 10 FPS hast du dort einen Wert von 0.1 drinstehehen, wenn du also 10 frames lang 0,1 addierst, kommst du auf eine Sekunde -> 10FPS. Das klappt so aber nie, die Werte werden immer ein wenig schwanken, sodass da a im Zweifel ein Wert von 0.99 drin steht und im nächsten Frame 1.02 - deine Bedinungen wäre also nicht erfüllt. kleiner als 1 trifft aber auch bei 0.99 zu und kleiner als 2 bzw. größer 1 trifft auch bei 1.02 zu.

  • if}

    "Lampe aus.tga" (S.$.STD_an)

    "Lampe an.tga" (S.$.STD_aus) ????????????????? welche soll denn nun angezeigt werden?

    "Lampe an.tga" (S.$.STD_an)

    "Lampe aus.tga" (S.$.STD_aus) ????????????????? welche soll denn nun angezeigt werden?

    Das soll einen Sekündlichen Wechsel zwischen "Licht-an"- und "Licht-aus"-Texturen bewirken. :)


    Und falls nicht, was soll den passieren wenn 2= überschritten wurde?

    Dafür bräuchte es dann ja noch eine Abfrage. Ich hatte das erst in die Zweier-Abfrage gepackt, das würde dann aber ja nicht funktionieren. ^^


    Sherlock Holmes , Pencil Washington und Chrizzly92 , danke für euer hilfreichen Antworten. Ich Versuche es heute nochmal und melde mich ggf. :)

  • Nabend,

    es funktioniert immer noch nicht.


    Ich bedanke mich erneut schon mal für eure Hilfe.

  • @Bamp


    Habe mal bissl experimentiert mit dem Licht des MAN NL/NG:

    Fernlichtblinker - YouTube


    Das funktioniert Prima...bei eingeschaltetem Abblendlicht schaltet er jede Sekunde das Fernlicht an und aus.

    Das kannste dir auf deine Variablen einrichten.


    mfg

    Daniel

  • Bamp

    Nabend,


    ich kann das leider nicht nachvollziehen. Ich konnte auch nach mehrmaligem Betrachten keinen "Fehler" in dem Script finden. Genausowenig konnte ich einen relevanten Unterschied zu dem Script finden, was fOcUs04 gepostet hat.

    Ich habe mir also mal probeweise dein überarbeitetes Script angeeignet, und lediglich die Texturnamen entsprechend verändert, sodass eines meiner Szenerieobjekte jetzt zwischen 15 und 22 Uhr im Sekundentakt zwischen der Tag- und der Nachttextur wechselt. Es funktioniert tadellos:



    Am Script kann's also eigentlich nicht mehr liegen. Zeigt die Logfile denn immer noch nichts brauchbares an?


    LG

    Sherlock Holmes

  • Hast du denn genau mein Script genommen? Sehr komisch... :D


    Die Logfile sagt nichts, kann sie jedoch Mal hier reinschicken, nachher.

  • Wenn mich nicht alles täuscht, schon. Hier mein verwendetes Script:


    Bei mir hat's auch erst nicht funktioniert. Das lag dann aber nur daran, dass ich beim [matl]-Eintrag was vertauscht hatte, was dann auch der Logfile entsprechend entnommen werden konnte (Error in Line xy), sodass ich es beheben konnte.

  • Das habe ich verwendet. Stimmt 1:1 mit Sherlock Holmes (außer die Texturnamen) und in Teilen (if-Inhalte abgeändert) mit fOcUs04 überein.


    Anbei nochmal die Logfile.


    Ach, guck! Ich lade eine neue Situation (habe sonst immer die alte geladen) und es geht (mit dem Script in dieser Nachricht, zumindest)! :cork::super:


    Nun pflege ich nochmal ein, dass die anderen Lichter auch funktionieren und melde mich dann erneut. :-)


    Weiß jemand, wie man diese kurzen weißen Momente beim Wechsel verhindern kann? Sieht etwas unschön aus. :D


    Oh man, ich glaube, ich weiß, woran es lag. Ich habe der Textur für Licht an eine Nightmap gegeben, der Textur Licht aus aber nicht. Da ich es immer im dunkeln ausprobiert habe, hat man es kaum gesehen.:laughter:


    Nun hätte ich jedoch noch ein anderes "Problem": In der Nacht werden die Texturen nur ganz dunkel angezeigt. Wie gesagt, das mit der Night-Textur funktioniert schon mal nicht...

  • So hallo, ich habe mich mal einige Stunden dahintergeklemmt und bin zu folgendem Ergebnis gekommen:


    Folgendermaßen dürften deine Probleme gelöst werden:


    Zunächst würde ich eine Änderung in der .osc-Datei empfehlen:

    Es muss also lediglich die String-Variable STD_an in eine einfache Variable umgewandelt werden.

    Dann muss in der .sco-Datei noch einiges geändert werden:

    Wir haben jetzt hier also zwei Mesh-Einträge. Der eine verfügt über eine Lightmap, die du noch erstellen musst. Auf dieser sollten die Stellen, die im Sekundentakt hell und wieder dunkel werden, weiß sein, der Rest schwarz.

    Der andere verfügt über keine Lightmap, stellt also den Zustand dar, wenn alle Lampen aus sind. Er ist (via [visible]-Befehl) immer dann sichtbar, wenn die lokale Variable "STD_an" den Wert 0 besitzt, also zwischen 22 und 15 Uhr, und dazwischen alle 2 Sekunden. Andernfalls ist das erstgenannte Mesh sichtbar.

    Bei dieser Vorgehensweise wird die Stringvarlist nicht mehr benötigt. Die Variable STD_an, die ich jetzt namentlich einfach mal übernommen habe, muss aber natürlich noch in die Varlist eingefügt werden.

    Ebenso wird die Textur "Lampe an.tga" nicht mehr benötigt, sie wird funktionell durch die Lightmap ersetzt.

    Dass ich aufgrund Unwissenheit oder fehlender Übersicht noch einige Dummy-Namen in der .sco habe, die noch entsprechend abgeändert werden müssen, dürfte sich von selbst verstehen ;)


    Ich habe das Ganze natürlich auch wieder in mein gutes altes Wohnhaus implementiert und spaßeshalber die Lightmap komplett in Weiß getaucht, sodass jetzt das ganze Haus im Sekundentakt leuchtet: Das funktioniert sowohl bei Tag, als auch bei Nacht prima, und nachts gehen sogar noch die Lichter an den Fenstern an ^^

    Möglich wäre aber natürlich auch, wie bei dir benötigt, eine partielle Beleuchtung.


    Beweisfotos ;) : Und an... Und aus...


    Uuund an... Uuuund aus!


    Ich hoffe, das hilft dir weiter bzw. es ist das, was du erreichen wolltest. In jedem Fall ist dadurch immerhin das hässliche Texturnachgelade eliminiert.


    Beste Grüße,

    Sherlock Holmes






    Jetzt fällt mir gerade auf, dass du ja willst, dass die beiden Lichter-Reihen abwechselnd leuchten, und nicht nur jedes Zweite immer an und ausgeht. Ich hatte mich jetzt ganz an dem GIF orientiert und dachte, das sei bis auf die weißen Nachlader schon das gewünschte. Dann muss man das ganze natürlich noch etwas abwandeln...


    Das wäre dann auf die Schnelle mein neuer Vorschlag, hoffe ich hab keinen Fehler gemacht :)


    LG

    2 Mal editiert, zuletzt von Sherlock Holmes () aus folgendem Grund: Missverständliche Formulierung konkretisiert

  • [GIF]


    Es hat funktioniert! Vielen Dank nochmal an alle. :super:


    Sherlock Holmes Ich habe es jetzt etwas anders gelöst, ich erkläre es die Tage nochmal. :-)