Jump to content

Archived

This topic is now archived and is closed to further replies.

frontendrob

Sichtweite dynamisch erhöhen.

Recommended Posts

Ich bin gerade dabei, ein relativ umfangreiches script zu schreiben, welches Sichtweite, Skycolors ect. steuert. Wie weiter oben im Forum beschrieben, funktioniert es so gut (ist mir klar, dass es besser geht)...

 


if get("sim/cockpit2/gauges/indicators/altitude_ft_pilot") < 12000 
and get("sim/weather/visibility_reported_m") > 25700 then
set( "sim/weather/visibility_reported_m", 25700 )
end

 

if get("sim/cockpit2/gauges/indicators/altitude_ft_pilot") < 18000 
and get("sim/cockpit2/gauges/indicators/altitude_ft_pilot") > 12000 then
set( "sim/weather/visibility_reported_m", 38800 )
end

 

Nun möchte ich aber die Sichtweite nicht aprubt, sondern je nach Höhe dynamisch steuern. Kann es mir zwar so vorstellen, aber nicht selbst coden...

 

Wenn die Höhe über 12000 und unter 18000 ist, erhöhe/verringere die Sichtweite pro Fuss Flughöhe um (13100 / 6000). 

 

13100 ist die Differenz der Sichtweite von 12000 und 18000 Fuß. Also pro Fuß würde sich die Sichtweite um 2,1833 Meter erhöhen/verringern. Dazu müsste der Code natürlich immer die Höhe vergleichen.

 

Kann mir jemand da mit helfen?

Share this post


Link to post
Share on other sites

Habe einen relativ alten Rechner und habe deshalb ein klines lua-script zum anpassen des sichtweite. Vieleicht kannst du was verwenden:

 

alt_value = dataref_table("sim/cockpit2/gauges/indicators/altitude_ft_pilot")
vis_value = dataref_table("sim/weather/visibility_reported_m")

function set_visibility()
    vis_value[0] = 50000
    
    if alt_value[0] < 4000 then
        vis_value[0] = 15000
    end

    if alt_value[0] < 7000 and alt_value[0] > 4000 then
        vis_value[0] = 25000
    end
    
     if alt_value[0] > 7000 then
        vis_value[0] = 55000
    end
end
 
do_sometimes("set_visibility()")

Share this post


Link to post
Share on other sites
vor 10 Stunden , XP-Flieger sagte:

Ich habe hier ein Script welches du dir ansehen kannst. Ich weiß nicht mehr woher ich es habe, aber afaik habe ich es etwas modifiziert. Ich denke du weißt was alles bedeutet, vielleicht hilft es dir weiter. Ich nutze es aktuell nicht mehr, da ich irgendeine Inkompatibilität hatte.

Wenn es nicht so abrupt sein soll würden vielleicht mehrere Zwischenschritte (also z.B. alle 1000m Höhe) helfen. Wenn es ganz sanft sein soll, dann müsste ein anderer Ansatz her. Die Frage ist dann aber, ob XP10 andauernd nachladen würde, was vielleicht nicht so ideal wäre.

Ich weiß nicht ob dir das Skript ansatzweise weiterhilft (wohl eher nicht), aber ich wollte es nicht vermodern lassen. Deine Idee finde ich aber interessant. Eventuell überlege ich da nochmal.


 

 

Dein Script macht ja im Grunde das gleiche wie meins, nur änderst du pro Step mehrere Variablen.

 

X-Plane muss nicht nachladen wenn man die reported visibility erhöht, die scenery ist ja bereits geladen und man verändert nur die Darstellung. X-Plane selbst kann es auch so soft, z.B zwischen zwei cloud Layern (unter gewissen Umständen). Klar könnte man mehr Steps einfügen, aber das macht den Switch nicht viel unauffälliger (und man hat noch mehr).

 

Ich bin mir ziemlich sicher das es sehr einfach ist, wenn man die Syntax kennt.

 

if (höhe größer als beim letzten auslesen) dann (visibility + oder - (Anzahl der veränderten Fuß Höhe x 2,1833))

 

Was ich halt nicht weiss ist wie mann innerhalb der Funktion ausliest, was die Höhe beim letzten Durchlauf (letzter frame im Falle von do_every_frame) war.

Share this post


Link to post
Share on other sites
gerade, XP-Flieger sagte:

Die Grundszenerie ist da bereits geladen, das ist korrekt. Aber wie sieht es mit Wolken aus? Da könnte ich mir vorstellen, dass sich das zumindest etwas negativ auf die Leistung auswirkt wenn die immer neu berechnet werden. Ich mache mir über deinen Vorschlag mit nochmal Gedanken, finde den Ansatz nämlich interessant. Ob das tatsächlich so funktioniert wird man sehen.

 

Das Mod an dem ich arbeite injected die Wolken unabhängig über SMP & RWC (NOAA METAR). Daher kann ich alle in X-Plane zur Verfügung stehenden datarefs dafür nutzen, die Atmosphäre / Sichtweite zu rendern. Alle anderen Wetterdaten wie Wind, Temperatur und Druck werden über das NOAA plug-in injected. 

 

 

