From 6959f50777c55c4bd02c195255935af157a85763 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Fri, 8 Sep 2017 10:19:48 +0200 Subject: [PATCH 1/3] First fixes --- Moose Development/Moose/Functional/Detection.lua | 10 +++++----- Moose Development/Moose/Wrapper/Controllable.lua | 9 +++++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Moose Development/Moose/Functional/Detection.lua b/Moose Development/Moose/Functional/Detection.lua index 2b67e54dd..93456ffc2 100644 --- a/Moose Development/Moose/Functional/Detection.lua +++ b/Moose Development/Moose/Functional/Detection.lua @@ -1239,9 +1239,11 @@ do -- DETECTION_BASE DetectedItem.FriendliesNearBy = nil - if DetectedUnit then + -- We need to ensure that the DetectedUnit is alive! + if DetectedUnit and DetectedUnit:IsAlive() then - local InterceptCoord = ReportGroupData.InterceptCoord or DetectedUnit:GetCoordinate() + local DetectedUnitCoord = DetectedUnit:GetCoordinate() + local InterceptCoord = ReportGroupData.InterceptCoord or DetectedUnitCoord local SphereSearch = { id = world.VolumeType.SPHERE, @@ -1336,9 +1338,7 @@ do -- DETECTION_BASE DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} DetectedItem.FriendliesNearBy[PlayerUnitName] = PlayerUnit - local CenterCoord = DetectedUnit:GetCoordinate() - - local Distance = CenterCoord:Get2DDistance( PlayerUnit:GetCoordinate() ) + local Distance = DetectedUnitCoord:Get2DDistance( PlayerUnit:GetCoordinate() ) DetectedItem.FriendliesDistance = DetectedItem.FriendliesDistance or {} DetectedItem.FriendliesDistance[Distance] = PlayerUnit diff --git a/Moose Development/Moose/Wrapper/Controllable.lua b/Moose Development/Moose/Wrapper/Controllable.lua index 8d3a037a1..b6de2d519 100644 --- a/Moose Development/Moose/Wrapper/Controllable.lua +++ b/Moose Development/Moose/Wrapper/Controllable.lua @@ -368,14 +368,19 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime ) if DCSControllable then + local DCSControllableName = self:GetName() -- When a controllable SPAWNs, it takes about a second to get the controllable in the simulator. Setting tasks to unspawned controllables provides unexpected results. -- Therefore we schedule the functions to set the mission and options for the Controllable. -- Controller.setTask( Controller, DCSTask ) local function SetTask( Controller, DCSTask ) - local Controller = self:_GetController() - Controller:setTask( DCSTask ) + if self and self:IsAlive() then + local Controller = self:_GetController() + Controller:setTask( DCSTask ) + else + error( DCSControllableName .. " is not alive anymore. Cannot set DCSTask " .. DCSTask ) + end end if not WaitTime or WaitTime == 0 then From f628e720a98342aaf8b6ec967c60b714db611075 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Fri, 8 Sep 2017 10:27:31 +0200 Subject: [PATCH 2/3] Check if RecceGroup is alive before iterating... --- Moose Development/Moose/Functional/Detection.lua | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Moose Development/Moose/Functional/Detection.lua b/Moose Development/Moose/Functional/Detection.lua index 93456ffc2..916b10f85 100644 --- a/Moose Development/Moose/Functional/Detection.lua +++ b/Moose Development/Moose/Functional/Detection.lua @@ -2453,13 +2453,15 @@ do -- DETECTION_AREAS local DistanceRecce = 1000000000 -- Units are not further than 1000000 km away from an area :-) for RecceGroupName, RecceGroup in pairs( self.DetectionSetGroup:GetSet() ) do - for RecceUnit, RecceUnit in pairs( RecceGroup:GetUnits() ) do - if RecceUnit:IsActive() then - local RecceUnitCoord = RecceUnit:GetCoordinate() - local Distance = RecceUnitCoord:Get2DDistance( self:GetDetectedItemCoordinate( DetectedItem.Index ) ) - if Distance < DistanceRecce then - DistanceRecce = Distance - NearestRecce = RecceUnit + if RecceGroup and RecceGroup:IsAlive() then + for RecceUnit, RecceUnit in pairs( RecceGroup:GetUnits() ) do + if RecceUnit:IsActive() then + local RecceUnitCoord = RecceUnit:GetCoordinate() + local Distance = RecceUnitCoord:Get2DDistance( self:GetDetectedItemCoordinate( DetectedItem.Index ) ) + if Distance < DistanceRecce then + DistanceRecce = Distance + NearestRecce = RecceUnit + end end end end From fcce06c3f1a8d00a8c66b59917595b771eb30645 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Fri, 8 Sep 2017 10:30:52 +0200 Subject: [PATCH 3/3] Error handling --- Moose Development/Moose/Wrapper/Controllable.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Moose Development/Moose/Wrapper/Controllable.lua b/Moose Development/Moose/Wrapper/Controllable.lua index b6de2d519..bc15ea795 100644 --- a/Moose Development/Moose/Wrapper/Controllable.lua +++ b/Moose Development/Moose/Wrapper/Controllable.lua @@ -379,7 +379,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime ) local Controller = self:_GetController() Controller:setTask( DCSTask ) else - error( DCSControllableName .. " is not alive anymore. Cannot set DCSTask " .. DCSTask ) + BASE:E( DCSControllableName .. " is not alive anymore. Cannot set DCSTask " .. DCSTask ) end end