Set AI On or Off when spawning

-- Added AI On or Off functions for SPAWN
-- Added AI On or Off functions for GROUP
This commit is contained in:
FlightControl 2017-01-24 07:10:20 +01:00
parent 0c55d62763
commit 0cb456ef0c
5 changed files with 305 additions and 250 deletions

View File

@ -47,6 +47,9 @@
-- * @{#SPAWN.InitRepeat}(): Re-spawn groups when they land at the home base. Similar methods are @{#SPAWN.InitRepeatOnLanding} and @{#SPAWN.InitRepeatOnEngineShutDown}. -- * @{#SPAWN.InitRepeat}(): Re-spawn groups when they land at the home base. Similar methods are @{#SPAWN.InitRepeatOnLanding} and @{#SPAWN.InitRepeatOnEngineShutDown}.
-- * @{#SPAWN.InitRandomizeUnits}(): Randomizes the @{Unit}s in the @{Group} that is spawned within a **radius band**, given an Outer and Inner radius. -- * @{#SPAWN.InitRandomizeUnits}(): Randomizes the @{Unit}s in the @{Group} that is spawned within a **radius band**, given an Outer and Inner radius.
-- * @{#SPAWN.InitRandomizeZones}(): Randomizes the spawning between a predefined list of @{Zone}s that are declared using this function. Each zone can be given a probability factor. -- * @{#SPAWN.InitRandomizeZones}(): Randomizes the spawning between a predefined list of @{Zone}s that are declared using this function. Each zone can be given a probability factor.
-- * @{#SPAWN.InitAIOn}(): Turns the AI On when spawning the new @{Group} object.
-- * @{#SPAWN.InitAIOff}(): Turns the AI Off when spawning the new @{Group} object.
-- * @{#SPAWN.InitAIOnOff}(): Turns the AI On or Off when spawning the new @{Group} object.
-- --
-- ## 1.3) SPAWN spawning methods -- ## 1.3) SPAWN spawning methods
-- --
@ -238,6 +241,7 @@ function SPAWN:New( SpawnTemplatePrefix )
self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned.
self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false.
self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned.
self.AIOnOff = true -- The AI is on by default when spawning a group.
self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned.
else else
@ -275,6 +279,7 @@ function SPAWN:NewWithAlias( SpawnTemplatePrefix, SpawnAliasPrefix )
self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned. self.SpawnMaxGroups = 0 -- The maximum amount of groups that can be spawned.
self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false. self.SpawnRandomize = false -- Sets the randomization flag of new Spawned units to false.
self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned. self.SpawnVisible = false -- Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned.
self.AIOnOff = true -- The AI is on by default when spawning a group.
self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned. self.SpawnGroups = {} -- Array containing the descriptions of each Group to be Spawned.
else else
@ -565,6 +570,31 @@ function SPAWN:InitArray( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY )
return self return self
end end
--- Turns the AI On or Off for the @{Group} when spawning.
-- @param #SPAWN self
-- @param #boolean AIOnOff
-- @return #SPAWN The SPAWN object
function SPAWN:InitAIOnOff( AIOnOff )
self.AIOnOff = AIOnOff
return self
end
--- Turns the AI On for the @{Group} when spawning.
-- @param #SPAWN self
-- @return #SPAWN The SPAWN object
function SPAWN:InitAIOn()
return self:InitAIOnOff( true )
end
--- Turns the AI Off for the @{Group} when spawning.
-- @param #SPAWN self
-- @return #SPAWN The SPAWN object
function SPAWN:InitAIOff()
return self:InitAIOnOff( true )
end
--- Will spawn a group based on the internal index. --- Will spawn a group based on the internal index.
@ -661,6 +691,14 @@ function SPAWN:SpawnWithIndex( SpawnIndex )
self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( SpawnTemplate ) self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( SpawnTemplate )
local SpawnGroup = self.SpawnGroups[self.SpawnIndex].Group -- Wrapper.Group#GROUP
--TODO: Need to check if this function doesn't need to be scheduled, as the group may not be immediately there!
if SpawnGroup then
SpawnGroup:SetAIOnOff( self.AIOnOff )
end
-- If there is a SpawnFunction hook defined, call it. -- If there is a SpawnFunction hook defined, call it.
if self.SpawnFunctionHook then if self.SpawnFunctionHook then
self.SpawnFunctionHook( self.SpawnGroups[self.SpawnIndex].Group, unpack( self.SpawnFunctionArguments ) ) self.SpawnFunctionHook( self.SpawnGroups[self.SpawnIndex].Group, unpack( self.SpawnFunctionArguments ) )

View File

@ -28,66 +28,9 @@
-- * @{#GROUP.Find}(): Find a GROUP instance from the _DATABASE object using a DCS Group object. -- * @{#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.FindByName}(): Find a GROUP instance from the _DATABASE object using a DCS Group name.
-- --
-- 1.2) GROUP task methods -- ## 1.2) GROUP task methods
-- -----------------------
-- Several group task methods are available that help you to prepare tasks.
-- These methods return a string consisting of the task description, which can then be given to either a
-- @{Wrapper.Controllable#CONTROLLABLE.PushTask} or @{Wrapper.Controllable#CONTROLLABLE.SetTask} method to assign the task to the GROUP.
-- Tasks are specific for the category of the GROUP, more specific, for AIR, GROUND or AIR and GROUND.
-- Each task description where applicable indicates for which group category the task is valid.
-- There are 2 main subdivisions of tasks: Assigned tasks and EnRoute tasks.
-- --
-- ### 1.2.1) Assigned task methods -- A GROUP is a @{Controllable}. See the @{Controllable} task methods section for a description of the task methods.
--
-- Assigned task methods make the group execute the task where the location of the (possible) targets of the task are known before being detected.
-- This is different from the EnRoute tasks, where the targets of the task need to be detected before the task can be executed.
--
-- Find below a list of the **assigned task** methods:
--
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskAttackGroup}: (AIR) Attack a Group.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskAttackMapObject}: (AIR) Attacking the map object (building, structure, e.t.c).
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskAttackUnit}: (AIR) Attack the Unit.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskBombing}: (Wrapper.Controllable#CONTROLLABLEDelivering weapon at the point on the ground.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskBombingRunway}: (AIR) Delivering weapon on the runway.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskEmbarking}: (AIR) Move the group to a Vec2 Point, wait for a defined duration and embark a group.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskEmbarkToTransport}: (GROUND) Embark to a Transport landed at a location.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskEscort}: (AIR) Escort another airborne group.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskFAC_AttackGroup}: (AIR + GROUND) The task makes the group/unit a FAC and orders the FAC to control the target (enemy ground group) destruction.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskFireAtPoint}: (GROUND) Fire at a VEC2 point until ammunition is finished.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskFollow}: (AIR) Following another airborne group.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskHold}: (GROUND) Hold ground group from moving.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskHoldPosition}: (AIR) Hold position at the current position of the first unit of the group.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskLand}: (AIR HELICOPTER) Landing at the ground. For helicopters only.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskLandAtZone}: (AIR) Land the group at a @{Core.Zone#ZONE_RADIUS).
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskOrbitCircle}: (AIR) Orbit at the current position of the first unit of the group at a specified alititude.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskOrbitCircleAtVec2}: (AIR) Orbit at a specified position at a specified alititude during a specified duration with a specified speed.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskRefueling}: (AIR) Refueling from the nearest tanker. No parameters.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskRoute}: (AIR + GROUND) Return a Misson task to follow a given route defined by Points.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskRouteToVec2}: (AIR + GROUND) Make the Group move to a given point.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskRouteToVec3}: (AIR + GROUND) Make the Group move to a given point.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskRouteToZone}: (AIR + GROUND) Route the group to a given zone.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskReturnToBase}: (AIR) Route the group to an airbase.
--
-- ### 1.2.2) EnRoute task methods
--
-- EnRoute tasks require the targets of the task need to be detected by the group (using its sensors) before the task can be executed:
--
-- * @{Wrapper.Controllable#CONTROLLABLE.EnRouteTaskAWACS}: (AIR) Aircraft will act as an AWACS for friendly units (will provide them with information about contacts). No parameters.
-- * @{Wrapper.Controllable#CONTROLLABLE.EnRouteTaskEngageGroup}: (AIR) Engaging a group. The task does not assign the target group to the unit/group to attack now; it just allows the unit/group to engage the target group as well as other assigned targets.
-- * @{Wrapper.Controllable#CONTROLLABLE.EnRouteTaskEngageTargets}: (AIR) Engaging targets of defined types.
-- * @{Wrapper.Controllable#CONTROLLABLE.EnRouteTaskEWR}: (AIR) Attack the Unit.
-- * @{Wrapper.Controllable#CONTROLLABLE.EnRouteTaskFAC}: (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose a targets (enemy ground group) around as well as other assigned targets.
-- * @{Wrapper.Controllable#CONTROLLABLE.EnRouteTaskFAC_EngageGroup}: (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose the target (enemy ground group) as well as other assigned targets.
-- * @{Wrapper.Controllable#CONTROLLABLE.EnRouteTaskTanker}: (AIR) Aircraft will act as a tanker for friendly units. No parameters.
--
-- ### 1.2.3) Preparation task methods
--
-- There are certain task methods that allow to tailor the task behaviour:
--
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskWrappedAction}: Return a WrappedAction Task taking a Command.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskCombo}: Return a Combo Task taking an array of Tasks.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskCondition}: Return a condition section for a controlled task.
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskControlled}: Return a Controlled Task taking a Task and a TaskCondition.
-- --
-- ### 1.2.4) Obtain the mission from group templates -- ### 1.2.4) Obtain the mission from group templates
-- --
@ -95,47 +38,16 @@
-- --
-- * @{Wrapper.Controllable#CONTROLLABLE.TaskMission}: (AIR + GROUND) Return a mission task from a mission template. -- * @{Wrapper.Controllable#CONTROLLABLE.TaskMission}: (AIR + GROUND) Return a mission task from a mission template.
-- --
-- 1.3) GROUP Command methods -- ## 1.3) GROUP Command methods
-- --------------------------
-- Group **command methods** prepare the execution of commands using the @{Wrapper.Controllable#CONTROLLABLE.SetCommand} method:
-- --
-- * @{Wrapper.Controllable#CONTROLLABLE.CommandDoScript}: Do Script command. -- A GROUP is a @{Controllable}. See the @{Controllable} command methods section for a description of the command methods.
-- * @{Wrapper.Controllable#CONTROLLABLE.CommandSwitchWayPoint}: Perform a switch waypoint command.
-- --
-- 1.4) GROUP Option methods -- ## 1.4) GROUP option methods
-- -------------------------
-- Group **Option methods** change the behaviour of the Group while being alive.
-- --
-- ### 1.4.1) Rule of Engagement: -- A GROUP is a @{Controllable}. See the @{Controllable} option methods section for a description of the option methods.
-- --
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROEWeaponFree} -- ## 1.5) GROUP Zone validation methods
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROEOpenFire}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROEReturnFire}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROEEvadeFire}
-- --
-- To check whether an ROE option is valid for a specific group, use:
--
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROEWeaponFreePossible}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROEOpenFirePossible}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROEReturnFirePossible}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROEEvadeFirePossible}
--
-- ### 1.4.2) Rule on thread:
--
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROTNoReaction}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROTPassiveDefense}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROTEvadeFire}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROTVertical}
--
-- To test whether an ROT option is valid for a specific group, use:
--
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROTNoReactionPossible}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROTPassiveDefensePossible}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROTEvadeFirePossible}
-- * @{Wrapper.Controllable#CONTROLLABLE.OptionROTVerticalPossible}
--
-- 1.5) GROUP Zone validation methods
-- ----------------------------------
-- The group can be validated whether it is completely, partly or not within a @{Zone}. -- The group can be validated whether it is completely, partly or not within a @{Zone}.
-- Use the following Zone validation methods on the group: -- Use the following Zone validation methods on the group:
-- --
@ -145,6 +57,14 @@
-- --
-- The zone can be of any @{Zone} class derived from @{Core.Zone#ZONE_BASE}. So, these methods are polymorphic to the zones tested on. -- The zone can be of any @{Zone} class derived from @{Core.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.
--
-- @module Group -- @module Group
-- @author FlightControl -- @author FlightControl
@ -494,7 +414,7 @@ end
-- Is Zone Functions do -- Is Zone methods
--- Returns true if all units of the group are within a @{Zone}. --- Returns true if all units of the group are within a @{Zone}.
-- @param #GROUP self -- @param #GROUP self
@ -660,6 +580,49 @@ function GROUP:AllOnGround()
return nil return nil
end end
end
do -- AI methods
--- Turns the AI On or Off for the GROUP.
-- @param #GROUP self
-- @param #boolean OnOff The value true turns the AI On, the value false turns the AI Off.
-- @return #GROUP The GROUP.
function GROUP:SetAIOnOff( OnOff )
local DCSGroup = self:GetDCSObject() -- Dcs.DCSGroup#Group
if DCSGroup then
local DCSController = DCSGroup:getController() -- Dcs.DCSController#Controller
if DCSController then
DCSController:setOnOff( OnOff )
return self
end
end
return nil
end
--- Turns the AI On for the GROUP.
-- @param #GROUP self
-- @return #GROUP The GROUP.
function GROUP:SetAIOn()
return self:SetAIOnOff( true )
end
--- Turns the AI Off for the GROUP.
-- @param #GROUP self
-- @return #GROUP The GROUP.
function GROUP:SetAIOff()
return self:SetAIOnOff( false )
end
end
--- Returns the current maximum velocity of the group. --- Returns the current maximum velocity of the group.
-- Each unit within the group gets evaluated, and the maximum velocity (= the unit which is going the fastest) is returned. -- Each unit within the group gets evaluated, and the maximum velocity (= the unit which is going the fastest) is returned.
-- @param #GROUP self -- @param #GROUP self

View File

@ -735,12 +735,6 @@ YYYY-MM-DD: CLASS:<strong>NewFunction( Params )</strong> added</p>
<h2><a id="#(FSM_PROCESS)">Type <code>FSM_PROCESS</code></a></h2> <h2><a id="#(FSM_PROCESS)">Type <code>FSM_PROCESS</code></a></h2>
<table class="function_list"> <table class="function_list">
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(FSM_PROCESS).AddScore">FSM_PROCESS:AddScore(State, ScoreText, Score)</a></td>
<td class="summary">
<p>Adds a score for the FSM_PROCESS to be achieved.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(FSM_PROCESS).Assign">FSM_PROCESS:Assign(Task, ProcessUnit)</a></td> <td class="name" nowrap="nowrap"><a href="##(FSM_PROCESS).Assign">FSM_PROCESS:Assign(Task, ProcessUnit)</a></td>
<td class="summary"> <td class="summary">
<p>Assign the process to a <a href="Unit.html">Unit</a> and activate the process.</p> <p>Assign the process to a <a href="Unit.html">Unit</a> and activate the process.</p>
@ -1488,7 +1482,7 @@ A string defining the start state.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em>#string</em> <em></em>
<a id="#(FSM)._StartState" > <a id="#(FSM)._StartState" >
<strong>FSM._StartState</strong> <strong>FSM._StartState</strong>
</a> </a>
@ -1782,6 +1776,7 @@ A string defining the start state.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(FSM).current" > <a id="#(FSM).current" >
<strong>FSM.current</strong> <strong>FSM.current</strong>
</a> </a>
@ -2000,45 +1995,6 @@ Finite State Machine Table</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(FSM_PROCESS).AddScore" >
<strong>FSM_PROCESS:AddScore(State, ScoreText, Score)</strong>
</a>
</dt>
<dd>
<p>Adds a score for the FSM_PROCESS to be achieved.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#string State </em></code>:
is the state of the process when the score needs to be given. (See the relevant state descriptions of the process).</p>
</li>
<li>
<p><code><em>#string ScoreText </em></code>:
is a text describing the score that is given according the status.</p>
</li>
<li>
<p><code><em>#number Score </em></code>:
is a number providing the score of the status.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(FSM_PROCESS)">#FSM_PROCESS</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(FSM_PROCESS).Assign" > <a id="#(FSM_PROCESS).Assign" >
<strong>FSM_PROCESS:Assign(Task, ProcessUnit)</strong> <strong>FSM_PROCESS:Assign(Task, ProcessUnit)</strong>
</a> </a>

View File

@ -105,69 +105,8 @@ If the DCS Group object does not exist or is nil, the GROUP methods will return
</ul> </ul>
<h2>1.2) GROUP task methods</h2> <h2>1.2) GROUP task methods</h2>
<p>Several group task methods are available that help you to prepare tasks.
These methods return a string consisting of the task description, which can then be given to either a <br/>
<a href="Wrapper.Controllable.html##(CONTROLLABLE).PushTask">Wrapper.Controllable#CONTROLLABLE.PushTask</a> or <a href="Wrapper.Controllable.html##(CONTROLLABLE).SetTask">Wrapper.Controllable#CONTROLLABLE.SetTask</a> method to assign the task to the GROUP.
Tasks are specific for the category of the GROUP, more specific, for AIR, GROUND or AIR and GROUND.
Each task description where applicable indicates for which group category the task is valid.
There are 2 main subdivisions of tasks: Assigned tasks and EnRoute tasks.</p>
<h3>1.2.1) Assigned task methods</h3> <p>A GROUP is a <a href="Controllable.html">Controllable</a>. See the <a href="Controllable.html">Controllable</a> task methods section for a description of the task methods.</p>
<p>Assigned task methods make the group execute the task where the location of the (possible) targets of the task are known before being detected.
This is different from the EnRoute tasks, where the targets of the task need to be detected before the task can be executed.</p>
<p>Find below a list of the <strong>assigned task</strong> methods:</p>
<ul>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskAttackGroup">Wrapper.Controllable#CONTROLLABLE.TaskAttackGroup</a>: (AIR) Attack a Group.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskAttackMapObject">Wrapper.Controllable#CONTROLLABLE.TaskAttackMapObject</a>: (AIR) Attacking the map object (building, structure, e.t.c).</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskAttackUnit">Wrapper.Controllable#CONTROLLABLE.TaskAttackUnit</a>: (AIR) Attack the Unit.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskBombing">Wrapper.Controllable#CONTROLLABLE.TaskBombing</a>: (Wrapper.Controllable#CONTROLLABLEDelivering weapon at the point on the ground.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskBombingRunway">Wrapper.Controllable#CONTROLLABLE.TaskBombingRunway</a>: (AIR) Delivering weapon on the runway.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskEmbarking">Wrapper.Controllable#CONTROLLABLE.TaskEmbarking</a>: (AIR) Move the group to a Vec2 Point, wait for a defined duration and embark a group.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskEmbarkToTransport">Wrapper.Controllable#CONTROLLABLE.TaskEmbarkToTransport</a>: (GROUND) Embark to a Transport landed at a location.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskEscort">Wrapper.Controllable#CONTROLLABLE.TaskEscort</a>: (AIR) Escort another airborne group. </li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskFAC_AttackGroup">Wrapper.Controllable#CONTROLLABLE.TaskFAC_AttackGroup</a>: (AIR + GROUND) The task makes the group/unit a FAC and orders the FAC to control the target (enemy ground group) destruction.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskFireAtPoint">Wrapper.Controllable#CONTROLLABLE.TaskFireAtPoint</a>: (GROUND) Fire at a VEC2 point until ammunition is finished.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskFollow">Wrapper.Controllable#CONTROLLABLE.TaskFollow</a>: (AIR) Following another airborne group.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskHold">Wrapper.Controllable#CONTROLLABLE.TaskHold</a>: (GROUND) Hold ground group from moving.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskHoldPosition">Wrapper.Controllable#CONTROLLABLE.TaskHoldPosition</a>: (AIR) Hold position at the current position of the first unit of the group.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskLand">Wrapper.Controllable#CONTROLLABLE.TaskLand</a>: (AIR HELICOPTER) Landing at the ground. For helicopters only.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskLandAtZone">Wrapper.Controllable#CONTROLLABLE.TaskLandAtZone</a>: (AIR) Land the group at a <a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskOrbitCircle">Wrapper.Controllable#CONTROLLABLE.TaskOrbitCircle</a>: (AIR) Orbit at the current position of the first unit of the group at a specified alititude.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskOrbitCircleAtVec2">Wrapper.Controllable#CONTROLLABLE.TaskOrbitCircleAtVec2</a>: (AIR) Orbit at a specified position at a specified alititude during a specified duration with a specified speed.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskRefueling">Wrapper.Controllable#CONTROLLABLE.TaskRefueling</a>: (AIR) Refueling from the nearest tanker. No parameters.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskRoute">Wrapper.Controllable#CONTROLLABLE.TaskRoute</a>: (AIR + GROUND) Return a Misson task to follow a given route defined by Points.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskRouteToVec2">Wrapper.Controllable#CONTROLLABLE.TaskRouteToVec2</a>: (AIR + GROUND) Make the Group move to a given point.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskRouteToVec3">Wrapper.Controllable#CONTROLLABLE.TaskRouteToVec3</a>: (AIR + GROUND) Make the Group move to a given point.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskRouteToZone">Wrapper.Controllable#CONTROLLABLE.TaskRouteToZone</a>: (AIR + GROUND) Route the group to a given zone.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskReturnToBase">Wrapper.Controllable#CONTROLLABLE.TaskReturnToBase</a>: (AIR) Route the group to an airbase.</li>
</ul>
<h3>1.2.2) EnRoute task methods</h3>
<p>EnRoute tasks require the targets of the task need to be detected by the group (using its sensors) before the task can be executed:</p>
<ul>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).EnRouteTaskAWACS">Wrapper.Controllable#CONTROLLABLE.EnRouteTaskAWACS</a>: (AIR) Aircraft will act as an AWACS for friendly units (will provide them with information about contacts). No parameters.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).EnRouteTaskEngageGroup">Wrapper.Controllable#CONTROLLABLE.EnRouteTaskEngageGroup</a>: (AIR) Engaging a group. The task does not assign the target group to the unit/group to attack now; it just allows the unit/group to engage the target group as well as other assigned targets.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).EnRouteTaskEngageTargets">Wrapper.Controllable#CONTROLLABLE.EnRouteTaskEngageTargets</a>: (AIR) Engaging targets of defined types.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).EnRouteTaskEWR">Wrapper.Controllable#CONTROLLABLE.EnRouteTaskEWR</a>: (AIR) Attack the Unit.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).EnRouteTaskFAC">Wrapper.Controllable#CONTROLLABLE.EnRouteTaskFAC</a>: (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose a targets (enemy ground group) around as well as other assigned targets.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).EnRouteTaskFAC_EngageGroup">Wrapper.Controllable#CONTROLLABLE.EnRouteTaskFAC_EngageGroup</a>: (AIR + GROUND) The task makes the group/unit a FAC and lets the FAC to choose the target (enemy ground group) as well as other assigned targets.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).EnRouteTaskTanker">Wrapper.Controllable#CONTROLLABLE.EnRouteTaskTanker</a>: (AIR) Aircraft will act as a tanker for friendly units. No parameters.</li>
</ul>
<h3>1.2.3) Preparation task methods</h3>
<p>There are certain task methods that allow to tailor the task behaviour:</p>
<ul>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskWrappedAction">Wrapper.Controllable#CONTROLLABLE.TaskWrappedAction</a>: Return a WrappedAction Task taking a Command.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskCombo">Wrapper.Controllable#CONTROLLABLE.TaskCombo</a>: Return a Combo Task taking an array of Tasks.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskCondition">Wrapper.Controllable#CONTROLLABLE.TaskCondition</a>: Return a condition section for a controlled task.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).TaskControlled">Wrapper.Controllable#CONTROLLABLE.TaskControlled</a>: Return a Controlled Task taking a Task and a TaskCondition.</li>
</ul>
<h3>1.2.4) Obtain the mission from group templates</h3> <h3>1.2.4) Obtain the mission from group templates</h3>
@ -178,53 +117,15 @@ This is different from the EnRoute tasks, where the targets of the task need to
</ul> </ul>
<h2>1.3) GROUP Command methods</h2> <h2>1.3) GROUP Command methods</h2>
<p>Group <strong>command methods</strong> prepare the execution of commands using the <a href="Wrapper.Controllable.html##(CONTROLLABLE).SetCommand">Wrapper.Controllable#CONTROLLABLE.SetCommand</a> method:</p>
<ul> <p>A GROUP is a <a href="Controllable.html">Controllable</a>. See the <a href="Controllable.html">Controllable</a> command methods section for a description of the command methods.</p>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).CommandDoScript">Wrapper.Controllable#CONTROLLABLE.CommandDoScript</a>: Do Script command.</li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).CommandSwitchWayPoint">Wrapper.Controllable#CONTROLLABLE.CommandSwitchWayPoint</a>: Perform a switch waypoint command.</li>
</ul>
<h2>1.4) GROUP Option methods</h2> <h2>1.4) GROUP option methods</h2>
<p>Group <strong>Option methods</strong> change the behaviour of the Group while being alive.</p>
<h3>1.4.1) Rule of Engagement:</h3> <p>A GROUP is a <a href="Controllable.html">Controllable</a>. See the <a href="Controllable.html">Controllable</a> option methods section for a description of the option methods.</p>
<ul>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROEWeaponFree">Wrapper.Controllable#CONTROLLABLE.OptionROEWeaponFree</a> </li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROEOpenFire">Wrapper.Controllable#CONTROLLABLE.OptionROEOpenFire</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROEReturnFire">Wrapper.Controllable#CONTROLLABLE.OptionROEReturnFire</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROEEvadeFire">Wrapper.Controllable#CONTROLLABLE.OptionROEEvadeFire</a></li>
</ul>
<p>To check whether an ROE option is valid for a specific group, use:</p>
<ul>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROEWeaponFreePossible">Wrapper.Controllable#CONTROLLABLE.OptionROEWeaponFreePossible</a> </li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROEOpenFirePossible">Wrapper.Controllable#CONTROLLABLE.OptionROEOpenFirePossible</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROEReturnFirePossible">Wrapper.Controllable#CONTROLLABLE.OptionROEReturnFirePossible</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROEEvadeFirePossible">Wrapper.Controllable#CONTROLLABLE.OptionROEEvadeFirePossible</a></li>
</ul>
<h3>1.4.2) Rule on thread:</h3>
<ul>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROTNoReaction">Wrapper.Controllable#CONTROLLABLE.OptionROTNoReaction</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROTPassiveDefense">Wrapper.Controllable#CONTROLLABLE.OptionROTPassiveDefense</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROTEvadeFire">Wrapper.Controllable#CONTROLLABLE.OptionROTEvadeFire</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROTVertical">Wrapper.Controllable#CONTROLLABLE.OptionROTVertical</a></li>
</ul>
<p>To test whether an ROT option is valid for a specific group, use:</p>
<ul>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROTNoReactionPossible">Wrapper.Controllable#CONTROLLABLE.OptionROTNoReactionPossible</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROTPassiveDefensePossible">Wrapper.Controllable#CONTROLLABLE.OptionROTPassiveDefensePossible</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROTEvadeFirePossible">Wrapper.Controllable#CONTROLLABLE.OptionROTEvadeFirePossible</a></li>
<li><a href="Wrapper.Controllable.html##(CONTROLLABLE).OptionROTVerticalPossible">Wrapper.Controllable#CONTROLLABLE.OptionROTVerticalPossible</a></li>
</ul>
<h2>1.5) GROUP Zone validation methods</h2> <h2>1.5) GROUP Zone validation methods</h2>
<p>The group can be validated whether it is completely, partly or not within a <a href="Zone.html">Zone</a>. <p>The group can be validated whether it is completely, partly or not within a <a href="Zone.html">Zone</a>.
Use the following Zone validation methods on the group:</p> Use the following Zone validation methods on the group:</p>
@ -236,6 +137,16 @@ Use the following Zone validation methods on the group:</p>
<p>The zone can be of any <a href="Zone.html">Zone</a> class derived from <a href="Core.Zone.html##(ZONE_BASE)">Core.Zone#ZONE_BASE</a>. So, these methods are polymorphic to the zones tested on.</p> <p>The zone can be of any <a href="Zone.html">Zone</a> class derived from <a href="Core.Zone.html##(ZONE_BASE)">Core.Zone#ZONE_BASE</a>. So, these methods are polymorphic to the zones tested on.</p>
<h2>1.6) GROUP AI methods</h2>
<p>A GROUP has AI methods to control the AI activation.</p>
<ul>
<li><a href="##(GROUP).SetAIOnOff">GROUP.SetAIOnOff</a>(): Turns the GROUP AI On or Off.</li>
<li><a href="##(GROUP).SetAIOn">GROUP.SetAIOn</a>(): Turns the GROUP AI On.</li>
<li><a href="##(GROUP).SetAIOff">GROUP.SetAIOff</a>(): Turns the GROUP AI Off.
</li>
</ul>
<h2>Global(s)</h2> <h2>Global(s)</h2>
<table class="function_list"> <table class="function_list">
@ -506,6 +417,24 @@ Use the following Zone validation methods on the group:</p>
<td class="name" nowrap="nowrap"><a href="##(GROUP).Respawn">GROUP:Respawn(Template)</a></td> <td class="name" nowrap="nowrap"><a href="##(GROUP).Respawn">GROUP:Respawn(Template)</a></td>
<td class="summary"> <td class="summary">
<p>Respawn the <a href="GROUP.html">GROUP</a> using a (tweaked) template of the Group.</p> <p>Respawn the <a href="GROUP.html">GROUP</a> using a (tweaked) template of the Group.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(GROUP).SetAIOff">GROUP:SetAIOff()</a></td>
<td class="summary">
<p>Turns the AI Off for the GROUP.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(GROUP).SetAIOn">GROUP:SetAIOn()</a></td>
<td class="summary">
<p>Turns the AI On for the GROUP.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(GROUP).SetAIOnOff">GROUP:SetAIOnOff(OnOff)</a></td>
<td class="summary">
<p>Turns the AI On or Off for the GROUP.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -1493,6 +1422,69 @@ The template of the Group retrieved with GROUP:GetTemplate()</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(GROUP).SetAIOff" >
<strong>GROUP:SetAIOff()</strong>
</a>
</dt>
<dd>
<p>Turns the AI Off for the GROUP.</p>
<h3>Return value</h3>
<p><em><a href="##(GROUP)">#GROUP</a>:</em>
The GROUP.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(GROUP).SetAIOn" >
<strong>GROUP:SetAIOn()</strong>
</a>
</dt>
<dd>
<p>Turns the AI On for the GROUP.</p>
<h3>Return value</h3>
<p><em><a href="##(GROUP)">#GROUP</a>:</em>
The GROUP.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(GROUP).SetAIOnOff" >
<strong>GROUP:SetAIOnOff(OnOff)</strong>
</a>
</dt>
<dd>
<p>Turns the AI On or Off for the GROUP.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean OnOff </em></code>:
The value true turns the AI On, the value false turns the AI Off.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(GROUP)">#GROUP</a>:</em>
The GROUP.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(GROUP).SetTemplateCoalition" > <a id="#(GROUP).SetTemplateCoalition" >
<strong>GROUP:SetTemplateCoalition(CoalitionID, Template)</strong> <strong>GROUP:SetTemplateCoalition(CoalitionID, Template)</strong>
</a> </a>

