Funktion von (L.S.Timegap)/ IBIS Modifikationen [?]

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.
  • Moin Moin,


    Ich wollte mal fragen ob mir hier jemand mit dem IBIS helfen kann.
    Und zwar folgendes: Ich biete meinen O405N² mit verschiedenen IBIS Modifikationen an. Bisher habe ich es geschafft, dass bei Betätigen des Unfalltasters ein entsprechender Text erscheint.


    Nun bin ich dabei dem Sprechwunsch Taster seine Funktion so geben, dazu habe ich erstmal dem Taster den


    Code
    1. 11 (S.L.IBIS_mode)


    Zugewiesen. Wenn ich jetzt auf den Taster drücke erscheint auch brav der vorgegebene Text. Nun möchte ich aber, dass nach 10 Sekunden der Modus 11 verlassen wird und in den IBIS Modus 9 gewechselt wird. Das Problem dabei: Ich habe keinen Schimmer wie ich


    Code
    1. (L.S.Timegap)


    Zu benutzen habe, ebensowenig weiß ich wo ich entsprechende Zeilen zum wechseln einfügen muss - und insbesondere wie der dann der Wechsel in den Modus 9 vonstatten geht.


    Danke für Hilfe
    Julian

  • Hallo,


    füge irgendwo im Makro IBIS_frame ein:


    (L.L.VARIABLE) (L.S.Timegap) + (S.L.VARIABLE) DAUER >
    (L.L.IBIS_mode) 11 = &&
    {if}
    9 (S.L.IBIS_mode)
    {endif}


    Außerdem musst du unter 11 (S.L.IBIS_mode) ergänzen:


    0 (S.L.VARIABLE)


    Ersetze VARIABLE durch einen beliebigen Namen und DAUER durch die Zeit in Sekunden, füge den Namen der Variable aber danach in IBIS_varlist.txt ein.


    (L.S.Timegap) ist die Zeit, die vergangen ist, seitdem das letzte Mal der Script ausgeführt wurde. Die Variable ist eine Art Zähler. (L.L.VARIABLE) (L.S.Timegap) + (S.L.VARIABLE) bewirkt, dass diese Zeit zur Variable addiert wird. Wenn die Variable dann größer ist, als die vorgegebene Dauer, werden die Anweisungen zwischen {if} und {endif} ausgeführt.

  • Die Variable Timegap ist für zeitliche Berechnungen gedacht. Jedes Script, das in einem {frame}-Tag steht wird in jedem Bild (Frame) neu berechnet. Nun haben allerdings nicht alle Computer die gleiche Leistung. Ein schwacher PC berechnet in OMSI zum Beispiel 25 Bilder pro Sekunde, während ein leistungsstarker Computer bis zu 50, im Idealfall sogar 60, schaffen sollte. Jetzt musst du dir nur vorstellen, dass eine Berechnung besagt, dass in jedem Frame eine bestimmte Variable um einen Wert erhöht oder verringert werden soll. Benutzer mit schnellen Computern wird also 60 Mal in der Sekunde dieser berechnete Wert abgezogen, Benutzern mit langsameren PCs nur 25 Mal. Ich hoffe du kannst schon sehen worauf das hinausführt. Genau hier kommt nämlich die Timegap ins Spiel, die immer die Zeit in Sekunden speichert, die der letzte Frame an Zeit benötigt hat. Bei 25 Bildern pro Sekunde also etwa 1/25 = 0.04, bei 60 FPS 1/60 = 0.017. Nun wird der berechnete Wert einfach mit der Timegap multipliziert und dann von der gewünschten Variable abgezogen oder hinzugefügt. Somit geschieht die Reduzierung/Vergrößerung eines Wertes bei allen Nutzern gleich schnell.
    Ich hoffe, das ist einigermaßen verständlich.

  • Moin Moin,


    Ich hab da noch ne Frage bzw. eine bitte um ein Script. Und zwar möchte ich gerne, dass das Rollband vom SD83 über das IBIS gesteuert wird. Im Klartext heißt das, sobald im IBIS die Eingabe der Liniennummer getätigt wurde, soll sich das Linien-Rollband entsprechend auf diese Nummer drehen, sobald die Ziel Eingabe getätigt wurde soll sich das Zielrollband drehen. Klingt einfach... Ich hab damit aber meine Problemchen und würde deshalb fragen ob jemand so freundlich wäre mir das SD83 Script für meinen O405N² umzufummeln. Hier gibts dazu die benötigten Informationen über die Positionen des Linienrollbands:



    Ich würde mich sehr freuen und danke schonmal herzlichst

    :)
  • Moin,


    Icke nochmal. Ich wollte mal fragen ob mir gerade mal jemand mit der unteren IBIS Zeile helfen kann. Ich hab fast die ganze Zeile fertig, allerdings möchte ich nun noch die letzten 3 Zeichen modifizieren. Die stehen für die Verspätung. Mit dem Code habe ich schon die ersten Tests gemacht:



    Die Unterscheidung in Verspätung (-) und Verfrühung (+) Funktioniert schon. Nun hab ich aber das Problem, dass die Verspätung 2 stellig ist, wenn ich nun " 2" durch "2" austausche ist das gesamte Display im Eimer. Die Verspätung soll sich so aufbauen:


    -2 : Verspätung von 2,0 Minuten
    -2*: Verspätung von 2,5 Minuten
    : Pünktlich
    +2 : Verfrühung von 2,0 Minuten
    +2*: Verfrühung von 2,5 Minuten
    ...


    Wichtig ist dabei, dass immer alle 3 Zeichen belegt sind, also das die Schrift nicht hin und her rutsch.
    Ich hab keine Ahnung wie ich das Umsetzen kann.


    Kann mir jemand helfen?


    Danke und Grüße
    Julian

  • Moin!


    Ist es möglich abzufragen, wielange ein Taster gedrückt wurde? Sodass im IBIS z.B 10 Sekunden der Löschen Taster gedrückt wird und man danach in ein anderes Menü kommt?


    Danke und Grüße
    Julian

  • Moin,


    zuerst solltest du in der .osc nach dem Trigger für das mouseevent suchen. Dann musst du dir einen eigenen Counter schreiben, der ungefähr wie folgt aussehen sollte:


    Code
    1. (L.L.counter) (L.S.Timegap) + (S.L.counter)
    2. (M.L."Makro")


    Dann folgende Abfrage in das soeben erstellte Makro schreiben:


    Code
    1. (L.L.counter) 10 >=
    2. {if}
    3. "Aktion"
    4. {endif}


    Ganz wichtig ist, dass bei jedem loslassen der Taste der counter wieder auf 0 zurückgesetzt wird. Also einen neuen Trigger mit dem Postfix "_off" direkt unter dem Trigger des mouseeffects erstellen und mit Folgendem füllen:


    Code
    1. 0 (S.L.counter)


    Leider bin ich mir nicht sicher, ob sich ein mouseevent wie ein fortlaufender Befehl verhält, oder ob er beim Anklicken sofort und einmalig ausgeführt wird. Sollte das obige Skript also nicht funktionieren, könntest du versuchen einen neuen Trigger mit dem Postfix "_drag" für das selbe mouseevent zu erstellen und diesen dann mit dem Text zu füllen, den du zuvor zu dem Standart-mouseevent-Trigger hinzugefügt hast, also mit dem Inhalt der ersten Code-Box aus diesem Post

    :D


    Und natürlich nicht vergessen die _varlist.txt zu vervollständigen!
    Ich hoffe ich kann helfen, konnte das Skript selbst leider nicht testen.

  • Hast du schon die Variante mit _drag für das mouseevent beim Anklicken und _off beim Loslassen versucht? Ich verwende ein ähnliches Skript, bei dem eine Variable beim loslassen auf 0 gesetzt wird und das funktioniert.

  • Ich schätze mal, da der _off-Befehl ohne vorherigen _drag-Befehl ignoriert wird. Sonst schau dir mal das Skript für das Schiebefenster auf der Fahrerseite der SDs an. Da müsstest du dann nur noch den Inhalt der Trigger entsprechend anpassen.

  • Was mir noch einfallen würde, wäre die Variable counter ausschließlich mit 1 oder 0 zu belegen. Der Counter soll nur dann aktiv sein, wenn er auch vorher aktiviert wurde ((L.L.counter) 1 =). Heißt: unter dem _drag-Event einfach nur 1 (S.L.counter) (M.L.counter_frame) eintragen. Außerdem das _off-Event nur mit 0 (S.L.counter) (M.L.counter_frame) füllen. Jetzt dem counter_frame-Makro nur noch folgende Funktion zuweisen:



    Jetzt bin ich mit meinem Latein (und man muss bedenken, ich habe Französisch gewählt) aber wirklich am Ende.