Share this post


Link to post
Share on other sites

Wollte mal nachfragen, was dein project sichtweite macht. habe für meinen betagten rechner ein kleines lua-script geschrieben, das die sichtweite mit zunehmender höhe erweitert. habe dadurch bessere fps. hänge mein script an, vielleicht kannst du was verwenden.

sicht.lua

Share this post


Link to post
Share on other sites
On ‎27‎.‎09‎.‎2016 at 15:42, hrsoft sagte:

Wollte mal nachfragen, was dein project sichtweite macht. habe für meinen betagten rechner ein kleines lua-script geschrieben, das die sichtweite mit zunehmender höhe erweitert. habe dadurch bessere fps. hänge mein script an, vielleicht kannst du was verwenden.

sicht.lua

Ich habe dieses Skript in meinem  FlyWithLua Plugin  in Skripts übernommen, scheint mir für meinen Rechner am besten geeignet.

Bei Höhe kleiner als 6100 sollte Die Sichtweite auf 10000 Fuss (ca.3 KM) reduziert werden.

Nn meine Frage. wie kann ich an einfachsten prüfen, ob dad klappt ?

 

Share this post


Link to post
Share on other sites

Ich verstehe nicht, warum in Lua scripts immer wieder Abfragen in der Art von:

 

if alt_value[0] < 4000 then
        vis_value[0] = 15000
    end

    if alt_value[0] < 7000 and alt_value[0] > 4000 then
        vis_value[0] = 25000
    end
    
     if alt_value[0] > 7000 then
        vis_value[0] = 55000
    end

 

zu sehen sind.

Muss das in Lua so sein?

Falls nicht, mein Ansatz ist die Scripte möglich performant zu halten.

Dazu gehört, Vergleiche möglichst gering zu halten.

 

Sinn des oben gezeigten ist doch, dass in verschiedenen aneinander angrenzenden Intervallen verschiedene Werte gesetzt werden sollen.

So wie hier gezeigt, ist das Verfahren fehleranfällig und "langsam".

Und unnötig,

 

Denn zum 2. if kommen wir doch nur, wenn das erste if nicht greift, und damit ist alt_value[0] eben nicht <4000,

das braucht danach nicht nochmals abgefragt zu werden, etc..

 

In der Tat sind in dem Script 2 Fehler enthalten.

Was soll in den Höhehen 4000 und 7000 geschehen?

Diese Werte werden hier ausgelassen, warum?  (Warum erinnert mich das so sehr an RTH?)

 

Mein Vorschlag:

 

    if alt_value[0] < 4000 then
        vis_value[0] = 15000
   

    elseif alt_value[0] < 7000 then
        vis_value[0] = 25000
       
    else
        vis_value[0] = 55000
    end

 

Diese erspart die Vergleiche:  alt_value[0] < 7000, alt_value[0] > 4000 und alt_value[0] > 7000 und lässt auch 4000 und 7000 nicht aus.

So ein Vergleich ist jedesmal ein Zugriff auf eine Variable und  eine Rechenoperation.

 

 

Gruß

Othello

 

Share this post


Link to post
Share on other sites

if alt_value[0] < 4000 then
        vis_value[0] = 15000
   

    elseif alt_value[0] < 7000 then
        vis_value[0] = 25000
       
    else
        vis_value[0] = 55000
    end

Das scheint mir eine gute Lösung, hat aber laut "FlyWihLua_Debug" Syntax Fehler!

Othello bitte reagieren. Im Bild kann man die Fehlermeldung oben links knapp sehen.

Gruss P.A. Walty

Lua Feher.png

Share this post


Link to post
Share on other sites

Ich kann die Fehlermeldung kaum lesen, glaube aber, dass irgendwas mit alt_value angemosert wird.

Kannst Du bitte mehr vom Script zeigen und die Fehlermeldung ebenfalls?

 

/Othello

Share this post


Link to post
Share on other sites
Vor 1 Stunde, Othello sagte:

Ich kann die Fehlermeldung kaum lesen, glaube aber, dass irgendwas mit alt_value angemosert wird.

Kannst Du bitte mehr vom Script zeigen und die Fehlermeldung ebenfalls?

 

/Othello

Das Script.lua  Wie oben in meinem Bild:

Die Fehler Meldung ist :Resources/plugins/FlyWithLua/Scripts/sicht.lua:1: attempt to index global 'alt_value' (a nil value)
Kannst was damit anfangen?

Share this post


Link to post
Share on other sites
Vor 1 Stunde, pa.walty sagte:

Das Script.lua  Wie oben in meinem Bild:

Die Fehler Meldung ist :Resources/plugins/FlyWithLua/Scripts/sicht.lua:1: attempt to index global 'alt_value' (a nil value)
Kannst was damit anfangen?

 