View File

@ -128,6 +128,9 @@ So in principle, the group list will contain all parameters and configurations a
<li><a href="##(SPAWN).InitRepeat">SPAWN.InitRepeat</a>(): Re-spawn groups when they land at the home base. Similar methods are <a href="##(SPAWN).InitRepeatOnLanding">SPAWN.InitRepeatOnLanding</a> and <a href="##(SPAWN).InitRepeatOnEngineShutDown">SPAWN.InitRepeatOnEngineShutDown</a>.</li> <li><a href="##(SPAWN).InitRepeat">SPAWN.InitRepeat</a>(): Re-spawn groups when they land at the home base. Similar methods are <a href="##(SPAWN).InitRepeatOnLanding">SPAWN.InitRepeatOnLanding</a> and <a href="##(SPAWN).InitRepeatOnEngineShutDown">SPAWN.InitRepeatOnEngineShutDown</a>.</li>
<li><a href="##(SPAWN).InitRandomizeUnits">SPAWN.InitRandomizeUnits</a>(): Randomizes the <a href="Unit.html">Unit</a>s in the <a href="Group.html">Group</a> that is spawned within a <strong>radius band</strong>, given an Outer and Inner radius.</li> <li><a href="##(SPAWN).InitRandomizeUnits">SPAWN.InitRandomizeUnits</a>(): Randomizes the <a href="Unit.html">Unit</a>s in the <a href="Group.html">Group</a> that is spawned within a <strong>radius band</strong>, given an Outer and Inner radius.</li>
<li><a href="##(SPAWN).InitRandomizeZones">SPAWN.InitRandomizeZones</a>(): Randomizes the spawning between a predefined list of <a href="Zone.html">Zone</a>s that are declared using this function. Each zone can be given a probability factor.</li> <li><a href="##(SPAWN).InitRandomizeZones">SPAWN.InitRandomizeZones</a>(): Randomizes the spawning between a predefined list of <a href="Zone.html">Zone</a>s that are declared using this function. Each zone can be given a probability factor.</li>
<li><a href="##(SPAWN).InitAIOn">SPAWN.InitAIOn</a>(): Turns the AI On when spawning the new <a href="Group.html">Group</a> object.</li>
<li><a href="##(SPAWN).InitAIOff">SPAWN.InitAIOff</a>(): Turns the AI Off when spawning the new <a href="Group.html">Group</a> object.</li>
<li><a href="##(SPAWN).InitAIOnOff">SPAWN.InitAIOnOff</a>(): Turns the AI On or Off when spawning the new <a href="Group.html">Group</a> object.</li>
</ul> </ul>
<h2>1.3) SPAWN spawning methods</h2> <h2>1.3) SPAWN spawning methods</h2>
@ -317,6 +320,12 @@ A coding example is provided at the description of the <a href="##(SPAWN).OnSpaw
<h2><a id="#(SPAWN)">Type <code>SPAWN</code></a></h2> <h2><a id="#(SPAWN)">Type <code>SPAWN</code></a></h2>
<table class="function_list"> <table class="function_list">
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).AIOnOff">SPAWN.AIOnOff</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).AliveUnits">SPAWN.AliveUnits</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).AliveUnits">SPAWN.AliveUnits</a></td>
<td class="summary"> <td class="summary">
@ -362,6 +371,24 @@ A coding example is provided at the description of the <a href="##(SPAWN).OnSpaw
<td class="name" nowrap="nowrap"><a href="##(SPAWN).GetSpawnIndexFromGroup">SPAWN:GetSpawnIndexFromGroup(SpawnGroup)</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).GetSpawnIndexFromGroup">SPAWN:GetSpawnIndexFromGroup(SpawnGroup)</a></td>
<td class="summary"> <td class="summary">
<p>Get the index from a given group.</p> <p>Get the index from a given group.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).InitAIOff">SPAWN:InitAIOff()</a></td>
<td class="summary">
<p>Turns the AI Off for the <a href="Group.html">Group</a> when spawning.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).InitAIOn">SPAWN:InitAIOn()</a></td>
<td class="summary">
<p>Turns the AI On for the <a href="Group.html">Group</a> when spawning.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).InitAIOnOff">SPAWN:InitAIOnOff(AIOnOff)</a></td>
<td class="summary">
<p>Turns the AI On or Off for the <a href="Group.html">Group</a> when spawning.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -883,6 +910,23 @@ A coding example is provided at the description of the <a href="##(SPAWN).OnSpaw
<dl class="function"> <dl class="function">
<dt> <dt>
<em>#boolean</em>
<a id="#(SPAWN).AIOnOff" >
<strong>SPAWN.AIOnOff</strong>
</a>
</dt>
<dd>
<p> The AI is on by default when spawning a group.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em>#number</em> <em>#number</em>
<a id="#(SPAWN).AliveUnits" > <a id="#(SPAWN).AliveUnits" >
<strong>SPAWN.AliveUnits</strong> <strong>SPAWN.AliveUnits</strong>
@ -1098,6 +1142,68 @@ end</code></pre>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(SPAWN).InitAIOff" >
<strong>SPAWN:InitAIOff()</strong>
</a>
</dt>
<dd>
<p>Turns the AI Off for the <a href="Group.html">Group</a> when spawning.</p>
<h3>Return value</h3>
<p><em><a href="##(SPAWN)">#SPAWN</a>:</em>
The SPAWN object</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).InitAIOn" >
<strong>SPAWN:InitAIOn()</strong>
</a>
</dt>
<dd>
<p>Turns the AI On for the <a href="Group.html">Group</a> when spawning.</p>
<h3>Return value</h3>
<p><em><a href="##(SPAWN)">#SPAWN</a>:</em>
The SPAWN object</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).InitAIOnOff" >
<strong>SPAWN:InitAIOnOff(AIOnOff)</strong>
</a>
</dt>
<dd>
<p>Turns the AI On or Off for the <a href="Group.html">Group</a> when spawning.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean AIOnOff </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(SPAWN)">#SPAWN</a>:</em>
The SPAWN object</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).InitArray" > <a id="#(SPAWN).InitArray" >
<strong>SPAWN:InitArray(SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY)</strong> <strong>SPAWN:InitArray(SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY)</strong>
</a> </a>
@ -2171,7 +2277,7 @@ when nothing was spawned.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em>#number</em> <em></em>
<a id="#(SPAWN).SpawnMaxGroups" > <a id="#(SPAWN).SpawnMaxGroups" >
<strong>SPAWN.SpawnMaxGroups</strong> <strong>SPAWN.SpawnMaxGroups</strong>
</a> </a>
@ -2188,7 +2294,7 @@ when nothing was spawned.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em>#number</em> <em></em>
<a id="#(SPAWN).SpawnMaxUnitsAlive" > <a id="#(SPAWN).SpawnMaxUnitsAlive" >
<strong>SPAWN.SpawnMaxUnitsAlive</strong> <strong>SPAWN.SpawnMaxUnitsAlive</strong>
</a> </a>