frontendrob 1 Posted August 24, 2016 Share Posted August 24, 2016 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 thenset( "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 thenset( "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? Link to comment Share on other sites More sharing options...
hrsoft 0 Posted August 25, 2016 Share Posted August 25, 2016 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()") Link to comment Share on other sites More sharing options...
frontendrob 1 Posted August 25, 2016 Author Share Posted August 25, 2016 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. Link to comment Share on other sites More sharing options...
frontendrob 1 Posted August 25, 2016 Author Share Posted August 25, 2016 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. Link to comment Share on other sites More sharing options...
hrsoft 0 Posted September 27, 2016 Share Posted September 27, 2016 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 Link to comment Share on other sites More sharing options...
pa.walty 6 Posted November 13, 2016 Share Posted November 13, 2016 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 ? Link to comment Share on other sites More sharing options...
Othello 549 Posted November 17, 2016 Share Posted November 17, 2016 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 Link to comment Share on other sites More sharing options...
pa.walty 6 Posted November 18, 2016 Share Posted November 18, 2016 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 Please login to display this image. Link to comment Share on other sites More sharing options...
Othello 549 Posted November 18, 2016 Share Posted November 18, 2016 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 Link to comment Share on other sites More sharing options...
pa.walty 6 Posted November 18, 2016 Share Posted November 18, 2016 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? Link to comment Share on other sites More sharing options...
scorpio2001de 104 Posted November 18, 2016 Share Posted November 18, 2016 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. Link to comment Share on other sites More sharing options...
scorpio2001de 104 Posted November 18, 2016 Share Posted November 18, 2016 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. Link to comment Share on other sites More sharing options...
Othello 549 Posted November 18, 2016 Share Posted November 18, 2016 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 Link to comment Share on other sites More sharing options...
pa.walty 6 Posted November 19, 2016 Share Posted November 19, 2016 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 Link to comment Share on other sites More sharing options...
Othello 549 Posted November 19, 2016 Share Posted November 19, 2016 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 Link to comment Share on other sites More sharing options...
pa.walty 6 Posted November 20, 2016 Share Posted November 20, 2016 Ich habe ein viel besseres Script, Seihe Attachement. Damit hat .. debug.. auch nichts mehr zu beanstanden. Ist nun Othello zufrieden? ich schon. pa.walty sicht_Othello.lua FlyWithLua_Debug.txt Link to comment Share on other sites More sharing options...
Othello 549 Posted November 20, 2016 Share Posted November 20, 2016 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 Link to comment Share on other sites More sharing options...
pa.walty 6 Posted November 21, 2016 Share Posted November 21, 2016 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 Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.