diff --git a/Moose Development/Moose/Wrapper/Controllable.lua b/Moose Development/Moose/Wrapper/Controllable.lua
index 808fb28ec..b81cda295 100644
--- a/Moose Development/Moose/Wrapper/Controllable.lua
+++ b/Moose Development/Moose/Wrapper/Controllable.lua
@@ -457,12 +457,20 @@ function CONTROLLABLE:CommandSwitchWayPoint( FromWayPoint, ToWayPoint )
return CommandSwitchWayPoint
end
---- Perform stop route command
+--- Create a stop route command, which returns a string containing the command.
+-- Use the result in the method @{#CONTROLLABLE.SetCommand}().
+-- A value of true will make the ground group stop, a value of false will make it continue.
+-- Note that this can only work on GROUP level, although individual UNITs can be commanded, the whole GROUP will react.
+--
+-- Example missions:
+--
+-- * GRP-310
+--
-- @param #CONTROLLABLE self
--- @param #boolean StopRoute
+-- @param #boolean StopRoute true if the ground unit needs to stop, false if it needs to continue to move.
-- @return Dcs.DCSTasking.Task#Task
-function CONTROLLABLE:CommandStopRoute( StopRoute, Index )
- self:F2( { StopRoute, Index } )
+function CONTROLLABLE:CommandStopRoute( StopRoute )
+ self:F2( { StopRoute } )
local CommandStopRoute = {
id = 'StopRoute',
@@ -1649,90 +1657,6 @@ function CONTROLLABLE:TaskRouteToZone( Zone, Randomize, Speed, Formation )
return nil
end
---- (AIR) Return the Controllable to an @{Airbase#AIRBASE}
--- A speed can be given in km/h.
--- A given formation can be given.
--- @param #CONTROLLABLE self
--- @param Wrapper.Airbase#AIRBASE ReturnAirbase The @{Airbase#AIRBASE} to return to.
--- @param #number Speed (optional) The speed.
--- @return #string The route
-function CONTROLLABLE:RouteReturnToAirbase( ReturnAirbase, Speed )
- self:F2( { ReturnAirbase, Speed } )
-
--- Example
--- [4] =
--- {
--- ["alt"] = 45,
--- ["type"] = "Land",
--- ["action"] = "Landing",
--- ["alt_type"] = "BARO",
--- ["formation_template"] = "",
--- ["properties"] =
--- {
--- ["vnav"] = 1,
--- ["scale"] = 0,
--- ["angle"] = 0,
--- ["vangle"] = 0,
--- ["steer"] = 2,
--- }, -- end of ["properties"]
--- ["ETA"] = 527.81058817743,
--- ["airdromeId"] = 12,
--- ["y"] = 243127.2973737,
--- ["x"] = -5406.2803440839,
--- ["name"] = "DictKey_WptName_53",
--- ["speed"] = 138.88888888889,
--- ["ETA_locked"] = false,
--- ["task"] =
--- {
--- ["id"] = "ComboTask",
--- ["params"] =
--- {
--- ["tasks"] =
--- {
--- }, -- end of ["tasks"]
--- }, -- end of ["params"]
--- }, -- end of ["task"]
--- ["speed_locked"] = true,
--- }, -- end of [4]
-
-
- local DCSControllable = self:GetDCSObject()
-
- if DCSControllable then
-
- local ControllablePoint = self:GetVec2()
- local ControllableVelocity = self:GetMaxVelocity()
-
- local PointFrom = {}
- PointFrom.x = ControllablePoint.x
- PointFrom.y = ControllablePoint.y
- PointFrom.type = "Turning Point"
- PointFrom.action = "Turning Point"
- PointFrom.speed = ControllableVelocity
-
-
- local PointTo = {}
- local AirbasePoint = ReturnAirbase:GetVec2()
-
- PointTo.x = AirbasePoint.x
- PointTo.y = AirbasePoint.y
- PointTo.type = "Land"
- PointTo.action = "Landing"
- PointTo.airdromeId = ReturnAirbase:GetID()-- Airdrome ID
- self:T(PointTo.airdromeId)
- --PointTo.alt = 0
-
- local Points = { PointFrom, PointTo }
-
- self:T3( Points )
-
- local Route = { points = Points, }
-
- return Route
- end
-
- return nil
-end
-- Commands
@@ -1773,6 +1697,8 @@ function CONTROLLABLE:GetTaskRoute()
return routines.utils.deepCopy( _DATABASE.Templates.Controllables[self.ControllableName].Template.route.points )
end
+
+
--- Return the route of a controllable by using the @{Database#DATABASE} class.
-- @param #CONTROLLABLE self
-- @param #number Begin The route point from where the copy will start. The base route point is 0.
diff --git a/Moose Development/Moose/Wrapper/Group.lua b/Moose Development/Moose/Wrapper/Group.lua
index df263264c..c905231b4 100644
--- a/Moose Development/Moose/Wrapper/Group.lua
+++ b/Moose Development/Moose/Wrapper/Group.lua
@@ -1,8 +1,8 @@
---- This module contains the GROUP class.
+--- **Wrapper** -- GROUP is a wrapper class for the DCS Class Group.
--
--- 1) @{Group#GROUP} class, extends @{Controllable#CONTROLLABLE}
--- =============================================================
--- The @{Group#GROUP} class is a wrapper class to handle the DCS Group objects:
+-- ===
+--
+-- The @{#GROUP} class is a wrapper class to handle the DCS Group objects:
--
-- * Support all DCS Group APIs.
-- * Enhance with Group specific APIs not in the DCS Group API set.
@@ -11,60 +11,8 @@
--
-- **IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil).**
--
--- 1.1) GROUP reference methods
--- -----------------------
--- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object.
--- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class).
---
--- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
--- using the DCS Group or the DCS GroupName.
---
--- Another thing to know is that GROUP objects do not "contain" the DCS Group object.
--- The GROUP methods will reference the DCS Group object by name when it is needed during API execution.
--- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file.
---
--- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance:
---
--- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object.
--- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name.
---
--- ## 1.2) GROUP task methods
---
--- A GROUP is a @{Controllable}. See the @{Controllable} task methods section for a description of the task methods.
---
--- ### 1.2.4) Obtain the mission from group templates
+-- See the detailed documentation on the GROUP class.
--
--- Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another:
---
--- * @{Controllable#CONTROLLABLE.TaskMission}: (AIR + GROUND) Return a mission task from a mission template.
---
--- ## 1.3) GROUP Command methods
---
--- A GROUP is a @{Controllable}. See the @{Controllable} command methods section for a description of the command methods.
---
--- ## 1.4) GROUP option methods
---
--- A GROUP is a @{Controllable}. See the @{Controllable} option methods section for a description of the option methods.
---
--- ## 1.5) GROUP Zone validation methods
---
--- The group can be validated whether it is completely, partly or not within a @{Zone}.
--- Use the following Zone validation methods on the group:
---
--- * @{#GROUP.IsCompletelyInZone}: Returns true if all units of the group are within a @{Zone}.
--- * @{#GROUP.IsPartlyInZone}: Returns true if some units of the group are within a @{Zone}.
--- * @{#GROUP.IsNotInZone}: Returns true if none of the group units of the group are within a @{Zone}.
---
--- The zone can be of any @{Zone} class derived from @{Zone#ZONE_BASE}. So, these methods are polymorphic to the zones tested on.
---
--- ## 1.6) GROUP AI methods
---
--- A GROUP has AI methods to control the AI activation.
---
--- * @{#GROUP.SetAIOnOff}(): Turns the GROUP AI On or Off.
--- * @{#GROUP.SetAIOn}(): Turns the GROUP AI On.
--- * @{#GROUP.SetAIOff}(): Turns the GROUP AI Off.
---
-- ====
--
-- # **API CHANGE HISTORY**
@@ -76,6 +24,8 @@
--
-- Hereby the change log:
--
+-- 2017-03-26: GROUP:**RouteRTB( RTBAirbase, Speed )** added.
+--
-- 2017-03-07: GROUP:**HandleEvent( Event, EventFunction )** added.
-- 2017-03-07: GROUP:**UnHandleEvent( Event )** added.
--
@@ -100,10 +50,66 @@
-- @module Group
-- @author FlightControl
---- The GROUP class
--- @type GROUP
+--- @type GROUP
-- @extends Wrapper.Controllable#CONTROLLABLE
-- @field #string GroupName The name of the group.
+
+---
+-- # GROUP class, extends @{Controllable#CONTROLLABLE}
+--
+-- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object.
+-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class).
+--
+-- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
+-- using the DCS Group or the DCS GroupName.
+--
+-- Another thing to know is that GROUP objects do not "contain" the DCS Group object.
+-- The GROUP methods will reference the DCS Group object by name when it is needed during API execution.
+-- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file.
+--
+-- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance:
+--
+-- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object.
+-- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name.
+--
+-- ## GROUP task methods
+--
+-- A GROUP is a @{Controllable}. See the @{Controllable} task methods section for a description of the task methods.
+--
+-- ### Obtain the mission from group templates
+--
+-- Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another:
+--
+-- * @{Controllable#CONTROLLABLE.TaskMission}: (AIR + GROUND) Return a mission task from a mission template.
+--
+-- ## GROUP Command methods
+--
+-- A GROUP is a @{Controllable}. See the @{Controllable} command methods section for a description of the command methods.
+--
+-- ## GROUP option methods
+--
+-- A GROUP is a @{Controllable}. See the @{Controllable} option methods section for a description of the option methods.
+--
+-- ## GROUP Zone validation methods
+--
+-- The group can be validated whether it is completely, partly or not within a @{Zone}.
+-- Use the following Zone validation methods on the group:
+--
+-- * @{#GROUP.IsCompletelyInZone}: Returns true if all units of the group are within a @{Zone}.
+-- * @{#GROUP.IsPartlyInZone}: Returns true if some units of the group are within a @{Zone}.
+-- * @{#GROUP.IsNotInZone}: Returns true if none of the group units of the group are within a @{Zone}.
+--
+-- The zone can be of any @{Zone} class derived from @{Zone#ZONE_BASE}. So, these methods are polymorphic to the zones tested on.
+--
+-- ## GROUP AI methods
+--
+-- A GROUP has AI methods to control the AI activation.
+--
+-- * @{#GROUP.SetAIOnOff}(): Turns the GROUP AI On or Off.
+-- * @{#GROUP.SetAIOn}(): Turns the GROUP AI On.
+-- * @{#GROUP.SetAIOff}(): Turns the GROUP AI Off.
+--
+-- @field #GROUP GROUP
GROUP = {
ClassName = "GROUP",
}
@@ -177,19 +183,33 @@ function GROUP:GetPositionVec3() -- Overridden from POSITIONABLE:GetPositionVec3
return nil
end
---- Returns if the DCS Group is alive.
--- When the group exists at run-time, this method will return true, otherwise false.
+--- Returns if the Group is alive.
+-- The Group must:
+--
+-- * Exist at run-time.
+-- * Has at least one unit.
+--
+-- When the first @{Unit} of the Group is active, it will return true.
+-- If the first @{Unit} of the Group is inactive, it will return false.
+--
-- @param #GROUP self
--- @return #boolean true if the DCS Group is alive.
+-- @return #boolean true if the Group is alive and active.
+-- @return #boolean false if the Group is alive but inactive.
+-- @return #nil if the group does not exist anymore.
function GROUP:IsAlive()
self:F2( self.GroupName )
- local DCSGroup = self:GetDCSObject()
+ local DCSGroup = self:GetDCSObject() -- Dcs.DCSGroup#Group
if DCSGroup then
- local GroupIsAlive = DCSGroup:isExist() and DCSGroup:getUnit(1) ~= nil
- self:T3( GroupIsAlive )
- return GroupIsAlive
+ if DCSGroup:isExist() then
+ local DCSUnit = DCSGroup:getUnit(1) -- Dcs.DCSUnit#Unit
+ if DCSUnit then
+ local GroupIsAlive = DCSUnit:isActive()
+ self:T3( GroupIsAlive )
+ return GroupIsAlive
+ end
+ end
end
return nil
@@ -436,6 +456,7 @@ function GROUP:GetVec2()
end
--- Returns the current Vec3 vector of the first DCS Unit in the GROUP.
+-- @param #GROUP self
-- @return Dcs.DCSTypes#Vec3 Current Vec3 of the first DCS Unit of the GROUP.
function GROUP:GetVec3()
self:F2( self.GroupName )
@@ -445,7 +466,65 @@ function GROUP:GetVec3()
return GroupVec3
end
+--- Returns a POINT_VEC2 object indicating the point in 2D of the first UNIT of the GROUP within the mission.
+-- @param #GROUP self
+-- @return Core.Point#POINT_VEC2 The 2D point vector of the first DCS Unit of the GROUP.
+-- @return #nil The first UNIT is not existing or alive.
+function GROUP:GetPointVec2()
+ self:F2(self.GroupName)
+ local FirstUnit = self:GetUnit(1)
+
+ if FirstUnit then
+ local FirstUnitPointVec2 = FirstUnit:GetPointVec2()
+ self:T3(FirstUnitPointVec2)
+ return FirstUnitPointVec2
+ end
+
+ return nil
+end
+
+--- Returns a random @{DCSTypes#Vec3} vector (point in 3D of the UNIT within the mission) within a range around the first UNIT of the GROUP.
+-- @param #GROUP self
+-- @param #number Radius
+-- @return Dcs.DCSTypes#Vec3 The random 3D point vector around the first UNIT of the GROUP.
+-- @return #nil The GROUP is invalid or empty
+-- @usage
+-- -- If Radius is ignored, returns the Dcs.DCSTypes#Vec3 of first UNIT of the GROUP
+function GROUP:GetRandomVec3(Radius)
+ self:F2(self.GroupName)
+
+ local FirstUnit = self:GetUnit(1)
+
+ if FirstUnit then
+ local FirstUnitRandomPointVec3 = FirstUnit:GetRandomVec3(Radius)
+ self:T3(FirstUnitRandomPointVec3)
+ return FirstUnitRandomPointVec3
+ end
+
+ return nil
+end
+
+--- Returns the mean heading of every UNIT in the GROUP in degrees
+-- @param #GROUP self
+-- @return #number mean heading of the GROUP
+-- @return #nil The first UNIT is not existing or alive.
+function GROUP:GetHeading()
+ self:F2(self.GroupName)
+
+ local GroupSize = self:GetSize()
+ local HeadingAccumulator = 0
+
+ if GroupSize then
+ for i = 1, GroupSize do
+ HeadingAccumulator = HeadingAccumulator + self:GetUnit(i):GetHeading()
+ end
+ return math.floor(HeadingAccumulator / GroupSize)
+ end
+
+ return nil
+
+end
do -- Is Zone methods
@@ -895,6 +974,76 @@ function GROUP:InAir()
return nil
end
+do -- Route methods
+
+ --- (AIR) Return the Group to an @{Airbase#AIRBASE}.
+ -- The following things are to be taken into account:
+ --
+ -- * The group is respawned to achieve the RTB, there may be side artefacts as a result of this. (Like weapons suddenly come back).
+ -- * A group consisting out of more than one unit, may rejoin formation when respawned.
+ -- * A speed can be given in km/h. If no speed is specified, the maximum speed of the first unit will be taken to return to base.
+ -- * When there is no @{Airbase} object specified, the group will return to the home base if the route of the group is pinned at take-off or at landing to a base.
+ -- * When there is no @{Airbase} object specified and the group route is not pinned to any airbase, it will return to the nearest airbase.
+ --
+ -- @param #GROUP self
+ -- @param Wrapper.Airbase#AIRBASE RTBAirbase (optional) The @{Airbase} to return to. If blank, the controllable will return to the nearest friendly airbase.
+ -- @param #number Speed (optional) The Speed, if no Speed is given, the maximum Speed of the first unit is selected.
+ -- @return #GROUP
+ function GROUP:RouteRTB( RTBAirbase, Speed )
+ self:F2( { RTBAirbase, Speed } )
+
+ local DCSGroup = self:GetDCSObject()
+
+ if DCSGroup then
+
+ if RTBAirbase then
+
+ local GroupPoint = self:GetVec2()
+ local GroupVelocity = self:GetUnit(1):GetDesc().speedMax
+
+ local PointFrom = {}
+ PointFrom.x = GroupPoint.x
+ PointFrom.y = GroupPoint.y
+ PointFrom.type = "Turning Point"
+ PointFrom.action = "Turning Point"
+ PointFrom.speed = GroupVelocity
+
+
+ local PointTo = {}
+ local AirbasePointVec2 = RTBAirbase:GetPointVec2()
+ local AirbaseAirPoint = AirbasePointVec2:RoutePointAir(
+ POINT_VEC3.RoutePointAltType.BARO,
+ "Land",
+ "Landing",
+ Speed or self:GetUnit(1):GetDesc().speedMax
+ )
+
+ AirbaseAirPoint["airdromeId"] = RTBAirbase:GetID()
+ AirbaseAirPoint["speed_locked"] = true,
+
+ self:E(AirbaseAirPoint )
+
+ local Points = { PointFrom, AirbaseAirPoint }
+
+ self:T3( Points )
+
+ local Template = self:GetTemplate()
+ Template.route.points = Points
+ self:Respawn( Template )
+
+ self:Route( Points )
+
+ self:Respawn(Template)
+ else
+ self:ClearTasks()
+ end
+ end
+
+ return self
+ end
+
+end
+
function GROUP:OnReSpawn( ReSpawnFunction )
self.ReSpawnFunction = ReSpawnFunction
diff --git a/Moose Development/Moose/Wrapper/Identifiable.lua b/Moose Development/Moose/Wrapper/Identifiable.lua
index edcd3ffff..08a22b044 100644
--- a/Moose Development/Moose/Wrapper/Identifiable.lua
+++ b/Moose Development/Moose/Wrapper/Identifiable.lua
@@ -58,17 +58,19 @@ function IDENTIFIABLE:New( IdentifiableName )
return self
end
---- Returns if the Identifiable is alive.
+--- Returns if the Identifiable is alive.
+-- If the Identifiable is not alive, nil is returned.
+-- If the Identifiable is alive, true is returned.
-- @param #IDENTIFIABLE self
-- @return #boolean true if Identifiable is alive.
--- @return #nil The DCS Identifiable is not existing or alive.
+-- @return #nil if the Identifiable is not existing or is not alive.
function IDENTIFIABLE:IsAlive()
self:F3( self.IdentifiableName )
- local DCSIdentifiable = self:GetDCSObject()
+ local DCSIdentifiable = self:GetDCSObject() -- Dcs.DCSObject#Object
if DCSIdentifiable then
- local IdentifiableIsAlive = DCSIdentifiable:isExist()
+ local IdentifiableIsAlive = DCSIdentifiable:isExist()
return IdentifiableIsAlive
end
diff --git a/Moose Development/Moose/Wrapper/Positionable.lua b/Moose Development/Moose/Wrapper/Positionable.lua
index e4cf24038..e6bd95cd3 100644
--- a/Moose Development/Moose/Wrapper/Positionable.lua
+++ b/Moose Development/Moose/Wrapper/Positionable.lua
@@ -135,8 +135,11 @@ end
--- Returns a random @{DCSTypes#Vec3} vector within a range, indicating the point in 3D of the POSITIONABLE within the mission.
-- @param Wrapper.Positionable#POSITIONABLE self
+-- @param #number Radius
-- @return Dcs.DCSTypes#Vec3 The 3D point vector of the POSITIONABLE.
-- @return #nil The POSITIONABLE is not existing or alive.
+-- @usage
+-- -- If Radius is ignored, returns the Dcs.DCSTypes#Vec3 of first UNIT of the GROUP
function POSITIONABLE:GetRandomVec3( Radius )
self:F2( self.PositionableName )
@@ -144,14 +147,20 @@ function POSITIONABLE:GetRandomVec3( Radius )
if DCSPositionable then
local PositionablePointVec3 = DCSPositionable:getPosition().p
- local PositionableRandomVec3 = {}
- local angle = math.random() * math.pi*2;
- PositionableRandomVec3.x = PositionablePointVec3.x + math.cos( angle ) * math.random() * Radius;
- PositionableRandomVec3.y = PositionablePointVec3.y
- PositionableRandomVec3.z = PositionablePointVec3.z + math.sin( angle ) * math.random() * Radius;
- self:T3( PositionableRandomVec3 )
- return PositionableRandomVec3
+ if Radius then
+ local PositionableRandomVec3 = {}
+ local angle = math.random() * math.pi*2;
+ PositionableRandomVec3.x = PositionablePointVec3.x + math.cos( angle ) * math.random() * Radius;
+ PositionableRandomVec3.y = PositionablePointVec3.y
+ PositionableRandomVec3.z = PositionablePointVec3.z + math.sin( angle ) * math.random() * Radius;
+
+ self:T3( PositionableRandomVec3 )
+ return PositionableRandomVec3
+ else
+ self:E("Radius is nil, returning the PointVec3 of the POSITIONABLE", PositionablePointVec3)
+ return PositionablePointVec3
+ end
end
return nil
@@ -219,6 +228,7 @@ end
--- Returns the POSITIONABLE heading in degrees.
-- @param Wrapper.Positionable#POSITIONABLE self
-- @return #number The POSTIONABLE heading
+-- @return #nil The POSITIONABLE is not existing or alive.
function POSITIONABLE:GetHeading()
local DCSPositionable = self:GetDCSObject()
diff --git a/Moose Development/Moose/Wrapper/Unit.lua b/Moose Development/Moose/Wrapper/Unit.lua
index 56d26c9d9..68be9a981 100644
--- a/Moose Development/Moose/Wrapper/Unit.lua
+++ b/Moose Development/Moose/Wrapper/Unit.lua
@@ -1,7 +1,7 @@
---- This module contains the UNIT class.
+--- **Wrapper** - UNIT is a wrapper class for the DCS Class Unit.
+--
+-- ===
--
--- 1) @{#UNIT} class, extends @{Controllable#CONTROLLABLE}
--- ===========================================================
-- The @{#UNIT} class is a wrapper class to handle the DCS Unit objects:
--
-- * Support all DCS Unit APIs.
@@ -9,9 +9,14 @@
-- * Handle local Unit Controller.
-- * Manage the "state" of the DCS Unit.
--
---
--- 1.1) UNIT reference methods
--- ----------------------
+-- @module Unit
+
+--- @type UNIT
+-- @extends Wrapper.Controllable#CONTROLLABLE
+
+---
+-- # UNIT class, extends @{Controllable#CONTROLLABLE}
+--
-- For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _@{DATABASE} object.
-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the @{SPAWN} class).
--
@@ -29,15 +34,15 @@
--
-- IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil).
--
--- 1.2) DCS UNIT APIs
--- ------------------
+-- ## DCS UNIT APIs
+--
-- The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method.
-- To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call,
-- the first letter of the method is also capitalized. So, by example, the DCS Unit method @{DCSWrapper.Unit#Unit.getName}()
-- is implemented in the UNIT class as @{#UNIT.GetName}().
--
--- 1.3) Smoke, Flare Units
--- -----------------------
+-- ## Smoke, Flare Units
+--
-- The UNIT class provides methods to smoke or flare units easily.
-- The @{#UNIT.SmokeBlue}(), @{#UNIT.SmokeGreen}(),@{#UNIT.SmokeOrange}(), @{#UNIT.SmokeRed}(), @{#UNIT.SmokeRed}() methods
-- will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit.
@@ -45,36 +50,29 @@
-- The @{#UNIT.FlareGreen}(), @{#UNIT.FlareRed}(), @{#UNIT.FlareWhite}(), @{#UNIT.FlareYellow}()
-- methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration.
--
--- 1.4) Location Position, Point
--- -----------------------------
+-- ## Location Position, Point
+--
-- The UNIT class provides methods to obtain the current point or position of the DCS Unit.
-- The @{#UNIT.GetPointVec2}(), @{#UNIT.GetVec3}() will obtain the current **location** of the DCS Unit in a Vec2 (2D) or a **point** in a Vec3 (3D) vector respectively.
-- If you want to obtain the complete **3D position** including ori�ntation and direction vectors, consult the @{#UNIT.GetPositionVec3}() method respectively.
--
--- 1.5) Test if alive
--- ------------------
+-- ## Test if alive
+--
-- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active.
--
--- 1.6) Test for proximity
--- -----------------------
+-- ## Test for proximity
+--
-- The UNIT class contains methods to test the location or proximity against zones or other objects.
--
--- ### 1.6.1) Zones
+-- ### Zones
+--
-- To test whether the Unit is within a **zone**, use the @{#UNIT.IsInZone}() or the @{#UNIT.IsNotInZone}() methods. Any zone can be tested on, but the zone must be derived from @{Zone#ZONE_BASE}.
--
--- ### 1.6.2) Units
+-- ### Units
+--
-- Test if another DCS Unit is within a given radius of the current DCS Unit, use the @{#UNIT.OtherUnitInRadius}() method.
--
--- @module Unit
--- @author FlightControl
-
-
-
-
-
---- The UNIT class
--- @type UNIT
--- @extends Wrapper.Controllable#CONTROLLABLE
+-- @field #UNIT UNIT
UNIT = {
ClassName="UNIT",
}
@@ -216,7 +214,7 @@ function UNIT:ReSpawn( SpawnVec3, Heading )
end
-- Remove obscolete units from the group structure
- i = 1
+ local i = 1
while i <= #SpawnGroupTemplate.units do
local UnitTemplateData = SpawnGroupTemplate.units[i]
@@ -252,6 +250,27 @@ function UNIT:IsActive()
return nil
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.
+-- @param #UNIT self
+-- @return #boolean true if Unit is alive and active.
+-- @return #boolean false if Unit is alive but not active.
+-- @return #nil if the Unit is not existing or is not alive.
+function UNIT:IsAlive()
+ self:F3( self.UnitName )
+
+ local DCSUnit = self:GetDCSObject() -- Dcs.DCSUnit#Unit
+
+ if DCSUnit then
+ local UnitIsAlive = DCSUnit:isExist() and DCSUnit:isActive()
+ return UnitIsAlive
+ end
+
+ return nil
+end
+
--- Returns the Unit's callsign - the localized string.
diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua
index 9aca34abf..d32411e0b 100644
--- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua
+++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua
@@ -1,5 +1,5 @@
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
-env.info( 'Moose Generation Timestamp: 20170325_0623' )
+env.info( 'Moose Generation Timestamp: 20170327_1219' )
local base = _G
Include = {}
@@ -13241,17 +13241,19 @@ function IDENTIFIABLE:New( IdentifiableName )
return self
end
---- Returns if the Identifiable is alive.
+--- Returns if the Identifiable is alive.
+-- If the Identifiable is not alive, nil is returned.
+-- If the Identifiable is alive, true is returned.
-- @param #IDENTIFIABLE self
-- @return #boolean true if Identifiable is alive.
--- @return #nil The DCS Identifiable is not existing or alive.
+-- @return #nil if the Identifiable is not existing or is not alive.
function IDENTIFIABLE:IsAlive()
self:F3( self.IdentifiableName )
- local DCSIdentifiable = self:GetDCSObject()
+ local DCSIdentifiable = self:GetDCSObject() -- Dcs.DCSObject#Object
if DCSIdentifiable then
- local IdentifiableIsAlive = DCSIdentifiable:isExist()
+ local IdentifiableIsAlive = DCSIdentifiable:isExist()
return IdentifiableIsAlive
end
@@ -13541,8 +13543,11 @@ end
--- Returns a random @{DCSTypes#Vec3} vector within a range, indicating the point in 3D of the POSITIONABLE within the mission.
-- @param Wrapper.Positionable#POSITIONABLE self
+-- @param #number Radius
-- @return Dcs.DCSTypes#Vec3 The 3D point vector of the POSITIONABLE.
-- @return #nil The POSITIONABLE is not existing or alive.
+-- @usage
+-- -- If Radius is ignored, returns the Dcs.DCSTypes#Vec3 of first UNIT of the GROUP
function POSITIONABLE:GetRandomVec3( Radius )
self:F2( self.PositionableName )
@@ -13550,14 +13555,20 @@ function POSITIONABLE:GetRandomVec3( Radius )
if DCSPositionable then
local PositionablePointVec3 = DCSPositionable:getPosition().p
- local PositionableRandomVec3 = {}
- local angle = math.random() * math.pi*2;
- PositionableRandomVec3.x = PositionablePointVec3.x + math.cos( angle ) * math.random() * Radius;
- PositionableRandomVec3.y = PositionablePointVec3.y
- PositionableRandomVec3.z = PositionablePointVec3.z + math.sin( angle ) * math.random() * Radius;
- self:T3( PositionableRandomVec3 )
- return PositionableRandomVec3
+ if Radius then
+ local PositionableRandomVec3 = {}
+ local angle = math.random() * math.pi*2;
+ PositionableRandomVec3.x = PositionablePointVec3.x + math.cos( angle ) * math.random() * Radius;
+ PositionableRandomVec3.y = PositionablePointVec3.y
+ PositionableRandomVec3.z = PositionablePointVec3.z + math.sin( angle ) * math.random() * Radius;
+
+ self:T3( PositionableRandomVec3 )
+ return PositionableRandomVec3
+ else
+ self:E("Radius is nil, returning the PointVec3 of the POSITIONABLE", PositionablePointVec3)
+ return PositionablePointVec3
+ end
end
return nil
@@ -13625,6 +13636,7 @@ end
--- Returns the POSITIONABLE heading in degrees.
-- @param Wrapper.Positionable#POSITIONABLE self
-- @return #number The POSTIONABLE heading
+-- @return #nil The POSITIONABLE is not existing or alive.
function POSITIONABLE:GetHeading()
local DCSPositionable = self:GetDCSObject()
@@ -14305,12 +14317,20 @@ function CONTROLLABLE:CommandSwitchWayPoint( FromWayPoint, ToWayPoint )
return CommandSwitchWayPoint
end
---- Perform stop route command
+--- Create a stop route command, which returns a string containing the command.
+-- Use the result in the method @{#CONTROLLABLE.SetCommand}().
+-- A value of true will make the ground group stop, a value of false will make it continue.
+-- Note that this can only work on GROUP level, although individual UNITs can be commanded, the whole GROUP will react.
+--
+-- Example missions:
+--
+-- * GRP-310
+--
-- @param #CONTROLLABLE self
--- @param #boolean StopRoute
+-- @param #boolean StopRoute true if the ground unit needs to stop, false if it needs to continue to move.
-- @return Dcs.DCSTasking.Task#Task
-function CONTROLLABLE:CommandStopRoute( StopRoute, Index )
- self:F2( { StopRoute, Index } )
+function CONTROLLABLE:CommandStopRoute( StopRoute )
+ self:F2( { StopRoute } )
local CommandStopRoute = {
id = 'StopRoute',
@@ -15497,90 +15517,6 @@ function CONTROLLABLE:TaskRouteToZone( Zone, Randomize, Speed, Formation )
return nil
end
---- (AIR) Return the Controllable to an @{Airbase#AIRBASE}
--- A speed can be given in km/h.
--- A given formation can be given.
--- @param #CONTROLLABLE self
--- @param Wrapper.Airbase#AIRBASE ReturnAirbase The @{Airbase#AIRBASE} to return to.
--- @param #number Speed (optional) The speed.
--- @return #string The route
-function CONTROLLABLE:RouteReturnToAirbase( ReturnAirbase, Speed )
- self:F2( { ReturnAirbase, Speed } )
-
--- Example
--- [4] =
--- {
--- ["alt"] = 45,
--- ["type"] = "Land",
--- ["action"] = "Landing",
--- ["alt_type"] = "BARO",
--- ["formation_template"] = "",
--- ["properties"] =
--- {
--- ["vnav"] = 1,
--- ["scale"] = 0,
--- ["angle"] = 0,
--- ["vangle"] = 0,
--- ["steer"] = 2,
--- }, -- end of ["properties"]
--- ["ETA"] = 527.81058817743,
--- ["airdromeId"] = 12,
--- ["y"] = 243127.2973737,
--- ["x"] = -5406.2803440839,
--- ["name"] = "DictKey_WptName_53",
--- ["speed"] = 138.88888888889,
--- ["ETA_locked"] = false,
--- ["task"] =
--- {
--- ["id"] = "ComboTask",
--- ["params"] =
--- {
--- ["tasks"] =
--- {
--- }, -- end of ["tasks"]
--- }, -- end of ["params"]
--- }, -- end of ["task"]
--- ["speed_locked"] = true,
--- }, -- end of [4]
-
-
- local DCSControllable = self:GetDCSObject()
-
- if DCSControllable then
-
- local ControllablePoint = self:GetVec2()
- local ControllableVelocity = self:GetMaxVelocity()
-
- local PointFrom = {}
- PointFrom.x = ControllablePoint.x
- PointFrom.y = ControllablePoint.y
- PointFrom.type = "Turning Point"
- PointFrom.action = "Turning Point"
- PointFrom.speed = ControllableVelocity
-
-
- local PointTo = {}
- local AirbasePoint = ReturnAirbase:GetVec2()
-
- PointTo.x = AirbasePoint.x
- PointTo.y = AirbasePoint.y
- PointTo.type = "Land"
- PointTo.action = "Landing"
- PointTo.airdromeId = ReturnAirbase:GetID()-- Airdrome ID
- self:T(PointTo.airdromeId)
- --PointTo.alt = 0
-
- local Points = { PointFrom, PointTo }
-
- self:T3( Points )
-
- local Route = { points = Points, }
-
- return Route
- end
-
- return nil
-end
-- Commands
@@ -15621,6 +15557,8 @@ function CONTROLLABLE:GetTaskRoute()
return routines.utils.deepCopy( _DATABASE.Templates.Controllables[self.ControllableName].Template.route.points )
end
+
+
--- Return the route of a controllable by using the @{Database#DATABASE} class.
-- @param #CONTROLLABLE self
-- @param #number Begin The route point from where the copy will start. The base route point is 0.
@@ -16144,11 +16082,11 @@ function CONTROLLABLE:WayPointExecute( WayPoint, WaitTime )
return self
end
--- Message APIs--- This module contains the GROUP class.
+-- Message APIs--- **Wrapper** -- GROUP is a wrapper class for the DCS Class Group.
--
--- 1) @{Group#GROUP} class, extends @{Controllable#CONTROLLABLE}
--- =============================================================
--- The @{Group#GROUP} class is a wrapper class to handle the DCS Group objects:
+-- ===
+--
+-- The @{#GROUP} class is a wrapper class to handle the DCS Group objects:
--
-- * Support all DCS Group APIs.
-- * Enhance with Group specific APIs not in the DCS Group API set.
@@ -16157,60 +16095,8 @@ end
--
-- **IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil).**
--
--- 1.1) GROUP reference methods
--- -----------------------
--- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object.
--- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class).
---
--- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
--- using the DCS Group or the DCS GroupName.
---
--- Another thing to know is that GROUP objects do not "contain" the DCS Group object.
--- The GROUP methods will reference the DCS Group object by name when it is needed during API execution.
--- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file.
---
--- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance:
---
--- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object.
--- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name.
---
--- ## 1.2) GROUP task methods
---
--- A GROUP is a @{Controllable}. See the @{Controllable} task methods section for a description of the task methods.
---
--- ### 1.2.4) Obtain the mission from group templates
+-- See the detailed documentation on the GROUP class.
--
--- Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another:
---
--- * @{Controllable#CONTROLLABLE.TaskMission}: (AIR + GROUND) Return a mission task from a mission template.
---
--- ## 1.3) GROUP Command methods
---
--- A GROUP is a @{Controllable}. See the @{Controllable} command methods section for a description of the command methods.
---
--- ## 1.4) GROUP option methods
---
--- A GROUP is a @{Controllable}. See the @{Controllable} option methods section for a description of the option methods.
---
--- ## 1.5) GROUP Zone validation methods
---
--- The group can be validated whether it is completely, partly or not within a @{Zone}.
--- Use the following Zone validation methods on the group:
---
--- * @{#GROUP.IsCompletelyInZone}: Returns true if all units of the group are within a @{Zone}.
--- * @{#GROUP.IsPartlyInZone}: Returns true if some units of the group are within a @{Zone}.
--- * @{#GROUP.IsNotInZone}: Returns true if none of the group units of the group are within a @{Zone}.
---
--- The zone can be of any @{Zone} class derived from @{Zone#ZONE_BASE}. So, these methods are polymorphic to the zones tested on.
---
--- ## 1.6) GROUP AI methods
---
--- A GROUP has AI methods to control the AI activation.
---
--- * @{#GROUP.SetAIOnOff}(): Turns the GROUP AI On or Off.
--- * @{#GROUP.SetAIOn}(): Turns the GROUP AI On.
--- * @{#GROUP.SetAIOff}(): Turns the GROUP AI Off.
---
-- ====
--
-- # **API CHANGE HISTORY**
@@ -16222,6 +16108,8 @@ end
--
-- Hereby the change log:
--
+-- 2017-03-26: GROUP:**RouteRTB( RTBAirbase, Speed )** added.
+--
-- 2017-03-07: GROUP:**HandleEvent( Event, EventFunction )** added.
-- 2017-03-07: GROUP:**UnHandleEvent( Event )** added.
--
@@ -16246,10 +16134,66 @@ end
-- @module Group
-- @author FlightControl
---- The GROUP class
--- @type GROUP
+--- @type GROUP
-- @extends Wrapper.Controllable#CONTROLLABLE
-- @field #string GroupName The name of the group.
+
+---
+-- # GROUP class, extends @{Controllable#CONTROLLABLE}
+--
+-- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object.
+-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class).
+--
+-- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
+-- using the DCS Group or the DCS GroupName.
+--
+-- Another thing to know is that GROUP objects do not "contain" the DCS Group object.
+-- The GROUP methods will reference the DCS Group object by name when it is needed during API execution.
+-- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file.
+--
+-- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance:
+--
+-- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object.
+-- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name.
+--
+-- ## GROUP task methods
+--
+-- A GROUP is a @{Controllable}. See the @{Controllable} task methods section for a description of the task methods.
+--
+-- ### Obtain the mission from group templates
+--
+-- Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another:
+--
+-- * @{Controllable#CONTROLLABLE.TaskMission}: (AIR + GROUND) Return a mission task from a mission template.
+--
+-- ## GROUP Command methods
+--
+-- A GROUP is a @{Controllable}. See the @{Controllable} command methods section for a description of the command methods.
+--
+-- ## GROUP option methods
+--
+-- A GROUP is a @{Controllable}. See the @{Controllable} option methods section for a description of the option methods.
+--
+-- ## GROUP Zone validation methods
+--
+-- The group can be validated whether it is completely, partly or not within a @{Zone}.
+-- Use the following Zone validation methods on the group:
+--
+-- * @{#GROUP.IsCompletelyInZone}: Returns true if all units of the group are within a @{Zone}.
+-- * @{#GROUP.IsPartlyInZone}: Returns true if some units of the group are within a @{Zone}.
+-- * @{#GROUP.IsNotInZone}: Returns true if none of the group units of the group are within a @{Zone}.
+--
+-- The zone can be of any @{Zone} class derived from @{Zone#ZONE_BASE}. So, these methods are polymorphic to the zones tested on.
+--
+-- ## GROUP AI methods
+--
+-- A GROUP has AI methods to control the AI activation.
+--
+-- * @{#GROUP.SetAIOnOff}(): Turns the GROUP AI On or Off.
+-- * @{#GROUP.SetAIOn}(): Turns the GROUP AI On.
+-- * @{#GROUP.SetAIOff}(): Turns the GROUP AI Off.
+--
+-- @field #GROUP GROUP
GROUP = {
ClassName = "GROUP",
}
@@ -16323,19 +16267,33 @@ function GROUP:GetPositionVec3() -- Overridden from POSITIONABLE:GetPositionVec3
return nil
end
---- Returns if the DCS Group is alive.
--- When the group exists at run-time, this method will return true, otherwise false.
+--- Returns if the Group is alive.
+-- The Group must:
+--
+-- * Exist at run-time.
+-- * Has at least one unit.
+--
+-- When the first @{Unit} of the Group is active, it will return true.
+-- If the first @{Unit} of the Group is inactive, it will return false.
+--
-- @param #GROUP self
--- @return #boolean true if the DCS Group is alive.
+-- @return #boolean true if the Group is alive and active.
+-- @return #boolean false if the Group is alive but inactive.
+-- @return #nil if the group does not exist anymore.
function GROUP:IsAlive()
self:F2( self.GroupName )
- local DCSGroup = self:GetDCSObject()
+ local DCSGroup = self:GetDCSObject() -- Dcs.DCSGroup#Group
if DCSGroup then
- local GroupIsAlive = DCSGroup:isExist() and DCSGroup:getUnit(1) ~= nil
- self:T3( GroupIsAlive )
- return GroupIsAlive
+ if DCSGroup:isExist() then
+ local DCSUnit = DCSGroup:getUnit(1) -- Dcs.DCSUnit#Unit
+ if DCSUnit then
+ local GroupIsAlive = DCSUnit:isActive()
+ self:T3( GroupIsAlive )
+ return GroupIsAlive
+ end
+ end
end
return nil
@@ -16582,6 +16540,7 @@ function GROUP:GetVec2()
end
--- Returns the current Vec3 vector of the first DCS Unit in the GROUP.
+-- @param #GROUP self
-- @return Dcs.DCSTypes#Vec3 Current Vec3 of the first DCS Unit of the GROUP.
function GROUP:GetVec3()
self:F2( self.GroupName )
@@ -16591,7 +16550,65 @@ function GROUP:GetVec3()
return GroupVec3
end
+--- Returns a POINT_VEC2 object indicating the point in 2D of the first UNIT of the GROUP within the mission.
+-- @param #GROUP self
+-- @return Core.Point#POINT_VEC2 The 2D point vector of the first DCS Unit of the GROUP.
+-- @return #nil The first UNIT is not existing or alive.
+function GROUP:GetPointVec2()
+ self:F2(self.GroupName)
+ local FirstUnit = self:GetUnit(1)
+
+ if FirstUnit then
+ local FirstUnitPointVec2 = FirstUnit:GetPointVec2()
+ self:T3(FirstUnitPointVec2)
+ return FirstUnitPointVec2
+ end
+
+ return nil
+end
+
+--- Returns a random @{DCSTypes#Vec3} vector (point in 3D of the UNIT within the mission) within a range around the first UNIT of the GROUP.
+-- @param #GROUP self
+-- @param #number Radius
+-- @return Dcs.DCSTypes#Vec3 The random 3D point vector around the first UNIT of the GROUP.
+-- @return #nil The GROUP is invalid or empty
+-- @usage
+-- -- If Radius is ignored, returns the Dcs.DCSTypes#Vec3 of first UNIT of the GROUP
+function GROUP:GetRandomVec3(Radius)
+ self:F2(self.GroupName)
+
+ local FirstUnit = self:GetUnit(1)
+
+ if FirstUnit then
+ local FirstUnitRandomPointVec3 = FirstUnit:GetRandomVec3(Radius)
+ self:T3(FirstUnitRandomPointVec3)
+ return FirstUnitRandomPointVec3
+ end
+
+ return nil
+end
+
+--- Returns the mean heading of every UNIT in the GROUP in degrees
+-- @param #GROUP self
+-- @return #number mean heading of the GROUP
+-- @return #nil The first UNIT is not existing or alive.
+function GROUP:GetHeading()
+ self:F2(self.GroupName)
+
+ local GroupSize = self:GetSize()
+ local HeadingAccumulator = 0
+
+ if GroupSize then
+ for i = 1, GroupSize do
+ HeadingAccumulator = HeadingAccumulator + self:GetUnit(i):GetHeading()
+ end
+ return math.floor(HeadingAccumulator / GroupSize)
+ end
+
+ return nil
+
+end
do -- Is Zone methods
@@ -17041,6 +17058,76 @@ function GROUP:InAir()
return nil
end
+do -- Route methods
+
+ --- (AIR) Return the Group to an @{Airbase#AIRBASE}.
+ -- The following things are to be taken into account:
+ --
+ -- * The group is respawned to achieve the RTB, there may be side artefacts as a result of this. (Like weapons suddenly come back).
+ -- * A group consisting out of more than one unit, may rejoin formation when respawned.
+ -- * A speed can be given in km/h. If no speed is specified, the maximum speed of the first unit will be taken to return to base.
+ -- * When there is no @{Airbase} object specified, the group will return to the home base if the route of the group is pinned at take-off or at landing to a base.
+ -- * When there is no @{Airbase} object specified and the group route is not pinned to any airbase, it will return to the nearest airbase.
+ --
+ -- @param #GROUP self
+ -- @param Wrapper.Airbase#AIRBASE RTBAirbase (optional) The @{Airbase} to return to. If blank, the controllable will return to the nearest friendly airbase.
+ -- @param #number Speed (optional) The Speed, if no Speed is given, the maximum Speed of the first unit is selected.
+ -- @return #GROUP
+ function GROUP:RouteRTB( RTBAirbase, Speed )
+ self:F2( { RTBAirbase, Speed } )
+
+ local DCSGroup = self:GetDCSObject()
+
+ if DCSGroup then
+
+ if RTBAirbase then
+
+ local GroupPoint = self:GetVec2()
+ local GroupVelocity = self:GetUnit(1):GetDesc().speedMax
+
+ local PointFrom = {}
+ PointFrom.x = GroupPoint.x
+ PointFrom.y = GroupPoint.y
+ PointFrom.type = "Turning Point"
+ PointFrom.action = "Turning Point"
+ PointFrom.speed = GroupVelocity
+
+
+ local PointTo = {}
+ local AirbasePointVec2 = RTBAirbase:GetPointVec2()
+ local AirbaseAirPoint = AirbasePointVec2:RoutePointAir(
+ POINT_VEC3.RoutePointAltType.BARO,
+ "Land",
+ "Landing",
+ Speed or self:GetUnit(1):GetDesc().speedMax
+ )
+
+ AirbaseAirPoint["airdromeId"] = RTBAirbase:GetID()
+ AirbaseAirPoint["speed_locked"] = true,
+
+ self:E(AirbaseAirPoint )
+
+ local Points = { PointFrom, AirbaseAirPoint }
+
+ self:T3( Points )
+
+ local Template = self:GetTemplate()
+ Template.route.points = Points
+ self:Respawn( Template )
+
+ self:Route( Points )
+
+ self:Respawn(Template)
+ else
+ self:ClearTasks()
+ end
+ end
+
+ return self
+ end
+
+end
+
function GROUP:OnReSpawn( ReSpawnFunction )
self.ReSpawnFunction = ReSpawnFunction
@@ -17097,10 +17184,10 @@ do -- Players
return PlayerNames
end
-end--- This module contains the UNIT class.
+end--- **Wrapper** - UNIT is a wrapper class for the DCS Class Unit.
+--
+-- ===
--
--- 1) @{#UNIT} class, extends @{Controllable#CONTROLLABLE}
--- ===========================================================
-- The @{#UNIT} class is a wrapper class to handle the DCS Unit objects:
--
-- * Support all DCS Unit APIs.
@@ -17108,9 +17195,14 @@ end--- This module contains the UNIT class.
-- * Handle local Unit Controller.
-- * Manage the "state" of the DCS Unit.
--
---
--- 1.1) UNIT reference methods
--- ----------------------
+-- @module Unit
+
+--- @type UNIT
+-- @extends Wrapper.Controllable#CONTROLLABLE
+
+---
+-- # UNIT class, extends @{Controllable#CONTROLLABLE}
+--
-- For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _@{DATABASE} object.
-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the @{SPAWN} class).
--
@@ -17128,15 +17220,15 @@ end--- This module contains the UNIT class.
--
-- IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil).
--
--- 1.2) DCS UNIT APIs
--- ------------------
+-- ## DCS UNIT APIs
+--
-- The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method.
-- To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call,
-- the first letter of the method is also capitalized. So, by example, the DCS Unit method @{DCSWrapper.Unit#Unit.getName}()
-- is implemented in the UNIT class as @{#UNIT.GetName}().
--
--- 1.3) Smoke, Flare Units
--- -----------------------
+-- ## Smoke, Flare Units
+--
-- The UNIT class provides methods to smoke or flare units easily.
-- The @{#UNIT.SmokeBlue}(), @{#UNIT.SmokeGreen}(),@{#UNIT.SmokeOrange}(), @{#UNIT.SmokeRed}(), @{#UNIT.SmokeRed}() methods
-- will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit.
@@ -17144,36 +17236,29 @@ end--- This module contains the UNIT class.
-- The @{#UNIT.FlareGreen}(), @{#UNIT.FlareRed}(), @{#UNIT.FlareWhite}(), @{#UNIT.FlareYellow}()
-- methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration.
--
--- 1.4) Location Position, Point
--- -----------------------------
+-- ## Location Position, Point
+--
-- The UNIT class provides methods to obtain the current point or position of the DCS Unit.
-- The @{#UNIT.GetPointVec2}(), @{#UNIT.GetVec3}() will obtain the current **location** of the DCS Unit in a Vec2 (2D) or a **point** in a Vec3 (3D) vector respectively.
-- If you want to obtain the complete **3D position** including ori�ntation and direction vectors, consult the @{#UNIT.GetPositionVec3}() method respectively.
--
--- 1.5) Test if alive
--- ------------------
+-- ## Test if alive
+--
-- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active.
--
--- 1.6) Test for proximity
--- -----------------------
+-- ## Test for proximity
+--
-- The UNIT class contains methods to test the location or proximity against zones or other objects.
--
--- ### 1.6.1) Zones
+-- ### Zones
+--
-- To test whether the Unit is within a **zone**, use the @{#UNIT.IsInZone}() or the @{#UNIT.IsNotInZone}() methods. Any zone can be tested on, but the zone must be derived from @{Zone#ZONE_BASE}.
--
--- ### 1.6.2) Units
+-- ### Units
+--
-- Test if another DCS Unit is within a given radius of the current DCS Unit, use the @{#UNIT.OtherUnitInRadius}() method.
--
--- @module Unit
--- @author FlightControl
-
-
-
-
-
---- The UNIT class
--- @type UNIT
--- @extends Wrapper.Controllable#CONTROLLABLE
+-- @field #UNIT UNIT
UNIT = {
ClassName="UNIT",
}
@@ -17315,7 +17400,7 @@ function UNIT:ReSpawn( SpawnVec3, Heading )
end
-- Remove obscolete units from the group structure
- i = 1
+ local i = 1
while i <= #SpawnGroupTemplate.units do
local UnitTemplateData = SpawnGroupTemplate.units[i]
@@ -17351,6 +17436,27 @@ function UNIT:IsActive()
return nil
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.
+-- @param #UNIT self
+-- @return #boolean true if Unit is alive and active.
+-- @return #boolean false if Unit is alive but not active.
+-- @return #nil if the Unit is not existing or is not alive.
+function UNIT:IsAlive()
+ self:F3( self.UnitName )
+
+ local DCSUnit = self:GetDCSObject() -- Dcs.DCSUnit#Unit
+
+ if DCSUnit then
+ local UnitIsAlive = DCSUnit:isExist() and DCSUnit:isActive()
+ return UnitIsAlive
+ end
+
+ return nil
+end
+
--- Returns the Unit's callsign - the localized string.
diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua
index 9aca34abf..d32411e0b 100644
--- a/Moose Mission Setup/Moose.lua
+++ b/Moose Mission Setup/Moose.lua
@@ -1,5 +1,5 @@
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
-env.info( 'Moose Generation Timestamp: 20170325_0623' )
+env.info( 'Moose Generation Timestamp: 20170327_1219' )
local base = _G
Include = {}
@@ -13241,17 +13241,19 @@ function IDENTIFIABLE:New( IdentifiableName )
return self
end
---- Returns if the Identifiable is alive.
+--- Returns if the Identifiable is alive.
+-- If the Identifiable is not alive, nil is returned.
+-- If the Identifiable is alive, true is returned.
-- @param #IDENTIFIABLE self
-- @return #boolean true if Identifiable is alive.
--- @return #nil The DCS Identifiable is not existing or alive.
+-- @return #nil if the Identifiable is not existing or is not alive.
function IDENTIFIABLE:IsAlive()
self:F3( self.IdentifiableName )
- local DCSIdentifiable = self:GetDCSObject()
+ local DCSIdentifiable = self:GetDCSObject() -- Dcs.DCSObject#Object
if DCSIdentifiable then
- local IdentifiableIsAlive = DCSIdentifiable:isExist()
+ local IdentifiableIsAlive = DCSIdentifiable:isExist()
return IdentifiableIsAlive
end
@@ -13541,8 +13543,11 @@ end
--- Returns a random @{DCSTypes#Vec3} vector within a range, indicating the point in 3D of the POSITIONABLE within the mission.
-- @param Wrapper.Positionable#POSITIONABLE self
+-- @param #number Radius
-- @return Dcs.DCSTypes#Vec3 The 3D point vector of the POSITIONABLE.
-- @return #nil The POSITIONABLE is not existing or alive.
+-- @usage
+-- -- If Radius is ignored, returns the Dcs.DCSTypes#Vec3 of first UNIT of the GROUP
function POSITIONABLE:GetRandomVec3( Radius )
self:F2( self.PositionableName )
@@ -13550,14 +13555,20 @@ function POSITIONABLE:GetRandomVec3( Radius )
if DCSPositionable then
local PositionablePointVec3 = DCSPositionable:getPosition().p
- local PositionableRandomVec3 = {}
- local angle = math.random() * math.pi*2;
- PositionableRandomVec3.x = PositionablePointVec3.x + math.cos( angle ) * math.random() * Radius;
- PositionableRandomVec3.y = PositionablePointVec3.y
- PositionableRandomVec3.z = PositionablePointVec3.z + math.sin( angle ) * math.random() * Radius;
- self:T3( PositionableRandomVec3 )
- return PositionableRandomVec3
+ if Radius then
+ local PositionableRandomVec3 = {}
+ local angle = math.random() * math.pi*2;
+ PositionableRandomVec3.x = PositionablePointVec3.x + math.cos( angle ) * math.random() * Radius;
+ PositionableRandomVec3.y = PositionablePointVec3.y
+ PositionableRandomVec3.z = PositionablePointVec3.z + math.sin( angle ) * math.random() * Radius;
+
+ self:T3( PositionableRandomVec3 )
+ return PositionableRandomVec3
+ else
+ self:E("Radius is nil, returning the PointVec3 of the POSITIONABLE", PositionablePointVec3)
+ return PositionablePointVec3
+ end
end
return nil
@@ -13625,6 +13636,7 @@ end
--- Returns the POSITIONABLE heading in degrees.
-- @param Wrapper.Positionable#POSITIONABLE self
-- @return #number The POSTIONABLE heading
+-- @return #nil The POSITIONABLE is not existing or alive.
function POSITIONABLE:GetHeading()
local DCSPositionable = self:GetDCSObject()
@@ -14305,12 +14317,20 @@ function CONTROLLABLE:CommandSwitchWayPoint( FromWayPoint, ToWayPoint )
return CommandSwitchWayPoint
end
---- Perform stop route command
+--- Create a stop route command, which returns a string containing the command.
+-- Use the result in the method @{#CONTROLLABLE.SetCommand}().
+-- A value of true will make the ground group stop, a value of false will make it continue.
+-- Note that this can only work on GROUP level, although individual UNITs can be commanded, the whole GROUP will react.
+--
+-- Example missions:
+--
+-- * GRP-310
+--
-- @param #CONTROLLABLE self
--- @param #boolean StopRoute
+-- @param #boolean StopRoute true if the ground unit needs to stop, false if it needs to continue to move.
-- @return Dcs.DCSTasking.Task#Task
-function CONTROLLABLE:CommandStopRoute( StopRoute, Index )
- self:F2( { StopRoute, Index } )
+function CONTROLLABLE:CommandStopRoute( StopRoute )
+ self:F2( { StopRoute } )
local CommandStopRoute = {
id = 'StopRoute',
@@ -15497,90 +15517,6 @@ function CONTROLLABLE:TaskRouteToZone( Zone, Randomize, Speed, Formation )
return nil
end
---- (AIR) Return the Controllable to an @{Airbase#AIRBASE}
--- A speed can be given in km/h.
--- A given formation can be given.
--- @param #CONTROLLABLE self
--- @param Wrapper.Airbase#AIRBASE ReturnAirbase The @{Airbase#AIRBASE} to return to.
--- @param #number Speed (optional) The speed.
--- @return #string The route
-function CONTROLLABLE:RouteReturnToAirbase( ReturnAirbase, Speed )
- self:F2( { ReturnAirbase, Speed } )
-
--- Example
--- [4] =
--- {
--- ["alt"] = 45,
--- ["type"] = "Land",
--- ["action"] = "Landing",
--- ["alt_type"] = "BARO",
--- ["formation_template"] = "",
--- ["properties"] =
--- {
--- ["vnav"] = 1,
--- ["scale"] = 0,
--- ["angle"] = 0,
--- ["vangle"] = 0,
--- ["steer"] = 2,
--- }, -- end of ["properties"]
--- ["ETA"] = 527.81058817743,
--- ["airdromeId"] = 12,
--- ["y"] = 243127.2973737,
--- ["x"] = -5406.2803440839,
--- ["name"] = "DictKey_WptName_53",
--- ["speed"] = 138.88888888889,
--- ["ETA_locked"] = false,
--- ["task"] =
--- {
--- ["id"] = "ComboTask",
--- ["params"] =
--- {
--- ["tasks"] =
--- {
--- }, -- end of ["tasks"]
--- }, -- end of ["params"]
--- }, -- end of ["task"]
--- ["speed_locked"] = true,
--- }, -- end of [4]
-
-
- local DCSControllable = self:GetDCSObject()
-
- if DCSControllable then
-
- local ControllablePoint = self:GetVec2()
- local ControllableVelocity = self:GetMaxVelocity()
-
- local PointFrom = {}
- PointFrom.x = ControllablePoint.x
- PointFrom.y = ControllablePoint.y
- PointFrom.type = "Turning Point"
- PointFrom.action = "Turning Point"
- PointFrom.speed = ControllableVelocity
-
-
- local PointTo = {}
- local AirbasePoint = ReturnAirbase:GetVec2()
-
- PointTo.x = AirbasePoint.x
- PointTo.y = AirbasePoint.y
- PointTo.type = "Land"
- PointTo.action = "Landing"
- PointTo.airdromeId = ReturnAirbase:GetID()-- Airdrome ID
- self:T(PointTo.airdromeId)
- --PointTo.alt = 0
-
- local Points = { PointFrom, PointTo }
-
- self:T3( Points )
-
- local Route = { points = Points, }
-
- return Route
- end
-
- return nil
-end
-- Commands
@@ -15621,6 +15557,8 @@ function CONTROLLABLE:GetTaskRoute()
return routines.utils.deepCopy( _DATABASE.Templates.Controllables[self.ControllableName].Template.route.points )
end
+
+
--- Return the route of a controllable by using the @{Database#DATABASE} class.
-- @param #CONTROLLABLE self
-- @param #number Begin The route point from where the copy will start. The base route point is 0.
@@ -16144,11 +16082,11 @@ function CONTROLLABLE:WayPointExecute( WayPoint, WaitTime )
return self
end
--- Message APIs--- This module contains the GROUP class.
+-- Message APIs--- **Wrapper** -- GROUP is a wrapper class for the DCS Class Group.
--
--- 1) @{Group#GROUP} class, extends @{Controllable#CONTROLLABLE}
--- =============================================================
--- The @{Group#GROUP} class is a wrapper class to handle the DCS Group objects:
+-- ===
+--
+-- The @{#GROUP} class is a wrapper class to handle the DCS Group objects:
--
-- * Support all DCS Group APIs.
-- * Enhance with Group specific APIs not in the DCS Group API set.
@@ -16157,60 +16095,8 @@ end
--
-- **IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil).**
--
--- 1.1) GROUP reference methods
--- -----------------------
--- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object.
--- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class).
---
--- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
--- using the DCS Group or the DCS GroupName.
---
--- Another thing to know is that GROUP objects do not "contain" the DCS Group object.
--- The GROUP methods will reference the DCS Group object by name when it is needed during API execution.
--- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file.
---
--- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance:
---
--- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object.
--- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name.
---
--- ## 1.2) GROUP task methods
---
--- A GROUP is a @{Controllable}. See the @{Controllable} task methods section for a description of the task methods.
---
--- ### 1.2.4) Obtain the mission from group templates
+-- See the detailed documentation on the GROUP class.
--
--- Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another:
---
--- * @{Controllable#CONTROLLABLE.TaskMission}: (AIR + GROUND) Return a mission task from a mission template.
---
--- ## 1.3) GROUP Command methods
---
--- A GROUP is a @{Controllable}. See the @{Controllable} command methods section for a description of the command methods.
---
--- ## 1.4) GROUP option methods
---
--- A GROUP is a @{Controllable}. See the @{Controllable} option methods section for a description of the option methods.
---
--- ## 1.5) GROUP Zone validation methods
---
--- The group can be validated whether it is completely, partly or not within a @{Zone}.
--- Use the following Zone validation methods on the group:
---
--- * @{#GROUP.IsCompletelyInZone}: Returns true if all units of the group are within a @{Zone}.
--- * @{#GROUP.IsPartlyInZone}: Returns true if some units of the group are within a @{Zone}.
--- * @{#GROUP.IsNotInZone}: Returns true if none of the group units of the group are within a @{Zone}.
---
--- The zone can be of any @{Zone} class derived from @{Zone#ZONE_BASE}. So, these methods are polymorphic to the zones tested on.
---
--- ## 1.6) GROUP AI methods
---
--- A GROUP has AI methods to control the AI activation.
---
--- * @{#GROUP.SetAIOnOff}(): Turns the GROUP AI On or Off.
--- * @{#GROUP.SetAIOn}(): Turns the GROUP AI On.
--- * @{#GROUP.SetAIOff}(): Turns the GROUP AI Off.
---
-- ====
--
-- # **API CHANGE HISTORY**
@@ -16222,6 +16108,8 @@ end
--
-- Hereby the change log:
--
+-- 2017-03-26: GROUP:**RouteRTB( RTBAirbase, Speed )** added.
+--
-- 2017-03-07: GROUP:**HandleEvent( Event, EventFunction )** added.
-- 2017-03-07: GROUP:**UnHandleEvent( Event )** added.
--
@@ -16246,10 +16134,66 @@ end
-- @module Group
-- @author FlightControl
---- The GROUP class
--- @type GROUP
+--- @type GROUP
-- @extends Wrapper.Controllable#CONTROLLABLE
-- @field #string GroupName The name of the group.
+
+---
+-- # GROUP class, extends @{Controllable#CONTROLLABLE}
+--
+-- For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _@{DATABASE} object.
+-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the @{SPAWN} class).
+--
+-- The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
+-- using the DCS Group or the DCS GroupName.
+--
+-- Another thing to know is that GROUP objects do not "contain" the DCS Group object.
+-- The GROUP methods will reference the DCS Group object by name when it is needed during API execution.
+-- If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file.
+--
+-- The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance:
+--
+-- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object.
+-- * @{#GROUP.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name.
+--
+-- ## GROUP task methods
+--
+-- A GROUP is a @{Controllable}. See the @{Controllable} task methods section for a description of the task methods.
+--
+-- ### Obtain the mission from group templates
+--
+-- Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another:
+--
+-- * @{Controllable#CONTROLLABLE.TaskMission}: (AIR + GROUND) Return a mission task from a mission template.
+--
+-- ## GROUP Command methods
+--
+-- A GROUP is a @{Controllable}. See the @{Controllable} command methods section for a description of the command methods.
+--
+-- ## GROUP option methods
+--
+-- A GROUP is a @{Controllable}. See the @{Controllable} option methods section for a description of the option methods.
+--
+-- ## GROUP Zone validation methods
+--
+-- The group can be validated whether it is completely, partly or not within a @{Zone}.
+-- Use the following Zone validation methods on the group:
+--
+-- * @{#GROUP.IsCompletelyInZone}: Returns true if all units of the group are within a @{Zone}.
+-- * @{#GROUP.IsPartlyInZone}: Returns true if some units of the group are within a @{Zone}.
+-- * @{#GROUP.IsNotInZone}: Returns true if none of the group units of the group are within a @{Zone}.
+--
+-- The zone can be of any @{Zone} class derived from @{Zone#ZONE_BASE}. So, these methods are polymorphic to the zones tested on.
+--
+-- ## GROUP AI methods
+--
+-- A GROUP has AI methods to control the AI activation.
+--
+-- * @{#GROUP.SetAIOnOff}(): Turns the GROUP AI On or Off.
+-- * @{#GROUP.SetAIOn}(): Turns the GROUP AI On.
+-- * @{#GROUP.SetAIOff}(): Turns the GROUP AI Off.
+--
+-- @field #GROUP GROUP
GROUP = {
ClassName = "GROUP",
}
@@ -16323,19 +16267,33 @@ function GROUP:GetPositionVec3() -- Overridden from POSITIONABLE:GetPositionVec3
return nil
end
---- Returns if the DCS Group is alive.
--- When the group exists at run-time, this method will return true, otherwise false.
+--- Returns if the Group is alive.
+-- The Group must:
+--
+-- * Exist at run-time.
+-- * Has at least one unit.
+--
+-- When the first @{Unit} of the Group is active, it will return true.
+-- If the first @{Unit} of the Group is inactive, it will return false.
+--
-- @param #GROUP self
--- @return #boolean true if the DCS Group is alive.
+-- @return #boolean true if the Group is alive and active.
+-- @return #boolean false if the Group is alive but inactive.
+-- @return #nil if the group does not exist anymore.
function GROUP:IsAlive()
self:F2( self.GroupName )
- local DCSGroup = self:GetDCSObject()
+ local DCSGroup = self:GetDCSObject() -- Dcs.DCSGroup#Group
if DCSGroup then
- local GroupIsAlive = DCSGroup:isExist() and DCSGroup:getUnit(1) ~= nil
- self:T3( GroupIsAlive )
- return GroupIsAlive
+ if DCSGroup:isExist() then
+ local DCSUnit = DCSGroup:getUnit(1) -- Dcs.DCSUnit#Unit
+ if DCSUnit then
+ local GroupIsAlive = DCSUnit:isActive()
+ self:T3( GroupIsAlive )
+ return GroupIsAlive
+ end
+ end
end
return nil
@@ -16582,6 +16540,7 @@ function GROUP:GetVec2()
end
--- Returns the current Vec3 vector of the first DCS Unit in the GROUP.
+-- @param #GROUP self
-- @return Dcs.DCSTypes#Vec3 Current Vec3 of the first DCS Unit of the GROUP.
function GROUP:GetVec3()
self:F2( self.GroupName )
@@ -16591,7 +16550,65 @@ function GROUP:GetVec3()
return GroupVec3
end
+--- Returns a POINT_VEC2 object indicating the point in 2D of the first UNIT of the GROUP within the mission.
+-- @param #GROUP self
+-- @return Core.Point#POINT_VEC2 The 2D point vector of the first DCS Unit of the GROUP.
+-- @return #nil The first UNIT is not existing or alive.
+function GROUP:GetPointVec2()
+ self:F2(self.GroupName)
+ local FirstUnit = self:GetUnit(1)
+
+ if FirstUnit then
+ local FirstUnitPointVec2 = FirstUnit:GetPointVec2()
+ self:T3(FirstUnitPointVec2)
+ return FirstUnitPointVec2
+ end
+
+ return nil
+end
+
+--- Returns a random @{DCSTypes#Vec3} vector (point in 3D of the UNIT within the mission) within a range around the first UNIT of the GROUP.
+-- @param #GROUP self
+-- @param #number Radius
+-- @return Dcs.DCSTypes#Vec3 The random 3D point vector around the first UNIT of the GROUP.
+-- @return #nil The GROUP is invalid or empty
+-- @usage
+-- -- If Radius is ignored, returns the Dcs.DCSTypes#Vec3 of first UNIT of the GROUP
+function GROUP:GetRandomVec3(Radius)
+ self:F2(self.GroupName)
+
+ local FirstUnit = self:GetUnit(1)
+
+ if FirstUnit then
+ local FirstUnitRandomPointVec3 = FirstUnit:GetRandomVec3(Radius)
+ self:T3(FirstUnitRandomPointVec3)
+ return FirstUnitRandomPointVec3
+ end
+
+ return nil
+end
+
+--- Returns the mean heading of every UNIT in the GROUP in degrees
+-- @param #GROUP self
+-- @return #number mean heading of the GROUP
+-- @return #nil The first UNIT is not existing or alive.
+function GROUP:GetHeading()
+ self:F2(self.GroupName)
+
+ local GroupSize = self:GetSize()
+ local HeadingAccumulator = 0
+
+ if GroupSize then
+ for i = 1, GroupSize do
+ HeadingAccumulator = HeadingAccumulator + self:GetUnit(i):GetHeading()
+ end
+ return math.floor(HeadingAccumulator / GroupSize)
+ end
+
+ return nil
+
+end
do -- Is Zone methods
@@ -17041,6 +17058,76 @@ function GROUP:InAir()
return nil
end
+do -- Route methods
+
+ --- (AIR) Return the Group to an @{Airbase#AIRBASE}.
+ -- The following things are to be taken into account:
+ --
+ -- * The group is respawned to achieve the RTB, there may be side artefacts as a result of this. (Like weapons suddenly come back).
+ -- * A group consisting out of more than one unit, may rejoin formation when respawned.
+ -- * A speed can be given in km/h. If no speed is specified, the maximum speed of the first unit will be taken to return to base.
+ -- * When there is no @{Airbase} object specified, the group will return to the home base if the route of the group is pinned at take-off or at landing to a base.
+ -- * When there is no @{Airbase} object specified and the group route is not pinned to any airbase, it will return to the nearest airbase.
+ --
+ -- @param #GROUP self
+ -- @param Wrapper.Airbase#AIRBASE RTBAirbase (optional) The @{Airbase} to return to. If blank, the controllable will return to the nearest friendly airbase.
+ -- @param #number Speed (optional) The Speed, if no Speed is given, the maximum Speed of the first unit is selected.
+ -- @return #GROUP
+ function GROUP:RouteRTB( RTBAirbase, Speed )
+ self:F2( { RTBAirbase, Speed } )
+
+ local DCSGroup = self:GetDCSObject()
+
+ if DCSGroup then
+
+ if RTBAirbase then
+
+ local GroupPoint = self:GetVec2()
+ local GroupVelocity = self:GetUnit(1):GetDesc().speedMax
+
+ local PointFrom = {}
+ PointFrom.x = GroupPoint.x
+ PointFrom.y = GroupPoint.y
+ PointFrom.type = "Turning Point"
+ PointFrom.action = "Turning Point"
+ PointFrom.speed = GroupVelocity
+
+
+ local PointTo = {}
+ local AirbasePointVec2 = RTBAirbase:GetPointVec2()
+ local AirbaseAirPoint = AirbasePointVec2:RoutePointAir(
+ POINT_VEC3.RoutePointAltType.BARO,
+ "Land",
+ "Landing",
+ Speed or self:GetUnit(1):GetDesc().speedMax
+ )
+
+ AirbaseAirPoint["airdromeId"] = RTBAirbase:GetID()
+ AirbaseAirPoint["speed_locked"] = true,
+
+ self:E(AirbaseAirPoint )
+
+ local Points = { PointFrom, AirbaseAirPoint }
+
+ self:T3( Points )
+
+ local Template = self:GetTemplate()
+ Template.route.points = Points
+ self:Respawn( Template )
+
+ self:Route( Points )
+
+ self:Respawn(Template)
+ else
+ self:ClearTasks()
+ end
+ end
+
+ return self
+ end
+
+end
+
function GROUP:OnReSpawn( ReSpawnFunction )
self.ReSpawnFunction = ReSpawnFunction
@@ -17097,10 +17184,10 @@ do -- Players
return PlayerNames
end
-end--- This module contains the UNIT class.
+end--- **Wrapper** - UNIT is a wrapper class for the DCS Class Unit.
+--
+-- ===
--
--- 1) @{#UNIT} class, extends @{Controllable#CONTROLLABLE}
--- ===========================================================
-- The @{#UNIT} class is a wrapper class to handle the DCS Unit objects:
--
-- * Support all DCS Unit APIs.
@@ -17108,9 +17195,14 @@ end--- This module contains the UNIT class.
-- * Handle local Unit Controller.
-- * Manage the "state" of the DCS Unit.
--
---
--- 1.1) UNIT reference methods
--- ----------------------
+-- @module Unit
+
+--- @type UNIT
+-- @extends Wrapper.Controllable#CONTROLLABLE
+
+---
+-- # UNIT class, extends @{Controllable#CONTROLLABLE}
+--
-- For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _@{DATABASE} object.
-- This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the @{SPAWN} class).
--
@@ -17128,15 +17220,15 @@ end--- This module contains the UNIT class.
--
-- IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil).
--
--- 1.2) DCS UNIT APIs
--- ------------------
+-- ## DCS UNIT APIs
+--
-- The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method.
-- To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call,
-- the first letter of the method is also capitalized. So, by example, the DCS Unit method @{DCSWrapper.Unit#Unit.getName}()
-- is implemented in the UNIT class as @{#UNIT.GetName}().
--
--- 1.3) Smoke, Flare Units
--- -----------------------
+-- ## Smoke, Flare Units
+--
-- The UNIT class provides methods to smoke or flare units easily.
-- The @{#UNIT.SmokeBlue}(), @{#UNIT.SmokeGreen}(),@{#UNIT.SmokeOrange}(), @{#UNIT.SmokeRed}(), @{#UNIT.SmokeRed}() methods
-- will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit.
@@ -17144,36 +17236,29 @@ end--- This module contains the UNIT class.
-- The @{#UNIT.FlareGreen}(), @{#UNIT.FlareRed}(), @{#UNIT.FlareWhite}(), @{#UNIT.FlareYellow}()
-- methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration.
--
--- 1.4) Location Position, Point
--- -----------------------------
+-- ## Location Position, Point
+--
-- The UNIT class provides methods to obtain the current point or position of the DCS Unit.
-- The @{#UNIT.GetPointVec2}(), @{#UNIT.GetVec3}() will obtain the current **location** of the DCS Unit in a Vec2 (2D) or a **point** in a Vec3 (3D) vector respectively.
-- If you want to obtain the complete **3D position** including ori�ntation and direction vectors, consult the @{#UNIT.GetPositionVec3}() method respectively.
--
--- 1.5) Test if alive
--- ------------------
+-- ## Test if alive
+--
-- The @{#UNIT.IsAlive}(), @{#UNIT.IsActive}() methods determines if the DCS Unit is alive, meaning, it is existing and active.
--
--- 1.6) Test for proximity
--- -----------------------
+-- ## Test for proximity
+--
-- The UNIT class contains methods to test the location or proximity against zones or other objects.
--
--- ### 1.6.1) Zones
+-- ### Zones
+--
-- To test whether the Unit is within a **zone**, use the @{#UNIT.IsInZone}() or the @{#UNIT.IsNotInZone}() methods. Any zone can be tested on, but the zone must be derived from @{Zone#ZONE_BASE}.
--
--- ### 1.6.2) Units
+-- ### Units
+--
-- Test if another DCS Unit is within a given radius of the current DCS Unit, use the @{#UNIT.OtherUnitInRadius}() method.
--
--- @module Unit
--- @author FlightControl
-
-
-
-
-
---- The UNIT class
--- @type UNIT
--- @extends Wrapper.Controllable#CONTROLLABLE
+-- @field #UNIT UNIT
UNIT = {
ClassName="UNIT",
}
@@ -17315,7 +17400,7 @@ function UNIT:ReSpawn( SpawnVec3, Heading )
end
-- Remove obscolete units from the group structure
- i = 1
+ local i = 1
while i <= #SpawnGroupTemplate.units do
local UnitTemplateData = SpawnGroupTemplate.units[i]
@@ -17351,6 +17436,27 @@ function UNIT:IsActive()
return nil
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.
+-- @param #UNIT self
+-- @return #boolean true if Unit is alive and active.
+-- @return #boolean false if Unit is alive but not active.
+-- @return #nil if the Unit is not existing or is not alive.
+function UNIT:IsAlive()
+ self:F3( self.UnitName )
+
+ local DCSUnit = self:GetDCSObject() -- Dcs.DCSUnit#Unit
+
+ if DCSUnit then
+ local UnitIsAlive = DCSUnit:isExist() and DCSUnit:isActive()
+ return UnitIsAlive
+ end
+
+ return nil
+end
+
--- Returns the Unit's callsign - the localized string.
diff --git a/Moose Test Missions/ABP - Airbase Police/APL-001 - Caucasus/APL-001 - Caucasus.miz b/Moose Test Missions/ABP - Airbase Police/APL-001 - Caucasus/APL-001 - Caucasus.miz
index 77ee528e0..40da60e12 100644
Binary files a/Moose Test Missions/ABP - Airbase Police/APL-001 - Caucasus/APL-001 - Caucasus.miz and b/Moose Test Missions/ABP - Airbase Police/APL-001 - Caucasus/APL-001 - Caucasus.miz differ
diff --git a/Moose Test Missions/ABP - Airbase Police/APL-002 - Nevada/APL-002 - Nevada.miz b/Moose Test Missions/ABP - Airbase Police/APL-002 - Nevada/APL-002 - Nevada.miz
index f343c2481..4893f8abf 100644
Binary files a/Moose Test Missions/ABP - Airbase Police/APL-002 - Nevada/APL-002 - Nevada.miz and b/Moose Test Missions/ABP - Airbase Police/APL-002 - Nevada/APL-002 - Nevada.miz differ
diff --git a/Moose Test Missions/ACL - Airbase Cleaner/ACL-001 - Airbase CleanUp/ACL-001 - Airbase CleanUp.miz b/Moose Test Missions/ACL - Airbase Cleaner/ACL-001 - Airbase CleanUp/ACL-001 - Airbase CleanUp.miz
index 46c1093e8..6f70aac91 100644
Binary files a/Moose Test Missions/ACL - Airbase Cleaner/ACL-001 - Airbase CleanUp/ACL-001 - Airbase CleanUp.miz and b/Moose Test Missions/ACL - Airbase Cleaner/ACL-001 - Airbase CleanUp/ACL-001 - Airbase CleanUp.miz differ
diff --git a/Moose Test Missions/AIB - AI Balancing/AIB-001 - Spawned AI/AIB-001 - Spawned AI.miz b/Moose Test Missions/AIB - AI Balancing/AIB-001 - Spawned AI/AIB-001 - Spawned AI.miz
index 7867511fd..f5619d3e0 100644
Binary files a/Moose Test Missions/AIB - AI Balancing/AIB-001 - Spawned AI/AIB-001 - Spawned AI.miz and b/Moose Test Missions/AIB - AI Balancing/AIB-001 - Spawned AI/AIB-001 - Spawned AI.miz differ
diff --git a/Moose Test Missions/AIB - AI Balancing/AIB-002 - Patrol AI/AIB-002 - Patrol AI.miz b/Moose Test Missions/AIB - AI Balancing/AIB-002 - Patrol AI/AIB-002 - Patrol AI.miz
index 219a4a03e..4321844f6 100644
Binary files a/Moose Test Missions/AIB - AI Balancing/AIB-002 - Patrol AI/AIB-002 - Patrol AI.miz and b/Moose Test Missions/AIB - AI Balancing/AIB-002 - Patrol AI/AIB-002 - Patrol AI.miz differ
diff --git a/Moose Test Missions/AIB - AI Balancing/AIB-003 - Two coalitions InitCleanUp test/AIB-003 - Two coalitions InitCleanUp test.miz b/Moose Test Missions/AIB - AI Balancing/AIB-003 - Two coalitions InitCleanUp test/AIB-003 - Two coalitions InitCleanUp test.miz
index c6c83b415..44597cba3 100644
Binary files a/Moose Test Missions/AIB - AI Balancing/AIB-003 - Two coalitions InitCleanUp test/AIB-003 - Two coalitions InitCleanUp test.miz and b/Moose Test Missions/AIB - AI Balancing/AIB-003 - Two coalitions InitCleanUp test/AIB-003 - Two coalitions InitCleanUp test.miz differ
diff --git a/Moose Test Missions/AIB - AI Balancing/AIB-004 - Respawn Test when Destroyed/AIB-004 - Respawn Test when Destroyed.miz b/Moose Test Missions/AIB - AI Balancing/AIB-004 - Respawn Test when Destroyed/AIB-004 - Respawn Test when Destroyed.miz
index b901baefe..bdc946b15 100644
Binary files a/Moose Test Missions/AIB - AI Balancing/AIB-004 - Respawn Test when Destroyed/AIB-004 - Respawn Test when Destroyed.miz and b/Moose Test Missions/AIB - AI Balancing/AIB-004 - Respawn Test when Destroyed/AIB-004 - Respawn Test when Destroyed.miz differ
diff --git a/Moose Test Missions/AIB - AI Balancing/AIB-005 - Patrol AI and Randomize Zones/AIB-005 - Patrol AI and Randomize Zones.miz b/Moose Test Missions/AIB - AI Balancing/AIB-005 - Patrol AI and Randomize Zones/AIB-005 - Patrol AI and Randomize Zones.miz
index 232c40fda..348d0ae84 100644
Binary files a/Moose Test Missions/AIB - AI Balancing/AIB-005 - Patrol AI and Randomize Zones/AIB-005 - Patrol AI and Randomize Zones.miz and b/Moose Test Missions/AIB - AI Balancing/AIB-005 - Patrol AI and Randomize Zones/AIB-005 - Patrol AI and Randomize Zones.miz differ
diff --git a/Moose Test Missions/AIB - AI Balancing/AIB-006 - Declutter AI at Airbases/AIB-006 - Declutter AI at Airbases.miz b/Moose Test Missions/AIB - AI Balancing/AIB-006 - Declutter AI at Airbases/AIB-006 - Declutter AI at Airbases.miz
index 4d08a41d7..fc05c592b 100644
Binary files a/Moose Test Missions/AIB - AI Balancing/AIB-006 - Declutter AI at Airbases/AIB-006 - Declutter AI at Airbases.miz and b/Moose Test Missions/AIB - AI Balancing/AIB-006 - Declutter AI at Airbases/AIB-006 - Declutter AI at Airbases.miz differ
diff --git a/Moose Test Missions/AIB - AI Balancing/AIB-007 - AI Balancers For all airports and both coalitions/AIB-007 - AI Balancers For all airports and both coalitions.miz b/Moose Test Missions/AIB - AI Balancing/AIB-007 - AI Balancers For all airports and both coalitions/AIB-007 - AI Balancers For all airports and both coalitions.miz
index 623ab7f89..26dfe66bc 100644
Binary files a/Moose Test Missions/AIB - AI Balancing/AIB-007 - AI Balancers For all airports and both coalitions/AIB-007 - AI Balancers For all airports and both coalitions.miz and b/Moose Test Missions/AIB - AI Balancing/AIB-007 - AI Balancers For all airports and both coalitions/AIB-007 - AI Balancers For all airports and both coalitions.miz differ
diff --git a/Moose Test Missions/CAP - Combat Air Patrol/CAP-001 - Combat Air Patrol/CAP-001 - Combat Air Patrol.miz b/Moose Test Missions/CAP - Combat Air Patrol/CAP-001 - Combat Air Patrol/CAP-001 - Combat Air Patrol.miz
index bf1182a2a..2e7babc53 100644
Binary files a/Moose Test Missions/CAP - Combat Air Patrol/CAP-001 - Combat Air Patrol/CAP-001 - Combat Air Patrol.miz and b/Moose Test Missions/CAP - Combat Air Patrol/CAP-001 - Combat Air Patrol/CAP-001 - Combat Air Patrol.miz differ
diff --git a/Moose Test Missions/CAP - Combat Air Patrol/CAP-010 - CAP and Engage within Range/CAP-010 - CAP and Engage within Range.miz b/Moose Test Missions/CAP - Combat Air Patrol/CAP-010 - CAP and Engage within Range/CAP-010 - CAP and Engage within Range.miz
index 86352624c..529550dde 100644
Binary files a/Moose Test Missions/CAP - Combat Air Patrol/CAP-010 - CAP and Engage within Range/CAP-010 - CAP and Engage within Range.miz and b/Moose Test Missions/CAP - Combat Air Patrol/CAP-010 - CAP and Engage within Range/CAP-010 - CAP and Engage within Range.miz differ
diff --git a/Moose Test Missions/CAP - Combat Air Patrol/CAP-011 - CAP and Engage within Zone/CAP-011 - CAP and Engage within Zone.miz b/Moose Test Missions/CAP - Combat Air Patrol/CAP-011 - CAP and Engage within Zone/CAP-011 - CAP and Engage within Zone.miz
index f6c5c21ec..c70916318 100644
Binary files a/Moose Test Missions/CAP - Combat Air Patrol/CAP-011 - CAP and Engage within Zone/CAP-011 - CAP and Engage within Zone.miz and b/Moose Test Missions/CAP - Combat Air Patrol/CAP-011 - CAP and Engage within Zone/CAP-011 - CAP and Engage within Zone.miz differ
diff --git a/Moose Test Missions/CAP - Combat Air Patrol/CAP-012 - CAP - Test Abort/CAP-012 - CAP - Test Abort.miz b/Moose Test Missions/CAP - Combat Air Patrol/CAP-012 - CAP - Test Abort/CAP-012 - CAP - Test Abort.miz
index 2d8eebe36..e0888120c 100644
Binary files a/Moose Test Missions/CAP - Combat Air Patrol/CAP-012 - CAP - Test Abort/CAP-012 - CAP - Test Abort.miz and b/Moose Test Missions/CAP - Combat Air Patrol/CAP-012 - CAP - Test Abort/CAP-012 - CAP - Test Abort.miz differ
diff --git a/Moose Test Missions/CAP - Combat Air Patrol/CAP-020 - Combat Air Patrol RTB Test/CAP-020 - Combat Air Patrol RTB Test.miz b/Moose Test Missions/CAP - Combat Air Patrol/CAP-020 - Combat Air Patrol RTB Test/CAP-020 - Combat Air Patrol RTB Test.miz
index 6ee1796fd..af3d81f30 100644
Binary files a/Moose Test Missions/CAP - Combat Air Patrol/CAP-020 - Combat Air Patrol RTB Test/CAP-020 - Combat Air Patrol RTB Test.miz and b/Moose Test Missions/CAP - Combat Air Patrol/CAP-020 - Combat Air Patrol RTB Test/CAP-020 - Combat Air Patrol RTB Test.miz differ
diff --git a/Moose Test Missions/CAS - Close Air Support/CAS-001 - CAS in a Zone by Airplane Group/CAS-001 - CAS in a ZONE-ME Test.miz b/Moose Test Missions/CAS - Close Air Support/CAS-001 - CAS in a Zone by Airplane Group/CAS-001 - CAS in a ZONE-ME Test.miz
index 28367d7fb..c389dfc61 100644
Binary files a/Moose Test Missions/CAS - Close Air Support/CAS-001 - CAS in a Zone by Airplane Group/CAS-001 - CAS in a ZONE-ME Test.miz and b/Moose Test Missions/CAS - Close Air Support/CAS-001 - CAS in a Zone by Airplane Group/CAS-001 - CAS in a ZONE-ME Test.miz differ
diff --git a/Moose Test Missions/CAS - Close Air Support/CAS-001 - CAS in a Zone by Airplane Group/CAS-001 - CAS in a Zone by Airplane Group.miz b/Moose Test Missions/CAS - Close Air Support/CAS-001 - CAS in a Zone by Airplane Group/CAS-001 - CAS in a Zone by Airplane Group.miz
index fd3686ee9..6b4b491e2 100644
Binary files a/Moose Test Missions/CAS - Close Air Support/CAS-001 - CAS in a Zone by Airplane Group/CAS-001 - CAS in a Zone by Airplane Group.miz and b/Moose Test Missions/CAS - Close Air Support/CAS-001 - CAS in a Zone by Airplane Group/CAS-001 - CAS in a Zone by Airplane Group.miz differ
diff --git a/Moose Test Missions/CAS - Close Air Support/CAS-002 - CAS in a Zone by Airplane Group - Engage with Speed/CAS-002 - CAS in a Zone by Airplane Group - Engage with Speed.miz b/Moose Test Missions/CAS - Close Air Support/CAS-002 - CAS in a Zone by Airplane Group - Engage with Speed/CAS-002 - CAS in a Zone by Airplane Group - Engage with Speed.miz
index c4e3fa409..d3401bf74 100644
Binary files a/Moose Test Missions/CAS - Close Air Support/CAS-002 - CAS in a Zone by Airplane Group - Engage with Speed/CAS-002 - CAS in a Zone by Airplane Group - Engage with Speed.miz and b/Moose Test Missions/CAS - Close Air Support/CAS-002 - CAS in a Zone by Airplane Group - Engage with Speed/CAS-002 - CAS in a Zone by Airplane Group - Engage with Speed.miz differ
diff --git a/Moose Test Missions/CAS - Close Air Support/CAS-003 - CAS in a Zone by Airplane Group - Engage with Speed and Altitude/CAS-003 - CAS in a Zone by Airplane Group - Engage with Speed and Altitude.miz b/Moose Test Missions/CAS - Close Air Support/CAS-003 - CAS in a Zone by Airplane Group - Engage with Speed and Altitude/CAS-003 - CAS in a Zone by Airplane Group - Engage with Speed and Altitude.miz
index c09df8345..0f412ea66 100644
Binary files a/Moose Test Missions/CAS - Close Air Support/CAS-003 - CAS in a Zone by Airplane Group - Engage with Speed and Altitude/CAS-003 - CAS in a Zone by Airplane Group - Engage with Speed and Altitude.miz and b/Moose Test Missions/CAS - Close Air Support/CAS-003 - CAS in a Zone by Airplane Group - Engage with Speed and Altitude/CAS-003 - CAS in a Zone by Airplane Group - Engage with Speed and Altitude.miz differ
diff --git a/Moose Test Missions/CAS - Close Air Support/CAS-004 - CAS in a Zone by Airplane Group - Test Abort/CAS-004 - CAS in a Zone by Airplane Group - Test Abort.miz b/Moose Test Missions/CAS - Close Air Support/CAS-004 - CAS in a Zone by Airplane Group - Test Abort/CAS-004 - CAS in a Zone by Airplane Group - Test Abort.miz
index cdaac0398..560fb7e27 100644
Binary files a/Moose Test Missions/CAS - Close Air Support/CAS-004 - CAS in a Zone by Airplane Group - Test Abort/CAS-004 - CAS in a Zone by Airplane Group - Test Abort.miz and b/Moose Test Missions/CAS - Close Air Support/CAS-004 - CAS in a Zone by Airplane Group - Test Abort/CAS-004 - CAS in a Zone by Airplane Group - Test Abort.miz differ
diff --git a/Moose Test Missions/CAS - Close Air Support/CAS-005 - CAS in a Zone by Airplane Group - Engage with WeaponExpend/CAS-005 - CAS in a Zone by Airplane Group - Engage with WeaponExpend.miz b/Moose Test Missions/CAS - Close Air Support/CAS-005 - CAS in a Zone by Airplane Group - Engage with WeaponExpend/CAS-005 - CAS in a Zone by Airplane Group - Engage with WeaponExpend.miz
index 0df65c8ae..acf7bbe90 100644
Binary files a/Moose Test Missions/CAS - Close Air Support/CAS-005 - CAS in a Zone by Airplane Group - Engage with WeaponExpend/CAS-005 - CAS in a Zone by Airplane Group - Engage with WeaponExpend.miz and b/Moose Test Missions/CAS - Close Air Support/CAS-005 - CAS in a Zone by Airplane Group - Engage with WeaponExpend/CAS-005 - CAS in a Zone by Airplane Group - Engage with WeaponExpend.miz differ
diff --git a/Moose Test Missions/CAS - Close Air Support/CAS-010 - CAS in a Zone by Helicopter/CAS-010 - CAS in a Zone by Helicopter.miz b/Moose Test Missions/CAS - Close Air Support/CAS-010 - CAS in a Zone by Helicopter/CAS-010 - CAS in a Zone by Helicopter.miz
index f3b54c748..18f37c504 100644
Binary files a/Moose Test Missions/CAS - Close Air Support/CAS-010 - CAS in a Zone by Helicopter/CAS-010 - CAS in a Zone by Helicopter.miz and b/Moose Test Missions/CAS - Close Air Support/CAS-010 - CAS in a Zone by Helicopter/CAS-010 - CAS in a Zone by Helicopter.miz differ
diff --git a/Moose Test Missions/CAS - Close Air Support/CAS-011 - CAS in a Zone by Helicopter Group/CAS-011 - CAS in a Zone by Helicopter Group.miz b/Moose Test Missions/CAS - Close Air Support/CAS-011 - CAS in a Zone by Helicopter Group/CAS-011 - CAS in a Zone by Helicopter Group.miz
index 9a5d511e2..d0bda8a32 100644
Binary files a/Moose Test Missions/CAS - Close Air Support/CAS-011 - CAS in a Zone by Helicopter Group/CAS-011 - CAS in a Zone by Helicopter Group.miz and b/Moose Test Missions/CAS - Close Air Support/CAS-011 - CAS in a Zone by Helicopter Group/CAS-011 - CAS in a Zone by Helicopter Group.miz differ
diff --git a/Moose Test Missions/CAS - Close Air Support/CAS-111 - Multiple CAS in 1 Radius Zone by Helicopter and AirPlane Groups/CAS-111 - Multiple CAS in 1 Radius Zone by Helicopter and AirPlane Groups.miz b/Moose Test Missions/CAS - Close Air Support/CAS-111 - Multiple CAS in 1 Radius Zone by Helicopter and AirPlane Groups/CAS-111 - Multiple CAS in 1 Radius Zone by Helicopter and AirPlane Groups.miz
index 2b2b18ce3..490b66e68 100644
Binary files a/Moose Test Missions/CAS - Close Air Support/CAS-111 - Multiple CAS in 1 Radius Zone by Helicopter and AirPlane Groups/CAS-111 - Multiple CAS in 1 Radius Zone by Helicopter and AirPlane Groups.miz and b/Moose Test Missions/CAS - Close Air Support/CAS-111 - Multiple CAS in 1 Radius Zone by Helicopter and AirPlane Groups/CAS-111 - Multiple CAS in 1 Radius Zone by Helicopter and AirPlane Groups.miz differ
diff --git a/Moose Test Missions/CGO - Cargo/CGO-001 - Unit Boarding/CGO-001 - Unit Boarding.miz b/Moose Test Missions/CGO - Cargo/CGO-001 - Unit Boarding/CGO-001 - Unit Boarding.miz
index 3964d5c0f..6d8d448e4 100644
Binary files a/Moose Test Missions/CGO - Cargo/CGO-001 - Unit Boarding/CGO-001 - Unit Boarding.miz and b/Moose Test Missions/CGO - Cargo/CGO-001 - Unit Boarding/CGO-001 - Unit Boarding.miz differ
diff --git a/Moose Test Missions/CGO - Cargo/CGO-002 - Unit Unboarding/CGO-002 - Unit Unboarding.miz b/Moose Test Missions/CGO - Cargo/CGO-002 - Unit Unboarding/CGO-002 - Unit Unboarding.miz
index 5f2f54a1d..11838ec94 100644
Binary files a/Moose Test Missions/CGO - Cargo/CGO-002 - Unit Unboarding/CGO-002 - Unit Unboarding.miz and b/Moose Test Missions/CGO - Cargo/CGO-002 - Unit Unboarding/CGO-002 - Unit Unboarding.miz differ
diff --git a/Moose Test Missions/CGO - Cargo/CGO-003 - Unit Transferring/CGO-003 - Unit Transferring.miz b/Moose Test Missions/CGO - Cargo/CGO-003 - Unit Transferring/CGO-003 - Unit Transferring.miz
index e7ef2328a..ad54736e9 100644
Binary files a/Moose Test Missions/CGO - Cargo/CGO-003 - Unit Transferring/CGO-003 - Unit Transferring.miz and b/Moose Test Missions/CGO - Cargo/CGO-003 - Unit Transferring/CGO-003 - Unit Transferring.miz differ
diff --git a/Moose Test Missions/CGO - Cargo/CGO-101 - Group Boarding/CGO-101 - Group Boarding.miz b/Moose Test Missions/CGO - Cargo/CGO-101 - Group Boarding/CGO-101 - Group Boarding.miz
index e6281ccb2..8733e3718 100644
Binary files a/Moose Test Missions/CGO - Cargo/CGO-101 - Group Boarding/CGO-101 - Group Boarding.miz and b/Moose Test Missions/CGO - Cargo/CGO-101 - Group Boarding/CGO-101 - Group Boarding.miz differ
diff --git a/Moose Test Missions/CGO - Cargo/CGO-102 - Group Unboarding/CGO-102 - Group Unboarding.miz b/Moose Test Missions/CGO - Cargo/CGO-102 - Group Unboarding/CGO-102 - Group Unboarding.miz
index 46634e3fe..4a238d033 100644
Binary files a/Moose Test Missions/CGO - Cargo/CGO-102 - Group Unboarding/CGO-102 - Group Unboarding.miz and b/Moose Test Missions/CGO - Cargo/CGO-102 - Group Unboarding/CGO-102 - Group Unboarding.miz differ
diff --git a/Moose Test Missions/CGO - Cargo/CGO-103 - Group Transferring/CGO-103 - Group Transferring.miz b/Moose Test Missions/CGO - Cargo/CGO-103 - Group Transferring/CGO-103 - Group Transferring.miz
index 56c3b8e75..748ead674 100644
Binary files a/Moose Test Missions/CGO - Cargo/CGO-103 - Group Transferring/CGO-103 - Group Transferring.miz and b/Moose Test Missions/CGO - Cargo/CGO-103 - Group Transferring/CGO-103 - Group Transferring.miz differ
diff --git a/Moose Test Missions/CGO - Cargo/CGO-201 - Package Boarding/CGO-201 - Package Boarding.miz b/Moose Test Missions/CGO - Cargo/CGO-201 - Package Boarding/CGO-201 - Package Boarding.miz
index 58cdf04c9..764062734 100644
Binary files a/Moose Test Missions/CGO - Cargo/CGO-201 - Package Boarding/CGO-201 - Package Boarding.miz and b/Moose Test Missions/CGO - Cargo/CGO-201 - Package Boarding/CGO-201 - Package Boarding.miz differ
diff --git a/Moose Test Missions/CGO - Cargo/CGO-202 - Package Unboarding/CGO-202 - Package Unboarding.miz b/Moose Test Missions/CGO - Cargo/CGO-202 - Package Unboarding/CGO-202 - Package Unboarding.miz
index d60430b87..478ad554d 100644
Binary files a/Moose Test Missions/CGO - Cargo/CGO-202 - Package Unboarding/CGO-202 - Package Unboarding.miz and b/Moose Test Missions/CGO - Cargo/CGO-202 - Package Unboarding/CGO-202 - Package Unboarding.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-001 - Detection Areas/DET-001 - Detection Areas.miz b/Moose Test Missions/DET - Detection/DET-001 - Detection Areas/DET-001 - Detection Areas.miz
index ec0fed30a..e4bf4d4f3 100644
Binary files a/Moose Test Missions/DET - Detection/DET-001 - Detection Areas/DET-001 - Detection Areas.miz and b/Moose Test Missions/DET - Detection/DET-001 - Detection Areas/DET-001 - Detection Areas.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-100 - Detection Probability Distance/DET-100 - Detection Probability Distance.miz b/Moose Test Missions/DET - Detection/DET-100 - Detection Probability Distance/DET-100 - Detection Probability Distance.miz
index 63a44f906..39954d21c 100644
Binary files a/Moose Test Missions/DET - Detection/DET-100 - Detection Probability Distance/DET-100 - Detection Probability Distance.miz and b/Moose Test Missions/DET - Detection/DET-100 - Detection Probability Distance/DET-100 - Detection Probability Distance.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-101 - Detection Reporting/DET-101 - Detection Reporting.miz b/Moose Test Missions/DET - Detection/DET-101 - Detection Reporting/DET-101 - Detection Reporting.miz
index 759beeb1c..1c6bacfc5 100644
Binary files a/Moose Test Missions/DET - Detection/DET-101 - Detection Reporting/DET-101 - Detection Reporting.miz and b/Moose Test Missions/DET - Detection/DET-101 - Detection Reporting/DET-101 - Detection Reporting.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-120 - Detection Probability Zones/DET-100 - Detection Probability Distance.miz b/Moose Test Missions/DET - Detection/DET-120 - Detection Probability Zones/DET-100 - Detection Probability Distance.miz
index 77a8edb36..65b1f2710 100644
Binary files a/Moose Test Missions/DET - Detection/DET-120 - Detection Probability Zones/DET-100 - Detection Probability Distance.miz and b/Moose Test Missions/DET - Detection/DET-120 - Detection Probability Zones/DET-100 - Detection Probability Distance.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-120 - Detection Probability Zones/DET-120 - Detection Probability Zones.miz b/Moose Test Missions/DET - Detection/DET-120 - Detection Probability Zones/DET-120 - Detection Probability Zones.miz
index bbf0010eb..984a8e59f 100644
Binary files a/Moose Test Missions/DET - Detection/DET-120 - Detection Probability Zones/DET-120 - Detection Probability Zones.miz and b/Moose Test Missions/DET - Detection/DET-120 - Detection Probability Zones/DET-120 - Detection Probability Zones.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-200 - Detection UNITS/DET-200 - Detection UNITS.miz b/Moose Test Missions/DET - Detection/DET-200 - Detection UNITS/DET-200 - Detection UNITS.miz
index fde31f5f6..19923e276 100644
Binary files a/Moose Test Missions/DET - Detection/DET-200 - Detection UNITS/DET-200 - Detection UNITS.miz and b/Moose Test Missions/DET - Detection/DET-200 - Detection UNITS/DET-200 - Detection UNITS.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-210 - Detection TYPES/DET-210 - Detection TYPES.miz b/Moose Test Missions/DET - Detection/DET-210 - Detection TYPES/DET-210 - Detection TYPES.miz
index aa7f5f675..5c615e5e3 100644
Binary files a/Moose Test Missions/DET - Detection/DET-210 - Detection TYPES/DET-210 - Detection TYPES.miz and b/Moose Test Missions/DET - Detection/DET-210 - Detection TYPES/DET-210 - Detection TYPES.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-250 - Detection AREAS/DET-250 - Detection AREAS.miz b/Moose Test Missions/DET - Detection/DET-250 - Detection AREAS/DET-250 - Detection AREAS.miz
index c2b372028..2cd547ab3 100644
Binary files a/Moose Test Missions/DET - Detection/DET-250 - Detection AREAS/DET-250 - Detection AREAS.miz and b/Moose Test Missions/DET - Detection/DET-250 - Detection AREAS/DET-250 - Detection AREAS.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-255 - Detection AEAS with Destroys/DET-255 - Detection AEAS with Destroys.miz b/Moose Test Missions/DET - Detection/DET-255 - Detection AEAS with Destroys/DET-255 - Detection AEAS with Destroys.miz
index 0ac429c69..0eb6773f5 100644
Binary files a/Moose Test Missions/DET - Detection/DET-255 - Detection AEAS with Destroys/DET-255 - Detection AEAS with Destroys.miz and b/Moose Test Missions/DET - Detection/DET-255 - Detection AEAS with Destroys/DET-255 - Detection AEAS with Destroys.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-500 - Handle Detected Event - Govern Artillery Demo/DET-500 - Handle Detected Event - Govern Artillery Demo.miz b/Moose Test Missions/DET - Detection/DET-500 - Handle Detected Event - Govern Artillery Demo/DET-500 - Handle Detected Event - Govern Artillery Demo.miz
index 37547e8d0..e6f4598a1 100644
Binary files a/Moose Test Missions/DET - Detection/DET-500 - Handle Detected Event - Govern Artillery Demo/DET-500 - Handle Detected Event - Govern Artillery Demo.miz and b/Moose Test Missions/DET - Detection/DET-500 - Handle Detected Event - Govern Artillery Demo/DET-500 - Handle Detected Event - Govern Artillery Demo.miz differ
diff --git a/Moose Test Missions/DET - Detection/DET-900 - Detection Test with RED FACA/DET-900 - Detection Test with RED FACA.miz b/Moose Test Missions/DET - Detection/DET-900 - Detection Test with RED FACA/DET-900 - Detection Test with RED FACA.miz
index 90d9c0f4c..2b2cd6cbb 100644
Binary files a/Moose Test Missions/DET - Detection/DET-900 - Detection Test with RED FACA/DET-900 - Detection Test with RED FACA.miz and b/Moose Test Missions/DET - Detection/DET-900 - Detection Test with RED FACA/DET-900 - Detection Test with RED FACA.miz differ
diff --git a/Moose Test Missions/ESC - Escorting/ESC-001 - Escorting Helicopters/ESC-001 - Escorting Helicopters.miz b/Moose Test Missions/ESC - Escorting/ESC-001 - Escorting Helicopters/ESC-001 - Escorting Helicopters.miz
index 5143b24a1..c097c3281 100644
Binary files a/Moose Test Missions/ESC - Escorting/ESC-001 - Escorting Helicopters/ESC-001 - Escorting Helicopters.miz and b/Moose Test Missions/ESC - Escorting/ESC-001 - Escorting Helicopters/ESC-001 - Escorting Helicopters.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-001 - API Demo 1/EVT-001 - API Demo 1.miz b/Moose Test Missions/EVT - Event Handling/EVT-001 - API Demo 1/EVT-001 - API Demo 1.miz
index 90b0cf216..87e19707b 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-001 - API Demo 1/EVT-001 - API Demo 1.miz and b/Moose Test Missions/EVT - Event Handling/EVT-001 - API Demo 1/EVT-001 - API Demo 1.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-100 - UNIT OnEventShot Example/EVT-100 - UNIT OnEventShot Example.miz b/Moose Test Missions/EVT - Event Handling/EVT-100 - UNIT OnEventShot Example/EVT-100 - UNIT OnEventShot Example.miz
index 0047b25d3..a8fefbf80 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-100 - UNIT OnEventShot Example/EVT-100 - UNIT OnEventShot Example.miz and b/Moose Test Missions/EVT - Event Handling/EVT-100 - UNIT OnEventShot Example/EVT-100 - UNIT OnEventShot Example.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-101 - UNIT OnEventHit Example/EVT-101 - UNIT OnEventHit Example.miz b/Moose Test Missions/EVT - Event Handling/EVT-101 - UNIT OnEventHit Example/EVT-101 - UNIT OnEventHit Example.miz
index 520bfc4d3..f607c4eef 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-101 - UNIT OnEventHit Example/EVT-101 - UNIT OnEventHit Example.miz and b/Moose Test Missions/EVT - Event Handling/EVT-101 - UNIT OnEventHit Example/EVT-101 - UNIT OnEventHit Example.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-102 - UNIT OnEventTakeoff Example/EVT-102 - UNIT OnEventTakeoff Example.miz b/Moose Test Missions/EVT - Event Handling/EVT-102 - UNIT OnEventTakeoff Example/EVT-102 - UNIT OnEventTakeoff Example.miz
index 96b625d32..1fb313b93 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-102 - UNIT OnEventTakeoff Example/EVT-102 - UNIT OnEventTakeoff Example.miz and b/Moose Test Missions/EVT - Event Handling/EVT-102 - UNIT OnEventTakeoff Example/EVT-102 - UNIT OnEventTakeoff Example.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-103 - UNIT OnEventLand Example/EVT-103 - UNIT OnEventLand Example.miz b/Moose Test Missions/EVT - Event Handling/EVT-103 - UNIT OnEventLand Example/EVT-103 - UNIT OnEventLand Example.miz
index ff16add08..9b51a437e 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-103 - UNIT OnEventLand Example/EVT-103 - UNIT OnEventLand Example.miz and b/Moose Test Missions/EVT - Event Handling/EVT-103 - UNIT OnEventLand Example/EVT-103 - UNIT OnEventLand Example.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-104 - UNIT OnEventCrash Example/EVT-104 - UNIT OnEventCrash Example.miz b/Moose Test Missions/EVT - Event Handling/EVT-104 - UNIT OnEventCrash Example/EVT-104 - UNIT OnEventCrash Example.miz
index debebb580..a3ac0a634 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-104 - UNIT OnEventCrash Example/EVT-104 - UNIT OnEventCrash Example.miz and b/Moose Test Missions/EVT - Event Handling/EVT-104 - UNIT OnEventCrash Example/EVT-104 - UNIT OnEventCrash Example.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-200 - GROUP OnEventShot Example/EVT-200 - GROUP OnEventShot Example.miz b/Moose Test Missions/EVT - Event Handling/EVT-200 - GROUP OnEventShot Example/EVT-200 - GROUP OnEventShot Example.miz
index 680db9265..2fc35a4d9 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-200 - GROUP OnEventShot Example/EVT-200 - GROUP OnEventShot Example.miz and b/Moose Test Missions/EVT - Event Handling/EVT-200 - GROUP OnEventShot Example/EVT-200 - GROUP OnEventShot Example.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-201 - GROUP OnEventHit Example/EVT-201 - GROUP OnEventHit Example.miz b/Moose Test Missions/EVT - Event Handling/EVT-201 - GROUP OnEventHit Example/EVT-201 - GROUP OnEventHit Example.miz
index ba7945ea2..ec9b1a296 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-201 - GROUP OnEventHit Example/EVT-201 - GROUP OnEventHit Example.miz and b/Moose Test Missions/EVT - Event Handling/EVT-201 - GROUP OnEventHit Example/EVT-201 - GROUP OnEventHit Example.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-401 - Generic OnEventHit Example/EVT-401 - Generic OnEventHit Example.miz b/Moose Test Missions/EVT - Event Handling/EVT-401 - Generic OnEventHit Example/EVT-401 - Generic OnEventHit Example.miz
index e690f7876..e7a7c6b19 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-401 - Generic OnEventHit Example/EVT-401 - Generic OnEventHit Example.miz and b/Moose Test Missions/EVT - Event Handling/EVT-401 - Generic OnEventHit Example/EVT-401 - Generic OnEventHit Example.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-500 - OnEventLand LandingChallenge/EVT-500 - OnEventLand LandingChallenge.miz b/Moose Test Missions/EVT - Event Handling/EVT-500 - OnEventLand LandingChallenge/EVT-500 - OnEventLand LandingChallenge.miz
index 0817d69c0..360be667c 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-500 - OnEventLand LandingChallenge/EVT-500 - OnEventLand LandingChallenge.miz and b/Moose Test Missions/EVT - Event Handling/EVT-500 - OnEventLand LandingChallenge/EVT-500 - OnEventLand LandingChallenge.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-501 - OnEventLand LandingChallengeComplex/EVT-501 - OnEventLand LandingChallengeComplex.miz b/Moose Test Missions/EVT - Event Handling/EVT-501 - OnEventLand LandingChallengeComplex/EVT-501 - OnEventLand LandingChallengeComplex.miz
index 7e8d7759f..bad078054 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-501 - OnEventLand LandingChallengeComplex/EVT-501 - OnEventLand LandingChallengeComplex.miz and b/Moose Test Missions/EVT - Event Handling/EVT-501 - OnEventLand LandingChallengeComplex/EVT-501 - OnEventLand LandingChallengeComplex.miz differ
diff --git a/Moose Test Missions/EVT - Event Handling/EVT-600 - OnEventHit Example with a Set of Units/EVT-600 - OnEventHit Example with a Set of Units.miz b/Moose Test Missions/EVT - Event Handling/EVT-600 - OnEventHit Example with a Set of Units/EVT-600 - OnEventHit Example with a Set of Units.miz
index 1f42909f7..abae38230 100644
Binary files a/Moose Test Missions/EVT - Event Handling/EVT-600 - OnEventHit Example with a Set of Units/EVT-600 - OnEventHit Example with a Set of Units.miz and b/Moose Test Missions/EVT - Event Handling/EVT-600 - OnEventHit Example with a Set of Units/EVT-600 - OnEventHit Example with a Set of Units.miz differ
diff --git a/Moose Test Missions/FSM - Finite State Machine/FSM-100 - Transition Explanation/FSM-100 - Transition Explanation.miz b/Moose Test Missions/FSM - Finite State Machine/FSM-100 - Transition Explanation/FSM-100 - Transition Explanation.miz
index 5e2c6bd66..ad8e22fb6 100644
Binary files a/Moose Test Missions/FSM - Finite State Machine/FSM-100 - Transition Explanation/FSM-100 - Transition Explanation.miz and b/Moose Test Missions/FSM - Finite State Machine/FSM-100 - Transition Explanation/FSM-100 - Transition Explanation.miz differ
diff --git a/Moose Test Missions/GRP - Group Commands/GRP-100 - IsAlive/GRP-100 - IsAlive.miz b/Moose Test Missions/GRP - Group Commands/GRP-100 - IsAlive/GRP-100 - IsAlive.miz
index 0b2515223..465eb6811 100644
Binary files a/Moose Test Missions/GRP - Group Commands/GRP-100 - IsAlive/GRP-100 - IsAlive.miz and b/Moose Test Missions/GRP - Group Commands/GRP-100 - IsAlive/GRP-100 - IsAlive.miz differ
diff --git a/Moose Test Missions/GRP - Group Commands/GRP-100 - TaskAttackUnit/GRP-100 - TaskAttackUnit.miz b/Moose Test Missions/GRP - Group Commands/GRP-100 - TaskAttackUnit/GRP-100 - TaskAttackUnit.miz
index 3cd257e3d..7c3d455c6 100644
Binary files a/Moose Test Missions/GRP - Group Commands/GRP-100 - TaskAttackUnit/GRP-100 - TaskAttackUnit.miz and b/Moose Test Missions/GRP - Group Commands/GRP-100 - TaskAttackUnit/GRP-100 - TaskAttackUnit.miz differ
diff --git a/Moose Test Missions/GRP - Group Commands/GRP-200 - Follow Group/GRP-200 - Follow Group.miz b/Moose Test Missions/GRP - Group Commands/GRP-200 - Follow Group/GRP-200 - Follow Group.miz
index f7674eb41..68b995f09 100644
Binary files a/Moose Test Missions/GRP - Group Commands/GRP-200 - Follow Group/GRP-200 - Follow Group.miz and b/Moose Test Missions/GRP - Group Commands/GRP-200 - Follow Group/GRP-200 - Follow Group.miz differ
diff --git a/Moose Test Missions/GRP - Group Commands/GRP-300 - Switch WayPoints/GRP-300 - Switch WayPoints.miz b/Moose Test Missions/GRP - Group Commands/GRP-300 - Switch WayPoints/GRP-300 - Switch WayPoints.miz
index 771c5cf2c..7c61e2010 100644
Binary files a/Moose Test Missions/GRP - Group Commands/GRP-300 - Switch WayPoints/GRP-300 - Switch WayPoints.miz and b/Moose Test Missions/GRP - Group Commands/GRP-300 - Switch WayPoints/GRP-300 - Switch WayPoints.miz differ
diff --git a/Moose Test Missions/GRP - Group Commands/GRP-310 - Command StopRoute/GRP-310 - Command StopRoute.lua b/Moose Test Missions/GRP - Group Commands/GRP-310 - Command StopRoute/GRP-310 - Command StopRoute.lua
new file mode 100644
index 000000000..1f7710d18
--- /dev/null
+++ b/Moose Test Missions/GRP - Group Commands/GRP-310 - Command StopRoute/GRP-310 - Command StopRoute.lua
@@ -0,0 +1,39 @@
+---
+-- Name: GRP-310 - Command StopRoute
+-- Author: FlightControl
+-- Date Created: 25 Mar 2017
+--
+-- # Situation:
+-- A ground unit is moving.
+-- Using the command CommandStopMove it will stop moving after 10 seconds.
+--
+-- # Test cases:
+--
+-- 1. Observe the ground group stopping to move.
+--
+
+--- @param Wrapper.Group#GROUP GroundGroup
+function StopMove( GroundGroup )
+
+ BASE:E("Stop")
+ local Command = GroundGroup:CommandStopRoute( true )
+ GroundGroup:SetCommand(Command)
+
+end
+
+--- @param Wrapper.Group#GROUP GroundGroup
+function StartMove( GroundGroup )
+
+ BASE:E("Start")
+ local Command = GroundGroup:CommandStopRoute( false )
+ GroundGroup:SetCommand(Command)
+
+end
+
+GroundGroup = GROUP:FindByName( "Ground" )
+
+Scheduler = SCHEDULER:New( nil )
+ScheduleIDStop = Scheduler:Schedule(nil, StopMove, { GroundGroup }, 10, 20 )
+ScheduleIDStart = Scheduler:Schedule(nil, StartMove, { GroundGroup }, 20, 20 )
+
+
diff --git a/Moose Test Missions/GRP - Group Commands/GRP-310 - Command StopRoute/GRP-310 - Command StopRoute.miz b/Moose Test Missions/GRP - Group Commands/GRP-310 - Command StopRoute/GRP-310 - Command StopRoute.miz
new file mode 100644
index 000000000..9508ba428
Binary files /dev/null and b/Moose Test Missions/GRP - Group Commands/GRP-310 - Command StopRoute/GRP-310 - Command StopRoute.miz differ
diff --git a/Moose Test Missions/GRP - Group Commands/GRP-400 - RouteReturnToAirbase/GRP-400 - RouteReturnToAirbase.lua b/Moose Test Missions/GRP - Group Commands/GRP-400 - RouteReturnToAirbase/GRP-400 - RouteReturnToAirbase.lua
new file mode 100644
index 000000000..47ff792f4
--- /dev/null
+++ b/Moose Test Missions/GRP - Group Commands/GRP-400 - RouteReturnToAirbase/GRP-400 - RouteReturnToAirbase.lua
@@ -0,0 +1,45 @@
+---
+-- Name: GRP-400 - RouteReturnToAirbase
+-- Author: FlightControl
+-- Date Created: 25 Mar 2017
+--
+-- # Situation:
+-- Three air units are flying and are commanded to return a specific airbase.
+--
+-- # Test cases:
+--
+-- 1. Observe the Air1 group return to Batumi after 10 seconds.
+-- 2. Observe the Air2 group returning to Kobuleti after 300 seconds. (It was planned to land at Kutaisi).
+-- 3. Observe the Air3 group returning to the home (landing) airbase after 300 seconds. (It was planned to land at Kutaisi).
+--
+
+--- @param Wrapper.Group#GROUP AirGroup
+function ReturnToBatumi( AirGroup )
+ BASE:E("ReturnToBatumi")
+ AirGroup:RouteRTB( AIRBASE:FindByName("Batumi") )
+end
+
+--- @param Wrapper.Group#GROUP AirGroup
+function ReturnToKobuleti( AirGroup )
+ BASE:E("ReturnToKobuleti")
+ AirGroup:RouteRTB( AIRBASE:FindByName("Kobuleti") )
+end
+
+--- @param Wrapper.Group#GROUP AirGroup
+function ReturnToHome( AirGroup )
+ BASE:E("ReturnToHome")
+ AirGroup:RouteRTB()
+end
+
+Air1Group = GROUP:FindByName( "Air1" )
+Air2Group = GROUP:FindByName( "Air2" )
+Air3Group = GROUP:FindByName( "Air3" )
+
+Scheduler = SCHEDULER:New( nil )
+ScheduleIDAir1 = Scheduler:Schedule(nil, ReturnToBatumi, { Air1Group }, 10 )
+ScheduleIDAir2 = Scheduler:Schedule(nil, ReturnToKobuleti, { Air2Group }, 300 )
+ScheduleIDAir3 = Scheduler:Schedule(nil, ReturnToHome, { Air3Group }, 300 )
+
+
+
+
diff --git a/Moose Test Missions/GRP - Group Commands/GRP-400 - RouteReturnToAirbase/GRP-400 - RouteReturnToAirbase.miz b/Moose Test Missions/GRP - Group Commands/GRP-400 - RouteReturnToAirbase/GRP-400 - RouteReturnToAirbase.miz
new file mode 100644
index 000000000..5ced79316
Binary files /dev/null and b/Moose Test Missions/GRP - Group Commands/GRP-400 - RouteReturnToAirbase/GRP-400 - RouteReturnToAirbase.miz differ
diff --git a/Moose Test Missions/GRP - Group Commands/Moose_Test_WRAPPER.miz b/Moose Test Missions/GRP - Group Commands/Moose_Test_WRAPPER.miz
index 115959ac6..2253de3c3 100644
Binary files a/Moose Test Missions/GRP - Group Commands/Moose_Test_WRAPPER.miz and b/Moose Test Missions/GRP - Group Commands/Moose_Test_WRAPPER.miz differ
diff --git a/Moose Test Missions/MEN - Menu Options/MEN-001 - Menu Client/MEN-001 - Menu Client.miz b/Moose Test Missions/MEN - Menu Options/MEN-001 - Menu Client/MEN-001 - Menu Client.miz
index e13d3d978..092d14467 100644
Binary files a/Moose Test Missions/MEN - Menu Options/MEN-001 - Menu Client/MEN-001 - Menu Client.miz and b/Moose Test Missions/MEN - Menu Options/MEN-001 - Menu Client/MEN-001 - Menu Client.miz differ
diff --git a/Moose Test Missions/MEN - Menu Options/MEN-002 - Menu Coalition/MEN-002 - Menu Coalition.miz b/Moose Test Missions/MEN - Menu Options/MEN-002 - Menu Coalition/MEN-002 - Menu Coalition.miz
index 2261e2062..d9f4c11bc 100644
Binary files a/Moose Test Missions/MEN - Menu Options/MEN-002 - Menu Coalition/MEN-002 - Menu Coalition.miz and b/Moose Test Missions/MEN - Menu Options/MEN-002 - Menu Coalition/MEN-002 - Menu Coalition.miz differ
diff --git a/Moose Test Missions/MEN - Menu Options/MEN-003 - Menu Group/MEN-003 - Menu Group.miz b/Moose Test Missions/MEN - Menu Options/MEN-003 - Menu Group/MEN-003 - Menu Group.miz
index 9f4443505..8fa0d94ae 100644
Binary files a/Moose Test Missions/MEN - Menu Options/MEN-003 - Menu Group/MEN-003 - Menu Group.miz and b/Moose Test Missions/MEN - Menu Options/MEN-003 - Menu Group/MEN-003 - Menu Group.miz differ
diff --git a/Moose Test Missions/MIT - Missile Trainer/MIT-001 - Missile Trainer/MIT-001 - Missile Trainer.miz b/Moose Test Missions/MIT - Missile Trainer/MIT-001 - Missile Trainer/MIT-001 - Missile Trainer.miz
index f6cdd0e15..9c06d94d5 100644
Binary files a/Moose Test Missions/MIT - Missile Trainer/MIT-001 - Missile Trainer/MIT-001 - Missile Trainer.miz and b/Moose Test Missions/MIT - Missile Trainer/MIT-001 - Missile Trainer/MIT-001 - Missile Trainer.miz differ
diff --git a/Moose Test Missions/MOOSE_Template.miz b/Moose Test Missions/MOOSE_Template.miz
index 1f504580b..a3e4643e4 100644
Binary files a/Moose Test Missions/MOOSE_Template.miz and b/Moose Test Missions/MOOSE_Template.miz differ
diff --git a/Moose Test Missions/MOOSE_Test_Template.miz b/Moose Test Missions/MOOSE_Test_Template.miz
index 5a595f9f2..24b76c5ba 100644
Binary files a/Moose Test Missions/MOOSE_Test_Template.miz and b/Moose Test Missions/MOOSE_Test_Template.miz differ
diff --git a/Moose Test Missions/PAT - Patrolling/PAT-001 - Switching Patrol Zones/PAT-001 - Switching Patrol Zones.miz b/Moose Test Missions/PAT - Patrolling/PAT-001 - Switching Patrol Zones/PAT-001 - Switching Patrol Zones.miz
index 63a4964d2..27061e36e 100644
Binary files a/Moose Test Missions/PAT - Patrolling/PAT-001 - Switching Patrol Zones/PAT-001 - Switching Patrol Zones.miz and b/Moose Test Missions/PAT - Patrolling/PAT-001 - Switching Patrol Zones/PAT-001 - Switching Patrol Zones.miz differ
diff --git a/Moose Test Missions/RAD - Radio/RAD-000 - Transmission from Static/RAD-000 - Transmission from Static.miz b/Moose Test Missions/RAD - Radio/RAD-000 - Transmission from Static/RAD-000 - Transmission from Static.miz
index a7097026a..d9b05278b 100644
Binary files a/Moose Test Missions/RAD - Radio/RAD-000 - Transmission from Static/RAD-000 - Transmission from Static.miz and b/Moose Test Missions/RAD - Radio/RAD-000 - Transmission from Static/RAD-000 - Transmission from Static.miz differ
diff --git a/Moose Test Missions/RAD - Radio/RAD-001 - Transmission from UNIT or GROUP/RAD-001 - Transmission from UNIT or GROUP.miz b/Moose Test Missions/RAD - Radio/RAD-001 - Transmission from UNIT or GROUP/RAD-001 - Transmission from UNIT or GROUP.miz
index 6a38c093c..c86971d28 100644
Binary files a/Moose Test Missions/RAD - Radio/RAD-001 - Transmission from UNIT or GROUP/RAD-001 - Transmission from UNIT or GROUP.miz and b/Moose Test Missions/RAD - Radio/RAD-001 - Transmission from UNIT or GROUP/RAD-001 - Transmission from UNIT or GROUP.miz differ
diff --git a/Moose Test Missions/RAD - Radio/RAD-002 - Transmission Tips and Tricks/RAD-002 - Transmission Tips and Tricks.miz b/Moose Test Missions/RAD - Radio/RAD-002 - Transmission Tips and Tricks/RAD-002 - Transmission Tips and Tricks.miz
index eb48c3643..7beb833c0 100644
Binary files a/Moose Test Missions/RAD - Radio/RAD-002 - Transmission Tips and Tricks/RAD-002 - Transmission Tips and Tricks.miz and b/Moose Test Missions/RAD - Radio/RAD-002 - Transmission Tips and Tricks/RAD-002 - Transmission Tips and Tricks.miz differ
diff --git a/Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.miz b/Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.miz
index 81dddb79d..c44b83b7b 100644
Binary files a/Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.miz and b/Moose Test Missions/SCH - Scheduler/SCH-000 - Simple Scheduling/SCH-000 - Simple Scheduling.miz differ
diff --git a/Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Object Scheduling/SCH-001 - Simple Object Scheduling.miz b/Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Object Scheduling/SCH-001 - Simple Object Scheduling.miz
index 16f3270b8..294d7e4bb 100644
Binary files a/Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Object Scheduling/SCH-001 - Simple Object Scheduling.miz and b/Moose Test Missions/SCH - Scheduler/SCH-001 - Simple Object Scheduling/SCH-001 - Simple Object Scheduling.miz differ
diff --git a/Moose Test Missions/SCH - Scheduler/SCH-100 - Simple Repeat Scheduling/SCH-100 - Simple Repeat Scheduling.miz b/Moose Test Missions/SCH - Scheduler/SCH-100 - Simple Repeat Scheduling/SCH-100 - Simple Repeat Scheduling.miz
index 89b1a71dd..31017e0aa 100644
Binary files a/Moose Test Missions/SCH - Scheduler/SCH-100 - Simple Repeat Scheduling/SCH-100 - Simple Repeat Scheduling.miz and b/Moose Test Missions/SCH - Scheduler/SCH-100 - Simple Repeat Scheduling/SCH-100 - Simple Repeat Scheduling.miz differ
diff --git a/Moose Test Missions/SCH - Scheduler/SCH-110 - Object Repeat Scheduling/SCH-110 - Object Repeat Scheduling.miz b/Moose Test Missions/SCH - Scheduler/SCH-110 - Object Repeat Scheduling/SCH-110 - Object Repeat Scheduling.miz
index 5ab45b8bd..355e633b9 100644
Binary files a/Moose Test Missions/SCH - Scheduler/SCH-110 - Object Repeat Scheduling/SCH-110 - Object Repeat Scheduling.miz and b/Moose Test Missions/SCH - Scheduler/SCH-110 - Object Repeat Scheduling/SCH-110 - Object Repeat Scheduling.miz differ
diff --git a/Moose Test Missions/SCH - Scheduler/SCH-200 - Simple Repeat Scheduling Stop and Start/SCH-200 - Simple Repeat Scheduling Stop and Start.miz b/Moose Test Missions/SCH - Scheduler/SCH-200 - Simple Repeat Scheduling Stop and Start/SCH-200 - Simple Repeat Scheduling Stop and Start.miz
index 88a4a34f7..97165d9c9 100644
Binary files a/Moose Test Missions/SCH - Scheduler/SCH-200 - Simple Repeat Scheduling Stop and Start/SCH-200 - Simple Repeat Scheduling Stop and Start.miz and b/Moose Test Missions/SCH - Scheduler/SCH-200 - Simple Repeat Scheduling Stop and Start/SCH-200 - Simple Repeat Scheduling Stop and Start.miz differ
diff --git a/Moose Test Missions/SCH - Scheduler/SCH-300 - GC Simple Object Scheduling/SCH-300 - GC Simple Object Scheduling.miz b/Moose Test Missions/SCH - Scheduler/SCH-300 - GC Simple Object Scheduling/SCH-300 - GC Simple Object Scheduling.miz
index d77c37771..d3ae3dcc1 100644
Binary files a/Moose Test Missions/SCH - Scheduler/SCH-300 - GC Simple Object Scheduling/SCH-300 - GC Simple Object Scheduling.miz and b/Moose Test Missions/SCH - Scheduler/SCH-300 - GC Simple Object Scheduling/SCH-300 - GC Simple Object Scheduling.miz differ
diff --git a/Moose Test Missions/SCH - Scheduler/SCH-310 - GC Object Repeat Scheduling/SCH-310 - GC Object Repeat Scheduling.miz b/Moose Test Missions/SCH - Scheduler/SCH-310 - GC Object Repeat Scheduling/SCH-310 - GC Object Repeat Scheduling.miz
index dbaa99942..b1a844852 100644
Binary files a/Moose Test Missions/SCH - Scheduler/SCH-310 - GC Object Repeat Scheduling/SCH-310 - GC Object Repeat Scheduling.miz and b/Moose Test Missions/SCH - Scheduler/SCH-310 - GC Object Repeat Scheduling/SCH-310 - GC Object Repeat Scheduling.miz differ
diff --git a/Moose Test Missions/SCO - Scoring/SCO-100 - Scoring of Statics/SCO-100 - Scoring of Statics.miz b/Moose Test Missions/SCO - Scoring/SCO-100 - Scoring of Statics/SCO-100 - Scoring of Statics.miz
index ebb64d694..e3003e609 100644
Binary files a/Moose Test Missions/SCO - Scoring/SCO-100 - Scoring of Statics/SCO-100 - Scoring of Statics.miz and b/Moose Test Missions/SCO - Scoring/SCO-100 - Scoring of Statics/SCO-100 - Scoring of Statics.miz differ
diff --git a/Moose Test Missions/SCO - Scoring/SCO-101 - Scoring Client to Client/SCO-101 - Scoring Client to Client.miz b/Moose Test Missions/SCO - Scoring/SCO-101 - Scoring Client to Client/SCO-101 - Scoring Client to Client.miz
index 4761e13b8..cf1b30608 100644
Binary files a/Moose Test Missions/SCO - Scoring/SCO-101 - Scoring Client to Client/SCO-101 - Scoring Client to Client.miz and b/Moose Test Missions/SCO - Scoring/SCO-101 - Scoring Client to Client/SCO-101 - Scoring Client to Client.miz differ
diff --git a/Moose Test Missions/SCO - Scoring/SCO-500 - Scoring Multi Player Demo Mission 1/SCO-500 - Scoring Multi Player Demo Mission 1.miz b/Moose Test Missions/SCO - Scoring/SCO-500 - Scoring Multi Player Demo Mission 1/SCO-500 - Scoring Multi Player Demo Mission 1.miz
index 4821ae041..c3a3b6e7b 100644
Binary files a/Moose Test Missions/SCO - Scoring/SCO-500 - Scoring Multi Player Demo Mission 1/SCO-500 - Scoring Multi Player Demo Mission 1.miz and b/Moose Test Missions/SCO - Scoring/SCO-500 - Scoring Multi Player Demo Mission 1/SCO-500 - Scoring Multi Player Demo Mission 1.miz differ
diff --git a/Moose Test Missions/SET - Data Sets/SET-001 - Airbase Sets/SET-001 - Airbase Sets.miz b/Moose Test Missions/SET - Data Sets/SET-001 - Airbase Sets/SET-001 - Airbase Sets.miz
index 18f5450cb..2b8015437 100644
Binary files a/Moose Test Missions/SET - Data Sets/SET-001 - Airbase Sets/SET-001 - Airbase Sets.miz and b/Moose Test Missions/SET - Data Sets/SET-001 - Airbase Sets/SET-001 - Airbase Sets.miz differ
diff --git a/Moose Test Missions/SET - Data Sets/SET-101 - Group Sets/SET-101 - Group Sets.miz b/Moose Test Missions/SET - Data Sets/SET-101 - Group Sets/SET-101 - Group Sets.miz
index f9d2f3a0b..b3bb2e970 100644
Binary files a/Moose Test Missions/SET - Data Sets/SET-101 - Group Sets/SET-101 - Group Sets.miz and b/Moose Test Missions/SET - Data Sets/SET-101 - Group Sets/SET-101 - Group Sets.miz differ
diff --git a/Moose Test Missions/SET - Data Sets/SET-201 - Client Sets/SET-201 - Client Sets.miz b/Moose Test Missions/SET - Data Sets/SET-201 - Client Sets/SET-201 - Client Sets.miz
index 4df1d1abf..fbedd028d 100644
Binary files a/Moose Test Missions/SET - Data Sets/SET-201 - Client Sets/SET-201 - Client Sets.miz and b/Moose Test Missions/SET - Data Sets/SET-201 - Client Sets/SET-201 - Client Sets.miz differ
diff --git a/Moose Test Missions/SEV - SEAD Evasion/SEV-001 - SEAD Evasion/SEV-001 - SEAD Evasion.miz b/Moose Test Missions/SEV - SEAD Evasion/SEV-001 - SEAD Evasion/SEV-001 - SEAD Evasion.miz
index c30f4dea6..3657c63f6 100644
Binary files a/Moose Test Missions/SEV - SEAD Evasion/SEV-001 - SEAD Evasion/SEV-001 - SEAD Evasion.miz and b/Moose Test Missions/SEV - SEAD Evasion/SEV-001 - SEAD Evasion/SEV-001 - SEAD Evasion.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-010 - Spawn Demo/SPA-010 - Spawn Demo.miz b/Moose Test Missions/SPA - Spawning/SPA-010 - Spawn Demo/SPA-010 - Spawn Demo.miz
index e75dd62c0..74ecbf75b 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-010 - Spawn Demo/SPA-010 - Spawn Demo.miz and b/Moose Test Missions/SPA - Spawning/SPA-010 - Spawn Demo/SPA-010 - Spawn Demo.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-011 - Ground Ops - Simple Spawning/SPA-011 - Ground Ops - Simple Spawning.miz b/Moose Test Missions/SPA - Spawning/SPA-011 - Ground Ops - Simple Spawning/SPA-011 - Ground Ops - Simple Spawning.miz
index 4b470e99f..c884e1fdd 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-011 - Ground Ops - Simple Spawning/SPA-011 - Ground Ops - Simple Spawning.miz and b/Moose Test Missions/SPA - Spawning/SPA-011 - Ground Ops - Simple Spawning/SPA-011 - Ground Ops - Simple Spawning.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-012 - Ground Ops - Multiple Spawns/SPA-012 - Ground Ops - Multiple Spawns.miz b/Moose Test Missions/SPA - Spawning/SPA-012 - Ground Ops - Multiple Spawns/SPA-012 - Ground Ops - Multiple Spawns.miz
index 1ae5d6119..1cf21d951 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-012 - Ground Ops - Multiple Spawns/SPA-012 - Ground Ops - Multiple Spawns.miz and b/Moose Test Missions/SPA - Spawning/SPA-012 - Ground Ops - Multiple Spawns/SPA-012 - Ground Ops - Multiple Spawns.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-013 - Ground Ops - Scheduled Spawns/SPA-013 - Ground Ops - Scheduled Spawns.miz b/Moose Test Missions/SPA - Spawning/SPA-013 - Ground Ops - Scheduled Spawns/SPA-013 - Ground Ops - Scheduled Spawns.miz
index 2d4bfb45f..9405e3210 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-013 - Ground Ops - Scheduled Spawns/SPA-013 - Ground Ops - Scheduled Spawns.miz and b/Moose Test Missions/SPA - Spawning/SPA-013 - Ground Ops - Scheduled Spawns/SPA-013 - Ground Ops - Scheduled Spawns.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-014 - Ground Ops - Scheduled Spawns Limited/SPA-014 - Ground Ops - Scheduled Spawns Limited.miz b/Moose Test Missions/SPA - Spawning/SPA-014 - Ground Ops - Scheduled Spawns Limited/SPA-014 - Ground Ops - Scheduled Spawns Limited.miz
index 70b05bdea..3d7f19ed3 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-014 - Ground Ops - Scheduled Spawns Limited/SPA-014 - Ground Ops - Scheduled Spawns Limited.miz and b/Moose Test Missions/SPA - Spawning/SPA-014 - Ground Ops - Scheduled Spawns Limited/SPA-014 - Ground Ops - Scheduled Spawns Limited.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-015 - Ground Ops - Randomize Route/SPA-015 - Ground Ops - Randomize Route.miz b/Moose Test Missions/SPA - Spawning/SPA-015 - Ground Ops - Randomize Route/SPA-015 - Ground Ops - Randomize Route.miz
index 01f52f0d0..b92d9ae48 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-015 - Ground Ops - Randomize Route/SPA-015 - Ground Ops - Randomize Route.miz and b/Moose Test Missions/SPA - Spawning/SPA-015 - Ground Ops - Randomize Route/SPA-015 - Ground Ops - Randomize Route.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-016 - Ground Ops - Randomize Zones/SPA-016 - Ground Ops - Randomize Zones.miz b/Moose Test Missions/SPA - Spawning/SPA-016 - Ground Ops - Randomize Zones/SPA-016 - Ground Ops - Randomize Zones.miz
index 6e4ac282d..5c2065f26 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-016 - Ground Ops - Randomize Zones/SPA-016 - Ground Ops - Randomize Zones.miz and b/Moose Test Missions/SPA - Spawning/SPA-016 - Ground Ops - Randomize Zones/SPA-016 - Ground Ops - Randomize Zones.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-017 - Ground Ops - Set AI inactive while spawning/SPA-017 - Ground Ops - Set AI inactive while spawning.miz b/Moose Test Missions/SPA - Spawning/SPA-017 - Ground Ops - Set AI inactive while spawning/SPA-017 - Ground Ops - Set AI inactive while spawning.miz
index 44a51439d..0b36979f5 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-017 - Ground Ops - Set AI inactive while spawning/SPA-017 - Ground Ops - Set AI inactive while spawning.miz and b/Moose Test Missions/SPA - Spawning/SPA-017 - Ground Ops - Set AI inactive while spawning/SPA-017 - Ground Ops - Set AI inactive while spawning.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-018 - Ground Ops - Randomize Templates/SPA-018 - Ground Ops - Randomize Templates.miz b/Moose Test Missions/SPA - Spawning/SPA-018 - Ground Ops - Randomize Templates/SPA-018 - Ground Ops - Randomize Templates.miz
index b7184a5aa..d6b0ce568 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-018 - Ground Ops - Randomize Templates/SPA-018 - Ground Ops - Randomize Templates.miz and b/Moose Test Missions/SPA - Spawning/SPA-018 - Ground Ops - Randomize Templates/SPA-018 - Ground Ops - Randomize Templates.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-019 - Ground Ops - Randomize Templates without Waypoints/SPA-019 - Ground Ops - Randomize Templates without Waypoints.miz b/Moose Test Missions/SPA - Spawning/SPA-019 - Ground Ops - Randomize Templates without Waypoints/SPA-019 - Ground Ops - Randomize Templates without Waypoints.miz
index e3645e44e..161740a5c 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-019 - Ground Ops - Randomize Templates without Waypoints/SPA-019 - Ground Ops - Randomize Templates without Waypoints.miz and b/Moose Test Missions/SPA - Spawning/SPA-019 - Ground Ops - Randomize Templates without Waypoints/SPA-019 - Ground Ops - Randomize Templates without Waypoints.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-020 - Ground Ops - Randomize Templates in Random Zones without Waypoints/SPA-020 - Ground Ops - Randomize Templates in Random Zones without Waypoints.miz b/Moose Test Missions/SPA - Spawning/SPA-020 - Ground Ops - Randomize Templates in Random Zones without Waypoints/SPA-020 - Ground Ops - Randomize Templates in Random Zones without Waypoints.miz
index 1444a4231..7fd38af8e 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-020 - Ground Ops - Randomize Templates in Random Zones without Waypoints/SPA-020 - Ground Ops - Randomize Templates in Random Zones without Waypoints.miz and b/Moose Test Missions/SPA - Spawning/SPA-020 - Ground Ops - Randomize Templates in Random Zones without Waypoints/SPA-020 - Ground Ops - Randomize Templates in Random Zones without Waypoints.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-021 - Ground Ops - Scheduled Spawns Limited Keep Unit Names/SPA-021 - Ground Ops - Scheduled Spawns Limited Keep Unit Names.miz b/Moose Test Missions/SPA - Spawning/SPA-021 - Ground Ops - Scheduled Spawns Limited Keep Unit Names/SPA-021 - Ground Ops - Scheduled Spawns Limited Keep Unit Names.miz
index c0276f337..cde7720ba 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-021 - Ground Ops - Scheduled Spawns Limited Keep Unit Names/SPA-021 - Ground Ops - Scheduled Spawns Limited Keep Unit Names.miz and b/Moose Test Missions/SPA - Spawning/SPA-021 - Ground Ops - Scheduled Spawns Limited Keep Unit Names/SPA-021 - Ground Ops - Scheduled Spawns Limited Keep Unit Names.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-022 - Ground Ops - Scheduled Spawns Limited with long interval/SPA-022 - Ground Ops - Scheduled Spawns Limited with long interval.miz b/Moose Test Missions/SPA - Spawning/SPA-022 - Ground Ops - Scheduled Spawns Limited with long interval/SPA-022 - Ground Ops - Scheduled Spawns Limited with long interval.miz
index aa813f577..9e6718215 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-022 - Ground Ops - Scheduled Spawns Limited with long interval/SPA-022 - Ground Ops - Scheduled Spawns Limited with long interval.miz and b/Moose Test Missions/SPA - Spawning/SPA-022 - Ground Ops - Scheduled Spawns Limited with long interval/SPA-022 - Ground Ops - Scheduled Spawns Limited with long interval.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-100 - CleanUp Inactive Units/SPA-100 - CleanUp Inactive Units.miz b/Moose Test Missions/SPA - Spawning/SPA-100 - CleanUp Inactive Units/SPA-100 - CleanUp Inactive Units.miz
index 679536dc5..ca7dfb593 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-100 - CleanUp Inactive Units/SPA-100 - CleanUp Inactive Units.miz and b/Moose Test Missions/SPA - Spawning/SPA-100 - CleanUp Inactive Units/SPA-100 - CleanUp Inactive Units.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-110 - Limit Spawning/SPA-110 - Limit Spawning.miz b/Moose Test Missions/SPA - Spawning/SPA-110 - Limit Spawning/SPA-110 - Limit Spawning.miz
index 2e4cd464c..e8d4f5309 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-110 - Limit Spawning/SPA-110 - Limit Spawning.miz and b/Moose Test Missions/SPA - Spawning/SPA-110 - Limit Spawning/SPA-110 - Limit Spawning.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-120 - Air Ops - Scheduled Spawn with Repeat on Landing with Limit/SPA-120 - Air Ops - Scheduled Spawn with Repeat on Landing with Limit.miz b/Moose Test Missions/SPA - Spawning/SPA-120 - Air Ops - Scheduled Spawn with Repeat on Landing with Limit/SPA-120 - Air Ops - Scheduled Spawn with Repeat on Landing with Limit.miz
index 35d129ff2..dde395580 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-120 - Air Ops - Scheduled Spawn with Repeat on Landing with Limit/SPA-120 - Air Ops - Scheduled Spawn with Repeat on Landing with Limit.miz and b/Moose Test Missions/SPA - Spawning/SPA-120 - Air Ops - Scheduled Spawn with Repeat on Landing with Limit/SPA-120 - Air Ops - Scheduled Spawn with Repeat on Landing with Limit.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-120 - Repeat Spawning/SPA-120 - Repeat Spawning.miz b/Moose Test Missions/SPA - Spawning/SPA-120 - Repeat Spawning/SPA-120 - Repeat Spawning.miz
index 8aafd35ef..34bd1c6fc 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-120 - Repeat Spawning/SPA-120 - Repeat Spawning.miz and b/Moose Test Missions/SPA - Spawning/SPA-120 - Repeat Spawning/SPA-120 - Repeat Spawning.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-121 - Air Ops - Scheduled Spawns with Repeat on Landing with Limit/SPA-121 - Air Ops - Scheduled Spawns with Repeat on Landing with Limit.miz b/Moose Test Missions/SPA - Spawning/SPA-121 - Air Ops - Scheduled Spawns with Repeat on Landing with Limit/SPA-121 - Air Ops - Scheduled Spawns with Repeat on Landing with Limit.miz
index cd42d5d36..5987ff301 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-121 - Air Ops - Scheduled Spawns with Repeat on Landing with Limit/SPA-121 - Air Ops - Scheduled Spawns with Repeat on Landing with Limit.miz and b/Moose Test Missions/SPA - Spawning/SPA-121 - Air Ops - Scheduled Spawns with Repeat on Landing with Limit/SPA-121 - Air Ops - Scheduled Spawns with Repeat on Landing with Limit.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-122 - Air Ops - OnLand test for Scheduled Spawns/SPA-122 - Air Ops - OnLand test for Scheduled Spawns.miz b/Moose Test Missions/SPA - Spawning/SPA-122 - Air Ops - OnLand test for Scheduled Spawns/SPA-122 - Air Ops - OnLand test for Scheduled Spawns.miz
index 283c2eea3..01b18b695 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-122 - Air Ops - OnLand test for Scheduled Spawns/SPA-122 - Air Ops - OnLand test for Scheduled Spawns.miz and b/Moose Test Missions/SPA - Spawning/SPA-122 - Air Ops - OnLand test for Scheduled Spawns/SPA-122 - Air Ops - OnLand test for Scheduled Spawns.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-130 - Uncontrolled Spawning/SPA-130 - Uncontrolled Spawning.miz b/Moose Test Missions/SPA - Spawning/SPA-130 - Uncontrolled Spawning/SPA-130 - Uncontrolled Spawning.miz
index 5c414dddd..c44a55be7 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-130 - Uncontrolled Spawning/SPA-130 - Uncontrolled Spawning.miz and b/Moose Test Missions/SPA - Spawning/SPA-130 - Uncontrolled Spawning/SPA-130 - Uncontrolled Spawning.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-200 - Randomize Unit Types/SPA-200 - Randomize Unit Types.miz b/Moose Test Missions/SPA - Spawning/SPA-200 - Randomize Unit Types/SPA-200 - Randomize Unit Types.miz
index 01056989a..cc8ee53f9 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-200 - Randomize Unit Types/SPA-200 - Randomize Unit Types.miz and b/Moose Test Missions/SPA - Spawning/SPA-200 - Randomize Unit Types/SPA-200 - Randomize Unit Types.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-220 - Randomize Zones/SPA-220 - Randomize Zones.miz b/Moose Test Missions/SPA - Spawning/SPA-220 - Randomize Zones/SPA-220 - Randomize Zones.miz
index d483ffb72..7837a0589 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-220 - Randomize Zones/SPA-220 - Randomize Zones.miz and b/Moose Test Missions/SPA - Spawning/SPA-220 - Randomize Zones/SPA-220 - Randomize Zones.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-310 - Spawn at Static position/SPA-310 - Spawn at Static position.miz b/Moose Test Missions/SPA - Spawning/SPA-310 - Spawn at Static position/SPA-310 - Spawn at Static position.miz
index 4076e7875..7469f6d64 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-310 - Spawn at Static position/SPA-310 - Spawn at Static position.miz and b/Moose Test Missions/SPA - Spawning/SPA-310 - Spawn at Static position/SPA-310 - Spawn at Static position.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-320 - Spawn at Unit position/SPA-320 - Spawn at Unit position.miz b/Moose Test Missions/SPA - Spawning/SPA-320 - Spawn at Unit position/SPA-320 - Spawn at Unit position.miz
index fde450f97..e56f869b4 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-320 - Spawn at Unit position/SPA-320 - Spawn at Unit position.miz and b/Moose Test Missions/SPA - Spawning/SPA-320 - Spawn at Unit position/SPA-320 - Spawn at Unit position.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-330 - Spawn at Vec2 position/SPA-330 - Spawn at Vec2 position.miz b/Moose Test Missions/SPA - Spawning/SPA-330 - Spawn at Vec2 position/SPA-330 - Spawn at Vec2 position.miz
index bcf255911..cb8538f7f 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-330 - Spawn at Vec2 position/SPA-330 - Spawn at Vec2 position.miz and b/Moose Test Missions/SPA - Spawning/SPA-330 - Spawn at Vec2 position/SPA-330 - Spawn at Vec2 position.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-340 - Spawn at Vec3 position/SPA-340 - Spawn at Vec3 position.miz b/Moose Test Missions/SPA - Spawning/SPA-340 - Spawn at Vec3 position/SPA-340 - Spawn at Vec3 position.miz
index 32ec7b74c..be17d1af6 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-340 - Spawn at Vec3 position/SPA-340 - Spawn at Vec3 position.miz and b/Moose Test Missions/SPA - Spawning/SPA-340 - Spawn at Vec3 position/SPA-340 - Spawn at Vec3 position.miz differ
diff --git a/Moose Test Missions/SPA - Spawning/SPA-350 - Spawn at Vec3 position RandomzePosition/SPA-350 - Spawn at Vec3 position RandomzePosition.miz b/Moose Test Missions/SPA - Spawning/SPA-350 - Spawn at Vec3 position RandomzePosition/SPA-350 - Spawn at Vec3 position RandomzePosition.miz
index 6b77f2eaa..5d9b646dd 100644
Binary files a/Moose Test Missions/SPA - Spawning/SPA-350 - Spawn at Vec3 position RandomzePosition/SPA-350 - Spawn at Vec3 position RandomzePosition.miz and b/Moose Test Missions/SPA - Spawning/SPA-350 - Spawn at Vec3 position RandomzePosition/SPA-350 - Spawn at Vec3 position RandomzePosition.miz differ
diff --git a/Moose Test Missions/TAD - Task Dispatching/TAD-010 - A2G Task Dispatching Destroy Test/TAD-010 - A2G Task Dispatching Destroy Test.miz b/Moose Test Missions/TAD - Task Dispatching/TAD-010 - A2G Task Dispatching Destroy Test/TAD-010 - A2G Task Dispatching Destroy Test.miz
index 4025303a7..7fbfb0299 100644
Binary files a/Moose Test Missions/TAD - Task Dispatching/TAD-010 - A2G Task Dispatching Destroy Test/TAD-010 - A2G Task Dispatching Destroy Test.miz and b/Moose Test Missions/TAD - Task Dispatching/TAD-010 - A2G Task Dispatching Destroy Test/TAD-010 - A2G Task Dispatching Destroy Test.miz differ
diff --git a/Moose Test Missions/TAD - Task Dispatching/TAD-100 - A2G Task Dispatching DETECTION_AREAS/TAD-100 - A2G Task Dispatching DETECTION_AREAS.miz b/Moose Test Missions/TAD - Task Dispatching/TAD-100 - A2G Task Dispatching DETECTION_AREAS/TAD-100 - A2G Task Dispatching DETECTION_AREAS.miz
index 2e549405c..079a85e18 100644
Binary files a/Moose Test Missions/TAD - Task Dispatching/TAD-100 - A2G Task Dispatching DETECTION_AREAS/TAD-100 - A2G Task Dispatching DETECTION_AREAS.miz and b/Moose Test Missions/TAD - Task Dispatching/TAD-100 - A2G Task Dispatching DETECTION_AREAS/TAD-100 - A2G Task Dispatching DETECTION_AREAS.miz differ
diff --git a/Moose Test Missions/TAD - Task Dispatching/TAD-105 - A2G Task Dispatching DETECTION_AREAS/TAD-105 - A2G Task Dispatching DETECTION_AREAS.miz b/Moose Test Missions/TAD - Task Dispatching/TAD-105 - A2G Task Dispatching DETECTION_AREAS/TAD-105 - A2G Task Dispatching DETECTION_AREAS.miz
index 2be7f7c9f..c78fc040c 100644
Binary files a/Moose Test Missions/TAD - Task Dispatching/TAD-105 - A2G Task Dispatching DETECTION_AREAS/TAD-105 - A2G Task Dispatching DETECTION_AREAS.miz and b/Moose Test Missions/TAD - Task Dispatching/TAD-105 - A2G Task Dispatching DETECTION_AREAS/TAD-105 - A2G Task Dispatching DETECTION_AREAS.miz differ
diff --git a/Moose Test Missions/TAD - Task Dispatching/TAD-110 - A2G Task Dispatching DETECTION_TYPES/TAD-110 - A2G Task Dispatching DETECTION_TYPES.miz b/Moose Test Missions/TAD - Task Dispatching/TAD-110 - A2G Task Dispatching DETECTION_TYPES/TAD-110 - A2G Task Dispatching DETECTION_TYPES.miz
index 641a212ec..f76492202 100644
Binary files a/Moose Test Missions/TAD - Task Dispatching/TAD-110 - A2G Task Dispatching DETECTION_TYPES/TAD-110 - A2G Task Dispatching DETECTION_TYPES.miz and b/Moose Test Missions/TAD - Task Dispatching/TAD-110 - A2G Task Dispatching DETECTION_TYPES/TAD-110 - A2G Task Dispatching DETECTION_TYPES.miz differ
diff --git a/Moose Test Missions/TAD - Task Dispatching/TAD-120 - A2G Task Dispatching DETECTION_UNITS/TAD-120 - A2G Task Dispatching DETECTION_UNITS.miz b/Moose Test Missions/TAD - Task Dispatching/TAD-120 - A2G Task Dispatching DETECTION_UNITS/TAD-120 - A2G Task Dispatching DETECTION_UNITS.miz
index 9e2682f7f..f5cdc95a4 100644
Binary files a/Moose Test Missions/TAD - Task Dispatching/TAD-120 - A2G Task Dispatching DETECTION_UNITS/TAD-120 - A2G Task Dispatching DETECTION_UNITS.miz and b/Moose Test Missions/TAD - Task Dispatching/TAD-120 - A2G Task Dispatching DETECTION_UNITS/TAD-120 - A2G Task Dispatching DETECTION_UNITS.miz differ
diff --git a/Moose Test Missions/TAD - Task Dispatching/TAD-200 - A2G Task Dispatching with SCORING/TAD-200 - A2G Task Dispatching with SCORING.miz b/Moose Test Missions/TAD - Task Dispatching/TAD-200 - A2G Task Dispatching with SCORING/TAD-200 - A2G Task Dispatching with SCORING.miz
index d12d49088..79616d9c4 100644
Binary files a/Moose Test Missions/TAD - Task Dispatching/TAD-200 - A2G Task Dispatching with SCORING/TAD-200 - A2G Task Dispatching with SCORING.miz and b/Moose Test Missions/TAD - Task Dispatching/TAD-200 - A2G Task Dispatching with SCORING/TAD-200 - A2G Task Dispatching with SCORING.miz differ
diff --git a/Moose Test Missions/TAD - Task Dispatching/TAD-210 - A2G Task Dispatching per AREAS and SCORING/TAD-210 - A2G Task Dispatching per AREAS and SCORING.miz b/Moose Test Missions/TAD - Task Dispatching/TAD-210 - A2G Task Dispatching per AREAS and SCORING/TAD-210 - A2G Task Dispatching per AREAS and SCORING.miz
index c08972fcc..ab99064fc 100644
Binary files a/Moose Test Missions/TAD - Task Dispatching/TAD-210 - A2G Task Dispatching per AREAS and SCORING/TAD-210 - A2G Task Dispatching per AREAS and SCORING.miz and b/Moose Test Missions/TAD - Task Dispatching/TAD-210 - A2G Task Dispatching per AREAS and SCORING/TAD-210 - A2G Task Dispatching per AREAS and SCORING.miz differ
diff --git a/Moose Test Missions/TAD - Task Dispatching/TAD-220 - A2G Task Dispatching per TYPE and SCORING/TAD-220 - A2G Task Dispatching per TYPE and SCORING.miz b/Moose Test Missions/TAD - Task Dispatching/TAD-220 - A2G Task Dispatching per TYPE and SCORING/TAD-220 - A2G Task Dispatching per TYPE and SCORING.miz
index 69fddbb9d..dd66cc842 100644
Binary files a/Moose Test Missions/TAD - Task Dispatching/TAD-220 - A2G Task Dispatching per TYPE and SCORING/TAD-220 - A2G Task Dispatching per TYPE and SCORING.miz and b/Moose Test Missions/TAD - Task Dispatching/TAD-220 - A2G Task Dispatching per TYPE and SCORING/TAD-220 - A2G Task Dispatching per TYPE and SCORING.miz differ
diff --git a/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.miz b/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.miz
index f1c4e75ff..14629c7b9 100644
Binary files a/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.miz and b/Moose Test Missions/TSK - Task Modelling/TSK-010 - Task Modelling - SEAD/TSK-010 - Task Modelling - SEAD.miz differ
diff --git a/Moose Test Missions/TSK - Task Modelling/TSK-020 - Task Modelling - Pickup/TSK-020 - Task Modelling - Pickup.miz b/Moose Test Missions/TSK - Task Modelling/TSK-020 - Task Modelling - Pickup/TSK-020 - Task Modelling - Pickup.miz
index 4748939dc..3f3a50344 100644
Binary files a/Moose Test Missions/TSK - Task Modelling/TSK-020 - Task Modelling - Pickup/TSK-020 - Task Modelling - Pickup.miz and b/Moose Test Missions/TSK - Task Modelling/TSK-020 - Task Modelling - Pickup/TSK-020 - Task Modelling - Pickup.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-100 - Normal Zone/ZON-100 - Normal Zone.miz b/Moose Test Missions/ZON - Zones/ZON-100 - Normal Zone/ZON-100 - Normal Zone.miz
index d6017ec87..175545901 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-100 - Normal Zone/ZON-100 - Normal Zone.miz and b/Moose Test Missions/ZON - Zones/ZON-100 - Normal Zone/ZON-100 - Normal Zone.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-101 - Normal Zone - Random Point/ZON-101 - Normal Zone - Random Point.miz b/Moose Test Missions/ZON - Zones/ZON-101 - Normal Zone - Random Point/ZON-101 - Normal Zone - Random Point.miz
index 12d8710f7..93221c846 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-101 - Normal Zone - Random Point/ZON-101 - Normal Zone - Random Point.miz and b/Moose Test Missions/ZON - Zones/ZON-101 - Normal Zone - Random Point/ZON-101 - Normal Zone - Random Point.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-102 - Normal Zone Boundary/ZON-102 - Normal Zone Boundary.miz b/Moose Test Missions/ZON - Zones/ZON-102 - Normal Zone Boundary/ZON-102 - Normal Zone Boundary.miz
index 2fe36b816..325a3ce98 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-102 - Normal Zone Boundary/ZON-102 - Normal Zone Boundary.miz and b/Moose Test Missions/ZON - Zones/ZON-102 - Normal Zone Boundary/ZON-102 - Normal Zone Boundary.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-200 - Group Zone/ZON-200 - Group Zone.miz b/Moose Test Missions/ZON - Zones/ZON-200 - Group Zone/ZON-200 - Group Zone.miz
index 3c9ea71ac..46f458a43 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-200 - Group Zone/ZON-200 - Group Zone.miz and b/Moose Test Missions/ZON - Zones/ZON-200 - Group Zone/ZON-200 - Group Zone.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-201 - Group Zone - Random Point/ZON-201 - Group Zone - Random Point.miz b/Moose Test Missions/ZON - Zones/ZON-201 - Group Zone - Random Point/ZON-201 - Group Zone - Random Point.miz
index 18ce1328f..156ce8687 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-201 - Group Zone - Random Point/ZON-201 - Group Zone - Random Point.miz and b/Moose Test Missions/ZON - Zones/ZON-201 - Group Zone - Random Point/ZON-201 - Group Zone - Random Point.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-300 - Unit Zone/ZON-300 - Unit Zone.miz b/Moose Test Missions/ZON - Zones/ZON-300 - Unit Zone/ZON-300 - Unit Zone.miz
index 991e09030..454bf3947 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-300 - Unit Zone/ZON-300 - Unit Zone.miz and b/Moose Test Missions/ZON - Zones/ZON-300 - Unit Zone/ZON-300 - Unit Zone.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-301 - Unit Zone - Random Point/ZON-301 - Unit Zone - Random Point.miz b/Moose Test Missions/ZON - Zones/ZON-301 - Unit Zone - Random Point/ZON-301 - Unit Zone - Random Point.miz
index 3c3545fa3..79d8438ea 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-301 - Unit Zone - Random Point/ZON-301 - Unit Zone - Random Point.miz and b/Moose Test Missions/ZON - Zones/ZON-301 - Unit Zone - Random Point/ZON-301 - Unit Zone - Random Point.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-400 - Radius Zone/ZON-400 - Radius Zone.miz b/Moose Test Missions/ZON - Zones/ZON-400 - Radius Zone/ZON-400 - Radius Zone.miz
index cf29a1cfa..6922a5501 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-400 - Radius Zone/ZON-400 - Radius Zone.miz and b/Moose Test Missions/ZON - Zones/ZON-400 - Radius Zone/ZON-400 - Radius Zone.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-401 - Radius Zone - Random Point/ZON-401 - Radius Zone - Random Point.miz b/Moose Test Missions/ZON - Zones/ZON-401 - Radius Zone - Random Point/ZON-401 - Radius Zone - Random Point.miz
index c1e3d9c88..9092b58e2 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-401 - Radius Zone - Random Point/ZON-401 - Radius Zone - Random Point.miz and b/Moose Test Missions/ZON - Zones/ZON-401 - Radius Zone - Random Point/ZON-401 - Radius Zone - Random Point.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-500 - Polygon Zone/ZON-500 - Polygon Zone.miz b/Moose Test Missions/ZON - Zones/ZON-500 - Polygon Zone/ZON-500 - Polygon Zone.miz
index 698129fa9..f346cd547 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-500 - Polygon Zone/ZON-500 - Polygon Zone.miz and b/Moose Test Missions/ZON - Zones/ZON-500 - Polygon Zone/ZON-500 - Polygon Zone.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-501 - Polygon Zone - Random Point/ZON-501 - Polygon Zone - Random Point.miz b/Moose Test Missions/ZON - Zones/ZON-501 - Polygon Zone - Random Point/ZON-501 - Polygon Zone - Random Point.miz
index 724ce33e9..9d1d25461 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-501 - Polygon Zone - Random Point/ZON-501 - Polygon Zone - Random Point.miz and b/Moose Test Missions/ZON - Zones/ZON-501 - Polygon Zone - Random Point/ZON-501 - Polygon Zone - Random Point.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-502 - Polygon Zone Boundary/ZON-502 - Polygon Zone Boundary.miz b/Moose Test Missions/ZON - Zones/ZON-502 - Polygon Zone Boundary/ZON-502 - Polygon Zone Boundary.miz
index b4eb0555d..8aa3dd0ba 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-502 - Polygon Zone Boundary/ZON-502 - Polygon Zone Boundary.miz and b/Moose Test Missions/ZON - Zones/ZON-502 - Polygon Zone Boundary/ZON-502 - Polygon Zone Boundary.miz differ
diff --git a/Moose Test Missions/ZON - Zones/ZON-510 - Send message if Clients fly the first time in the Polygon Zones/ZON-510 - Send message if Clients fly the first time in the Polygon Zones.miz b/Moose Test Missions/ZON - Zones/ZON-510 - Send message if Clients fly the first time in the Polygon Zones/ZON-510 - Send message if Clients fly the first time in the Polygon Zones.miz
index 8865b840f..adf919376 100644
Binary files a/Moose Test Missions/ZON - Zones/ZON-510 - Send message if Clients fly the first time in the Polygon Zones/ZON-510 - Send message if Clients fly the first time in the Polygon Zones.miz and b/Moose Test Missions/ZON - Zones/ZON-510 - Send message if Clients fly the first time in the Polygon Zones/ZON-510 - Send message if Clients fly the first time in the Polygon Zones.miz differ
diff --git a/docs/Documentation/Controllable.html b/docs/Documentation/Controllable.html
index fa850fb75..22bfaf97f 100644
--- a/docs/Documentation/Controllable.html
+++ b/docs/Documentation/Controllable.html
@@ -246,9 +246,9 @@ This is different from the EnRoute tasks, where the targets of the task need to
- | CONTROLLABLE:CommandStopRoute(StopRoute, Index) |
+ CONTROLLABLE:CommandStopRoute(StopRoute) |
- Perform stop route command
+Create a stop route command, which returns a string containing the command.
|
@@ -483,13 +483,6 @@ This is different from the EnRoute tasks, where the targets of the task need to
| CONTROLLABLE:Route(GoPoints) |
Make the controllable to follow a given route.
- |
-
-
- | CONTROLLABLE:RouteReturnToAirbase(ReturnAirbase, Speed) |
-
- (AIR) Return the Controllable to an Airbase#AIRBASE
-A speed can be given in km/h.
|
@@ -794,23 +787,31 @@ A speed can be given in km/h.
-CONTROLLABLE:CommandStopRoute(StopRoute, Index)
+CONTROLLABLE:CommandStopRoute(StopRoute)
-Perform stop route command
+Create a stop route command, which returns a string containing the command.
- Parameters
+
+Use the result in the method CONTROLLABLE.SetCommand().
+A value of true will make the ground group stop, a value of false will make it continue.
+Note that this can only work on GROUP level, although individual UNITs can be commanded, the whole GROUP will react.
+
+Example missions:
+
+
+
+ Parameter
@@ -1854,43 +1855,6 @@ self
-
-
-CONTROLLABLE:RouteReturnToAirbase(ReturnAirbase, Speed)
-
-
--
-
-
(AIR) Return the Controllable to an Airbase#AIRBASE
-A speed can be given in km/h.
-
-
-A given formation can be given.
-
- Parameters
-
- Return value
-
-#string:
-The route
-
-
-
-
--
-
CONTROLLABLE:RouteToVec2(Point, Speed)
diff --git a/docs/Documentation/Fsm.html b/docs/Documentation/Fsm.html
index 5286a9c1e..40679fc47 100644
--- a/docs/Documentation/Fsm.html
+++ b/docs/Documentation/Fsm.html
@@ -1562,7 +1562,7 @@ A string defining the start state.
-
-
+ #string
FSM._StartState
@@ -1861,7 +1861,6 @@ A string defining the start state.
-
-
FSM.current
diff --git a/docs/Documentation/Group.html b/docs/Documentation/Group.html
index 3e152da95..7d74f1dbd 100644
--- a/docs/Documentation/Group.html
+++ b/docs/Documentation/Group.html
@@ -73,12 +73,13 @@
Module Group
-
This module contains the GROUP class.
+
Wrapper -- GROUP is a wrapper class for the DCS Class Group.
-
-
The Group#GROUP class is a wrapper class to handle the DCS Group objects:
+
+
+
The #GROUP class is a wrapper class to handle the DCS Group objects:
- Support all DCS Group APIs.
@@ -89,66 +90,7 @@
IMPORTANT: ONE SHOULD NEVER SANATIZE these GROUP OBJECT REFERENCES! (make the GROUP object references nil).
-1.1) GROUP reference methods
-For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _DATABASE object.
-This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the SPAWN class).
-
-The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
-using the DCS Group or the DCS GroupName.
-
-Another thing to know is that GROUP objects do not "contain" the DCS Group object.
-The GROUP methods will reference the DCS Group object by name when it is needed during API execution.
-If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file.
-
-The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance:
-
-
- - GROUP.Find(): Find a GROUP instance from the _DATABASE object using a DCS Group object.
- - GROUP.FindByName(): Find a GROUP instance from the _DATABASE object using a DCS Group name.
-
-
-1.2) GROUP task methods
-
-A GROUP is a Controllable. See the Controllable task methods section for a description of the task methods.
-
-1.2.4) Obtain the mission from group templates
-
-Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another:
-
-
-
-1.3) GROUP Command methods
-
-A GROUP is a Controllable. See the Controllable command methods section for a description of the command methods.
-
-1.4) GROUP option methods
-
-A GROUP is a Controllable. See the Controllable option methods section for a description of the option methods.
-
-1.5) GROUP Zone validation methods
-
-The group can be validated whether it is completely, partly or not within a Zone.
-Use the following Zone validation methods on the group:
-
-
-
-The zone can be of any Zone class derived from Zone#ZONE_BASE. So, these methods are polymorphic to the zones tested on.
-
-1.6) GROUP AI methods
-
-A GROUP has AI methods to control the AI activation.
-
-
+See the detailed documentation on the GROUP class.
@@ -163,6 +105,8 @@ Use the following Zone validation methods on the group:
Hereby the change log:
+2017-03-26: GROUP:RouteRTB( RTBAirbase, Speed ) added.
+
2017-03-07: GROUP:HandleEvent( Event, EventFunction ) added.
2017-03-07: GROUP:UnHandleEvent( Event ) added.
@@ -194,7 +138,9 @@ Use the following Zone validation methods on the group:
| GROUP |
+
+ For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _DATABASE object.
|
@@ -216,12 +162,6 @@ Use the following Zone validation methods on the group:
GROUP:CalculateThreatLevelA2G() |
Calculate the maxium A2G threat level of the Group.
- |
-
-
- | GROUP.ClassName |
-
-
|
@@ -415,7 +355,7 @@ Use the following Zone validation methods on the group:
| GROUP:IsAlive() |
- Returns if the DCS Group is alive.
+Returns if the Group is alive.
|
@@ -470,6 +410,12 @@ Use the following Zone validation methods on the group:
| GROUP:Respawn(Template) |
Respawn the GROUP using a (tweaked) template of the Group.
+ |
+
+
+ | GROUP:RouteRTB(RTBAirbase, Speed) |
+
+ (AIR) Return the Group to an Airbase#AIRBASE.
|
@@ -527,6 +473,69 @@ Use the following Zone validation methods on the group:
+
+
+For each DCS Group object alive within a running mission, a GROUP wrapper object (instance) will be created within the _DATABASE object.
+
+
+This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Group objects are spawned (using the SPAWN class).
+
+The GROUP class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
+using the DCS Group or the DCS GroupName.
+
+Another thing to know is that GROUP objects do not "contain" the DCS Group object.
+The GROUP methods will reference the DCS Group object by name when it is needed during API execution.
+If the DCS Group object does not exist or is nil, the GROUP methods will return nil and log an exception in the DCS.log file.
+
+The GROUP class provides the following functions to retrieve quickly the relevant GROUP instance:
+
+
+ - GROUP.Find(): Find a GROUP instance from the _DATABASE object using a DCS Group object.
+ - GROUP.FindByName(): Find a GROUP instance from the _DATABASE object using a DCS Group name.
+
+
+GROUP task methods
+
+A GROUP is a Controllable. See the Controllable task methods section for a description of the task methods.
+
+Obtain the mission from group templates
+
+Group templates contain complete mission descriptions. Sometimes you want to copy a complete mission from a group and assign it to another:
+
+
+
+GROUP Command methods
+
+A GROUP is a Controllable. See the Controllable command methods section for a description of the command methods.
+
+GROUP option methods
+
+A GROUP is a Controllable. See the Controllable option methods section for a description of the option methods.
+
+GROUP Zone validation methods
+
+The group can be validated whether it is completely, partly or not within a Zone.
+Use the following Zone validation methods on the group:
+
+
+
+The zone can be of any Zone class derived from Zone#ZONE_BASE. So, these methods are polymorphic to the zones tested on.
+
+GROUP AI methods
+
+A GROUP has AI methods to control the AI activation.
+
+
@@ -534,10 +543,7 @@ Use the following Zone validation methods on the group:
-
-The GROUP class
-
- Field(s)
+ Field(s)
-
@@ -583,20 +589,6 @@ All units on the ground result.
Calculate the maxium A2G threat level of the Group.
-
-
-
--
-
- #string
-
-GROUP.ClassName
-
-
--
-
-
-
@@ -1299,16 +1291,41 @@ true if DCS Group contains AirPlanes.
-
-
Returns if the DCS Group is alive.
+Returns if the Group is alive.
-When the group exists at run-time, this method will return true, otherwise false.
+The Group must:
- Return value
+
+ - Exist at run-time.
+ - Has at least one unit.
+
+
+When the first Unit of the Group is active, it will return true.
+If the first Unit of the Group is inactive, it will return false.
+
+
+ Return values
+
+ -
#boolean:
-true if the DCS Group is alive.
+true if the Group is alive and active.
+
+ -
+
+
#boolean:
+false if the Group is alive but inactive.
+
+
+ -
+
+
#nil:
+if the group does not exist anymore.
+
+
+
@@ -1541,6 +1558,51 @@ The template of the Group retrieved with GROUP:GetTemplate()
-
+
+GROUP:RouteRTB(RTBAirbase, Speed)
+
+
+-
+
+
(AIR) Return the Group to an Airbase#AIRBASE.
+
+
+The following things are to be taken into account:
+
+
+ - The group is respawned to achieve the RTB, there may be side artefacts as a result of this. (Like weapons suddenly come back).
+ - A group consisting out of more than one unit, may rejoin formation when respawned.
+ - A speed can be given in km/h. If no speed is specified, the maximum speed of the first unit will be taken to return to base.
+ - When there is no Airbase object specified, the group will return to the home base if the route of the group is pinned at take-off or at landing to a base.
+ - When there is no Airbase object specified and the group route is not pinned to any airbase, it will return to the nearest airbase.
+
+
+
+ Parameters
+
+ -
+
+
Wrapper.Airbase#AIRBASE RTBAirbase :
+(optional) The Airbase to return to. If blank, the controllable will return to the nearest friendly airbase.
+
+
+ -
+
+
#number Speed :
+(optional) The Speed, if no Speed is given, the maximum Speed of the first unit is selected.
+
+
+
+ Return value
+
+#GROUP:
+
+
+
+
+
+-
+
GROUP:SetAIOff()
diff --git a/docs/Documentation/Identifiable.html b/docs/Documentation/Identifiable.html
index 338914a14..26302176c 100644
--- a/docs/Documentation/Identifiable.html
+++ b/docs/Documentation/Identifiable.html
@@ -474,6 +474,10 @@ The DCS Identifiable is not existing or alive.
Returns if the Identifiable is alive.
+
+If the Identifiable is not alive, nil is returned.
+If the Identifiable is alive, true is returned.
+
Return values
-
@@ -485,7 +489,7 @@ true if Identifiable is alive.
-
#nil:
-The DCS Identifiable is not existing or alive.
+if the Identifiable is not existing or is not alive.
diff --git a/docs/Documentation/Point.html b/docs/Documentation/Point.html
index b1b50b793..2f03970b6 100644
--- a/docs/Documentation/Point.html
+++ b/docs/Documentation/Point.html
@@ -1347,7 +1347,6 @@ The new calculated POINT_VEC2.
-
-
POINT_VEC2.z
diff --git a/docs/Documentation/Spawn.html b/docs/Documentation/Spawn.html
index ee08c8d38..3c2379643 100644
--- a/docs/Documentation/Spawn.html
+++ b/docs/Documentation/Spawn.html
@@ -2312,9 +2312,6 @@ when nothing was spawned.
-
-
Overwrite unit names by default with group name.
-
diff --git a/docs/Documentation/Unit.html b/docs/Documentation/Unit.html
index 269364c6c..097aa6cf3 100644
--- a/docs/Documentation/Unit.html
+++ b/docs/Documentation/Unit.html
@@ -73,97 +73,36 @@
Module Unit
-
This module contains the UNIT class.
+
Wrapper - UNIT is a wrapper class for the DCS Class Unit.
-
+
+
The #UNIT class is a wrapper class to handle the DCS Unit objects:
- Support all DCS Unit APIs.
- Enhance with Unit specific APIs not in the DCS Unit API set.
- Handle local Unit Controller.
- - Manage the "state" of the DCS Unit.
+ - Manage the "state" of the DCS Unit.
+
-
-
1.1) UNIT reference methods
-
For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _DATABASE object.
-This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the SPAWN class).
-
-
The UNIT class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
-using the DCS Unit or the DCS UnitName.
-
-
Another thing to know is that UNIT objects do not "contain" the DCS Unit object.
-The UNIT methods will reference the DCS Unit object by name when it is needed during API execution.
-If the DCS Unit object does not exist or is nil, the UNIT methods will return nil and log an exception in the DCS.log file.
-
-
The UNIT class provides the following functions to retrieve quickly the relevant UNIT instance:
-
-
- - UNIT.Find(): Find a UNIT instance from the _DATABASE object using a DCS Unit object.
- - UNIT.FindByName(): Find a UNIT instance from the _DATABASE object using a DCS Unit name.
-
-
-
IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil).
-
-
1.2) DCS UNIT APIs
-
The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method.
-To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call,
-the first letter of the method is also capitalized. So, by example, the DCS Unit method DCSWrapper.Unit#Unit.getName()
-is implemented in the UNIT class as UNIT.GetName().
-
-
1.3) Smoke, Flare Units
-
The UNIT class provides methods to smoke or flare units easily.
-The UNIT.SmokeBlue(), UNIT.SmokeGreen(),UNIT.SmokeOrange(), UNIT.SmokeRed(), UNIT.SmokeRed() methods
-will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit.
-When the DCS Unit moves for whatever reason, the smoking will still continue!
-The UNIT.FlareGreen(), UNIT.FlareRed(), UNIT.FlareWhite(), UNIT.FlareYellow()
-methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration.
-
-
1.4) Location Position, Point
-
The UNIT class provides methods to obtain the current point or position of the DCS Unit.
-The UNIT.GetPointVec2(), UNIT.GetVec3() will obtain the current location of the DCS Unit in a Vec2 (2D) or a point in a Vec3 (3D) vector respectively.
-If you want to obtain the complete 3D position including ori�ntation and direction vectors, consult the UNIT.GetPositionVec3() method respectively.
-
-
1.5) Test if alive
-
The UNIT.IsAlive(), UNIT.IsActive() methods determines if the DCS Unit is alive, meaning, it is existing and active.
-
-
1.6) Test for proximity
-
The UNIT class contains methods to test the location or proximity against zones or other objects.
-
-
1.6.1) Zones
-
To test whether the Unit is within a zone, use the UNIT.IsInZone() or the UNIT.IsNotInZone() methods. Any zone can be tested on, but the zone must be derived from Zone#ZONE_BASE.
-
-
1.6.2) Units
-
Test if another DCS Unit is within a given radius of the current DCS Unit, use the UNIT.OtherUnitInRadius() method.
-
-
Global(s)
| UNIT |
+
- |
-
-
- | i |
-
-
+ For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _DATABASE object.
|
- | UNIT.ClassName |
-
-
- |
-
-
| UNIT:Find(DCSUnit) |
Finds a UNIT from the _DATABASE using a DCSUnit object.
@@ -333,6 +272,12 @@ If you want to obtain the complete 3D position including ori�
| UNIT:IsAir() |
Returns if the unit is of an air category.
+ |
+
+
+ | UNIT:IsAlive() |
+
+ Returns if the Unit is alive.
|
@@ -472,48 +417,74 @@ If you want to obtain the complete 3D position including ori�
-
+
-
-
-
-
--
-
- #number
-
-i
-
-
--
-
-
+
For each DCS Unit object alive within a running mission, a UNIT wrapper object (instance) will be created within the _DATABASE object.
- Remove obscolete units from the group structure
+This is done at the beginning of the mission (when the mission starts), and dynamically when new DCS Unit objects are spawned (using the SPAWN class).
+
+The UNIT class does not contain a :New() method, rather it provides :Find() methods to retrieve the object reference
+using the DCS Unit or the DCS UnitName.
+
+Another thing to know is that UNIT objects do not "contain" the DCS Unit object.
+The UNIT methods will reference the DCS Unit object by name when it is needed during API execution.
+If the DCS Unit object does not exist or is nil, the UNIT methods will return nil and log an exception in the DCS.log file.
+
+The UNIT class provides the following functions to retrieve quickly the relevant UNIT instance:
+
+
+ - UNIT.Find(): Find a UNIT instance from the _DATABASE object using a DCS Unit object.
+ - UNIT.FindByName(): Find a UNIT instance from the _DATABASE object using a DCS Unit name.
+
+
+IMPORTANT: ONE SHOULD NEVER SANATIZE these UNIT OBJECT REFERENCES! (make the UNIT object references nil).
+
+DCS UNIT APIs
+
+The DCS Unit APIs are used extensively within MOOSE. The UNIT class has for each DCS Unit API a corresponding method.
+To be able to distinguish easily in your code the difference between a UNIT API call and a DCS Unit API call,
+the first letter of the method is also capitalized. So, by example, the DCS Unit method DCSWrapper.Unit#Unit.getName()
+is implemented in the UNIT class as UNIT.GetName().
+
+Smoke, Flare Units
+
+The UNIT class provides methods to smoke or flare units easily.
+The UNIT.SmokeBlue(), UNIT.SmokeGreen(),UNIT.SmokeOrange(), UNIT.SmokeRed(), UNIT.SmokeRed() methods
+will smoke the unit in the corresponding color. Note that smoking a unit is done at the current position of the DCS Unit.
+When the DCS Unit moves for whatever reason, the smoking will still continue!
+The UNIT.FlareGreen(), UNIT.FlareRed(), UNIT.FlareWhite(), UNIT.FlareYellow()
+methods will fire off a flare in the air with the corresponding color. Note that a flare is a one-off shot and its effect is of very short duration.
+
+Location Position, Point
+
+The UNIT class provides methods to obtain the current point or position of the DCS Unit.
+The UNIT.GetPointVec2(), UNIT.GetVec3() will obtain the current location of the DCS Unit in a Vec2 (2D) or a point in a Vec3 (3D) vector respectively.
+If you want to obtain the complete 3D position including ori�ntation and direction vectors, consult the UNIT.GetPositionVec3() method respectively.
+
+Test if alive
+
+The UNIT.IsAlive(), UNIT.IsActive() methods determines if the DCS Unit is alive, meaning, it is existing and active.
+
+Test for proximity
+
+The UNIT class contains methods to test the location or proximity against zones or other objects.
+
+Zones
+
+To test whether the Unit is within a zone, use the UNIT.IsInZone() or the UNIT.IsNotInZone() methods. Any zone can be tested on, but the zone must be derived from Zone#ZONE_BASE.
+
+Units
+
+Test if another DCS Unit is within a given radius of the current DCS Unit, use the UNIT.OtherUnitInRadius() method.
+
-
-The UNIT class
-
- Field(s)
-
--
-
- #string
-
-UNIT.ClassName
-
-
--
-
-
-
-
-
+ Field(s)
-
@@ -1240,6 +1211,45 @@ Air category evaluation result.
-
+
+UNIT:IsAlive()
+
+
+-
+
+
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.
+
+ Return values
+
+ -
+
+
#boolean:
+true if Unit is alive and active.
+
+
+ -
+
+
#boolean:
+false if Unit is alive but not active.
+
+
+ -
+
+
#nil:
+if the Unit is not existing or is not alive.
+
+
+
+
+
+
+-
+
UNIT:IsFriendly(FriendlyCoalition)
diff --git a/docs/Documentation/index.html b/docs/Documentation/index.html
index 3c0ed8b19..2c422f83e 100644
--- a/docs/Documentation/index.html
+++ b/docs/Documentation/index.html
@@ -237,7 +237,7 @@ are design patterns allowing efficient (long-lasting) processes and workflows.
| Group |
- This module contains the GROUP class.
+Wrapper -- GROUP is a wrapper class for the DCS Class Group.
|
@@ -416,7 +416,7 @@ and creates a CSV file logging the scoring events and results for use at team or
| Unit |
- This module contains the UNIT class.
+Wrapper - UNIT is a wrapper class for the DCS Class Unit.
|