Frage zu einem Script/ Script "Problem"

Das Forum befindet sich im reduzierten Betrieb. Die Addon- und Supportforen bleiben weiterhin verfügbar.
Bitte beachte, dass OMSI nicht mehr weiterentwickelt wird. Ein Teil der Entwickler widmet sich inzwischen der Entwicklung eines neuen Simulators. Weitere Informationen zum LOTUS-Simulator findest Du hier.
Ein communitybetriebenes Nachfolge-Forum wird hier verlinkt, sobald es gegründet und bereit ist.
  • (mir fällt grad irgendwie keine passendere Überschrift ein)

    Hallöchen Zusammen

    :)


    Ich versuche mich gerade an einem Einstieg ins OMSI Script-System.


    Ich versuche Folgendes:
    Wenn die Außentemperatur über einer bestimmten Grad Zahl ist, werden automatisch die Fenster geöffnet.


    So sieht es z.Z. aus:

    Code
    1. {macro:auto_opn}
    2. (L.S.Weather_Temperature) 10 >
    3. {if}
    4. (L.L.cp_klappfenster_1) 1 =
    5. {else}
    6. (L.L.cp_klappfenster_1) 0 =
    7. {endif}
    8. (S.L.cp_klappfenster_1)
    9. {end}


    Eine dazu erstellte varlist.txt ist leer.


    Wenn ich den NL202 (MR) nun platziere, passiert nichts. Müssen die Makros erst aufgerufen werden?


    Wahrscheinlich ein extrem dummer Anfängerfehler, aber ich hoffe es kann mir wer helfen

    :D


    Danke

  • Hallo,


    entweder Du fügst das macro in eine bestehende .osc Datei hinten ein, dann mußt Du vom Frame Teil der Datei einen Aufruf durchführen. Also wenn Du z.B. die cockpit.osc nimmst, dann kannst Du Dein Macro hinten anhängen, und dann im Bereich des macro's cockpit_frame einen Aufruf (M.L.auto_opn) hinzufügen.


    Du kannst es aber auch als einzelne .osc-Datei im Scritpordner hinzufügen. Dann mußt Du Dein Script in der Busdatei im Abschnitt [script] registrieren und natürlich die Anzahl der Dateien erhöhen (1.Zeile). Ausserdem mußt Du dann Dein Script noch aufrufen. Dazu fügst Du im Mainscript (beim NL202 von MR heißt das MAIN_EN92_main.osc) im {frame}-Teil den Aufruf für Dein Script hinzu. Also: (M.L.auto_opn)


    Auf die leere varlist kannst Du verzichten. Wenn Du allerdings eine benötigen würdest, dann ist sie auch in der .bus-Datei zu registrieren.


    Viele Grüße,
    Uwe

  • Du weißt schon dass das OMSI Script eine Endanwendung .osc hat
    .sco eine Konfiguration Datei für Objekte. Ist auch wie für die Busse nur halt .bus.

    OMSI 2 | 2.2.013, weil's endlich wieder geht

  • Wie vom Vorposter angesprochen, musst du schauen, dass das Skript korrekt aufgerufen wird.


    Zusätzlich hast du allerdings auch noch Fehler in der Syntax.


    Du versuchst, über "(L.L.cp_klappfenster_1) 1 =" dem Klappfenster den Wert 1 zuzuweisen.
    Macht in anderen Programmiersprachen ja auch durchaus Sinn.
    In OMSI ticken die Uhren aber ein bisschen anders.
    Über (L.L.variable) werden Variablen gelesen, mit (S.L.variable) geschrieben.
    Lies dir am Besten dazu mal die Wiki-Artikel durch, z.B. diesen.
    Wenn man's erstmal verstanden hat, ist es eigentlich sehr einfach.

    ;)


    So müsste dein Skript korrekt lauten:

    Code
    1. {macro:auto_opn}
    2. (L.S.Weather_Temperature) 10 >
    3. {if}
    4. 1 (S.L.cp_klappfenster_1)
    5. {else}
    6. 0 (S.L.cp_klappfenster_1)
    7. {endif}
    8. {end}


    oder so:

    Code
    1. {macro:auto_opn}
    2. (L.S.Weather_Temperature) 10 >
    3. {if}
    4. 1
    5. {else}
    6. 0
    7. {endif}
    8. (S.L.cp_klappfenster_1)
    9. {end}


    oder meine persönliche Lieblingsfassung, da schön kurz:

    Code
    1. {macro:auto_opn}
    2. (L.S.Weather_Temperature) 10 > (S.L.cp_klappfenster_1)
    3. {end}
  • Danke euch

    :)


    Daraus umgeformt habe ich jetzt folgendes:


    Bedeutet:
    Wenn der Sitzplatz neben dem Fenster belegt ist, es im Bus wärmer ist als Draußen und über 19°C, wird das Fenster geöffnet.
    Wenn der Sitzplatz neben dem Fenster belegt ist und es im Bus kälter als 15°C ist, wird das Fenster geschlossen.


    Soweit funktioniert alles, nur nachdem der Platz neben dem Fenster wieder frei wird, kann ich das Fenster nicht wieder von Hand öffnen/schließen.


    Des Weiteren frage ich mich, ob es nicht für OMSI extrem Performance-Unfreundlich ist, dass so viele Scripts in einem Frame "durchgerattert" werden.
    Gibt es die Möglichkeit, das Skripts z.B. nur alle 5-10 Sekunden aufgerufen werden?


    Grüße

    :)
  • Wie sich Skripte auf die Performance auswirken, habe ich mich auch immer gefragt. Leider gibt es keine Benchmark-Funktion o.Ä., mit der man das zuverlässig testen kann.


    Natürlich ist auch eine zeitliche Verzögerung möglich, dafür kannst du dir einfach mal die Original-Skripte von M+R ansehen, in denen dies öfters gemacht wird.
    Es braucht zunächst eine Timer-Variable, z.B. "autoopn_timer".
    Diese wird über Timegap mit der verstrichenen Zeit gefüllt, etwa so:

    Code
    1. (L.L.autoopn_timer) (L.S.Timegap) + (S.L.autoopn_timer)


    Danach kann die Variable auf ihren Inhalt überprüft werden, und beim Überschreiten eines bestimmten Werts wird eine Aktion ausgeführt.
    Außerdem muss der Timer wieder auf null gestellt werden, damit das Ganze von vorne abläuft.

    Code
    1. (L.L.autoopn_timer) 30 >
    2. {if}
    3. ' Das hier wird alle 30 Sek. ausgeführt
    4. 0 (S.L.autoopn_timer)
    5. {endif}


    Das lässt sich noch wie folgt vereinfachen:

    Code
    1. (L.L.autoopn_timer) (L.S.Timegap) + (S.L.autoopn_timer) 30 >
    2. {if}
    3. ' Das hier wird alle 30 Sek. ausgeführt
    4. 0 (S.L.autoopn_timer)
    5. {endif}


    Fertig.

    :)


    Du könntest übrigens auch noch eine Zufallsfunktion einbauen.
    Ich habe es durchaus schon erlebt, dass bei 30°C+ so manches Klappfenster geschlossen ist.

    :|


    Schau dir dazu mal den random-Befehl an.

  • So, es funktioniert nun alles...
    Folgender Fehler:

    Zitat

    nachdem der Platz neben dem Fenster wieder frei wird, kann ich das Fenster nicht wieder von Hand öffnen/schließen.


    ...wurde duch das kleine "m" bei "m.V.GetHumanCountOnSeat" ausgelöst.
    Ein Random Befehl hab ich allerdings noch nicht eingebaut.


    Nochmal ein herzliches Dankeschön euch

    :)



    Grüße

    :)
  • Allgemein ist es dafür gedacht, zu prüfen, ob ein Sitz-/Stehplatz gerade belegt ist.
    Ich benutze es dafür, um zu prüfen, ob jeweils die Plätze neben den Fenstern belegt sind,
    denn nur der kommt ja realistischerweise ans Fenster dran

    :D


    Grüße

    :)
  • Also müsste es doch jetzt möglich sein das sich leute erst einen Sitzplatz suchen und dann erst Stehplätze oder?

    Bei OMSI Fragen und Problemen PN an mich. Link zu meinem Instagram-Kanal findet ihr im Profil.

  • Die angesprochene Funktion prüft ja nur ob dieser Platz belegt ist und kann auch nicht umfunktioniert werden, da man die Personen nicht beeinflussen kann (Hardcoded durch M&R).
    Eine größere Diskussion zu diesem Thema gab es bereits in einem anderen Thread (finde ihn aktuell nicht).

    Nächste Haltestelle: Ihre MAN-Niederlassung.

  • Du kannst es ja mal so probieren:


    Habe deinen Code etwas zusammengefasst und einen simplen 50/50 Zufall bei jedem Fenster eingebaut.
    Zudem läuft es nur alle 180 Sek., sonst würde der Zufall nicht viel Sinn machen.
    Den passenden Sound-Trigger (für den NL) habe ich auch eingefügt, damit man es während der Fahrt schön knallen hört.

    ;)


    Müsste so funktionieren, ist aber nicht getestet.