Naja, du musst halt auch das *ganze* Script laden, und nicht nur den von Othello umgeschriebenen Teil. ;)

 

Share this post


Link to post
Share on other sites
vor 1 minute, XP-Flieger sagte:

Ich denke er hat das Skript von hrsoft in Beitrag #8 genommen und entsprechend nach Othellos Vorschlag angepasst. Und genau dieses gesamte angepasste Skript bräuchte man jetzt um den Fehler einfacher zu finden.
 

 

Ich glaube eher, er hat *nur* die Änderungen genommen und als neues Script gespeichert. ;)

Du hast aber natürlich recht. Ohne weitere Infos, wie z.B. das komplette Script, welches er nun *tatsächlich* nutzt, stochern wir hier nur im Nebel rum.

 

Share this post


Link to post
Share on other sites
vor 2 Stunden , pa.walty sagte:

Das Script.lua  Wie oben in meinem Bild:

Die Fehler Meldung ist :Resources/plugins/FlyWithLua/Scripts/sicht.lua:1: attempt to index global 'alt_value' (a nil value)
Kannst was damit anfangen?

 

Ja, der Fehler liegt wahrscheinlich darin, dass Du die Variable alt_value nicht richtig initialisiert hast, oder sie verwendest ohne sie angelegt zu haben.

 

Resources/plugins/FlyWithLua/Scripts/sicht.lua:1:      Ich glaube die 1 bedeutet, dass der Fehler in der Zeile Nummer 1 ist.

 

 

Die Variablen stellen Adressen (Zeiger auf Speicherstellen) dar, und wenn so ein Zeiger noch keinen gültigen Wert hat, also noch auf NICHTS zeigt, dann hat er den Wert NIL (a nil value).

 

 

 

Befindet etwas in der Art in Deinem Script? :

 

alt_value = dataref_table("sim/cockpit2/gauges/indicators/altitude_ft_pilot")
vis_value = dataref_table("sim/weather/visibility_reported_m")

 

 

/Othello

 

Share this post


Link to post
Share on other sites

Ich verwende  nun das Angehängt Script.

Habe ich nach längerem pröbeln  als am besten geeignet für meinen Rechner.

Ob das Script we erwartet funktioniert, lässt sich beim Wetter/Sichtweite überprüfeen.

Gruss

P.A. Walty .

 

sicht.lua

Share this post


Link to post
Share on other sites

Damit lässt sich nicht klären, wo der Fehler lag.

Das jetzt von Dir verwendete Script ist, wie schon oben beschrieben, ebenso fehlerhaft, auch wenn man es nicht merken sollte.

 

Versuchs doch mal damit,

 

---------------------------------

alt_value = dataref_table("sim/cockpit2/gauges/indicators/altitude_ft_pilot")
vis_value = dataref_table("sim/weather/visibility_reported_m") 

 

function set_visibility()
    if alt_value[0] < 5000 then
        vis_value[0] = 4000
    elseif alt_value[0] < 10000 then
        vis_value[0] = 25000
    else
        vis_value[0] = 50000
    end
end    
    
do_every_frame("set_visibility()")

-----------------------------------

 

dieses Script macht das, was das von Dir gelistete Script machen sollte.

 

Mir gefällt das Script allerdings überhaupt nicht.

Fliegst Du z.B 10000ft oder höher, wird für jeden Frame die Sicht auf den Wert gesetzt, den sie eh schon hat.

Besser kann man die Performance nicht sinnlos verschlechtern.,

 

Andererseits lernt man Programmieren am besten durch's tun  :-)

 

/Othello

 

 

Share this post


Link to post
Share on other sites

Klar bin ich zufrieden,

auf meinem System klappt ja auch alles.

 

Nur, ich an Deiner Stelle wäre unzufireden.

In beiden Logfiles gibt es Fehlermeldungen,

nur haben die nichts mit dem Script sicht_othello.lua zu tun.

 

Darum weiß ich nicht, was Du jetzt noch von mir willst?

Ich wünsche Dir weiterhin viel Erfolg!

 

Fehler:
[000536] FlyWithLua Info: Start loading script file Resources/plugins/FlyWithLua/Scripts/SetCaps.lua
[000537] FlyWithLua Error: The DataRef "sim/private/controls/caps/densityfactor" does not exist.
[000538] FlyWithLua Info: Finished loading script file Resources/plugins/FlyWithLua/Scripts/SetCaps.lua
[000539] FlyWithLua Error: The error seems to be inside of script file Resources/plugins/FlyWithLua/Scripts/SetCaps.lua

 

 

 

Share this post


Link to post
Share on other sites

Von Othello will ich nichts mehr, seine Scrips sind perfekt. Vielen Dank.

Ich habe noch ein zweites Script, das ich mit  "X plane 10 Performance tweak ......."  erstellt habe.

Das funktioniert zwar ,ist aber noch mangelhaft. Da werde ich noch versuchen zu optimieren. 

 

SetCaps.lua

Share this post


Link to post
Share on other sites

×
×
  • Create New...