diff --git a/Moose Development/Moose/Core/Timer.lua b/Moose Development/Moose/Core/Timer.lua index 02e4cee63..86e53f819 100644 --- a/Moose Development/Moose/Core/Timer.lua +++ b/Moose Development/Moose/Core/Timer.lua @@ -107,7 +107,7 @@ _TIMERID=0 --- TIMER class version. -- @field #string version -TIMER.version="0.1.2" +TIMER.version="0.2.0" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list @@ -222,7 +222,20 @@ function TIMER:Stop(Delay) -- Remove timer function. self:T(self.lid..string.format("Stopping timer by removing timer function after %d calls!", self.ncalls)) - timer.removeFunction(self.tid) + + -- We use a pcall here because if the DCS timer does not exist any more, it crashes the whole script! + local status=pcall( + function () + timer.removeFunction(self.tid) + end + ) + + -- Debug messages. + if status then + self:T2(self.lid..string.format("Stopped timer!")) + else + self:E(self.lid..string.format("WARNING: Could not remove timer function! isrunning=%s", tostring(self.isrunning))) + end -- Not running any more. self.isrunning=false diff --git a/Moose Development/Moose/Wrapper/Unit.lua b/Moose Development/Moose/Wrapper/Unit.lua index 11b363bca..3566e25b7 100644 --- a/Moose Development/Moose/Wrapper/Unit.lua +++ b/Moose Development/Moose/Wrapper/Unit.lua @@ -338,18 +338,18 @@ function UNIT:IsExist() end --- Returns if the Unit is alive. --- If the Unit is not alive, nil is returned. --- If the Unit is alive and active, true is returned. --- If the Unit is alive but not active, false is returned. +-- If the Unit is not alive/existent, `nil` is returned. +-- If the Unit is alive and active, `true` is returned. +-- If the Unit is alive but not active, `false`` is returned. -- @param #UNIT self --- @return #boolean `true` if Unit is alive and active. `false` if Unit is alive but not active. `nil` if the Unit is not existing or is not alive. +-- @return #boolean Returns `true` if Unit is alive and active, `false` if it exists but is not active and `nil` if the object does not exist or DCS `isExist` function returns false. function UNIT:IsAlive() self:F3( self.UnitName ) local DCSUnit = self:GetDCSObject() -- DCS#Unit - if DCSUnit then - local UnitIsAlive = DCSUnit:isExist() and DCSUnit:isActive() -- and DCSUnit:getLife() > 1 + if DCSUnit and DCSUnit:isExist() then + local UnitIsAlive = DCSUnit:isActive() return UnitIsAlive end