Hallo zusammen
in diesem Thread hier C&O H8 2-6-6-6 Dampflok (Allegheny) erhältlich (Freeware / in Überarbeitung) habe ich ja mitgeteilt, dass ich mich mit diesem Modell auch einmal mit dem Thema LUA intensiver beschäftigen möchte - was ich auch tatsächlich gemacht habe. Sogar recht erfolgreich für meine Verhältnisse
Da es sich ja um eine Mallet Dampflok handelt, gibt es z.B. Zylinderhähne und Sander in dem Blueprint doppelt, einmal als Front_xxx und einmal als Rear_xxx. Ziel war, dass sich z.B. der im Core enthaltene "Sander" einschaltet, wenn ich einen oder auch beide der Nicht Standard Sander (eben Front oder Rear) betätige. Das habe ich im Script in der Tat hinbekommen, aber nur wenn ich dies über die Tastatur ansteuere. Über die Maus verändert sich zwar auch der jeweilige ControValue des jeweiligen Sanders (das sehe ich mit dem Raildriver & Joystick Interface), aber der Core Sander wird nicht aktiviert. Obwohl bei beiden Bedienvarianten der Wert bis auf "1" steigt, interessiert sich das Script nicht dafür, wenn dies durch die Maus verursacht wurde. Hat einer Idee warum dies so ist und ob es eine Limitation im Core ist, oder ich im Script etwas nicht so perfekt gelöst habe?
Weiter unten mein Code. für den Sander und Zylinderhähne habe ich das über "function OnControlValueChange" vorgenommen (im bestehenden Script ergänzt). Gibt es da eventuell Verbesserungsvorschläge, bei CylinderCock habe ich die Abfrage einmal mit "or" verknüpft, was genauso gut zu funktionieren scheint.
Dann noch eine Frage zu folgendem, ich habe die diversen Manometer auch über die Function Update mit Random Values angesteuert, so dass die Nadeln ein wenig zittern. Ist schon mal ganz schick, ich hätte aber gerne noch die Möglichkeit, dass die Anzeigewerte sich mit zunehmendem Wert des ControlValues auch erhöhen. Im Moment zittert es eben nur um einen Wert herum, zwischen 19 und 21 eben.
if Call ("*:GetControlValue", "Stoking", 0) >= 0.05 then
SSV = math.random(19,21)
Gibt es eine Möglichkeit wie >0.05 and <0.2 ist der Wert 19,21, zwischen 0.2 und 0.5 24,26 usw.?
Habe dazu zwar etwas gefunden (https://stackoverflow.com/ques…-less-than-another-number), aber wenn ich dies eintrage funktioniert das ganze Script nicht mehr
function OnControlValueChange ( name, index, value )
if Call( "*:ControlExists", name, index ) then
Call( "*:SetControlValue", name, index, value );
end
if (name == "SanderFront") then
if (value > 0.5) then
Call("*:SetControlValue", "Sander", 0, 1);
else
Call("*:SetControlValue", "Sander", 0, 0);
end
end
if (name == "SanderRear") then
if (value > 0.5) then
Call("*:SetControlValue", "Sander", 0, 1);
else
Call("*:SetControlValue", "Sander", 0, 0);
end
end
if name == "CylinderCock_Rear" or name == "CylinderCock_Front" then
if value > 0.01 then
Call( "Cylinder Cocks Left:SetEmitterActive", 1 );
Call( "Cylinder Cocks Right:SetEmitterActive", 1 );
Call( "*:SetControlValue", "CylinderCock", 0, 1 );
else
Call( "Cylinder Cocks Left:SetEmitterActive", 0 );
Call( "Cylinder Cocks Right:SetEmitterActive", 0 );
Call( "*:SetControlValue", "CylinderCock", 0, 0 );
end
end
function Update ( Time )
---StokerSteamValve
if Call ("*:GetControlValue", "Stoking", 0) >= 0.05 then
SSV = math.random(19,21)
SJP = math.random(29,31)
Call("*:SetControlValue", "StokerSteam Gauge", 0, SSV);
Call("*:SetControlValue", "StokerJetsPSI", 0, SJP);
else
Call("*:SetControlValue", "StokerSteam Gauge", 0, 0);
Call("*:SetControlValue", "StokerJetsPSI", 0, 0);
end
Alles anzeigen
Danke für jeden Input und viele Grüsse
Thorsten