Merge pull request #519 from FlightControl-Master/517-Fix-designate-failing-on-empty-set

Fixed #517 - When detected set is empty, script fails when lasing is activated.
This commit is contained in:
Sven Van de Velde 2017-05-15 12:40:58 +02:00 committed by GitHub
commit 4d52c0ce3e

View File

@ -1611,29 +1611,33 @@ function SET_UNIT:ForEachUnitPerThreatLevel( FromThreatLevel, ToThreatLevel, Ite
local ThreatLevelSet = {} local ThreatLevelSet = {}
for UnitName, UnitObject in pairs( self.Set ) do if self:Count() ~= 0 then
local Unit = UnitObject -- Wrapper.Unit#UNIT for UnitName, UnitObject in pairs( self.Set ) do
local Unit = UnitObject -- Wrapper.Unit#UNIT
local ThreatLevel = Unit:GetThreatLevel() local ThreatLevel = Unit:GetThreatLevel()
ThreatLevelSet[ThreatLevel] = ThreatLevelSet[ThreatLevel] or {} ThreatLevelSet[ThreatLevel] = ThreatLevelSet[ThreatLevel] or {}
ThreatLevelSet[ThreatLevel].Set = ThreatLevelSet[ThreatLevel].Set or {} ThreatLevelSet[ThreatLevel].Set = ThreatLevelSet[ThreatLevel].Set or {}
ThreatLevelSet[ThreatLevel].Set[UnitName] = UnitObject ThreatLevelSet[ThreatLevel].Set[UnitName] = UnitObject
self:E( { ThreatLevel = ThreatLevel, ThreatLevelSet = ThreatLevelSet[ThreatLevel].Set } ) self:E( { ThreatLevel = ThreatLevel, ThreatLevelSet = ThreatLevelSet[ThreatLevel].Set } )
end end
local ThreatLevelIncrement = FromThreatLevel <= ToThreatLevel and 1 or -1 local ThreatLevelIncrement = FromThreatLevel <= ToThreatLevel and 1 or -1
for ThreatLevel = FromThreatLevel, ToThreatLevel, ThreatLevelIncrement do for ThreatLevel = FromThreatLevel, ToThreatLevel, ThreatLevelIncrement do
self:E( { ThreatLevel = ThreatLevel } ) self:E( { ThreatLevel = ThreatLevel } )
local ThreatLevelItem = ThreatLevelSet[ThreatLevel] local ThreatLevelItem = ThreatLevelSet[ThreatLevel]
if ThreatLevelItem then if ThreatLevelItem then
self:ForEach( IteratorFunction, arg, ThreatLevelItem.Set ) self:ForEach( IteratorFunction, arg, ThreatLevelItem.Set )
end
end end
end end
return self return self
end end
--- Iterate the SET_UNIT and call an iterator function for each **alive** UNIT presence completely in a @{Zone}, providing the UNIT and optional parameters to the called function. --- Iterate the SET_UNIT and call an iterator function for each **alive** UNIT presence completely in a @{Zone}, providing the UNIT and optional parameters to the called function.
-- @param #SET_UNIT self -- @param #SET_UNIT self
-- @param Core.Zone#ZONE ZoneObject The Zone to be tested for. -- @param Core.Zone#ZONE ZoneObject The Zone to be tested for.