Closed DeputyLOL closed 7 years ago
I haven't had any hangs or errors. There may be something particular about your installation (a mod or something else that isn't playing nice). A full log file may provide some insight. I've also updated the DLL to provide some finer-grained messages on the ProcessObject exception.
I suspect one of my scripts is causing the problem.
I might have narrowed it down to the GPWS system. Im not entirely sure whats wrong with it though. Here it is:
function ACGPWSOn()
if ACAltitudeTerrainFeet() < 2500 then -- and fc.GetPersistent("ACGPWSON") == 1 then
return 1
else
return 0
end
end
function ACGPWSDecending()
if ACAltitudeTerrainRateFeetPerMin() < 0 or ACVerticalSpeedFeetPerMin() < 0 then
return 1
else
return 0
end
end
-- GPWS "PULL UP"
function ACGPWSPullUp()
if ACGPWSSinkRate() == 2 or ACGPWSTerrain() == 2 then
return 1 -- PULL UP
else
return 0
end
end
-- GPWS MODE 1 "SINK RATE" / "PULL UP"
function ACGPWSSinkRate()
local ACGPWSSinkRateWarningThreshold = fc.Remap(ACAltitudeTerrainFeet(),0,2500,-1000,-3000)
local ACGPWSSinkRateAlertThreshold = fc.Remap(ACAltitudeTerrainFeet(),0,2500,-1500,-8000)
if ACVerticalSpeedFeetPerMin() < ACGPWSSinkRateWarningThreshold and ACVerticalSpeedFeetPerMin() > ACGPWSSinkRateAlertThreshold and ACGPWSTerrain() == 0 and ACGPWSTooLow() == 0 and ACGPWSOn() == 1 then
return 1 -- SINK RATE
elseif ACVerticalSpeedFeetPerMin() < ACGPWSSinkRateAlertThreshold and ACGPWSOn() == 1 then
return 2 -- PULL UP
else
return 0
end
end
-- GPWS MODE 2 "TERRAIN TERRAIN" / "TERRAIN" / "PULL UP"
function ACGPWSTerrain()
local ACGPWSTerrainClosureRate = ACVerticalSpeedFeetPerMin() - ACAltitudeTerrainRateFeetPerMin()
local ACGPWSTerrainWarningThreshold = fc.Remap(ACAltitudeTerrainFeet(),0,2000,1800,4000)
local ACGPWSTerrainAlertThreshold = fc.Remap(ACAltitudeTerrainFeet(),0,1500,2000,3800)
if ACGPWSTerrainClosureRate > ACGPWSTerrainWarningThreshold and ACGPWSTerrainClosureRate < ACGPWSTerrainAlertThreshold and ACGPWSOn() == 1 then
return 1 -- TERRAIN TERRAIN
elseif ACGPWSTerrainClosureRate > ACGPWSTerrainAlertThreshold and ACGPWSOn() == 1 then
return 2 -- PULL UP
else
return 0
end
end
-- GPWS MODE 3 "DONT SINK"
function ACGPWSDontSink()
return 0 -- I really should work out how this works...
end
-- GPWS MODE 4 "TOO LOW TERRAIN" / "TOO LOW GEAR" / "TOO LOW FLAPS"
function ACGPWSTooLow()
local ACGPWSTooLowGearThreshold = fc.Remap(ACAltitudeTerrainFeet(),500,1000,230,260)
local ACGPWSTooLowFlapThreshold = fc.Remap(ACAltitudeTerrainFeet(),250,1000,230,250)
if fc.GetGear() == 0 and ACAltitudeTerrainFeet() > 50 and ACAltitudeTerrainFeet() < 500 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACAirspeedKnots() < ACGPWSTooLowGearThreshold and ACGPWSPullUp() == 0 and ACGPWSOn() == 1 then
return 1 -- MODE A TOO LOW GEAR
elseif fc.GetGear() == 1 and far.GetFlapSetting() <= 1 and ACAltitudeTerrainFeet() > 30 and ACAltitudeTerrainFeet() < 250 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACAirspeedKnots() < ACGPWSTooLowFlapThreshold and ACGPWSPullUp() == 0 and ACGPWSOn() == 1 then
return 2 -- MODE B TOO LOW FLAPS
elseif fc.GetGear() == 0 and ACAltitudeTerrainFeet() > 30 and ACAltitudeTerrainFeet() < 1000 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACAirspeedKnots() > ACGPWSTooLowGearThreshold and ACGPWSPullUp() == 0 and ACGPWSOn() == 1 then
return 3 -- MODE A TOO LOW TERRAIN
elseif fc.GetGear() == 1 and far.GetFlapSetting() <= 1 and ACAltitudeTerrainFeet() > 30 and ACAltitudeTerrainFeet() < 1000 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACAirspeedKnots() > ACGPWSTooLowFlapThreshold and ACGPWSPullUp() == 0 and ACGPWSOn() == 1 then
return 3 -- MODE B TOO LOW TERRAIN
-- elseif ACAltitudeTerrainRateFeetPerMin() <= 0 and ACGPWSPullUp() == 0 and ACGPWSOn() == 1 then
-- return 3 -- MODE C TOO LOW TERRAIN <-- THE FUCK GOES HERE!?!
else
return 0
end
end
-- GPWS MODE 5 "GLIDE SLOPE"
function ACGPWSGlideSlope()
return 0 -- Need an actual glide slope system first...
end
-- GPWS MODE 6 "BANK ANGLE"
function ACGPWSBankAngle()
return 0 -- TODO
end
-- GPWS ALTITUDE CALLOUTS
function ACGPWSAltCallout()
if ACAltitudeTerrainFeet() > 4 and ACAltitudeTerrainFeet() < 5 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 5
elseif ACAltitudeTerrainFeet() > 5 and ACAltitudeTerrainFeet() < 10 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 10
elseif ACAltitudeTerrainFeet() > 10 and ACAltitudeTerrainFeet() < 20 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 20
elseif ACAltitudeTerrainFeet() > 25 and ACAltitudeTerrainFeet() < 30 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 30
elseif ACAltitudeTerrainFeet() > 35 and ACAltitudeTerrainFeet() < 40 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 40
elseif ACAltitudeTerrainFeet() > 45 and ACAltitudeTerrainFeet() < 50 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 50
elseif ACAltitudeTerrainFeet() > 55 and ACAltitudeTerrainFeet() < 60 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 60
elseif ACAltitudeTerrainFeet() > 65 and ACAltitudeTerrainFeet() < 70 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 70
elseif ACAltitudeTerrainFeet() > 95 and ACAltitudeTerrainFeet() < 100 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 100
elseif ACAltitudeTerrainFeet() > 190 and ACAltitudeTerrainFeet() < 200 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 200
elseif ACAltitudeTerrainFeet() > 290 and ACAltitudeTerrainFeet() < 300 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 300
elseif ACAltitudeTerrainFeet() > 390 and ACAltitudeTerrainFeet() < 400 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 400
elseif ACAltitudeTerrainFeet() > 490 and ACAltitudeTerrainFeet() < 500 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 500
elseif ACAltitudeTerrainFeet() > 990 and ACAltitudeTerrainFeet() < 1000 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 1000
elseif ACAltitudeTerrainFeet() > 1950 and ACAltitudeTerrainFeet() < 2000 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 2000
elseif ACAltitudeTerrainFeet() > 2450 and ACAltitudeTerrainFeet() < 2500 and ACAltitudeTerrainRateFeetPerMin() < 0 and ACGPWSOn() == 1 then
return 2500
else
return 0
end
end
I'm going to punt on this for now - if it's happening with the current dev builds of MAS and KSP 1.3.0, please let me know.
This has kept happening since i reinstalled KSP. Everything is normal and then the game freezes for about 5 seconds. When it comes back, MAS is frozen completely. Monitors are stuck, alarms don't play or don't stop playing. When i try and hit a MASswitch, I get an initialization error and the log spams with: [ERR 00:08:43.975] [MASFlightComputer] MASFlightComputer.FixedUpdate exception: System.NullReferenceException: Object reference not set to an instance of an object at AvionicsSystems.MASFlightComputer+Variable.ProcessObject (System.Object value) [0x00000] in:0
at AvionicsSystems.MASFlightComputer+Variable.Evaluate (MoonSharp.Interpreter.Script script) [0x00000] in :0
at AvionicsSystems.MASFlightComputer.FixedUpdate () [0x00000] in :0
Reloading the ship seems to fix it.
Just thought i'd let you know :D