Script: Rest einer Division

Welcome to the OMSI-WebDisk!
As guest you can only see content in your selected language! Registered users can choose the visibility of other languages in their control panel, more informations here. All topics are marked with a language flag inside the forums: = English [EN], = German [DE], = French [FR].
If you're not able to speak the topic language than write in English!
  • Moin,

    ich habe eine Frage zum Rest einer Division bei den Scripts. Beispiel:

    Time hat in dem Fall den Wert 20482.

    Code: *.osc
    (L.S.Time) 3600 /

    Dann würde das Ergebnis ja 5,6894444444 sein. Wenn ich jedoch den Rest berechnen möchte, ...

    Code: *.osc
    (L.S.Time) 3600 / % (S.L.Bla)

    würde OMSI in dem Fall dann nur 5 bei (L.S.Time) 3600 / ausgeben und dann entsprechend den Rest (wäre dann: 2482) ausgeben? Ich bin mir da etwas unsicher, da man im Skript ja nicht vermerken kann, dass dort eine Division mit Rest stattfinden soll.


    Danke schon Mal für eure Hilfe. :)


    Gruß


    Edit: Noch eine kleine Frage nebenbei. Wenn

    Code
    5 (S.L.TestVar)

    , ist die 5 dann noch im Stack oder wurde die dann "rausgelöscht" bzw. in die Variable verschoben?

  • Advertisement
    • Helpful

    In der Regel ist % ein eigener Operator, wie auch zum Beispiel /. Also schreibst du für den Rest nicht

    Code
    (L.S.Time) 3600 / % (S.L.Bla)

    sondern

    Code
    (L.S.Time) 3600 % (S.L.Bla)

    für den Rest einer Division.

  • und um den Beitrag von DerGrafikfehler noch um deine andere Frage zu vervollständigen:


    Werte bleiben IMMER im Stack stehen, außer du nutzt einen Operator.


    Nehmen wir an, du baust folgendes Script, auch wenns Sinnlos wäre:


    Code
    1 5 (S.L.TestVar)
    (S.L.TestVar)
    (S.L.TestVar)
    (S.L.TestVar)
    (S.L.TestVar)
    (S.L.TestVar)

    Dann packst du erst die 1 in den Stack und schiebst diese mit der 5 um einen platz nach oben. (S.L.XYZ) schreibt jetzt quasi den Wert aus dem "untersten" Stackplatz in die Variable. Dannach machst du genau das nochmal. und nochmal. und nochmal. die Werte im Stack werden nicht verändert.


    Anders läuft es beispielsweise bei einer Addition.

    Code
    1 5 + (S.L.TestVar)
    (S.L.TestVar)
    (S.L.TestVar)
    (S.L.TestVar)
    (S.L.TestVar)

    hier wird aus beiden Werten das Ergebnis im Stack hinterlegt, die Werte selbst bleiben dann nicht im Stack stehen. Aber auch hier bleibt das Ergebnis stehen und wird durch (S.L.XYZ) nicht gelöscht.


    Wenn du explizit möchtest, dass ein Wert "zwischengespeichert" wird, kannst du auch das Register nutzen. Dort kannst du insgesamt 8 Werte mit s0-s7 speichern und mit l0-l7 wieder laden. Das funktioniert aber nur innerhalb eines Frames - entgegen einer Variable werden diese nicht zwischengespeichert.