mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
OPS
FLIGHTGROUP - Improved homebase for spawned units - Enabled helo inAir check due to DCS bug that inAir returns true when spawned at airbase or farp SET_ZONE - Added DrawZone() function ARMYGROUP - Improved EngageTarget() function AUFTRAG - ARMORATTACK is not falling back to GROUNDATTACK
This commit is contained in:
parent
e49fff5028
commit
426dcff085
@ -5763,8 +5763,28 @@ do -- SET_ZONE
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Draw all zones in the set on the F10 map.
|
||||||
|
-- @param #SET_ZONE self
|
||||||
|
-- @param #number Coalition Coalition: All=-1, Neutral=0, Red=1, Blue=2. Default -1=All.
|
||||||
|
-- @param #table Color RGB color table {r, g, b}, e.g. {1,0,0} for red.
|
||||||
|
-- @param #number Alpha Transparency [0,1]. Default 1.
|
||||||
|
-- @param #table FillColor RGB color table {r, g, b}, e.g. {1,0,0} for red. Default is same as `Color` value.
|
||||||
|
-- @param #number FillAlpha Transparency [0,1]. Default 0.15.
|
||||||
|
-- @param #number LineType Line type: 0=No line, 1=Solid, 2=Dashed, 3=Dotted, 4=Dot dash, 5=Long dash, 6=Two dash. Default 1=Solid.
|
||||||
|
-- @param #boolean ReadOnly (Optional) Mark is readonly and cannot be removed by users. Default false.
|
||||||
|
-- @return #SET_ZONE self
|
||||||
|
function SET_ZONE:DrawZone(Coalition, Color, Alpha, FillColor, FillAlpha, LineType, ReadOnly)
|
||||||
|
|
||||||
---
|
for _,_zone in pairs(self.Set) do
|
||||||
|
local zone=_zone --Core.Zone#ZONE
|
||||||
|
zone:DrawZone(Coalition, Color, Alpha, FillColor, FillAlpha, LineType, ReadOnly)
|
||||||
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Private function.
|
||||||
-- @param #SET_ZONE self
|
-- @param #SET_ZONE self
|
||||||
-- @param Core.Zone#ZONE_BASE MZone
|
-- @param Core.Zone#ZONE_BASE MZone
|
||||||
-- @return #SET_ZONE self
|
-- @return #SET_ZONE self
|
||||||
@ -5779,7 +5799,8 @@ do -- SET_ZONE
|
|||||||
if self.Filter.Prefixes then
|
if self.Filter.Prefixes then
|
||||||
local MZonePrefix = false
|
local MZonePrefix = false
|
||||||
for ZonePrefixId, ZonePrefix in pairs( self.Filter.Prefixes ) do
|
for ZonePrefixId, ZonePrefix in pairs( self.Filter.Prefixes ) do
|
||||||
self:T3( { "Prefix:", string.find( MZoneName, ZonePrefix, 1 ), ZonePrefix } )
|
env.info(string.format("zone %s %s", MZoneName, ZonePrefix))
|
||||||
|
self:I( { "Prefix:", string.find( MZoneName, ZonePrefix, 1 ), ZonePrefix } )
|
||||||
if string.find( MZoneName, ZonePrefix, 1 ) then
|
if string.find( MZoneName, ZonePrefix, 1 ) then
|
||||||
MZonePrefix = true
|
MZonePrefix = true
|
||||||
end
|
end
|
||||||
|
|||||||
@ -40,7 +40,7 @@
|
|||||||
--
|
--
|
||||||
-- @extends Ops.Legion#LEGION
|
-- @extends Ops.Legion#LEGION
|
||||||
|
|
||||||
--- Be surprised!
|
--- *I fly because it releases my mind from the tyranny of petty things* -- Antoine de Saint-Exupery
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
@ -97,12 +97,6 @@
|
|||||||
-- If the mission stop time is over (and the mission is not finished), it will be cancelled and removed from the queue. This applies also to mission that were not even
|
-- If the mission stop time is over (and the mission is not finished), it will be cancelled and removed from the queue. This applies also to mission that were not even
|
||||||
-- started.
|
-- started.
|
||||||
--
|
--
|
||||||
-- # Command an Airwing
|
|
||||||
--
|
|
||||||
-- An airwing can receive missions from a WINGCOMMANDER. See docs of that class for details.
|
|
||||||
--
|
|
||||||
-- However, you are still free to add missions at anytime.
|
|
||||||
--
|
|
||||||
--
|
--
|
||||||
-- @field #AIRWING
|
-- @field #AIRWING
|
||||||
AIRWING = {
|
AIRWING = {
|
||||||
|
|||||||
@ -38,12 +38,10 @@
|
|||||||
-- @field Core.Set#SET_ZONE retreatZones Set of retreat zones.
|
-- @field Core.Set#SET_ZONE retreatZones Set of retreat zones.
|
||||||
-- @extends Ops.OpsGroup#OPSGROUP
|
-- @extends Ops.OpsGroup#OPSGROUP
|
||||||
|
|
||||||
--- *Your soul may belong to Jesus, but your ass belongs to the marines.* -- Eugene B Sledge
|
--- *Your soul may belong to Jesus, but your ass belongs to the marines* -- Eugene B Sledge
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
-- 
|
|
||||||
--
|
|
||||||
-- # The ARMYGROUP Concept
|
-- # The ARMYGROUP Concept
|
||||||
--
|
--
|
||||||
-- This class enhances ground groups.
|
-- This class enhances ground groups.
|
||||||
@ -60,6 +58,8 @@ ARMYGROUP = {
|
|||||||
-- @field Ops.Target#TARGET Target The target.
|
-- @field Ops.Target#TARGET Target The target.
|
||||||
-- @field Core.Point#COORDINATE Coordinate Last known coordinate of the target.
|
-- @field Core.Point#COORDINATE Coordinate Last known coordinate of the target.
|
||||||
-- @field Ops.OpsGroup#OPSGROUP.Waypoint Waypoint the waypoint created to go to the target.
|
-- @field Ops.OpsGroup#OPSGROUP.Waypoint Waypoint the waypoint created to go to the target.
|
||||||
|
-- @field #number Speed Speed in knots.
|
||||||
|
-- @field #string Formation Formation used in the engagement.
|
||||||
-- @field #number roe ROE backup.
|
-- @field #number roe ROE backup.
|
||||||
-- @field #number alarmstate Alarm state backup.
|
-- @field #number alarmstate Alarm state backup.
|
||||||
|
|
||||||
@ -281,11 +281,16 @@ function ARMYGROUP:New(group)
|
|||||||
--- Triggers the FSM event "EngageTarget".
|
--- Triggers the FSM event "EngageTarget".
|
||||||
-- @function [parent=#ARMYGROUP] EngageTarget
|
-- @function [parent=#ARMYGROUP] EngageTarget
|
||||||
-- @param #ARMYGROUP self
|
-- @param #ARMYGROUP self
|
||||||
|
-- @param Wrapper.Group#GROUP Group the group to be engaged.
|
||||||
|
-- @param #string Formation Formation used in the engagement.
|
||||||
|
|
||||||
--- Triggers the FSM event "EngageTarget" after a delay.
|
--- Triggers the FSM event "EngageTarget" after a delay.
|
||||||
-- @function [parent=#ARMYGROUP] __EngageTarget
|
-- @function [parent=#ARMYGROUP] __EngageTarget
|
||||||
-- @param #ARMYGROUP self
|
-- @param #ARMYGROUP self
|
||||||
-- @param #number delay Delay in seconds.
|
-- @param #number delay Delay in seconds.
|
||||||
|
-- @param Wrapper.Group#GROUP Group the group to be engaged.
|
||||||
|
-- @param #string Formation Formation used in the engagement.
|
||||||
|
|
||||||
|
|
||||||
--- On after "EngageTarget" event.
|
--- On after "EngageTarget" event.
|
||||||
-- @function [parent=#ARMYGROUP] OnAfterEngageTarget
|
-- @function [parent=#ARMYGROUP] OnAfterEngageTarget
|
||||||
@ -293,6 +298,8 @@ function ARMYGROUP:New(group)
|
|||||||
-- @param #string From From state.
|
-- @param #string From From state.
|
||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
|
-- @param Wrapper.Group#GROUP Group the group to be engaged.
|
||||||
|
-- @param #string Formation Formation used in the engagement.
|
||||||
|
|
||||||
|
|
||||||
--- Triggers the FSM event "Disengage".
|
--- Triggers the FSM event "Disengage".
|
||||||
@ -987,33 +994,6 @@ function ARMYGROUP:onafterUpdateRoute(From, Event, To, n, N, Speed, Formation)
|
|||||||
|
|
||||||
current=self:GetClosestRoad():WaypointGround(UTILS.MpsToKmph(self.speedWp), ENUMS.Formation.Vehicle.OnRoad)
|
current=self:GetClosestRoad():WaypointGround(UTILS.MpsToKmph(self.speedWp), ENUMS.Formation.Vehicle.OnRoad)
|
||||||
table.insert(waypoints, 2, current)
|
table.insert(waypoints, 2, current)
|
||||||
|
|
||||||
-- Removing this for now as I don't see why it is necessary and it is very CPU intensive.
|
|
||||||
-- You only need the start and end waypoint on the road. Other waypoints on the road are not necessray.
|
|
||||||
--[[
|
|
||||||
-- take direct line if on road is too long
|
|
||||||
local wptable,length,valid=self:GetCoordinate():GetPathOnRoad(wp.coordinate or wp.roadcoord,true,false,false,false) or {}
|
|
||||||
|
|
||||||
local lenghtdirect = self:GetCoordinate():Get2DDistance(wp.coordinate) or 100000
|
|
||||||
|
|
||||||
if valid and length then
|
|
||||||
if length > lenghtdirect * 8 then
|
|
||||||
valid = false -- rather go directly
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local count = 2
|
|
||||||
if valid then
|
|
||||||
for _,_coord in ipairs(wptable) do
|
|
||||||
local current = _coord:WaypointGround(UTILS.MpsToKmph(self.speedWp), ENUMS.Formation.Vehicle.OnRoad)
|
|
||||||
table.insert(waypoints, count, current)
|
|
||||||
count=count+1
|
|
||||||
end
|
|
||||||
else
|
|
||||||
current=self:GetClosestRoad():WaypointGround(UTILS.MpsToKmph(self.speedWp), ENUMS.Formation.Vehicle.OnRoad)
|
|
||||||
table.insert(waypoints, count, current)
|
|
||||||
end
|
|
||||||
]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Debug output.
|
-- Debug output.
|
||||||
@ -1392,7 +1372,9 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
-- @param Wrapper.Group#GROUP Group the group to be engaged.
|
-- @param Wrapper.Group#GROUP Group the group to be engaged.
|
||||||
function ARMYGROUP:onbeforeEngageTarget(From, Event, To, Target)
|
-- @param #number Speed Speed in knots.
|
||||||
|
-- @param #string Formation Formation used in the engagement. Default `ENUMS.Formation.Vehicle.Vee`.
|
||||||
|
function ARMYGROUP:onbeforeEngageTarget(From, Event, To, Target, Speed, Formation)
|
||||||
|
|
||||||
local dt=nil
|
local dt=nil
|
||||||
local allowed=true
|
local allowed=true
|
||||||
@ -1430,7 +1412,9 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
-- @param Wrapper.Group#GROUP Group the group to be engaged.
|
-- @param Wrapper.Group#GROUP Group the group to be engaged.
|
||||||
function ARMYGROUP:onafterEngageTarget(From, Event, To, Target)
|
-- @param #number Speed Attack speed in knots.
|
||||||
|
-- @param #string Formation Formation used in the engagement. Default `ENUMS.Formation.Vehicle.Vee`.
|
||||||
|
function ARMYGROUP:onafterEngageTarget(From, Event, To, Target, Speed, Formation)
|
||||||
self:T(self.lid.."Engaging Target")
|
self:T(self.lid.."Engaging Target")
|
||||||
|
|
||||||
-- Make sure this is a target.
|
-- Make sure this is a target.
|
||||||
@ -1458,11 +1442,13 @@ function ARMYGROUP:onafterEngageTarget(From, Event, To, Target)
|
|||||||
local uid=self:GetWaypointCurrent().uid
|
local uid=self:GetWaypointCurrent().uid
|
||||||
|
|
||||||
-- Set formation.
|
-- Set formation.
|
||||||
--TODO: make this input.
|
self.engage.Formation=Formation or ENUMS.Formation.Vehicle.Vee
|
||||||
local Formation=ENUMS.Formation.Vehicle.Vee
|
|
||||||
|
-- Set speed.
|
||||||
|
self.engage.Speed=Speed
|
||||||
|
|
||||||
-- Add waypoint after current.
|
-- Add waypoint after current.
|
||||||
self.engage.Waypoint=self:AddWaypoint(intercoord, nil, uid, Formation, true)
|
self.engage.Waypoint=self:AddWaypoint(intercoord, self.engage.Speed, uid, self.engage.Formation, true)
|
||||||
|
|
||||||
-- Set if we want to resume route after reaching the detour waypoint.
|
-- Set if we want to resume route after reaching the detour waypoint.
|
||||||
self.engage.Waypoint.detour=1
|
self.engage.Waypoint.detour=1
|
||||||
@ -1500,7 +1486,7 @@ function ARMYGROUP:_UpdateEngageTarget()
|
|||||||
local intercoord=self:GetCoordinate():GetIntermediateCoordinate(self.engage.Coordinate, 0.9)
|
local intercoord=self:GetCoordinate():GetIntermediateCoordinate(self.engage.Coordinate, 0.9)
|
||||||
|
|
||||||
-- Add waypoint after current.
|
-- Add waypoint after current.
|
||||||
self.engage.Waypoint=self:AddWaypoint(intercoord, nil, uid, Formation, true)
|
self.engage.Waypoint=self:AddWaypoint(intercoord, self.engage.Speed, uid, self.engage.Formation, true)
|
||||||
|
|
||||||
-- Set if we want to resume route after reaching the detour waypoint.
|
-- Set if we want to resume route after reaching the detour waypoint.
|
||||||
self.engage.Waypoint.detour=0
|
self.engage.Waypoint.detour=0
|
||||||
|
|||||||
@ -279,13 +279,9 @@
|
|||||||
--
|
--
|
||||||
-- An arty mission can be created with the @{#AUFTRAG.NewARTY}() function.
|
-- An arty mission can be created with the @{#AUFTRAG.NewARTY}() function.
|
||||||
--
|
--
|
||||||
-- ## ARMORATTACK
|
-- ## GROUNDATTACK
|
||||||
--
|
--
|
||||||
-- A mission to send a tank group can be created with the @{#AUFTRAG.NewARMORATTACK}() function.
|
-- A ground attack mission can be created with the @{#AUFTRAG.NewGROUNDATTACK}() function.
|
||||||
--
|
|
||||||
-- # Options and Parameters
|
|
||||||
--
|
|
||||||
-- TODO
|
|
||||||
--
|
--
|
||||||
-- # Assigning Missions
|
-- # Assigning Missions
|
||||||
--
|
--
|
||||||
@ -1583,7 +1579,7 @@ end
|
|||||||
-- @param #AUFTRAG self
|
-- @param #AUFTRAG self
|
||||||
-- @param Core.Set#SET_GROUP TransportGroupSet The set group(s) to be transported.
|
-- @param Core.Set#SET_GROUP TransportGroupSet The set group(s) to be transported.
|
||||||
-- @param Core.Point#COORDINATE DropoffCoordinate Coordinate where the helo will land drop off the the troops.
|
-- @param Core.Point#COORDINATE DropoffCoordinate Coordinate where the helo will land drop off the the troops.
|
||||||
-- @param Core.Point#COORDINATE PickupCoordinate Coordinate where the helo will land to pick up the the cargo. Default is the fist transport group.
|
-- @param Core.Point#COORDINATE PickupCoordinate Coordinate where the helo will land to pick up the the cargo. Default is the first transport group.
|
||||||
-- @param #number PickupRadius Radius around the pickup coordinate in meters. Default 100 m.
|
-- @param #number PickupRadius Radius around the pickup coordinate in meters. Default 100 m.
|
||||||
-- @return #AUFTRAG self
|
-- @return #AUFTRAG self
|
||||||
function AUFTRAG:NewTROOPTRANSPORT(TransportGroupSet, DropoffCoordinate, PickupCoordinate, PickupRadius)
|
function AUFTRAG:NewTROOPTRANSPORT(TransportGroupSet, DropoffCoordinate, PickupCoordinate, PickupRadius)
|
||||||
@ -1740,7 +1736,7 @@ end
|
|||||||
-- @param Core.Zone#ZONE Zone The patrol zone.
|
-- @param Core.Zone#ZONE Zone The patrol zone.
|
||||||
-- @param #number Speed Speed in knots.
|
-- @param #number Speed Speed in knots.
|
||||||
-- @param #number Altitude Altitude in feet. Only for airborne units. Default 2000 feet ASL.
|
-- @param #number Altitude Altitude in feet. Only for airborne units. Default 2000 feet ASL.
|
||||||
-- @param #string Formation Formation used during patrol.
|
-- @param #string Formation Formation used by ground units during patrol. Default "Off Road".
|
||||||
-- @return #AUFTRAG self
|
-- @return #AUFTRAG self
|
||||||
function AUFTRAG:NewPATROLZONE(Zone, Speed, Altitude, Formation)
|
function AUFTRAG:NewPATROLZONE(Zone, Speed, Altitude, Formation)
|
||||||
|
|
||||||
@ -1767,13 +1763,14 @@ function AUFTRAG:NewPATROLZONE(Zone, Speed, Altitude, Formation)
|
|||||||
|
|
||||||
mission.DCStask=mission:GetDCSMissionTask()
|
mission.DCStask=mission:GetDCSMissionTask()
|
||||||
|
|
||||||
mission.DCStask.params.formation=Formation
|
mission.DCStask.params.formation=Formation or "Off Road"
|
||||||
|
|
||||||
return mission
|
return mission
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--- **[GROUND]** Create a ARMORATTACK mission. Armoured ground group(s) will go to the zone and attack.
|
--- **[OBSOLETE]** Create a ARMORATTACK mission.
|
||||||
|
-- ** Note that this is actually creating a GROUNDATTACK mission!**
|
||||||
-- @param #AUFTRAG self
|
-- @param #AUFTRAG self
|
||||||
-- @param Ops.Target#TARGET Target The target to attack. Can be a GROUP, UNIT or STATIC object.
|
-- @param Ops.Target#TARGET Target The target to attack. Can be a GROUP, UNIT or STATIC object.
|
||||||
-- @param #number Speed Speed in knots.
|
-- @param #number Speed Speed in knots.
|
||||||
@ -1781,23 +1778,10 @@ end
|
|||||||
-- @return #AUFTRAG self
|
-- @return #AUFTRAG self
|
||||||
function AUFTRAG:NewARMORATTACK(Target, Speed, Formation)
|
function AUFTRAG:NewARMORATTACK(Target, Speed, Formation)
|
||||||
|
|
||||||
local mission=AUFTRAG:New(AUFTRAG.Type.ARMORATTACK)
|
local mission=AUFTRAG:NewGROUNDATTACK(Target, Speed, Formation)
|
||||||
|
|
||||||
mission:_TargetFromObject(Target)
|
-- Mission type.
|
||||||
|
mission.type=AUFTRAG.Type.ARMORATTACK
|
||||||
mission.missionTask=mission:GetMissionTaskforMissionType(AUFTRAG.Type.ARMORATTACK)
|
|
||||||
|
|
||||||
mission.optionROE=ENUMS.ROE.OpenFire
|
|
||||||
mission.optionAlarm=ENUMS.AlarmState.Auto
|
|
||||||
mission.optionFormation="On Road"
|
|
||||||
mission.optionAttackFormation=Formation or "Wedge"
|
|
||||||
|
|
||||||
mission.missionFraction=1.0
|
|
||||||
mission.missionSpeed=Speed and UTILS.KnotsToKmph(Speed) or 20
|
|
||||||
|
|
||||||
mission.categories={AUFTRAG.Category.GROUND}
|
|
||||||
|
|
||||||
mission.DCStask=mission:GetDCSMissionTask()
|
|
||||||
|
|
||||||
return mission
|
return mission
|
||||||
end
|
end
|
||||||
@ -1805,8 +1789,8 @@ end
|
|||||||
--- **[GROUND]** Create a GROUNDATTACK mission. Ground group(s) will go to a target object and attack.
|
--- **[GROUND]** Create a GROUNDATTACK mission. Ground group(s) will go to a target object and attack.
|
||||||
-- @param #AUFTRAG self
|
-- @param #AUFTRAG self
|
||||||
-- @param Wrapper.Positionable#POSITIONABLE Target The target to attack. Can be a GROUP, UNIT or STATIC object.
|
-- @param Wrapper.Positionable#POSITIONABLE Target The target to attack. Can be a GROUP, UNIT or STATIC object.
|
||||||
-- @param #number Speed Speed in knots.
|
-- @param #number Speed Speed in knots. Default max.
|
||||||
-- @param #string Formation The attack formation, e.g. "Wedge", "Vee" etc.
|
-- @param #string Formation The attack formation, e.g. "Wedge", "Vee" etc. Default `ENUMS.Formation.Vehicle.Vee`.
|
||||||
-- @return #AUFTRAG self
|
-- @return #AUFTRAG self
|
||||||
function AUFTRAG:NewGROUNDATTACK(Target, Speed, Formation)
|
function AUFTRAG:NewGROUNDATTACK(Target, Speed, Formation)
|
||||||
|
|
||||||
@ -1816,18 +1800,20 @@ function AUFTRAG:NewGROUNDATTACK(Target, Speed, Formation)
|
|||||||
|
|
||||||
mission.missionTask=mission:GetMissionTaskforMissionType(AUFTRAG.Type.GROUNDATTACK)
|
mission.missionTask=mission:GetMissionTaskforMissionType(AUFTRAG.Type.GROUNDATTACK)
|
||||||
|
|
||||||
|
-- Defaults.
|
||||||
mission.optionROE=ENUMS.ROE.OpenFire
|
mission.optionROE=ENUMS.ROE.OpenFire
|
||||||
mission.optionAlarm=ENUMS.AlarmState.Auto
|
mission.optionAlarm=ENUMS.AlarmState.Auto
|
||||||
mission.optionFormation="On Road"
|
mission.optionFormation="On Road"
|
||||||
mission.optionAttackFormation=Formation or "Wedge"
|
mission.missionFraction=0.70
|
||||||
|
mission.missionSpeed=Speed and UTILS.KnotsToKmph(Speed) or nil
|
||||||
mission.missionFraction=0.75
|
|
||||||
mission.missionSpeed=Speed and UTILS.KnotsToKmph(Speed) or 20
|
|
||||||
|
|
||||||
mission.categories={AUFTRAG.Category.GROUND}
|
mission.categories={AUFTRAG.Category.GROUND}
|
||||||
|
|
||||||
mission.DCStask=mission:GetDCSMissionTask()
|
mission.DCStask=mission:GetDCSMissionTask()
|
||||||
|
|
||||||
|
mission.DCStask.params.speed=Speed
|
||||||
|
mission.DCStask.params.formation=Formation or ENUMS.Formation.Vehicle.Vee
|
||||||
|
|
||||||
return mission
|
return mission
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1836,10 +1822,11 @@ end
|
|||||||
-- @param Core.Set#SET_ZONE ZoneSet The recon zones.
|
-- @param Core.Set#SET_ZONE ZoneSet The recon zones.
|
||||||
-- @param #number Speed Speed in knots.
|
-- @param #number Speed Speed in knots.
|
||||||
-- @param #number Altitude Altitude in feet. Only for airborne units. Default 2000 feet ASL.
|
-- @param #number Altitude Altitude in feet. Only for airborne units. Default 2000 feet ASL.
|
||||||
-- @param #boolean Adinfinitum If true, the group will start over again after reaching the final zone.
|
-- @param #boolean Adinfinitum If `true`, the group will start over again after reaching the final zone.
|
||||||
-- @param #boolean Randomly If true, the group will select a random zone.
|
-- @param #boolean Randomly If `true`, the group will select a random zone.
|
||||||
|
-- @param #string Formation Formation used during recon route.
|
||||||
-- @return #AUFTRAG self
|
-- @return #AUFTRAG self
|
||||||
function AUFTRAG:NewRECON(ZoneSet, Speed, Altitude, Adinfinitum, Randomly)
|
function AUFTRAG:NewRECON(ZoneSet, Speed, Altitude, Adinfinitum, Randomly, Formation)
|
||||||
|
|
||||||
local mission=AUFTRAG:New(AUFTRAG.Type.RECON)
|
local mission=AUFTRAG:New(AUFTRAG.Type.RECON)
|
||||||
|
|
||||||
@ -1860,12 +1847,7 @@ function AUFTRAG:NewRECON(ZoneSet, Speed, Altitude, Adinfinitum, Randomly)
|
|||||||
mission.DCStask=mission:GetDCSMissionTask()
|
mission.DCStask=mission:GetDCSMissionTask()
|
||||||
mission.DCStask.params.adinfinitum=Adinfinitum
|
mission.DCStask.params.adinfinitum=Adinfinitum
|
||||||
mission.DCStask.params.randomly=Randomly
|
mission.DCStask.params.randomly=Randomly
|
||||||
|
mission.DCStask.params.formation=Formation
|
||||||
if Randomly then
|
|
||||||
local targets = mission.DCStask.params.target.targets -- Ops.Target#TARGET
|
|
||||||
local shuffled = UTILS.ShuffleTable(targets)
|
|
||||||
mission.DCStask.params.target.targets = shuffled
|
|
||||||
end
|
|
||||||
|
|
||||||
return mission
|
return mission
|
||||||
end
|
end
|
||||||
@ -1978,7 +1960,6 @@ function AUFTRAG:NewARMOREDGUARD(Coordinate,Formation)
|
|||||||
mission.optionROE=ENUMS.ROE.OpenFire
|
mission.optionROE=ENUMS.ROE.OpenFire
|
||||||
mission.optionAlarm=ENUMS.AlarmState.Auto
|
mission.optionAlarm=ENUMS.AlarmState.Auto
|
||||||
mission.optionFormation=Formation or "On Road"
|
mission.optionFormation=Formation or "On Road"
|
||||||
--mission.optionAttackFormation=Formation or "Wedge"
|
|
||||||
|
|
||||||
mission.missionFraction=1.0
|
mission.missionFraction=1.0
|
||||||
|
|
||||||
@ -5118,28 +5099,6 @@ function AUFTRAG:GetDCSMissionTask(TaskControllable)
|
|||||||
|
|
||||||
table.insert(DCStasks, DCStask)
|
table.insert(DCStasks, DCStask)
|
||||||
|
|
||||||
elseif self.type==AUFTRAG.Type.ARMORATTACK then
|
|
||||||
|
|
||||||
-------------------------
|
|
||||||
-- ARMOR ATTACK Mission --
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
local DCStask={}
|
|
||||||
|
|
||||||
DCStask.id=AUFTRAG.SpecialTask.ARMORATTACK
|
|
||||||
|
|
||||||
-- We create a "fake" DCS task and pass the parameters to the ARMYGROUP.
|
|
||||||
local param={}
|
|
||||||
param.zone=self:GetObjective()
|
|
||||||
param.tVec2=param.zone:GetVec2()
|
|
||||||
param.tzone=ZONE_RADIUS:New("ARMORATTACK-Zone-"..self.auftragsnummer,param.tVec2,1000)
|
|
||||||
param.action="Wedge"
|
|
||||||
param.speed=self.missionSpeed
|
|
||||||
|
|
||||||
DCStask.params=param
|
|
||||||
|
|
||||||
table.insert(DCStasks, DCStask)
|
|
||||||
|
|
||||||
elseif self.type==AUFTRAG.Type.GROUNDATTACK then
|
elseif self.type==AUFTRAG.Type.GROUNDATTACK then
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|||||||
@ -2429,46 +2429,54 @@ function CHIEF:_GetMissionPerformanceFromTarget(Target)
|
|||||||
-- SEAD/DEAD
|
-- SEAD/DEAD
|
||||||
|
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.SEAD, 100))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.SEAD, 100))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.GROUNDATTACK, 50))
|
||||||
|
|
||||||
elseif attribute==GROUP.Attribute.GROUND_EWR then
|
elseif attribute==GROUP.Attribute.GROUND_EWR then
|
||||||
|
|
||||||
-- EWR
|
-- EWR
|
||||||
|
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.SEAD, 100))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.SEAD, 100))
|
||||||
--table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 90))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.GROUNDATTACK, 50))
|
||||||
|
|
||||||
elseif attribute==GROUP.Attribute.GROUND_AAA then
|
elseif attribute==GROUP.Attribute.GROUND_AAA then
|
||||||
|
|
||||||
-- AAA
|
-- AAA
|
||||||
|
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.GROUNDATTACK, 50))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.ARMORATTACK, 40))
|
||||||
|
|
||||||
elseif attribute==GROUP.Attribute.GROUND_ARTILLERY then
|
elseif attribute==GROUP.Attribute.GROUND_ARTILLERY then
|
||||||
|
|
||||||
-- ARTY
|
-- ARTY
|
||||||
|
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.GROUNDATTACK, 75))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.ARMORATTACK, 70))
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BOMBING, 70))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BOMBING, 70))
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.ARTY, 30))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.ARTY, 30))
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.ARMORATTACK, 75))
|
|
||||||
|
|
||||||
elseif attribute==GROUP.Attribute.GROUND_INFANTRY then
|
elseif attribute==GROUP.Attribute.GROUND_INFANTRY then
|
||||||
|
|
||||||
-- Infantry
|
-- Infantry
|
||||||
|
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.ARMORATTACK, 100))
|
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.GROUNDATTACK, 50))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.ARMORATTACK, 40))
|
||||||
|
|
||||||
elseif attribute==GROUP.Attribute.GROUND_TANK then
|
elseif attribute==GROUP.Attribute.GROUND_TANK then
|
||||||
|
|
||||||
-- Tanks
|
-- Tanks
|
||||||
|
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.ARMORATTACK, 75))
|
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.CAS, 100))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.CAS, 100))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.GROUNDATTACK, 50))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.ARMORATTACK, 40))
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.BAI, 100))
|
||||||
|
table.insert(missionperf, self:_CreateMissionPerformance(AUFTRAG.Type.GROUNDATTACK, 50))
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -45,7 +45,7 @@
|
|||||||
-- @field #number cargobayLimit Cargo bay capacity in kg.
|
-- @field #number cargobayLimit Cargo bay capacity in kg.
|
||||||
-- @extends Core.Fsm#FSM
|
-- @extends Core.Fsm#FSM
|
||||||
|
|
||||||
--- *It is unbelievable what a platoon of twelve aircraft did to tip the balance.* -- Adolf Galland
|
--- *It is unbelievable what a platoon of twelve aircraft did to tip the balance* -- Adolf Galland
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
|
|||||||
@ -1201,7 +1201,7 @@ function FLIGHTGROUP:onafterElementSpawned(From, Event, To, Element)
|
|||||||
-- Set element status.
|
-- Set element status.
|
||||||
self:_UpdateStatus(Element, OPSGROUP.ElementStatus.SPAWNED)
|
self:_UpdateStatus(Element, OPSGROUP.ElementStatus.SPAWNED)
|
||||||
|
|
||||||
if Element.unit:InAir(true) then
|
if Element.unit:InAir(not self.isHelo) then -- Setting check because of problems with helos dynamically spawned where inAir WRONGLY returned true if spawned at an airbase or farp!
|
||||||
-- Trigger ElementAirborne event. Add a little delay because spawn is also delayed!
|
-- Trigger ElementAirborne event. Add a little delay because spawn is also delayed!
|
||||||
self:__ElementAirborne(0.11, Element)
|
self:__ElementAirborne(0.11, Element)
|
||||||
else
|
else
|
||||||
@ -1532,6 +1532,12 @@ function FLIGHTGROUP:onafterParking(From, Event, To)
|
|||||||
-- Set current airbase.
|
-- Set current airbase.
|
||||||
self.currbase=airbase
|
self.currbase=airbase
|
||||||
|
|
||||||
|
-- Set homebase to current airbase if not defined yet.
|
||||||
|
-- This is necessary, e.g, when flights are spawned at an airbase because they do not have a takeoff waypoint.
|
||||||
|
if not self.homebase then
|
||||||
|
self.homebase=airbase
|
||||||
|
end
|
||||||
|
|
||||||
-- Parking time stamp.
|
-- Parking time stamp.
|
||||||
self.Tparking=timer.getAbsTime()
|
self.Tparking=timer.getAbsTime()
|
||||||
|
|
||||||
|
|||||||
@ -3021,7 +3021,6 @@ function OPSGROUP:OnEventBirth(EventData)
|
|||||||
local group=EventData.IniGroup
|
local group=EventData.IniGroup
|
||||||
local unitname=EventData.IniUnitName
|
local unitname=EventData.IniUnitName
|
||||||
|
|
||||||
|
|
||||||
-- Set homebase if not already set.
|
-- Set homebase if not already set.
|
||||||
if self.isFlightgroup then
|
if self.isFlightgroup then
|
||||||
|
|
||||||
@ -3746,17 +3745,29 @@ function OPSGROUP:onafterTaskExecute(From, Event, To, Task)
|
|||||||
|
|
||||||
-- Target
|
-- Target
|
||||||
local target=Task.dcstask.params.target --Ops.Target#TARGET
|
local target=Task.dcstask.params.target --Ops.Target#TARGET
|
||||||
self.lastindex=1
|
|
||||||
|
-- Init a table.
|
||||||
|
self.reconindecies={}
|
||||||
|
for i=1,#target.targets do
|
||||||
|
table.insert(self.reconindecies, i)
|
||||||
|
end
|
||||||
|
|
||||||
|
local n=1
|
||||||
|
if Task.dcstask.params.randomly then
|
||||||
|
n=UTILS.GetRandomTableElement(self.reconindecies)
|
||||||
|
else
|
||||||
|
table.remove(self.reconindecies, n)
|
||||||
|
end
|
||||||
|
|
||||||
-- Target object and zone.
|
-- Target object and zone.
|
||||||
local object=target.targets[1] --Ops.Target#TARGET.Object
|
local object=target.targets[n] --Ops.Target#TARGET.Object
|
||||||
local zone=object.Object --Core.Zone#ZONE
|
local zone=object.Object --Core.Zone#ZONE
|
||||||
|
|
||||||
-- Random coordinate in zone.
|
-- Random coordinate in zone.
|
||||||
local Coordinate=zone:GetRandomCoordinate()
|
local Coordinate=zone:GetRandomCoordinate()
|
||||||
|
|
||||||
-- Speed and altitude.
|
-- Speed and altitude.
|
||||||
local Speed=UTILS.MpsToKnots(Task.dcstask.params.speed) or UTILS.KmphToKnots(self.speedCruise)
|
local Speed=Task.dcstask.params.speed and UTILS.MpsToKnots(Task.dcstask.params.speed) or UTILS.KmphToKnots(self.speedCruise)
|
||||||
local Altitude=Task.dcstask.params.altitude and UTILS.MetersToFeet(Task.dcstask.params.altitude) or nil
|
local Altitude=Task.dcstask.params.altitude and UTILS.MetersToFeet(Task.dcstask.params.altitude) or nil
|
||||||
|
|
||||||
--Coordinate:MarkToAll("Recon Waypoint Execute")
|
--Coordinate:MarkToAll("Recon Waypoint Execute")
|
||||||
@ -3768,7 +3779,7 @@ function OPSGROUP:onafterTaskExecute(From, Event, To, Task)
|
|||||||
if self.isFlightgroup then
|
if self.isFlightgroup then
|
||||||
wp=FLIGHTGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Altitude)
|
wp=FLIGHTGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Altitude)
|
||||||
elseif self.isArmygroup then
|
elseif self.isArmygroup then
|
||||||
wp=ARMYGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Formation)
|
wp=ARMYGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Task.dcstask.params.formation)
|
||||||
elseif self.isNavygroup then
|
elseif self.isNavygroup then
|
||||||
wp=NAVYGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Altitude)
|
wp=NAVYGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Altitude)
|
||||||
end
|
end
|
||||||
@ -3808,7 +3819,7 @@ function OPSGROUP:onafterTaskExecute(From, Event, To, Task)
|
|||||||
-- FLIGHTGROUP not implemented (intended!) for this AUFTRAG type.
|
-- FLIGHTGROUP not implemented (intended!) for this AUFTRAG type.
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif Task.dcstask.id==AUFTRAG.SpecialTask.GROUNDATTACK then
|
elseif Task.dcstask.id==AUFTRAG.SpecialTask.GROUNDATTACK or Task.dcstask.id==AUFTRAG.SpecialTask.ARMORATTACK then
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Task "Ground Attack" Mission.
|
-- Task "Ground Attack" Mission.
|
||||||
@ -3817,8 +3828,14 @@ function OPSGROUP:onafterTaskExecute(From, Event, To, Task)
|
|||||||
-- Engage target.
|
-- Engage target.
|
||||||
local target=Task.dcstask.params.target --Ops.Target#TARGET
|
local target=Task.dcstask.params.target --Ops.Target#TARGET
|
||||||
|
|
||||||
|
-- Set speed. Default max.
|
||||||
|
local speed=self.speedMax and UTILS.KmphToKnots(self.speedMax) or nil
|
||||||
|
if Task.dcstask.params.speed then
|
||||||
|
speed=Task.dcstask.params.speed
|
||||||
|
end
|
||||||
|
|
||||||
if target then
|
if target then
|
||||||
self:EngageTarget(target)
|
self:EngageTarget(target, speed, Task.dcstask.params.formation)
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif Task.dcstask.id==AUFTRAG.SpecialTask.HOVER then
|
elseif Task.dcstask.id==AUFTRAG.SpecialTask.HOVER then
|
||||||
@ -3967,7 +3984,7 @@ function OPSGROUP:onafterTaskCancel(From, Event, To, Task)
|
|||||||
done=true
|
done=true
|
||||||
elseif Task.dcstask.id==AUFTRAG.SpecialTask.ONGUARD or Task.dcstask.id==AUFTRAG.SpecialTask.ARMOREDGUARD then
|
elseif Task.dcstask.id==AUFTRAG.SpecialTask.ONGUARD or Task.dcstask.id==AUFTRAG.SpecialTask.ARMOREDGUARD then
|
||||||
done=true
|
done=true
|
||||||
elseif Task.dcstask.id==AUFTRAG.SpecialTask.GROUNDATTACK then
|
elseif Task.dcstask.id==AUFTRAG.SpecialTask.GROUNDATTACK or Task.dcstask.id==AUFTRAG.SpecialTask.ARMORATTACK then
|
||||||
done=true
|
done=true
|
||||||
elseif stopflag==1 or (not self:IsAlive()) or self:IsDead() or self:IsStopped() then
|
elseif stopflag==1 or (not self:IsAlive()) or self:IsDead() or self:IsStopped() then
|
||||||
-- Manual call TaskDone if setting flag to one was not successful.
|
-- Manual call TaskDone if setting flag to one was not successful.
|
||||||
@ -4745,20 +4762,6 @@ function OPSGROUP:RouteToMission(mission, delay)
|
|||||||
waypointcoord=zone:GetCoordinate()
|
waypointcoord=zone:GetCoordinate()
|
||||||
end
|
end
|
||||||
|
|
||||||
local armorwaypointcoord = nil
|
|
||||||
if mission.type==AUFTRAG.Type.ARMORATTACK then
|
|
||||||
local target=mission.engageTarget:GetObject() -- Wrapper.Positionable#POSITIONABLE
|
|
||||||
--BASE:I({mission.DCStask})
|
|
||||||
--BASE:I({mission.DCStask.params})
|
|
||||||
--local zone = ZONE_RADIUS:New("AttackZone",target:GetVec2(),1000)
|
|
||||||
local zone = mission.DCStask.params.tzone -- Core.Zone#ZONE_RADIUS
|
|
||||||
-- final WP
|
|
||||||
waypointcoord=zone:GetRandomCoordinate(0, 100, surfacetypes) -- Core.Point#COORDINATE
|
|
||||||
-- Ingress - add formation to this one
|
|
||||||
armorwaypointcoord = zone:GetRandomCoordinate(1000, 500, surfacetypes) -- Core.Point#COORDINATE
|
|
||||||
self:__EngageTarget(2,target)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Add enroute tasks.
|
-- Add enroute tasks.
|
||||||
for _,task in pairs(mission.enrouteTasks) do
|
for _,task in pairs(mission.enrouteTasks) do
|
||||||
self:AddTaskEnroute(task)
|
self:AddTaskEnroute(task)
|
||||||
@ -4851,13 +4854,7 @@ function OPSGROUP:RouteToMission(mission, delay)
|
|||||||
if self:IsFlightgroup() then
|
if self:IsFlightgroup() then
|
||||||
waypoint=FLIGHTGROUP.AddWaypoint(self, waypointcoord, SpeedToMission, uid, UTILS.MetersToFeet(mission.missionAltitude or self.altitudeCruise), false)
|
waypoint=FLIGHTGROUP.AddWaypoint(self, waypointcoord, SpeedToMission, uid, UTILS.MetersToFeet(mission.missionAltitude or self.altitudeCruise), false)
|
||||||
elseif self:IsArmygroup() then
|
elseif self:IsArmygroup() then
|
||||||
if mission.type==AUFTRAG.Type.ARMORATTACK then
|
|
||||||
waypoint=ARMYGROUP.AddWaypoint(self, armorwaypointcoord, SpeedToMission, uid, mission.optionFormation, false)
|
|
||||||
local attackformation = mission.optionAttackFormation or "Vee"
|
|
||||||
waypoint=ARMYGROUP.AddWaypoint(self, waypointcoord, SpeedToMission, nil, attackformation, false)
|
|
||||||
else
|
|
||||||
waypoint=ARMYGROUP.AddWaypoint(self, waypointcoord, SpeedToMission, uid, mission.optionFormation, false)
|
waypoint=ARMYGROUP.AddWaypoint(self, waypointcoord, SpeedToMission, uid, mission.optionFormation, false)
|
||||||
end
|
|
||||||
elseif self:IsNavygroup() then
|
elseif self:IsNavygroup() then
|
||||||
waypoint=NAVYGROUP.AddWaypoint(self, waypointcoord, SpeedToMission, uid, mission.missionAltitude or self.altitudeCruise, false)
|
waypoint=NAVYGROUP.AddWaypoint(self, waypointcoord, SpeedToMission, uid, mission.missionAltitude or self.altitudeCruise, false)
|
||||||
end
|
end
|
||||||
@ -5107,7 +5104,6 @@ function OPSGROUP:onafterPassingWaypoint(From, Event, To, Waypoint)
|
|||||||
|
|
||||||
-- Speed and altitude.
|
-- Speed and altitude.
|
||||||
local Speed=task.dcstask.params.speed and UTILS.MpsToKnots(task.dcstask.params.speed) or UTILS.KmphToKnots(self.speedCruise)
|
local Speed=task.dcstask.params.speed and UTILS.MpsToKnots(task.dcstask.params.speed) or UTILS.KmphToKnots(self.speedCruise)
|
||||||
-- local Speed=UTILS.KmphToKnots(speed or self.speedCruise)
|
|
||||||
local Altitude=UTILS.MetersToFeet(task.dcstask.params.altitude or self.altitudeCruise)
|
local Altitude=UTILS.MetersToFeet(task.dcstask.params.altitude or self.altitudeCruise)
|
||||||
|
|
||||||
local currUID=self:GetWaypointCurrent().uid
|
local currUID=self:GetWaypointCurrent().uid
|
||||||
@ -5131,9 +5127,22 @@ function OPSGROUP:onafterPassingWaypoint(From, Event, To, Waypoint)
|
|||||||
-- TARGET.
|
-- TARGET.
|
||||||
local target=task.dcstask.params.target --Ops.Target#TARGET
|
local target=task.dcstask.params.target --Ops.Target#TARGET
|
||||||
|
|
||||||
local n=self.lastindex+1
|
-- Init a table.
|
||||||
|
if self.adinfinitum and #self.reconindecies==0 then -- all targets done once
|
||||||
|
self.reconindecies={}
|
||||||
|
for i=1,#target.targets do
|
||||||
|
table.insert(self.reconindecies, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if n<=#target.targets then
|
if #self.reconindecies>0 then
|
||||||
|
|
||||||
|
local n=1
|
||||||
|
if task.dcstask.params.randomly then
|
||||||
|
n=UTILS.GetRandomTableElement(self.reconindecies)
|
||||||
|
else
|
||||||
|
table.remove(self.reconindecies, n)
|
||||||
|
end
|
||||||
|
|
||||||
-- Zone object.
|
-- Zone object.
|
||||||
local object=target.targets[n] --Ops.Target#TARGET.Object
|
local object=target.targets[n] --Ops.Target#TARGET.Object
|
||||||
@ -5155,17 +5164,12 @@ function OPSGROUP:onafterPassingWaypoint(From, Event, To, Waypoint)
|
|||||||
if self.isFlightgroup then
|
if self.isFlightgroup then
|
||||||
wp=FLIGHTGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Altitude)
|
wp=FLIGHTGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Altitude)
|
||||||
elseif self.isArmygroup then
|
elseif self.isArmygroup then
|
||||||
wp=ARMYGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Formation)
|
wp=ARMYGROUP.AddWaypoint(self, Coordinate, Speed, currUID, task.dcstask.params.formation)
|
||||||
elseif self.isNavygroup then
|
elseif self.isNavygroup then
|
||||||
wp=NAVYGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Altitude)
|
wp=NAVYGROUP.AddWaypoint(self, Coordinate, Speed, currUID, Altitude)
|
||||||
end
|
end
|
||||||
wp.missionUID=mission and mission.auftragsnummer or nil
|
wp.missionUID=mission and mission.auftragsnummer or nil
|
||||||
|
|
||||||
-- Increase counter.
|
|
||||||
self.lastindex=self.lastindex+1
|
|
||||||
if self.adinfinitum and n==#target.targets then -- all targets done once
|
|
||||||
self.lastindex = 1
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
|
|
||||||
-- Get waypoint index.
|
-- Get waypoint index.
|
||||||
|
|||||||
@ -48,15 +48,15 @@
|
|||||||
-- @field #table parkingIDs Parking IDs for this squadron.
|
-- @field #table parkingIDs Parking IDs for this squadron.
|
||||||
-- @extends Ops.Cohort#COHORT
|
-- @extends Ops.Cohort#COHORT
|
||||||
|
|
||||||
--- *It is unbelievable what a squadron of twelve aircraft did to tip the balance.* -- Adolf Galland
|
--- *It is unbelievable what a squadron of twelve aircraft did to tip the balance* -- Adolf Galland
|
||||||
--
|
--
|
||||||
-- ===
|
-- ===
|
||||||
--
|
--
|
||||||
-- 
|
|
||||||
--
|
|
||||||
-- # The SQUADRON Concept
|
-- # The SQUADRON Concept
|
||||||
--
|
--
|
||||||
-- A SQUADRON is essential part of an AIRWING and consists of **one** type of aircraft.
|
-- A SQUADRON is essential part of an @{Ops.Airwing#AIRWING} and consists of **one** type of aircraft.
|
||||||
|
--
|
||||||
|
--
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
|
|||||||
@ -1208,7 +1208,7 @@ function TARGET:GetCoordinate()
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
self:E(self.lid..string.format("ERROR: Cannot get coordinate of target %s", self.name))
|
self:E(self.lid..string.format("ERROR: Cannot get coordinate of target %s", tostring(self.name)))
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1668,8 +1668,8 @@ function UTILS.GetOSTime()
|
|||||||
end
|
end
|
||||||
|
|
||||||
--- Shuffle a table accoring to Fisher Yeates algorithm
|
--- Shuffle a table accoring to Fisher Yeates algorithm
|
||||||
--@param #table t Table to be shuffled
|
--@param #table t Table to be shuffled.
|
||||||
--@return #table
|
--@return #table Shuffled table.
|
||||||
function UTILS.ShuffleTable(t)
|
function UTILS.ShuffleTable(t)
|
||||||
if t == nil or type(t) ~= "table" then
|
if t == nil or type(t) ~= "table" then
|
||||||
BASE:I("Error in ShuffleTable: Missing or wrong type of Argument")
|
BASE:I("Error in ShuffleTable: Missing or wrong type of Argument")
|
||||||
@ -1687,6 +1687,32 @@ function UTILS.ShuffleTable(t)
|
|||||||
return TempTable
|
return TempTable
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Get a random element of a table.
|
||||||
|
--@param #table t Table.
|
||||||
|
--@param #boolean replace If `true`, the drawn element is replaced, i.e. not deleted.
|
||||||
|
--@return #number Table element.
|
||||||
|
function UTILS.GetRandomTableElement(t, replace)
|
||||||
|
|
||||||
|
if t == nil or type(t) ~= "table" then
|
||||||
|
BASE:I("Error in ShuffleTable: Missing or wrong type of Argument")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
math.random()
|
||||||
|
math.random()
|
||||||
|
math.random()
|
||||||
|
|
||||||
|
local r=math.random(#t)
|
||||||
|
|
||||||
|
local element=t[r]
|
||||||
|
|
||||||
|
if not replace then
|
||||||
|
table.remove(t, r)
|
||||||
|
end
|
||||||
|
|
||||||
|
return element
|
||||||
|
end
|
||||||
|
|
||||||
--- (Helicopter) Check if one loading door is open.
|
--- (Helicopter) Check if one loading door is open.
|
||||||
--@param #string unit_name Unit name to be checked
|
--@param #string unit_name Unit name to be checked
|
||||||
--@return #boolean Outcome - true if a (loading door) is open, false if not, nil if none exists.
|
--@return #boolean Outcome - true if a (loading door) is open, false if not, nil if none exists.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user