Merge remote-tracking branch 'refs/remotes/origin/master' into Bugfix

This commit is contained in:
FlightControl 2016-05-20 11:14:41 +02:00
commit c50f98b8dd
77 changed files with 6682 additions and 2878 deletions

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li>CARGO</li> <li>CARGO</li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -213,6 +201,8 @@
</dl> </dl>
<h2><a id="#(CARGO)" >Type <code>CARGO</code></a></h2> <h2><a id="#(CARGO)" >Type <code>CARGO</code></a></h2>
<h2><a id="#(CARGO_ZONE)" >Type <code>CARGO_ZONE</code></a></h2>
</div> </div>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li>CleanUp</li> <li>CleanUp</li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li>Client</li> <li>Client</li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -68,8 +56,20 @@
<p>The CLIENT models client units in multi player missions.</p> <p>The CLIENT models client units in multi player missions.</p>
<p>Clients are those groups defined within the Mission Editor that have the skillset defined as "Client" or "Player".
Note that clients are NOT the same as groups, they are NOT necessarily alive. </p> <h1><a href="##(CLIENT)">#CLIENT</a> class</h1>
<p>Clients are those <strong>Units</strong> defined within the Mission Editor that have the skillset defined as <strong>Client</strong> or <strong>Player</strong>.
Note that clients are NOT the same as Units, they are NOT necessarily alive.</p>
<p>Clients are being used by the <a href="MISSION.html">MISSION</a> class to follow players and register their successes.</p>
<h1>CLIENT construction methods:</h1>
<p>Create a new CLIENT object with the <a href="##(CLIENT).New">CLIENT.New</a> method:</p>
<ul>
<li><a href="##(CLIENT).New">CLIENT.New</a>: Creates a new CLIENT object taking the name of the <strong>DCSUnit</strong> that is a client as defined within the mission editor.
</li>
</ul>
<h2>Global(s)</h2> <h2>Global(s)</h2>
<table class="function_list"> <table class="function_list">
@ -77,12 +77,6 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive. </
<td class="name" nowrap="nowrap"><a href="#CLIENT">CLIENT</a></td> <td class="name" nowrap="nowrap"><a href="#CLIENT">CLIENT</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="#ClientGroupUnit">ClientGroupUnit</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
</table> </table>
@ -158,12 +152,6 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive. </
<td class="name" nowrap="nowrap"><a href="##(CLIENT).ClientGroupUnit">CLIENT.ClientGroupUnit</a></td> <td class="name" nowrap="nowrap"><a href="##(CLIENT).ClientGroupUnit">CLIENT.ClientGroupUnit</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(CLIENT).ClientID">CLIENT.ClientID</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -224,12 +212,36 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive. </
<td class="name" nowrap="nowrap"><a href="##(CLIENT).GetDCSGroup">CLIENT:GetDCSGroup()</a></td> <td class="name" nowrap="nowrap"><a href="##(CLIENT).GetDCSGroup">CLIENT:GetDCSGroup()</a></td>
<td class="summary"> <td class="summary">
<p>Return the DCSGroup of a Client.</p> <p>Return the DCSGroup of a Client.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(CLIENT).GetID">CLIENT:GetID()</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(CLIENT).GetName">CLIENT:GetName()</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(CLIENT).GetPointVec2">CLIENT:GetPointVec2()</a></td> <td class="name" nowrap="nowrap"><a href="##(CLIENT).GetPointVec2">CLIENT:GetPointVec2()</a></td>
<td class="summary"> <td class="summary">
<p>Returns the position of the CLIENT in <a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a> format..</p> <p>Returns the position of the CLIENT in <a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a> format..</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(CLIENT).GetPositionVec3">CLIENT:GetPositionVec3()</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(CLIENT).GetTypeName">CLIENT:GetTypeName()</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -289,7 +301,7 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive. </
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(CLIENT).New">CLIENT:New(ClientName, ClientBriefing)</a></td> <td class="name" nowrap="nowrap"><a href="##(CLIENT).New">CLIENT:New(ClientName, ClientBriefing)</a></td>
<td class="summary"> <td class="summary">
<p>Use this method to register new Clients within the MOF.</p> <p>Use this method to register new Clients within a mission.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -355,20 +367,6 @@ Note that clients are NOT the same as groups, they are NOT necessarily alive. </
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="ClientGroupUnit" >
<strong>ClientGroupUnit</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<h2><a id="#(Client)" >Type <code>Client</code></a></h2> <h2><a id="#(Client)" >Type <code>Client</code></a></h2>
@ -538,6 +536,7 @@ Function.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(CLIENT).ClientGroupID" > <a id="#(CLIENT).ClientGroupID" >
<strong>CLIENT.ClientGroupID</strong> <strong>CLIENT.ClientGroupID</strong>
</a> </a>
@ -565,7 +564,6 @@ Function.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(CLIENT).ClientGroupUnit" > <a id="#(CLIENT).ClientGroupUnit" >
<strong>CLIENT.ClientGroupUnit</strong> <strong>CLIENT.ClientGroupUnit</strong>
</a> </a>
@ -574,20 +572,6 @@ Function.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(CLIENT).ClientID" >
<strong>CLIENT.ClientID</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -759,6 +743,32 @@ Function.</p>
<p><em><a href="DCSGroup.html##(Group)">DCSGroup#Group</a>:</em></p> <p><em><a href="DCSGroup.html##(Group)">DCSGroup#Group</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(CLIENT).GetID" >
<strong>CLIENT:GetID()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(CLIENT).GetName" >
<strong>CLIENT:GetName()</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -777,6 +787,32 @@ Function.</p>
<p><em><a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>:</em></p> <p><em><a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(CLIENT).GetPositionVec3" >
<strong>CLIENT:GetPositionVec3()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(CLIENT).GetTypeName" >
<strong>CLIENT:GetTypeName()</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -958,14 +994,14 @@ is the interval in seconds between the display of the <a href="Message.html##(ME
</dt> </dt>
<dd> <dd>
<p>Use this method to register new Clients within the MOF.</p> <p>Use this method to register new Clients within a mission.</p>
<h3>Parameters</h3> <h3>Parameters</h3>
<ul> <ul>
<li> <li>
<p><code><em>#string ClientName </em></code>: <p><code><em>#string ClientName </em></code>:
Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client.</p> Name of the DCS <strong>Unit</strong> as defined within the Mission Editor.</p>
</li> </li>
<li> <li>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li>DEPLOYTASK</li> <li>DEPLOYTASK</li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li>DESTROYBASETASK</li> <li>DESTROYBASETASK</li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li>DESTROYGROUPSTASK</li> <li>DESTROYGROUPSTASK</li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -151,25 +139,19 @@ The following iterator methods are currently available within the DATABASE:</p>
<h2><a id="#(DATABASE)">Type <code>DATABASE</code></a></h2> <h2><a id="#(DATABASE)">Type <code>DATABASE</code></a></h2>
<table class="function_list"> <table class="function_list">
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).AlivePlayers">DATABASE.AlivePlayers</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ClassName">DATABASE.ClassName</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE).ClassName">DATABASE.ClassName</a></td>
<td class="summary"> <td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ClientsByID">DATABASE.ClientsByID</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE).Clients">DATABASE.Clients</a></td>
<td class="summary"> <td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ClientsByName">DATABASE.ClientsByName</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE).ClientsAlive">DATABASE.ClientsAlive</a></td>
<td class="summary"> <td class="summary">
</td> </td>
@ -253,9 +235,27 @@ The following iterator methods are currently available within the DATABASE:</p>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ForEachAliveUnit">DATABASE:ForEachAliveUnit(IteratorFunction, ...)</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE).ForEach">DATABASE:ForEach(IteratorFunction, arg, Set)</a></td>
<td class="summary">
<p>Interate the DATABASE and call an interator function for the given set, providing the Object for each element within the set and optional parameters.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ForEachClient">DATABASE:ForEachClient(IteratorFunction, ...)</a></td>
<td class="summary">
<p>Interate the DATABASE and call an interator function for each client, providing the Client to the function and optional parameters.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ForEachDCSUnitAlive">DATABASE:ForEachDCSUnitAlive(IteratorFunction, ...)</a></td>
<td class="summary"> <td class="summary">
<p>Interate the DATABASE and call an interator function for each <strong>alive</strong> unit, providing the Unit and optional parameters.</p> <p>Interate the DATABASE and call an interator function for each <strong>alive</strong> unit, providing the Unit and optional parameters.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ForEachPlayer">DATABASE:ForEachPlayer(IteratorFunction, ...)</a></td>
<td class="summary">
<p>Interate the DATABASE and call an interator function for each <strong>alive</strong> player, providing the Unit of the player and optional parameters.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -268,6 +268,12 @@ The following iterator methods are currently available within the DATABASE:</p>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).Groups">DATABASE.Groups</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE).Groups">DATABASE.Groups</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).GroupsAlive">DATABASE.GroupsAlive</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -286,6 +292,12 @@ The following iterator methods are currently available within the DATABASE:</p>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).Players">DATABASE.Players</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE).Players">DATABASE.Players</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).PlayersAlive">DATABASE.PlayersAlive</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -310,6 +322,12 @@ The following iterator methods are currently available within the DATABASE:</p>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).Statics">DATABASE.Statics</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE).Statics">DATABASE.Statics</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).Templates">DATABASE.Templates</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -322,6 +340,12 @@ The following iterator methods are currently available within the DATABASE:</p>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).Units">DATABASE.Units</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE).Units">DATABASE.Units</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE).UnitsAlive">DATABASE.UnitsAlive</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -334,6 +358,24 @@ The following iterator methods are currently available within the DATABASE:</p>
<td class="name" nowrap="nowrap"><a href="##(DATABASE)._EventOnDeadOrCrash">DATABASE:_EventOnDeadOrCrash(Event)</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE)._EventOnDeadOrCrash">DATABASE:_EventOnDeadOrCrash(Event)</a></td>
<td class="summary"> <td class="summary">
<p>Handles the OnDead or OnCrash event for alive units set.</p> <p>Handles the OnDead or OnCrash event for alive units set.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE)._EventOnPlayerEnterUnit">DATABASE:_EventOnPlayerEnterUnit(Event)</a></td>
<td class="summary">
<p>Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied).</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE)._EventOnPlayerLeaveUnit">DATABASE:_EventOnPlayerLeaveUnit(Event)</a></td>
<td class="summary">
<p>Handles the OnPlayerLeaveUnit event to clean the active players table.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE)._IsAliveDCSGroup">DATABASE:_IsAliveDCSGroup(DCSGroup)</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -346,12 +388,24 @@ The following iterator methods are currently available within the DATABASE:</p>
<td class="name" nowrap="nowrap"><a href="##(DATABASE)._IsIncludeDCSUnit">DATABASE:_IsIncludeDCSUnit(DCSUnit)</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE)._IsIncludeDCSUnit">DATABASE:_IsIncludeDCSUnit(DCSUnit)</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE)._RegisterDatabase">DATABASE:_RegisterDatabase()</a></td>
<td class="summary">
<p>Private method that registers all datapoints within in the mission.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE)._RegisterGroup">DATABASE:_RegisterGroup(GroupTemplate)</a></td> <td class="name" nowrap="nowrap"><a href="##(DATABASE)._RegisterGroup">DATABASE:_RegisterGroup(GroupTemplate)</a></td>
<td class="summary"> <td class="summary">
<p>Registers new Group Templates within the DATABASE Object.</p> <p>Private method that registers new Group Templates within the DATABASE Object.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DATABASE)._RegisterPlayers">DATABASE:_RegisterPlayers()</a></td>
<td class="summary">
<p>Private method that registers all alive players in the mission.</p>
</td> </td>
</tr> </tr>
</table> </table>
@ -381,20 +435,6 @@ The following iterator methods are currently available within the DATABASE:</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(DATABASE).AlivePlayers" >
<strong>DATABASE.AlivePlayers</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em> <em>#string</em>
<a id="#(DATABASE).ClassName" > <a id="#(DATABASE).ClassName" >
<strong>DATABASE.ClassName</strong> <strong>DATABASE.ClassName</strong>
@ -410,8 +450,8 @@ The following iterator methods are currently available within the DATABASE:</p>
<dt> <dt>
<em></em> <em></em>
<a id="#(DATABASE).ClientsByID" > <a id="#(DATABASE).Clients" >
<strong>DATABASE.ClientsByID</strong> <strong>DATABASE.Clients</strong>
</a> </a>
</dt> </dt>
<dd> <dd>
@ -424,8 +464,8 @@ The following iterator methods are currently available within the DATABASE:</p>
<dt> <dt>
<em></em> <em></em>
<a id="#(DATABASE).ClientsByName" > <a id="#(DATABASE).ClientsAlive" >
<strong>DATABASE.ClientsByName</strong> <strong>DATABASE.ClientsAlive</strong>
</a> </a>
</dt> </dt>
<dd> <dd>
@ -719,8 +759,77 @@ self</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(DATABASE).ForEachAliveUnit" > <a id="#(DATABASE).ForEach" >
<strong>DATABASE:ForEachAliveUnit(IteratorFunction, ...)</strong> <strong>DATABASE:ForEach(IteratorFunction, arg, Set)</strong>
</a>
</dt>
<dd>
<p>Interate the DATABASE and call an interator function for the given set, providing the Object for each element within the set and optional parameters.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#function IteratorFunction </em></code>:
The function that will be called when there is an alive player in the database.</p>
</li>
<li>
<p><code><em> arg </em></code>: </p>
</li>
<li>
<p><code><em> Set </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DATABASE).ForEachClient" >
<strong>DATABASE:ForEachClient(IteratorFunction, ...)</strong>
</a>
</dt>
<dd>
<p>Interate the DATABASE and call an interator function for each client, providing the Client to the function and optional parameters.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#function IteratorFunction </em></code>:
The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter.</p>
</li>
<li>
<p><code><em> ... </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DATABASE).ForEachDCSUnitAlive" >
<strong>DATABASE:ForEachDCSUnitAlive(IteratorFunction, ...)</strong>
</a> </a>
</dt> </dt>
<dd> <dd>
@ -751,6 +860,38 @@ self</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(DATABASE).ForEachPlayer" >
<strong>DATABASE:ForEachPlayer(IteratorFunction, ...)</strong>
</a>
</dt>
<dd>
<p>Interate the DATABASE and call an interator function for each <strong>alive</strong> player, providing the Unit of the player and optional parameters.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#function IteratorFunction </em></code>:
The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter.</p>
</li>
<li>
<p><code><em> ... </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DATABASE).GetStatusGroup" > <a id="#(DATABASE).GetStatusGroup" >
<strong>DATABASE:GetStatusGroup(GroupName)</strong> <strong>DATABASE:GetStatusGroup(GroupName)</strong>
</a> </a>
@ -781,6 +922,20 @@ self</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(DATABASE).GroupsAlive" >
<strong>DATABASE.GroupsAlive</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -831,6 +986,20 @@ DBObject = DATABASE:New()</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(DATABASE).PlayersAlive" >
<strong>DATABASE.PlayersAlive</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -892,10 +1061,15 @@ This method is used by the SPAWN class.</p>
<ul> <ul>
<li> <li>
<p><code><em> SpawnTemplate </em></code>: </p> <p><code><em>#table SpawnTemplate </em></code>: </p>
</li> </li>
</ul> </ul>
<h3>Return value</h3>
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
self</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -910,6 +1084,20 @@ This method is used by the SPAWN class.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(DATABASE).Templates" >
<strong>DATABASE.Templates</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -945,6 +1133,20 @@ self</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(DATABASE).UnitsAlive" >
<strong>DATABASE.UnitsAlive</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -992,6 +1194,74 @@ self</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(DATABASE)._EventOnPlayerEnterUnit" >
<strong>DATABASE:_EventOnPlayerEnterUnit(Event)</strong>
</a>
</dt>
<dd>
<p>Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied).</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="Event.html##(EVENTDATA)">Event#EVENTDATA</a> Event </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DATABASE)._EventOnPlayerLeaveUnit" >
<strong>DATABASE:_EventOnPlayerLeaveUnit(Event)</strong>
</a>
</dt>
<dd>
<p>Handles the OnPlayerLeaveUnit event to clean the active players table.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="Event.html##(EVENTDATA)">Event#EVENTDATA</a> Event </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DATABASE)._IsAliveDCSGroup" >
<strong>DATABASE:_IsAliveDCSGroup(DCSGroup)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="DCSGroup.html##(Group)">DCSGroup#Group</a> DCSGroup </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DATABASE)._IsAliveDCSUnit" > <a id="#(DATABASE)._IsAliveDCSUnit" >
<strong>DATABASE:_IsAliveDCSUnit(DCSUnit)</strong> <strong>DATABASE:_IsAliveDCSUnit(DCSUnit)</strong>
</a> </a>
@ -1044,22 +1314,63 @@ self</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(DATABASE)._RegisterDatabase" >
<strong>DATABASE:_RegisterDatabase()</strong>
</a>
</dt>
<dd>
<p>Private method that registers all datapoints within in the mission.</p>
<h3>Return value</h3>
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DATABASE)._RegisterGroup" > <a id="#(DATABASE)._RegisterGroup" >
<strong>DATABASE:_RegisterGroup(GroupTemplate)</strong> <strong>DATABASE:_RegisterGroup(GroupTemplate)</strong>
</a> </a>
</dt> </dt>
<dd> <dd>
<p>Registers new Group Templates within the DATABASE Object.</p> <p>Private method that registers new Group Templates within the DATABASE Object.</p>
<h3>Parameter</h3> <h3>Parameter</h3>
<ul> <ul>
<li> <li>
<p><code><em> GroupTemplate </em></code>: </p> <p><code><em>#table GroupTemplate </em></code>: </p>
</li> </li>
</ul> </ul>
<h3>Return value</h3>
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(DATABASE)._RegisterPlayers" >
<strong>DATABASE:_RegisterPlayers()</strong>
</a>
</dt>
<dd>
<p>Private method that registers all alive players in the mission.</p>
<h3>Return value</h3>
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
self</p>
</dd> </dd>
</dl> </dl>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -1847,7 +1835,6 @@ self</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(ESCORT).ReportTargetsScheduler" > <a id="#(ESCORT).ReportTargetsScheduler" >
<strong>ESCORT.ReportTargetsScheduler</strong> <strong>ESCORT.ReportTargetsScheduler</strong>
</a> </a>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -232,6 +220,18 @@
<td class="name" nowrap="nowrap"><a href="##(EVENT).OnPilotDeadForUnit">EVENT:OnPilotDeadForUnit(EventDCSUnitName, EventFunction, EventSelf)</a></td> <td class="name" nowrap="nowrap"><a href="##(EVENT).OnPilotDeadForUnit">EVENT:OnPilotDeadForUnit(EventDCSUnitName, EventFunction, EventSelf)</a></td>
<td class="summary"> <td class="summary">
<p>Set a new listener for an S<em>EVENT</em>PILOT_DEAD event.</p> <p>Set a new listener for an S<em>EVENT</em>PILOT_DEAD event.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENT).OnPlayerEnterUnit">EVENT:OnPlayerEnterUnit(EventFunction, EventSelf)</a></td>
<td class="summary">
<p>Set a new listener for an S<em>EVENT</em>PLAYER<em>ENTER</em>UNIT event.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(EVENT).OnPlayerLeaveUnit">EVENT:OnPlayerLeaveUnit(EventFunction, EventSelf)</a></td>
<td class="summary">
<p>Set a new listener for an S<em>EVENT</em>PLAYER<em>LEAVE</em>UNIT event.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -1259,6 +1259,72 @@ The self instance of the class for which the event is.</p>
<p><em><a href="##(EVENT)">#EVENT</a>:</em></p> <p><em><a href="##(EVENT)">#EVENT</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(EVENT).OnPlayerEnterUnit" >
<strong>EVENT:OnPlayerEnterUnit(EventFunction, EventSelf)</strong>
</a>
</dt>
<dd>
<p>Set a new listener for an S<em>EVENT</em>PLAYER<em>ENTER</em>UNIT event.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#function EventFunction </em></code>:
The function to be called when the event occurs for the unit.</p>
</li>
<li>
<p><code><em><a href="Base.html##(BASE)">Base#BASE</a> EventSelf </em></code>:
The self instance of the class for which the event is.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(EVENT)">#EVENT</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(EVENT).OnPlayerLeaveUnit" >
<strong>EVENT:OnPlayerLeaveUnit(EventFunction, EventSelf)</strong>
</a>
</dt>
<dd>
<p>Set a new listener for an S<em>EVENT</em>PLAYER<em>LEAVE</em>UNIT event.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#function EventFunction </em></code>:
The function to be called when the event occurs for the unit.</p>
</li>
<li>
<p><code><em><a href="Base.html##(BASE)">Base#BASE</a> EventSelf </em></code>:
The self instance of the class for which the event is.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(EVENT)">#EVENT</a>:</em></p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -113,6 +101,12 @@
<td class="name" nowrap="nowrap"><a href="##(GROUP).CommandDoScript">GROUP:CommandDoScript(DoScript)</a></td> <td class="name" nowrap="nowrap"><a href="##(GROUP).CommandDoScript">GROUP:CommandDoScript(DoScript)</a></td>
<td class="summary"> <td class="summary">
<p>Do Script command</p> <p>Do Script command</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(GROUP).CommandSwitchWayPoint">GROUP:CommandSwitchWayPoint(FromWayPoint, ToWayPoint, Index)</a></td>
<td class="summary">
<p>Perform a switch waypoint command</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -209,7 +203,7 @@ Note that this destroy method also raises a destroy event at run-time.</p>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(GROUP).GetName">GROUP:GetName()</a></td> <td class="name" nowrap="nowrap"><a href="##(GROUP).GetName">GROUP:GetName()</a></td>
<td class="summary"> <td class="summary">
<p>Gets the name of the GROUP.</p> <p>Returns the name of the Group.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -462,12 +456,24 @@ Note that this destroy method also raises a destroy event at run-time.</p>
<td class="name" nowrap="nowrap"><a href="##(GROUP).Route">GROUP:Route(GoPoints)</a></td> <td class="name" nowrap="nowrap"><a href="##(GROUP).Route">GROUP:Route(GoPoints)</a></td>
<td class="summary"> <td class="summary">
<p>Make the group to follow a given route.</p> <p>Make the group to follow a given route.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(GROUP).SetCommand">GROUP:SetCommand(DCSCommand)</a></td>
<td class="summary">
<p>Executes a command action</p>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(GROUP).SetTask">GROUP:SetTask(DCSTask, WaitTime)</a></td> <td class="name" nowrap="nowrap"><a href="##(GROUP).SetTask">GROUP:SetTask(DCSTask, WaitTime)</a></td>
<td class="summary"> <td class="summary">
<p>Clearing the Task Queue and Setting the Task on the queue from the group.</p> <p>Clearing the Task Queue and Setting the Task on the queue from the group.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(GROUP).TaskAttackGroup">GROUP:TaskAttackGroup(AttackGroup)</a></td>
<td class="summary">
<p>Attack a Group.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -751,6 +757,42 @@ All units on the ground result.</p>
<p><em><a href="##(DCSCommand)">#DCSCommand</a>:</em></p> <p><em><a href="##(DCSCommand)">#DCSCommand</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(GROUP).CommandSwitchWayPoint" >
<strong>GROUP:CommandSwitchWayPoint(FromWayPoint, ToWayPoint, Index)</strong>
</a>
</dt>
<dd>
<p>Perform a switch waypoint command</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#number FromWayPoint </em></code>: </p>
</li>
<li>
<p><code><em>#number ToWayPoint </em></code>: </p>
</li>
<li>
<p><code><em> Index </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="DCSTask.html##(Task)">DCSTask#Task</a>:</em></p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -1075,12 +1117,12 @@ Minimum height found.</p>
</dt> </dt>
<dd> <dd>
<p>Gets the name of the GROUP.</p> <p>Returns the name of the Group.</p>
<h3>Return value</h3> <h3>Return value</h3>
<p><em>#string:</em> <p><em>#string:</em>
The name of the GROUP.</p> GroupName</p>
</dd> </dd>
</dl> </dl>
@ -1975,6 +2017,32 @@ self </p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(GROUP).SetCommand" >
<strong>GROUP:SetCommand(DCSCommand)</strong>
</a>
</dt>
<dd>
<p>Executes a command action</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="DCSCommand.html##(Command)">DCSCommand#Command</a> DCSCommand </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(GROUP)">#GROUP</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(GROUP).SetTask" > <a id="#(GROUP).SetTask" >
<strong>GROUP:SetTask(DCSTask, WaitTime)</strong> <strong>GROUP:SetTask(DCSTask, WaitTime)</strong>
</a> </a>
@ -2006,6 +2074,33 @@ self</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(GROUP).TaskAttackGroup" >
<strong>GROUP:TaskAttackGroup(AttackGroup)</strong>
</a>
</dt>
<dd>
<p>Attack a Group.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="Group.html##(GROUP)">Group#GROUP</a> AttackGroup </em></code>:
The Group to be attacked.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="DCSTask.html##(Task)">DCSTask#Task</a>:</em>
The DCS task structure.</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(GROUP).TaskAttackUnit" > <a id="#(GROUP).TaskAttackUnit" >
<strong>GROUP:TaskAttackUnit(The, AttackUnit)</strong> <strong>GROUP:TaskAttackUnit(The, AttackUnit)</strong>
</a> </a>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li>MOVEMENT</li> <li>MOVEMENT</li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li>Menu</li> <li>Menu</li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -91,6 +79,18 @@
<td class="name" nowrap="nowrap"><a href="#MENU_CLIENT_COMMAND">MENU_CLIENT_COMMAND</a></td> <td class="name" nowrap="nowrap"><a href="#MENU_CLIENT_COMMAND">MENU_CLIENT_COMMAND</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="#MENU_COALITION">MENU_COALITION</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="#MENU_COALITION_COMMAND">MENU_COALITION_COMMAND</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -208,6 +208,56 @@
<td class="name" nowrap="nowrap"><a href="##(MENU_CLIENT_COMMAND).Remove">MENU_CLIENT_COMMAND:Remove()</a></td> <td class="name" nowrap="nowrap"><a href="##(MENU_CLIENT_COMMAND).Remove">MENU_CLIENT_COMMAND:Remove()</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
</table>
<h2><a id="#(MENU_COALITION)">Type <code>MENU_COALITION</code></a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="##(MENU_COALITION).ClassName">MENU_COALITION.ClassName</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MENU_COALITION).New">MENU_COALITION:New(MenuCoalition, MenuText, ParentMenu)</a></td>
<td class="summary">
<p>Creates a new coalition menu item</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MENU_COALITION).Remove">MENU_COALITION:Remove()</a></td>
<td class="summary">
<p>Removes the sub menus recursively of this MENU_COALITION.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MENU_COALITION).RemoveSubMenus">MENU_COALITION:RemoveSubMenus()</a></td>
<td class="summary">
<p>Removes the sub menus recursively of this MENU_COALITION.</p>
</td>
</tr>
</table>
<h2><a id="#(MENU_COALITION_COMMAND)">Type <code>MENU_COALITION_COMMAND</code></a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="##(MENU_COALITION_COMMAND).ClassName">MENU_COALITION_COMMAND.ClassName</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MENU_COALITION_COMMAND).New">MENU_COALITION_COMMAND:New(MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument)</a></td>
<td class="summary">
<p>Creates a new radio command item for a group</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MENU_COALITION_COMMAND).Remove">MENU_COALITION_COMMAND:Remove()</a></td>
<td class="summary">
<p>Removes a radio command item for a coalition</p>
</td> </td>
</tr> </tr>
</table> </table>
@ -283,6 +333,34 @@
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="##(MENU_COALITION)">#MENU_COALITION</a></em>
<a id="MENU_COALITION" >
<strong>MENU_COALITION</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em><a href="##(MENU_COALITION_COMMAND)">#MENU_COALITION_COMMAND</a></em>
<a id="MENU_COALITION_COMMAND" >
<strong>MENU_COALITION_COMMAND</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -645,6 +723,190 @@ self</p>
</dd>
</dl>
<h2><a id="#(MENU_COALITION)" >Type <code>MENU_COALITION</code></a></h2>
<p>The MENU_COALITION class</p>
<h3>Field(s)</h3>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(MENU_COALITION).ClassName" >
<strong>MENU_COALITION.ClassName</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MENU_COALITION).New" >
<strong>MENU_COALITION:New(MenuCoalition, MenuText, ParentMenu)</strong>
</a>
</dt>
<dd>
<p>Creates a new coalition menu item</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="DCSCoalition.html##(coalition.side)">DCSCoalition#coalition.side</a> MenuCoalition </em></code>:
The coalition owning the menu.</p>
</li>
<li>
<p><code><em>#string MenuText </em></code>:
The text for the menu.</p>
</li>
<li>
<p><code><em>#table ParentMenu </em></code>:
The parent menu.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MENU_COALITION)">#MENU_COALITION</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MENU_COALITION).Remove" >
<strong>MENU_COALITION:Remove()</strong>
</a>
</dt>
<dd>
<p>Removes the sub menus recursively of this MENU_COALITION.</p>
<h3>Return value</h3>
<p><em><a href="##(MENU_COALITION)">#MENU_COALITION</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MENU_COALITION).RemoveSubMenus" >
<strong>MENU_COALITION:RemoveSubMenus()</strong>
</a>
</dt>
<dd>
<p>Removes the sub menus recursively of this MENU_COALITION.</p>
<h3>Return value</h3>
<p><em><a href="##(MENU_COALITION)">#MENU_COALITION</a>:</em>
self</p>
</dd>
</dl>
<h2><a id="#(MENU_COALITION_COMMAND)" >Type <code>MENU_COALITION_COMMAND</code></a></h2>
<p>The MENU<em>COALITION</em>COMMAND class</p>
<h3>Field(s)</h3>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(MENU_COALITION_COMMAND).ClassName" >
<strong>MENU_COALITION_COMMAND.ClassName</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MENU_COALITION_COMMAND).New" >
<strong>MENU_COALITION_COMMAND:New(MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument)</strong>
</a>
</dt>
<dd>
<p>Creates a new radio command item for a group</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em><a href="DCSCoalition.html##(coalition.side)">DCSCoalition#coalition.side</a> MenuCoalition </em></code>:
The coalition owning the menu.</p>
</li>
<li>
<p><code><em> MenuText </em></code>:
The text for the menu.</p>
</li>
<li>
<p><code><em> ParentMenu </em></code>:
The parent menu.</p>
</li>
<li>
<p><code><em> CommandMenuFunction </em></code>:
A function that is called when the menu key is pressed.</p>
</li>
<li>
<p><code><em> CommandMenuArgument </em></code>:
An argument for the function.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MENU_COALITION_COMMAND)">#MENU<em>COALITION</em>COMMAND</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MENU_COALITION_COMMAND).Remove" >
<strong>MENU_COALITION_COMMAND:Remove()</strong>
</a>
</dt>
<dd>
<p>Removes a radio command item for a coalition</p>
<h3>Return value</h3>
<p><em><a href="##(MENU_COALITION_COMMAND)">#MENU<em>COALITION</em>COMMAND</a>:</em>
self</p>
</dd> </dd>
</dl> </dl>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li>Message</li> <li>Message</li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -0,0 +1,916 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<link rel="stylesheet" href="stylesheet.css" type="text/css"/>
</head>
<body>
<div id="container">
<div id="product">
<div id="product_logo"></div>
<div id="product_name"><big><b></b></big></div>
<div id="product_description"></div>
</div>
<div id="main">
<div id="navigation">
<h2>Modules</h2>
<ul><li>
<a href="index.html">index</a>
</li></ul>
<ul>
<li><a href="Base.html">Base</a></li>
<li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
<li><a href="DESTROYRADARSTASK.html">DESTROYRADARSTASK</a></li>
<li><a href="DESTROYUNITTYPESTASK.html">DESTROYUNITTYPESTASK</a></li>
<li><a href="Database.html">Database</a></li>
<li><a href="Escort.html">Escort</a></li>
<li><a href="Event.html">Event</a></li>
<li><a href="GOHOMETASK.html">GOHOMETASK</a></li>
<li><a href="Group.html">Group</a></li>
<li><a href="MISSION.html">MISSION</a></li>
<li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li>
<li>MissileTrainer</li>
<li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li>
<li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li>
<li><a href="routines.html">routines</a></li>
</ul>
</div>
<div id="content">
<h1>Module <code>MissileTrainer</code></h1>
<p>Provides missile training functions.</p>
<h1><a href="##(MISSILETRAINER)">#MISSILETRAINER</a> class</h1>
<p>The <a href="##(MISSILETRAINER)">#MISSILETRAINER</a> class uses the DCS world messaging system to be alerted of any missiles fired, and when a missile would hit your aircraft,
the class will destroy the missile within a certain range, to avoid damage to your aircraft.
It suports the following functionality:</p>
<ul>
<li>Track the missiles fired at you and other players, providing bearing and range information of the missiles towards the airplanes.</li>
<li>Provide alerts of missile launches, including detailed information of the units launching, including bearing, range …</li>
<li>Provide alerts when a missile would have killed your aircraft.</li>
<li>Provide alerts when the missile self destructs.</li>
<li>Enable / Disable and Configure the Missile Trainer using the various menu options.</li>
</ul>
<p> When running a mission where MISSILETRAINER is used, the following radio menu structure ( 'Radio Menu' -> 'Other (F10)' -> 'MissileTrainer' ) options are available for the players:</p>
<ul>
<li><strong>Messages</strong>: Menu to configure all messages.
<ul>
<li><strong>Messages On</strong>: Show all messages.</li>
<li><strong>Messages Off</strong>: Disable all messages.</li>
</ul></li>
<li><strong>Tracking</strong>: Menu to configure missile tracking messages.
<ul>
<li><strong>To All</strong>: Shows missile tracking messages to all players.</li>
<li><strong>To Target</strong>: Shows missile tracking messages only to the player where the missile is targetted at.</li>
<li><strong>Tracking On</strong>: Show missile tracking messages.</li>
<li><strong>Tracking Off</strong>: Disable missile tracking messages.</li>
<li><strong>Frequency Increase</strong>: Increases the missile tracking message frequency with one second.</li>
<li><strong>Frequency Decrease</strong>: Decreases the missile tracking message frequency with one second.</li>
</ul></li>
<li><strong>Alerts</strong>: Menu to configure alert messages.
<ul>
<li><strong>To All</strong>: Shows alert messages to all players.</li>
<li><strong>To Target</strong>: Shows alter messages only to the player where the missile is (was) targetted at.</li>
<li><strong>Hits On</strong>: Show missile hit alert messages.</li>
<li><strong>Hits Off</strong>: Disable missile hit altert messages.</li>
<li><strong>Launches On</strong>: Show missile launch messages.</li>
<li><strong>Launches Off</strong>: Disable missile launch messages.</li>
</ul></li>
<li><strong>Details</strong>: Menu to configure message details.
<ul>
<li><strong>Range On</strong>: Shows range information when a missile is fired to a target.</li>
<li><strong>Range Off</strong>: Disable range information when a missile is fired to a target.</li>
<li><strong>Bearing On</strong>: Shows bearing information when a missile is fired to a target.</li>
<li><strong>Bearing Off</strong>: Disable bearing information when a missile is fired to a target.</li>
</ul></li>
<li><strong>Distance</strong>: Menu to configure the distance when a missile needs to be destroyed when near to a player, during tracking. This will improve/influence hit calculation accuracy, but has the risk of damaging the aircraft when the missile reaches the aircraft before the distance is measured.
<ul>
<li><strong>50 meter</strong>: Destroys the missile when the distance to the aircraft is below or equal to 50 meter.</li>
<li><strong>100 meter</strong>: Destroys the missile when the distance to the aircraft is below or equal to 100 meter.</li>
<li><strong>150 meter</strong>: Destroys the missile when the distance to the aircraft is below or equal to 150 meter.</li>
<li><strong>200 meter</strong>: Destroys the missile when the distance to the aircraft is below or equal to 200 meter.</li>
</ul></li>
</ul>
<h1>MISSILETRAINER construction methods:</h1>
<p>Create a new MISSILETRAINER object with the <a href="##(MISSILETRAINER).New">MISSILETRAINER.New</a> method:</p>
<ul>
<li><a href="##(MISSILETRAINER).New">MISSILETRAINER.New</a>: Creates a new MISSILETRAINER object taking the maximum distance to your aircraft to evaluate when a missile needs to be destroyed.</li>
</ul>
<p>MISSILETRAINER will collect each unit declared in the mission with a skill level "Client" and "Player", and will monitor the missiles shot at those.</p>
<h1>MISSILETRAINER initialization methods:</h1>
<p>A MISSILETRAINER object will behave differently based on the usage of initialization methods:</p>
<ul>
<li><a href="##(MISSILETRAINER).InitMessagesOnOff">MISSILETRAINER.InitMessagesOnOff</a>: Sets by default the display of any message to be ON or OFF.</li>
<li><a href="##(MISSILETRAINER).InitTrackingToAll">MISSILETRAINER.InitTrackingToAll</a>: Sets by default the missile tracking report for all players or only for those missiles targetted to you.</li>
<li><a href="##(MISSILETRAINER).InitTrackingOnOff">MISSILETRAINER.InitTrackingOnOff</a>: Sets by default the display of missile tracking report to be ON or OFF.</li>
<li><a href="##(MISSILETRAINER).InitTrackingFrequency">MISSILETRAINER.InitTrackingFrequency</a>: Increases, decreases the missile tracking message display frequency with the provided time interval in seconds.</li>
<li><a href="##(MISSILETRAINER).InitAlertsToAll">MISSILETRAINER.InitAlertsToAll</a>: Sets by default the display of alerts to be shown to all players or only to you.</li>
<li><a href="##(MISSILETRAINER).InitAlertsHitsOnOff">MISSILETRAINER.InitAlertsHitsOnOff</a>: Sets by default the display of hit alerts ON or OFF.</li>
<li><a href="##(MISSILETRAINER).InitAlertsLaunchesOnOff">MISSILETRAINER.InitAlertsLaunchesOnOff</a>: Sets by default the display of launch alerts ON or OFF.</li>
<li><a href="##(MISSILETRAINER).InitRangeOnOff">MISSILETRAINER.InitRangeOnOff</a>: Sets by default the display of range information of missiles ON of OFF.</li>
<li><a href="##(MISSILETRAINER).InitBearingOnOff">MISSILETRAINER.InitBearingOnOff</a>: Sets by default the display of bearing information of missiles ON of OFF.</li>
<li><a href="##(MISSILETRAINER).InitMenusOnOff">MISSILETRAINER.InitMenusOnOff</a>: Allows to configure the options through the radio menu.</li>
</ul>
<h2>Global(s)</h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="#MISSILETRAINER">MISSILETRAINER</a></td>
<td class="summary">
</td>
</tr>
</table>
<h2><a id="#(MISSILETRAINER)">Type <code>MISSILETRAINER</code></a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).AlertsHitsOnOff">MISSILETRAINER.AlertsHitsOnOff</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).AlertsLaunchesOnOff">MISSILETRAINER.AlertsLaunchesOnOff</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).AlertsToAll">MISSILETRAINER.AlertsToAll</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).ClassName">MISSILETRAINER.ClassName</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).DetailsBearingOnOff">MISSILETRAINER.DetailsBearingOnOff</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).DetailsRangeOnOff">MISSILETRAINER.DetailsRangeOnOff</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitAlertsHitsOnOff">MISSILETRAINER:InitAlertsHitsOnOff(AlertsHitsOnOff)</a></td>
<td class="summary">
<p>Sets by default the display of hit alerts ON or OFF.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitAlertsLaunchesOnOff">MISSILETRAINER:InitAlertsLaunchesOnOff(AlertsLaunchesOnOff)</a></td>
<td class="summary">
<p>Sets by default the display of launch alerts ON or OFF.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitAlertsToAll">MISSILETRAINER:InitAlertsToAll(AlertsToAll)</a></td>
<td class="summary">
<p>Sets by default the display of alerts to be shown to all players or only to you.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitBearingOnOff">MISSILETRAINER:InitBearingOnOff(DetailsBearingOnOff)</a></td>
<td class="summary">
<p>Sets by default the display of bearing information of missiles ON of OFF.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitMenusOnOff">MISSILETRAINER:InitMenusOnOff(MenusOnOff)</a></td>
<td class="summary">
<p>Enables / Disables the menus.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitMessagesOnOff">MISSILETRAINER:InitMessagesOnOff(MessagesOnOff)</a></td>
<td class="summary">
<p>Sets by default the display of any message to be ON or OFF.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitRangeOnOff">MISSILETRAINER:InitRangeOnOff(DetailsRangeOnOff)</a></td>
<td class="summary">
<p>Sets by default the display of range information of missiles ON of OFF.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitTrackingFrequency">MISSILETRAINER:InitTrackingFrequency(TrackingFrequency)</a></td>
<td class="summary">
<p>Increases, decreases the missile tracking message display frequency with the provided time interval in seconds.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitTrackingOnOff">MISSILETRAINER:InitTrackingOnOff(TrackingOnOff)</a></td>
<td class="summary">
<p>Sets by default the display of missile tracking report to be ON or OFF.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).InitTrackingToAll">MISSILETRAINER:InitTrackingToAll(TrackingToAll)</a></td>
<td class="summary">
<p>Sets by default the missile tracking report for all players or only for those missiles targetted to you.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).MenusOnOff">MISSILETRAINER.MenusOnOff</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).MessagesOnOff">MISSILETRAINER.MessagesOnOff</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).New">MISSILETRAINER:New(Distance, Briefing)</a></td>
<td class="summary">
<p>Creates the main object which is handling missile tracking.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).TrackingFrequency">MISSILETRAINER.TrackingFrequency</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).TrackingOnOff">MISSILETRAINER.TrackingOnOff</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER).TrackingToAll">MISSILETRAINER.TrackingToAll</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER)._AddBearing">MISSILETRAINER:_AddBearing(Client, TrainerWeapon)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER)._AddRange">MISSILETRAINER:_AddRange(Client, TrainerWeapon)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER)._EventShot">MISSILETRAINER:_EventShot(Event)</a></td>
<td class="summary">
<p>Detects if an SA site was shot with an anti radiation missile.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER)._MenuMessages">MISSILETRAINER._MenuMessages(MenuParameters)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(MISSILETRAINER)._TrackMissiles">MISSILETRAINER:_TrackMissiles()</a></td>
<td class="summary">
</td>
</tr>
</table>
<h2>Global(s)</h2>
<dl class="function">
<dt>
<em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a></em>
<a id="MISSILETRAINER" >
<strong>MISSILETRAINER</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<h2><a id="#(MissileTrainer)" >Type <code>MissileTrainer</code></a></h2>
<h2><a id="#(MISSILETRAINER)" >Type <code>MISSILETRAINER</code></a></h2>
<p>The MISSILETRAINER class</p>
<h3>Field(s)</h3>
<dl class="function">
<dt>
<em></em>
<a id="#(MISSILETRAINER).AlertsHitsOnOff" >
<strong>MISSILETRAINER.AlertsHitsOnOff</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(MISSILETRAINER).AlertsLaunchesOnOff" >
<strong>MISSILETRAINER.AlertsLaunchesOnOff</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(MISSILETRAINER).AlertsToAll" >
<strong>MISSILETRAINER.AlertsToAll</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(MISSILETRAINER).ClassName" >
<strong>MISSILETRAINER.ClassName</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(MISSILETRAINER).DetailsBearingOnOff" >
<strong>MISSILETRAINER.DetailsBearingOnOff</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(MISSILETRAINER).DetailsRangeOnOff" >
<strong>MISSILETRAINER.DetailsRangeOnOff</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitAlertsHitsOnOff" >
<strong>MISSILETRAINER:InitAlertsHitsOnOff(AlertsHitsOnOff)</strong>
</a>
</dt>
<dd>
<p>Sets by default the display of hit alerts ON or OFF.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean AlertsHitsOnOff </em></code>:
true or false</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitAlertsLaunchesOnOff" >
<strong>MISSILETRAINER:InitAlertsLaunchesOnOff(AlertsLaunchesOnOff)</strong>
</a>
</dt>
<dd>
<p>Sets by default the display of launch alerts ON or OFF.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean AlertsLaunchesOnOff </em></code>:
true or false</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitAlertsToAll" >
<strong>MISSILETRAINER:InitAlertsToAll(AlertsToAll)</strong>
</a>
</dt>
<dd>
<p>Sets by default the display of alerts to be shown to all players or only to you.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean AlertsToAll </em></code>:
true or false</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitBearingOnOff" >
<strong>MISSILETRAINER:InitBearingOnOff(DetailsBearingOnOff)</strong>
</a>
</dt>
<dd>
<p>Sets by default the display of bearing information of missiles ON of OFF.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean DetailsBearingOnOff </em></code>:
true or false</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitMenusOnOff" >
<strong>MISSILETRAINER:InitMenusOnOff(MenusOnOff)</strong>
</a>
</dt>
<dd>
<p>Enables / Disables the menus.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean MenusOnOff </em></code>:
true or false</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitMessagesOnOff" >
<strong>MISSILETRAINER:InitMessagesOnOff(MessagesOnOff)</strong>
</a>
</dt>
<dd>
<p>Sets by default the display of any message to be ON or OFF.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean MessagesOnOff </em></code>:
true or false</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitRangeOnOff" >
<strong>MISSILETRAINER:InitRangeOnOff(DetailsRangeOnOff)</strong>
</a>
</dt>
<dd>
<p>Sets by default the display of range information of missiles ON of OFF.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean DetailsRangeOnOff </em></code>:
true or false</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitTrackingFrequency" >
<strong>MISSILETRAINER:InitTrackingFrequency(TrackingFrequency)</strong>
</a>
</dt>
<dd>
<p>Increases, decreases the missile tracking message display frequency with the provided time interval in seconds.</p>
<p>The default frequency is a 3 second interval, so the Tracking Frequency parameter specifies the increase or decrease from the default 3 seconds or the last frequency update.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#number TrackingFrequency </em></code>:
Provide a negative or positive value in seconds to incraese or decrease the display frequency. </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitTrackingOnOff" >
<strong>MISSILETRAINER:InitTrackingOnOff(TrackingOnOff)</strong>
</a>
</dt>
<dd>
<p>Sets by default the display of missile tracking report to be ON or OFF.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean TrackingOnOff </em></code>:
true or false</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).InitTrackingToAll" >
<strong>MISSILETRAINER:InitTrackingToAll(TrackingToAll)</strong>
</a>
</dt>
<dd>
<p>Sets by default the missile tracking report for all players or only for those missiles targetted to you.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em>#boolean TrackingToAll </em></code>:
true or false</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(MISSILETRAINER).MenusOnOff" >
<strong>MISSILETRAINER.MenusOnOff</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(MISSILETRAINER).MessagesOnOff" >
<strong>MISSILETRAINER.MessagesOnOff</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).New" >
<strong>MISSILETRAINER:New(Distance, Briefing)</strong>
</a>
</dt>
<dd>
<p>Creates the main object which is handling missile tracking.</p>
<p>When a missile is fired a SCHEDULER is set off that follows the missile. When near a certain a client player, the missile will be destroyed.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#number Distance </em></code>:
The distance in meters when a tracked missile needs to be destroyed when close to a player.</p>
</li>
<li>
<p><code><em>#string Briefing </em></code>:
(Optional) Will show a text to the players when starting their mission. Can be used for briefing purposes. </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(MISSILETRAINER)">#MISSILETRAINER</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER).TrackingFrequency" >
<strong>MISSILETRAINER.TrackingFrequency</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(MISSILETRAINER).TrackingOnOff" >
<strong>MISSILETRAINER.TrackingOnOff</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(MISSILETRAINER).TrackingToAll" >
<strong>MISSILETRAINER.TrackingToAll</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER)._AddBearing" >
<strong>MISSILETRAINER:_AddBearing(Client, TrainerWeapon)</strong>
</a>
</dt>
<dd>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em> Client </em></code>: </p>
</li>
<li>
<p><code><em> TrainerWeapon </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER)._AddRange" >
<strong>MISSILETRAINER:_AddRange(Client, TrainerWeapon)</strong>
</a>
</dt>
<dd>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em> Client </em></code>: </p>
</li>
<li>
<p><code><em> TrainerWeapon </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER)._EventShot" >
<strong>MISSILETRAINER:_EventShot(Event)</strong>
</a>
</dt>
<dd>
<p>Detects if an SA site was shot with an anti radiation missile.</p>
<p>In this case, take evasive actions based on the skill level set within the ME.</p>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em><a href="Event.html##(EVENTDATA)">Event#EVENTDATA</a> Event </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER)._MenuMessages" >
<strong>MISSILETRAINER._MenuMessages(MenuParameters)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> MenuParameters </em></code>: </p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(MISSILETRAINER)._TrackMissiles" >
<strong>MISSILETRAINER:_TrackMissiles()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
</div>
</div>
</body>
</html>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li>NOTASK</li> <li>NOTASK</li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li>PICKUPTASK</li> <li>PICKUPTASK</li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li>ROUTETASK</li> <li>ROUTETASK</li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li>STAGE</li> <li>STAGE</li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -0,0 +1,237 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<link rel="stylesheet" href="stylesheet.css" type="text/css"/>
</head>
<body>
<div id="container">
<div id="product">
<div id="product_logo"></div>
<div id="product_name"><big><b></b></big></div>
<div id="product_description"></div>
</div>
<div id="main">
<div id="navigation">
<h2>Modules</h2>
<ul><li>
<a href="index.html">index</a>
</li></ul>
<ul>
<li><a href="Base.html">Base</a></li>
<li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
<li><a href="DESTROYRADARSTASK.html">DESTROYRADARSTASK</a></li>
<li><a href="DESTROYUNITTYPESTASK.html">DESTROYUNITTYPESTASK</a></li>
<li><a href="Database.html">Database</a></li>
<li><a href="Escort.html">Escort</a></li>
<li><a href="Event.html">Event</a></li>
<li><a href="GOHOMETASK.html">GOHOMETASK</a></li>
<li><a href="Group.html">Group</a></li>
<li><a href="MISSION.html">MISSION</a></li>
<li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li>
<li>Scheduler</li>
<li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li>
<li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li>
<li><a href="routines.html">routines</a></li>
</ul>
</div>
<div id="content">
<h1>Module <code>Scheduler</code></h1>
<p>Models time events calling event handing functions.</p>
<h2>Global(s)</h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="#SCHEDULER">SCHEDULER</a></td>
<td class="summary">
</td>
</tr>
</table>
<h2><a id="#(SCHEDULER)">Type <code>SCHEDULER</code></a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).ClassName">SCHEDULER.ClassName</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).New">SCHEDULER:New(TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds)</a></td>
<td class="summary">
<p>SCHEDULER constructor.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).Scheduler">SCHEDULER:Scheduler()</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).Start">SCHEDULER:Start()</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).Stop">SCHEDULER:Stop()</a></td>
<td class="summary">
</td>
</tr>
</table>
<h2>Global(s)</h2>
<dl class="function">
<dt>
<em><a href="##(SCHEDULER)">#SCHEDULER</a></em>
<a id="SCHEDULER" >
<strong>SCHEDULER</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<h2><a id="#(Scheduler)" >Type <code>Scheduler</code></a></h2>
<h2><a id="#(SCHEDULER)" >Type <code>SCHEDULER</code></a></h2>
<p>The SCHEDULER class</p>
<h3>Field(s)</h3>
<dl class="function">
<dt>
<em>#string</em>
<a id="#(SCHEDULER).ClassName" >
<strong>SCHEDULER.ClassName</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SCHEDULER).New" >
<strong>SCHEDULER:New(TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds)</strong>
</a>
</dt>
<dd>
<p>SCHEDULER constructor.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#table TimeEventObject </em></code>: </p>
</li>
<li>
<p><code><em>#function TimeEventFunction </em></code>: </p>
</li>
<li>
<p><code><em>#table TimeEventFunctionArguments </em></code>: </p>
</li>
<li>
<p><code><em>#number StartSeconds </em></code>: </p>
</li>
<li>
<p><code><em>#number RepeatSecondsInterval </em></code>: </p>
</li>
<li>
<p><code><em>#number RandomizationFactor </em></code>: </p>
</li>
<li>
<p><code><em>#number StopSeconds </em></code>: </p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(SCHEDULER)">#SCHEDULER</a>:</em></p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SCHEDULER).Scheduler" >
<strong>SCHEDULER:Scheduler()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SCHEDULER).Start" >
<strong>SCHEDULER:Start()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SCHEDULER).Stop" >
<strong>SCHEDULER:Stop()</strong>
</a>
</dt>
<dd>
</dd>
</dl>
</div>
</div>
</body>
</html>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li>Scoring</li> <li>Scoring</li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li>Sead</li> <li>Sead</li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li>Spawn</li> <li>Spawn</li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -116,7 +104,7 @@ So in principle, the group list will contain all parameters and configurations a
<li><a href="##(SPAWN).RandomizeTemplate">SPAWN.RandomizeTemplate</a>: Randomize the group templates so that when a new group is spawned, a random group template is selected from one of the templates defined. </li> <li><a href="##(SPAWN).RandomizeTemplate">SPAWN.RandomizeTemplate</a>: Randomize the group templates so that when a new group is spawned, a random group template is selected from one of the templates defined. </li>
<li><a href="##(SPAWN).Uncontrolled">SPAWN.Uncontrolled</a>: Spawn plane groups uncontrolled.</li> <li><a href="##(SPAWN).Uncontrolled">SPAWN.Uncontrolled</a>: Spawn plane groups uncontrolled.</li>
<li><a href="##(SPAWN).Array">SPAWN.Array</a>: Make groups visible before they are actually activated, and order these groups like a batallion in an array.</li> <li><a href="##(SPAWN).Array">SPAWN.Array</a>: Make groups visible before they are actually activated, and order these groups like a batallion in an array.</li>
<li><a href="##(SPAWN).Repeat">SPAWN.Repeat</a>: Re-spawn groups when they land at the home base. Similar functions are <a href="##(SPAWN).RepeatOnLanding">SPAWN.RepeatOnLanding</a> and <a href="##(SPAWN).RepeatOnEngineShutDown">SPAWN.RepeatOnEngineShutDown</a>.</li> <li><a href="##(SPAWN).InitRepeat">SPAWN.InitRepeat</a>: Re-spawn groups when they land at the home base. Similar functions are <a href="##(SPAWN).InitRepeatOnLanding">SPAWN.InitRepeatOnLanding</a> and <a href="##(SPAWN).InitRepeatOnEngineShutDown">SPAWN.InitRepeatOnEngineShutDown</a>.</li>
</ul> </ul>
<h1>SPAWN spawning methods:</h1> <h1>SPAWN spawning methods:</h1>
@ -158,12 +146,6 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
<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).AliveFactor">SPAWN.AliveFactor</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).Array">SPAWN:Array(SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY)</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).Array">SPAWN:Array(SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY)</a></td>
<td class="summary"> <td class="summary">
<p>Makes the groups visible before start (like a batallion).</p> <p>Makes the groups visible before start (like a batallion).</p>
@ -182,7 +164,7 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).CleanUpFunction">SPAWN.CleanUpFunction</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).CleanUpScheduler">SPAWN.CleanUpScheduler</a></td>
<td class="summary"> <td class="summary">
</td> </td>
@ -215,6 +197,24 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
<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).InitRepeat">SPAWN:InitRepeat()</a></td>
<td class="summary">
<p>For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).InitRepeatOnEngineShutDown">SPAWN:InitRepeatOnEngineShutDown()</a></td>
<td class="summary">
<p>Respawn after landing when its engines have shut down.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).InitRepeatOnLanding">SPAWN:InitRepeatOnLanding()</a></td>
<td class="summary">
<p>Respawn group after landing.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -254,9 +254,9 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).Repeat">SPAWN:Repeat()</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).Repeat">SPAWN.Repeat</a></td>
<td class="summary"> <td class="summary">
<p>For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -293,12 +293,6 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnCleanUpTimeStamps">SPAWN.SpawnCleanUpTimeStamps</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnCleanUpTimeStamps">SPAWN.SpawnCleanUpTimeStamps</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnCurrentTimer">SPAWN.SpawnCurrentTimer</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -329,24 +323,12 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnGroupName">SPAWN:SpawnGroupName(SpawnIndex)</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnGroupName">SPAWN:SpawnGroupName(SpawnIndex)</a></td>
<td class="summary"> <td class="summary">
<p>Will return the SpawnGroupName either with with a specific count number or without any count.</p> <p>Will return the SpawnGroupName either with with a specific count number or without any count.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnHighTimer">SPAWN.SpawnHighTimer</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnInZone">SPAWN:SpawnInZone(Zone, ZoneRandomize, SpawnIndex)</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnInZone">SPAWN:SpawnInZone(Zone, ZoneRandomize, SpawnIndex)</a></td>
<td class="summary"> <td class="summary">
<p>Will spawn a Group within a given <a href="Zone.html##(ZONE)">Zone#ZONE</a>.</p> <p>Will spawn a Group within a given <a href="Zone.html##(ZONE)">Zone#ZONE</a>.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnLowTimer">SPAWN.SpawnLowTimer</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -389,18 +371,12 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnRandomizeTemplate">SPAWN.SpawnRandomizeTemplate</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnRandomizeTemplate">SPAWN.SpawnRandomizeTemplate</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnRepeat">SPAWN.SpawnRepeat</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnScheduleStart">SPAWN:SpawnScheduleStart()</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnScheduleStart">SPAWN:SpawnScheduleStart()</a></td>
<td class="summary"> <td class="summary">
<p>Will start the spawning scheduler.</p> <p>Will re-start the spawning scheduler.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -416,7 +392,7 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnSetTimer">SPAWN.SpawnSetTimer</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN).SpawnScheduler">SPAWN.SpawnScheduler</a></td>
<td class="summary"> <td class="summary">
</td> </td>
@ -550,13 +526,13 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN)._RandomizeRoute">SPAWN:_RandomizeRoute(SpawnIndex)</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN)._RandomizeRoute">SPAWN:_RandomizeRoute(SpawnIndex)</a></td>
<td class="summary"> <td class="summary">
<p>Internal function randomizing the routes.</p> <p>Private method randomizing the routes.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(SPAWN)._RandomizeTemplate">SPAWN:_RandomizeTemplate(SpawnIndex)</a></td> <td class="name" nowrap="nowrap"><a href="##(SPAWN)._RandomizeTemplate">SPAWN:_RandomizeTemplate(SpawnIndex)</a></td>
<td class="summary"> <td class="summary">
<p>Private method that randomizes the template of the group.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -604,20 +580,6 @@ Check the <a href="##(SPAWN).CleanUp">SPAWN.CleanUp</a> for further info.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em>#number</em>
<a id="#(SPAWN).AliveFactor" >
<strong>SPAWN.AliveFactor</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).Array" > <a id="#(SPAWN).Array" >
<strong>SPAWN:Array(SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY)</strong> <strong>SPAWN:Array(SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY)</strong>
</a> </a>
@ -721,14 +683,17 @@ self</p>
<dt> <dt>
<em></em> <em></em>
<a id="#(SPAWN).CleanUpFunction" > <a id="#(SPAWN).CleanUpScheduler" >
<strong>SPAWN.CleanUpFunction</strong> <strong>SPAWN.CleanUpScheduler</strong>
</a> </a>
</dt> </dt>
<dd> <dd>
<p>self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval )</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -876,6 +841,71 @@ When no group is found, #nil is returned.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(SPAWN).InitRepeat" >
<strong>SPAWN:InitRepeat()</strong>
</a>
</dt>
<dd>
<p>For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment.</p>
<p>This function is used to re-spawn automatically (so no extra call is needed anymore) the same group after it has landed.
This will enable a spawned group to be re-spawned after it lands, until it is destroyed...
Note: When the group is respawned, it will re-spawn from the original airbase where it took off.
So ensure that the routes for groups that respawn, always return to the original airbase, or players may get confused ...</p>
<h3>Return value</h3>
<p><em><a href="##(SPAWN)">#SPAWN</a>:</em>
self</p>
<h3>Usage:</h3>
<pre class="example"><code>-- RU Su-34 - AI Ship Attack
-- Re-SPAWN the Group(s) after each landing and Engine Shut-Down automatically.
SpawnRU_SU34 = SPAWN:New( 'TF1 RU Su-34 Krymsk@AI - Attack Ships' ):Schedule( 2, 3, 1800, 0.4 ):SpawnUncontrolled():RandomizeRoute( 1, 1, 3000 ):RepeatOnEngineShutDown()</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).InitRepeatOnEngineShutDown" >
<strong>SPAWN:InitRepeatOnEngineShutDown()</strong>
</a>
</dt>
<dd>
<p>Respawn after landing when its engines have shut down.</p>
<h3>Return value</h3>
<p><em><a href="##(SPAWN)">#SPAWN</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).InitRepeatOnLanding" >
<strong>SPAWN:InitRepeatOnLanding()</strong>
</a>
</dt>
<dd>
<p>Respawn group after landing.</p>
<h3>Return value</h3>
<p><em><a href="##(SPAWN)">#SPAWN</a>:</em>
self</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(SPAWN).Limit" > <a id="#(SPAWN).Limit" >
<strong>SPAWN:Limit(SpawnMaxUnitsAlive, SpawnMaxGroups)</strong> <strong>SPAWN:Limit(SpawnMaxUnitsAlive, SpawnMaxGroups)</strong>
</a> </a>
@ -1123,30 +1153,15 @@ The group that was spawned. You can use this group for further actions.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em>#boolean</em>
<a id="#(SPAWN).Repeat" > <a id="#(SPAWN).Repeat" >
<strong>SPAWN:Repeat()</strong> <strong>SPAWN.Repeat</strong>
</a> </a>
</dt> </dt>
<dd> <dd>
<p>For planes and helicopters, when these groups go home and land on their home airbases and farps, they normally would taxi to the parking spot, shut-down their engines and wait forever until the Group is removed by the runtime environment.</p>
<p>This function is used to re-spawn automatically (so no extra call is needed anymore) the same group after it has landed.
This will enable a spawned group to be re-spawned after it lands, until it is destroyed...
Note: When the group is respawned, it will re-spawn from the original airbase where it took off.
So ensure that the routes for groups that respawn, always return to the original airbase, or players may get confused ...</p>
<h3>Return value</h3>
<p><em><a href="##(SPAWN)">#SPAWN</a>:</em>
self</p>
<h3>Usage:</h3>
<pre class="example"><code>-- RU Su-34 - AI Ship Attack
-- Re-SPAWN the Group(s) after each landing and Engine Shut-Down automatically.
SpawnRU_SU34 = SPAWN:New( 'TF1 RU Su-34 Krymsk@AI - Attack Ships' ):Schedule( 2, 3, 1800, 0.4 ):SpawnUncontrolled():RandomizeRoute( 1, 1, 3000 ):RepeatOnEngineShutDown()</code></pre>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -1238,23 +1253,6 @@ The group that was spawned. You can use this group for further actions.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(SPAWN).SpawnCurrentTimer" >
<strong>SPAWN.SpawnCurrentTimer</strong>
</a>
</dt>
<dd>
<p> The internal timer counter to trigger a scheduled spawning of SpawnTemplatePrefix.</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -1412,20 +1410,6 @@ Is the number of the Group that is to be spawned.</p>
<p><em>#string:</em> <p><em>#string:</em>
SpawnGroupName</p> SpawnGroupName</p>
</dd>
</dl>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(SPAWN).SpawnHighTimer" >
<strong>SPAWN.SpawnHighTimer</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -1479,20 +1463,6 @@ when nothing was spawned.</p>
</li> </li>
</ol> </ol>
</dd>
</dl>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(SPAWN).SpawnLowTimer" >
<strong>SPAWN.SpawnLowTimer</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -1597,20 +1567,6 @@ when nothing was spawned.</p>
</dd>
</dl>
<dl class="function">
<dt>
<em>#boolean</em>
<a id="#(SPAWN).SpawnRepeat" >
<strong>SPAWN.SpawnRepeat</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -1622,10 +1578,10 @@ when nothing was spawned.</p>
</dt> </dt>
<dd> <dd>
<p>Will start the spawning scheduler.</p> <p>Will re-start the spawning scheduler.</p>
<p>Note: This function is called automatically when <a href="##(SPAWN).Scheduled">SPAWN.Scheduled</a> is called.</p> <p>Note: This function is only required to be called when the schedule was stopped.</p>
</dd> </dd>
</dl> </dl>
@ -1692,18 +1648,15 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 )
<dl class="function"> <dl class="function">
<dt> <dt>
<em>#number</em> <em></em>
<a id="#(SPAWN).SpawnSetTimer" > <a id="#(SPAWN).SpawnScheduler" >
<strong>SPAWN.SpawnSetTimer</strong> <strong>SPAWN.SpawnScheduler</strong>
</a> </a>
</dt> </dt>
<dd> <dd>
<p> The internal timer value when a scheduled spawning of SpawnTemplatePrefix occurs.</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -2022,10 +1975,15 @@ Nothing found</p>
<ul> <ul>
<li> <li>
<p><code><em> SpawnTemplatePrefix </em></code>: </p> <p><code><em>#string SpawnTemplatePrefix </em></code>: </p>
</li> </li>
</ul> </ul>
<h3>Return value</h3>
<p>@SPAWN self</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -2184,15 +2142,20 @@ This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups.</p
<ul> <ul>
<li> <li>
<p><code><em> SpawnTemplatePrefix </em></code>: </p> <p><code><em>#string SpawnTemplatePrefix </em></code>: </p>
</li> </li>
<li> <li>
<p><code><em> SpawnIndex </em></code>: </p> <p><code><em>#number SpawnIndex </em></code>: </p>
</li> </li>
</ul> </ul>
<h3>Return value</h3>
<p><em><a href="##(SPAWN)">#SPAWN</a>:</em>
self</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -2204,7 +2167,7 @@ This is needed to ensure that Re-SPAWNing only is done for landed AIR Groups.</p
</dt> </dt>
<dd> <dd>
<p>Internal function randomizing the routes.</p> <p>Private method randomizing the routes.</p>
<h3>Parameter</h3> <h3>Parameter</h3>
<ul> <ul>
@ -2231,16 +2194,21 @@ The index of the group to be spawned.</p>
</dt> </dt>
<dd> <dd>
<p>Private method that randomizes the template of the group.</p>
<h3>Parameter</h3> <h3>Parameter</h3>
<ul> <ul>
<li> <li>
<p><code><em> SpawnIndex </em></code>: </p> <p><code><em>#number SpawnIndex </em></code>: </p>
</li> </li>
</ul> </ul>
<h3>Return value</h3>
<p><em><a href="##(SPAWN)">#SPAWN</a>:</em>
self</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li>TASK</li> <li>TASK</li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li>Unit</li> <li>Unit</li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -154,6 +142,12 @@
<td class="name" nowrap="nowrap"><a href="##(UNIT).GetName">UNIT:GetName()</a></td> <td class="name" nowrap="nowrap"><a href="##(UNIT).GetName">UNIT:GetName()</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(UNIT).GetPlayerName">UNIT:GetPlayerName()</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -510,6 +504,19 @@
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(UNIT).GetPlayerName" >
<strong>UNIT:GetPlayerName()</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li>Zone</li> <li>Zone</li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -88,6 +76,12 @@
<td class="name" nowrap="nowrap"><a href="##(ZONE).GetPointVec2">ZONE:GetPointVec2()</a></td> <td class="name" nowrap="nowrap"><a href="##(ZONE).GetPointVec2">ZONE:GetPointVec2()</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(ZONE).GetPointVec3">ZONE:GetPointVec3(Height)</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -157,6 +151,27 @@
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(ZONE).GetPointVec3" >
<strong>ZONE:GetPointVec3(Height)</strong>
</a>
</dt>
<dd>
<h3>Parameter</h3>
<ul>
<li>
<p><code><em> Height </em></code>: </p>
</li>
</ul>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li><a href="routines.html">routines</a></li> <li><a href="routines.html">routines</a></li>
</ul> </ul>
</div> </div>
@ -87,72 +75,6 @@
<td class="name" nowrap="nowrap"><a href="Client.html">Client</a></td> <td class="name" nowrap="nowrap"><a href="Client.html">Client</a></td>
<td class="summary"> <td class="summary">
<p>The CLIENT models client units in multi player missions.</p> <p>The CLIENT models client units in multi player missions.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSAirbase.html">DCSAirbase</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSCommand.html">DCSCommand</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSController.html">DCSController</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSGroup.html">DCSGroup</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSObject.html">DCSObject</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSTask.html">DCSTask</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSTypes.html">DCSTypes</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSUnit.html">DCSUnit</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCSWorld.html">DCSWorld</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="DCStimer.html">DCStimer</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -237,6 +159,12 @@
<td class="name" nowrap="nowrap"><a href="Message.html">Message</a></td> <td class="name" nowrap="nowrap"><a href="Message.html">Message</a></td>
<td class="summary"> <td class="summary">
<p>Message System to display Messages for Clients and Coalitions or All.</p> <p>Message System to display Messages for Clients and Coalitions or All.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="MissileTrainer.html">MissileTrainer</a></td>
<td class="summary">
<p>Provides missile training functions.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -261,6 +189,12 @@
<td class="name" nowrap="nowrap"><a href="STAGE.html">STAGE</a></td> <td class="name" nowrap="nowrap"><a href="STAGE.html">STAGE</a></td>
<td class="summary"> <td class="summary">
<p>Stages within a <a href="TASK.html">TASK</a> within a <a href="MISSION.html">MISSION</a>.</p> <p>Stages within a <a href="TASK.html">TASK</a> within a <a href="MISSION.html">MISSION</a>.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="Scheduler.html">Scheduler</a></td>
<td class="summary">
<p>Models time events calling event handing functions.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -279,12 +213,6 @@
<td class="name" nowrap="nowrap"><a href="Spawn.html">Spawn</a></td> <td class="name" nowrap="nowrap"><a href="Spawn.html">Spawn</a></td>
<td class="summary"> <td class="summary">
<p>Dynamic spawning of groups (and units).</p> <p>Dynamic spawning of groups (and units).</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="StaticObject.html">StaticObject</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -303,18 +231,6 @@
<td class="name" nowrap="nowrap"><a href="Zone.html">Zone</a></td> <td class="name" nowrap="nowrap"><a href="Zone.html">Zone</a></td>
<td class="summary"> <td class="summary">
<p>ZONE Classes</p> <p>ZONE Classes</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="env.html">env</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="land.html">land</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>

View File

@ -21,17 +21,6 @@
<li><a href="CARGO.html">CARGO</a></li> <li><a href="CARGO.html">CARGO</a></li>
<li><a href="CleanUp.html">CleanUp</a></li> <li><a href="CleanUp.html">CleanUp</a></li>
<li><a href="Client.html">Client</a></li> <li><a href="Client.html">Client</a></li>
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
<li><a href="DCSCommand.html">DCSCommand</a></li>
<li><a href="DCSController.html">DCSController</a></li>
<li><a href="DCSGroup.html">DCSGroup</a></li>
<li><a href="DCSObject.html">DCSObject</a></li>
<li><a href="DCSTask.html">DCSTask</a></li>
<li><a href="DCSTypes.html">DCSTypes</a></li>
<li><a href="DCSUnit.html">DCSUnit</a></li>
<li><a href="DCSWorld.html">DCSWorld</a></li>
<li><a href="DCStimer.html">DCStimer</a></li>
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li> <li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li> <li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li> <li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
@ -46,19 +35,18 @@
<li><a href="MOVEMENT.html">MOVEMENT</a></li> <li><a href="MOVEMENT.html">MOVEMENT</a></li>
<li><a href="Menu.html">Menu</a></li> <li><a href="Menu.html">Menu</a></li>
<li><a href="Message.html">Message</a></li> <li><a href="Message.html">Message</a></li>
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
<li><a href="NOTASK.html">NOTASK</a></li> <li><a href="NOTASK.html">NOTASK</a></li>
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li> <li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
<li><a href="ROUTETASK.html">ROUTETASK</a></li> <li><a href="ROUTETASK.html">ROUTETASK</a></li>
<li><a href="STAGE.html">STAGE</a></li> <li><a href="STAGE.html">STAGE</a></li>
<li><a href="Scheduler.html">Scheduler</a></li>
<li><a href="Scoring.html">Scoring</a></li> <li><a href="Scoring.html">Scoring</a></li>
<li><a href="Sead.html">Sead</a></li> <li><a href="Sead.html">Sead</a></li>
<li><a href="Spawn.html">Spawn</a></li> <li><a href="Spawn.html">Spawn</a></li>
<li><a href="StaticObject.html">StaticObject</a></li>
<li><a href="TASK.html">TASK</a></li> <li><a href="TASK.html">TASK</a></li>
<li><a href="Unit.html">Unit</a></li> <li><a href="Unit.html">Unit</a></li>
<li><a href="Zone.html">Zone</a></li> <li><a href="Zone.html">Zone</a></li>
<li><a href="env.html">env</a></li>
<li><a href="land.html">land</a></li>
<li>routines</li> <li>routines</li>
</ul> </ul>
</div> </div>

View File

@ -5,14 +5,16 @@ echo env.info( 'Moose Embedded' ) > Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Routines.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Routines.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Base.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Base.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Event.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Event.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Menu.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Group.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Group.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Unit.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Unit.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Zone.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Zone.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Client.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Database.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Database.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Moose.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Moose.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Scheduler.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Scoring.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Scoring.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Cargo.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Cargo.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Client.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Message.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Message.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Stage.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Stage.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Task.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Task.lua Moose_Embedded.lua
@ -31,3 +33,4 @@ copy /b Moose_Embedded.lua + ..\Moose\Spawn.lua Moose_Embedded.l
copy /b Moose_Embedded.lua + ..\Moose\Movement.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Movement.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Sead.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Sead.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\Escort.lua Moose_Embedded.lua copy /b Moose_Embedded.lua + ..\Moose\Escort.lua Moose_Embedded.lua
copy /b Moose_Embedded.lua + ..\Moose\MissileTrainer.lua Moose_Embedded.lua

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,31 +0,0 @@
rem Generate Moose_Embedded.lua
copy Trace.lua ^
+ Routines.lua ^
+ Base.lua ^
+ Menu.lua ^
+ Group.lua ^
+ Unit.lua ^
+ Zone.lua ^
+ Database.lua ^
+ Cargo.lua ^
+ Client.lua ^
+ Message.lua ^
+ Stage.lua ^
+ Task.lua ^
+ GoHomeTask.lua ^
+ DestroyBaseTask.lua ^
+ DestroyGroupsTask.lua ^
+ DestroyRadarsTask.lua ^
+ DestroyUnitTypesTask.lua ^
+ PickupTask.lua ^
+ DeployTask.lua ^
+ NoTask.lua ^
+ RouteTask.lua ^
+ Mission.lua ^
+ CleanUp.lua ^
+ Spawn.lua ^
+ Movement.lua ^
+ Sead.lua ^
Moose_Embedded.lua

View File

@ -1,4 +1,3 @@
local base = _G local base = _G
env.info("Loading MOOSE " .. base.timer.getAbsTime() ) env.info("Loading MOOSE " .. base.timer.getAbsTime() )

Binary file not shown.

View File

@ -353,6 +353,7 @@ end
-- @param #number Level -- @param #number Level
function BASE:TraceLevel( Level ) function BASE:TraceLevel( Level )
_TraceLevel = Level _TraceLevel = Level
self:E( "Tracing level " .. Level )
end end
--- Set tracing for a class --- Set tracing for a class
@ -361,6 +362,7 @@ end
function BASE:TraceClass( Class ) function BASE:TraceClass( Class )
_TraceClass[Class] = true _TraceClass[Class] = true
_TraceClassMethod[Class] = {} _TraceClassMethod[Class] = {}
self:E( "Tracing class " .. Class )
end end
--- Set tracing for a specific method of class --- Set tracing for a specific method of class
@ -373,6 +375,7 @@ function BASE:TraceClassMethod( Class, Method )
_TraceClassMethod[Class].Method = {} _TraceClassMethod[Class].Method = {}
end end
_TraceClassMethod[Class].Method[Method] = true _TraceClassMethod[Class].Method[Method] = true
self:E( "Tracing method " .. Method .. " of class " .. Class )
end end
--- Trace a function call. Must be at the beginning of the function logic. --- Trace a function call. Must be at the beginning of the function logic.

View File

@ -31,18 +31,31 @@ CARGO_ZONE = {
} }
} }
function CARGO_ZONE:New( CargoZoneName, CargoHostName ) local self = BASE:Inherit( self, BASE:New() ) --- Creates a new zone where cargo can be collected or deployed.
-- The zone functionality is useful to smoke or indicate routes for cargo pickups or deployments.
-- Provide the zone name as declared in the mission file into the CargoZoneName in the :New method.
-- An optional parameter is the CargoHostName, which is a Group declared with Late Activation switched on in the mission file.
-- The CargoHostName is the "host" of the cargo zone:
--
-- * It will smoke the zone position when a client is approaching the zone.
-- * Depending on the cargo type, it will assist in the delivery of the cargo by driving to and from the client.
--
-- @param #CARGO_ZONE self
-- @param #string CargoZoneName The name of the zone as declared within the mission editor.
-- @param #string CargoHostName The name of the Group "hosting" the zone. The Group MUST NOT be a static, and must be a "mobile" unit.
function CARGO_ZONE:New( CargoZoneName, CargoHostName ) local self = BASE:Inherit( self, ZONE:New( CargoZoneName ) )
self:F( { CargoZoneName, CargoHostName } ) self:F( { CargoZoneName, CargoHostName } )
self.CargoZoneName = CargoZoneName self.CargoZoneName = CargoZoneName
self.CargoZone = trigger.misc.getZone( CargoZoneName ) self.SignalHeight = 2
--self.CargoZone = trigger.misc.getZone( CargoZoneName )
if CargoHostName then if CargoHostName then
self.CargoHostName = CargoHostName self.CargoHostName = CargoHostName
end end
self:T( self.CargoZone ) self:T( self.CargoZoneName )
return self return self
end end
@ -50,17 +63,19 @@ end
function CARGO_ZONE:Spawn() function CARGO_ZONE:Spawn()
self:F( self.CargoHostName ) self:F( self.CargoHostName )
if self.CargoHostSpawn then if self.CargoHostName then -- Only spawn a host in the zone when there is one given as a parameter in the New function.
local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex() if self.CargoHostSpawn then
if CargoHostGroup and CargoHostGroup:IsAlive() then local CargoHostGroup = self.CargoHostSpawn:GetGroupFromIndex()
else if CargoHostGroup and CargoHostGroup:IsAlive() then
self.CargoHostSpawn:ReSpawn( 1 ) else
end self.CargoHostSpawn:ReSpawn( 1 )
else end
self:T( "Initialize CargoHostSpawn" ) else
self.CargoHostSpawn = SPAWN:New( self.CargoHostName ):Limit( 1, 1 ) self:T( "Initialize CargoHostSpawn" )
self.CargoHostSpawn:ReSpawn( 1 ) self.CargoHostSpawn = SPAWN:New( self.CargoHostName ):Limit( 1, 1 )
end self.CargoHostSpawn:ReSpawn( 1 )
end
end
return self return self
end end
@ -114,6 +129,7 @@ function CARGO_ZONE:ReportCargosToClient( Client, CargoType )
end end
end end
function CARGO_ZONE:Signal() function CARGO_ZONE:Signal()
self:F() self:F()
@ -148,16 +164,15 @@ function CARGO_ZONE:Signal()
else else
local CurrentPosition = { x = self.CargoZone.point.x, y = self.CargoZone.point.z } local ZonePointVec3 = self:GetPointVec3( self.SignalHeight ) -- Get the zone position + the landheight + 2 meters
self.CargoZone.point.y = land.getHeight( CurrentPosition ) + 2
if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then if self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.SMOKE.ID then
trigger.action.smoke( self.CargoZone.point, self.SignalColor.TRIGGERCOLOR ) trigger.action.smoke( ZonePointVec3, self.SignalColor.TRIGGERCOLOR )
Signalled = true Signalled = true
elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then elseif self.SignalType.ID == CARGO_ZONE.SIGNAL.TYPE.FLARE.ID then
trigger.action.signalFlare( self.CargoZone.point, self.SignalColor.TRIGGERCOLOR, 0 ) trigger.action.signalFlare( ZonePointVec3, self.SignalColor.TRIGGERCOLOR, 0 )
Signalled = false Signalled = false
end end
@ -168,85 +183,121 @@ function CARGO_ZONE:Signal()
end end
function CARGO_ZONE:WhiteSmoke() function CARGO_ZONE:WhiteSmoke( SignalHeight )
self:F() self:F()
self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE
self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE
if SignalHeight then
self.SignalHeight = SignalHeight
end
return self return self
end end
function CARGO_ZONE:BlueSmoke() function CARGO_ZONE:BlueSmoke( SignalHeight )
self:F() self:F()
self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE
self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.BLUE self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.BLUE
if SignalHeight then
self.SignalHeight = SignalHeight
end
return self return self
end end
function CARGO_ZONE:RedSmoke() function CARGO_ZONE:RedSmoke( SignalHeight )
self:F() self:F()
self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE
self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED
if SignalHeight then
self.SignalHeight = SignalHeight
end
return self return self
end end
function CARGO_ZONE:OrangeSmoke() function CARGO_ZONE:OrangeSmoke( SignalHeight )
self:F() self:F()
self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE
self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.ORANGE self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.ORANGE
if SignalHeight then
self.SignalHeight = SignalHeight
end
return self return self
end end
function CARGO_ZONE:GreenSmoke() function CARGO_ZONE:GreenSmoke( SignalHeight )
self:F() self:F()
self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE self.SignalType = CARGO_ZONE.SIGNAL.TYPE.SMOKE
self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN
if SignalHeight then
self.SignalHeight = SignalHeight
end
return self return self
end end
function CARGO_ZONE:WhiteFlare() function CARGO_ZONE:WhiteFlare( SignalHeight )
self:F() self:F()
self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE
self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.WHITE
if SignalHeight then
self.SignalHeight = SignalHeight
end
return self return self
end end
function CARGO_ZONE:RedFlare() function CARGO_ZONE:RedFlare( SignalHeight )
self:F() self:F()
self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE
self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.RED
if SignalHeight then
self.SignalHeight = SignalHeight
end
return self return self
end end
function CARGO_ZONE:GreenFlare() function CARGO_ZONE:GreenFlare( SignalHeight )
self:F() self:F()
self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE
self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.GREEN
if SignalHeight then
self.SignalHeight = SignalHeight
end
return self return self
end end
function CARGO_ZONE:YellowFlare() function CARGO_ZONE:YellowFlare( SignalHeight )
self:F() self:F()
self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE self.SignalType = CARGO_ZONE.SIGNAL.TYPE.FLARE
self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.YELLOW self.SignalColor = CARGO_ZONE.SIGNAL.COLOR.YELLOW
if SignalHeight then
self.SignalHeight = SignalHeight
end
return self return self
end end
@ -517,6 +568,7 @@ function CARGO_GROUP:Spawn( Client )
self.CargoGroupName = self.CargoSpawn:SpawnFromUnit( self.CargoZone:GetCargoHostUnit(), 60, 30, 1 ):GetName() self.CargoGroupName = self.CargoSpawn:SpawnFromUnit( self.CargoZone:GetCargoHostUnit(), 60, 30, 1 ):GetName()
else else
--- ReSpawn the Cargo in the CargoZone without a host ... --- ReSpawn the Cargo in the CargoZone without a host ...
self:T( self.CargoZone )
self.CargoGroupName = self.CargoSpawn:SpawnInZone( self.CargoZone, true, 1 ):GetName() self.CargoGroupName = self.CargoSpawn:SpawnInZone( self.CargoZone, true, 1 ):GetName()
end end
self:StatusNone() self:StatusNone()
@ -557,64 +609,72 @@ function CARGO_GROUP:OnBoard( Client, LandingZone, OnBoardSide )
local CargoGroup = Group.getByName( self.CargoGroupName ) local CargoGroup = Group.getByName( self.CargoGroupName )
local CargoUnits = CargoGroup:getUnits() local CargoUnit = CargoGroup:getUnit(1)
local CargoPos = CargoUnits[1]:getPoint() local CargoPos = CargoUnit:getPoint()
self.CargoInAir = CargoUnit:inAir()
local Points = {} self:T( self.CargoInAir )
self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z ) -- Only move the group to the carrier when the cargo is not in the air
self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z ) -- (eg. cargo can be on a oil derrick, moving the cargo on the oil derrick will drop the cargo on the sea).
if not self.CargoInAir then
Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 ) local Points = {}
self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y ) self:T( 'CargoPos x = ' .. CargoPos.x .. " z = " .. CargoPos.z )
self:T( 'CarrierPosMove x = ' .. CarrierPosMove.x .. " z = " .. CarrierPosMove.z )
if OnBoardSide == nil then Points[#Points+1] = routines.ground.buildWP( CargoPos, "Cone", 10 )
OnBoardSide = CLIENT.ONBOARDSIDE.NONE
end
if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then self:T( 'Points[1] x = ' .. Points[1].x .. " y = " .. Points[1].y )
self:T( "TransportCargoOnBoard: Onboarding LEFT" ) if OnBoardSide == nil then
CarrierPosMove.z = CarrierPosMove.z - 25 OnBoardSide = CLIENT.ONBOARDSIDE.NONE
CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5 end
Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 )
Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 )
elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then if OnBoardSide == CLIENT.ONBOARDSIDE.LEFT then
self:T( "TransportCargoOnBoard: Onboarding RIGHT" ) self:T( "TransportCargoOnBoard: Onboarding LEFT" )
CarrierPosMove.z = CarrierPosMove.z + 25 CarrierPosMove.z = CarrierPosMove.z - 25
CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5 CarrierPosOnBoard.z = CarrierPosOnBoard.z - 5
Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 )
Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 )
elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then elseif OnBoardSide == CLIENT.ONBOARDSIDE.RIGHT then
self:T( "TransportCargoOnBoard: Onboarding BACK" ) self:T( "TransportCargoOnBoard: Onboarding RIGHT" )
CarrierPosMove.x = CarrierPosMove.x - 25 CarrierPosMove.z = CarrierPosMove.z + 25
CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5 CarrierPosOnBoard.z = CarrierPosOnBoard.z + 5
Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 )
Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 )
elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then elseif OnBoardSide == CLIENT.ONBOARDSIDE.BACK then
self:T( "TransportCargoOnBoard: Onboarding FRONT" ) self:T( "TransportCargoOnBoard: Onboarding BACK" )
CarrierPosMove.x = CarrierPosMove.x + 25 CarrierPosMove.x = CarrierPosMove.x - 25
CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5 CarrierPosOnBoard.x = CarrierPosOnBoard.x - 5
Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 ) Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 )
Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 ) Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 )
elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then elseif OnBoardSide == CLIENT.ONBOARDSIDE.FRONT then
self:T( "TransportCargoOnBoard: Onboarding CENTRAL" ) self:T( "TransportCargoOnBoard: Onboarding FRONT" )
Points[#Points+1] = routines.ground.buildWP( CarrierPos, "Cone", 10 ) CarrierPosMove.x = CarrierPosMove.x + 25
CarrierPosOnBoard.x = CarrierPosOnBoard.x + 5
Points[#Points+1] = routines.ground.buildWP( CarrierPosMove, "Cone", 10 )
Points[#Points+1] = routines.ground.buildWP( CarrierPosOnBoard, "Cone", 10 )
end elseif OnBoardSide == CLIENT.ONBOARDSIDE.NONE then
self:T( "TransportCargoOnBoard: Routing " .. self.CargoGroupName )
routines.scheduleFunction( routines.goRoute, { self.CargoGroupName, Points}, timer.getTime() + 4 ) self:T( "TransportCargoOnBoard: Onboarding CENTRAL" )
Points[#Points+1] = routines.ground.buildWP( CarrierPos, "Cone", 10 )
end
self:T( "TransportCargoOnBoard: Routing " .. self.CargoGroupName )
routines.scheduleFunction( routines.goRoute, { self.CargoGroupName, Points}, timer.getTime() + 4 )
end
self:StatusLoading( Client ) self:StatusLoading( Client )
@ -628,12 +688,19 @@ function CARGO_GROUP:OnBoarded( Client, LandingZone )
local OnBoarded = false local OnBoarded = false
local CargoGroup = Group.getByName( self.CargoGroupName ) local CargoGroup = Group.getByName( self.CargoGroupName )
if routines.IsPartOfGroupInRadius( CargoGroup, Client:ClientPosition(), 25 ) then
CargoGroup:destroy() if not self.CargoInAir then
self:StatusLoaded( Client ) if routines.IsPartOfGroupInRadius( CargoGroup, Client:ClientPosition(), 25 ) then
OnBoarded = true CargoGroup:destroy()
end self:StatusLoaded( Client )
OnBoarded = true
end
else
CargoGroup:destroy()
self:StatusLoaded( Client )
OnBoarded = true
end
return OnBoarded return OnBoarded
end end

View File

@ -1,6 +1,18 @@
--- The CLIENT models client units in multi player missions. --- The CLIENT models client units in multi player missions.
-- Clients are those groups defined within the Mission Editor that have the skillset defined as "Client" or "Player". --
-- Note that clients are NOT the same as groups, they are NOT necessarily alive. -- @{#CLIENT} class
-- ================
-- Clients are those **Units** defined within the Mission Editor that have the skillset defined as __Client__ or __Player__.
-- Note that clients are NOT the same as Units, they are NOT necessarily alive.
--
-- Clients are being used by the @{MISSION} class to follow players and register their successes.
--
-- CLIENT construction methods:
-- ============================
-- Create a new CLIENT object with the @{#CLIENT.New} method:
--
-- * @{#CLIENT.New}: Creates a new CLIENT object taking the name of the **DCSUnit** that is a client as defined within the mission editor.
--
-- @module Client -- @module Client
-- @author FlightControl -- @author FlightControl
@ -33,9 +45,9 @@ CLIENT = {
} }
--- Use this method to register new Clients within the MOF. --- Use this method to register new Clients within a mission.
-- @param #CLIENT self -- @param #CLIENT self
-- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client. -- @param #string ClientName Name of the DCS **Unit** as defined within the Mission Editor.
-- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client. -- @param #string ClientBriefing Text that describes the briefing of the mission when a Player logs into the Client.
-- @return #CLIENT -- @return #CLIENT
-- @usage -- @usage
@ -51,7 +63,7 @@ function CLIENT:New( ClientName, ClientBriefing )
local self = BASE:Inherit( self, BASE:New() ) local self = BASE:Inherit( self, BASE:New() )
self:F( ClientName, ClientBriefing ) self:F( ClientName, ClientBriefing )
self.ClientName = ClientName self.ClientName = ClientName
self:AddBriefing( ClientBriefing ) self:AddBriefing( ClientBriefing )
self.MessageSwitch = true self.MessageSwitch = true
@ -132,9 +144,9 @@ end
function CLIENT:IsAlive() function CLIENT:IsAlive()
self:F( self.ClientName ) self:F( self.ClientName )
local ClientDCSGroup = self:GetDCSGroup() local ClientUnit = Unit.getByName( self.ClientName )
if ClientDCSGroup then if ClientUnit and ClientUnit:isExist() then
self:T("true") self:T("true")
return true return true
end end
@ -176,6 +188,8 @@ function CLIENT:GetDCSGroup()
-- return nil -- return nil
-- end -- end
local ClientUnit = Unit.getByName( self.ClientName )
local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) } local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) }
for CoalitionId, CoalitionData in pairs( CoalitionsData ) do for CoalitionId, CoalitionData in pairs( CoalitionsData ) do
self:T3( { "CoalitionData:", CoalitionData } ) self:T3( { "CoalitionData:", CoalitionData } )
@ -183,49 +197,49 @@ function CLIENT:GetDCSGroup()
self:T3( { "UnitData:", UnitData } ) self:T3( { "UnitData:", UnitData } )
if UnitData and UnitData:isExist() then if UnitData and UnitData:isExist() then
local ClientGroup = Group.getByName( self.ClientName ) --self:E(self.ClientName)
if ClientGroup then if ClientUnit then
self:T3( "ClientGroup = " .. self.ClientName ) local ClientGroup = ClientUnit:getGroup()
if ClientGroup:isExist() then if ClientGroup then
if ClientGroup:getID() == UnitData:getGroup():getID() then self:T3( "ClientGroup = " .. self.ClientName )
self:T3( "Normal logic" ) if ClientGroup:isExist() and UnitData:getGroup():isExist() then
self:T3( self.ClientName .. " : group found!" ) if ClientGroup:getID() == UnitData:getGroup():getID() then
return ClientGroup self:T3( "Normal logic" )
end self:T3( self.ClientName .. " : group found!" )
else self.ClientGroupID = ClientGroup:getID()
-- Now we need to resolve the bugs in DCS 1.5 ... self.ClientGroupName = ClientGroup:getName()
-- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil) return ClientGroup
self:T3( "Bug 1.5 logic" ) end
local ClientUnits = _DATABASE.Groups[self.ClientName].Units else
self:T3( { ClientUnits[1].name, env.getValueDictByKey(ClientUnits[1].name) } ) -- Now we need to resolve the bugs in DCS 1.5 ...
for ClientUnitID, ClientUnitData in pairs( ClientUnits ) do -- Consult the database for the units of the Client Group. (ClientGroup:getUnits() returns nil)
self:T3( { tonumber(UnitData:getID()), ClientUnitData.unitId } ) self:T3( "Bug 1.5 logic" )
if tonumber(UnitData:getID()) == ClientUnitData.unitId then local ClientGroupTemplate = _DATABASE.Templates.Units[self.ClientName].GroupTemplate
local ClientGroupTemplate = _DATABASE.Groups[self.ClientName].Template self.ClientGroupID = ClientGroupTemplate.groupId
self.ClientID = ClientGroupTemplate.groupId self.ClientGroupName = _DATABASE.Templates.Units[self.ClientName].GroupName
self.ClientGroupUnit = UnitData self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" )
self:T3( self.ClientName .. " : group found in bug 1.5 resolvement logic!" ) return ClientGroup
return ClientGroup end
end -- else
end -- error( "Client " .. self.ClientName .. " not found!" )
end end
-- else end
-- error( "Client " .. self.ClientName .. " not found!" )
end
end end
end end
end end
-- For non player clients -- For non player clients
local ClientGroup = Group.getByName( self.ClientName ) if ClientUnit then
if ClientGroup then local ClientGroup = ClientUnit:getGroup()
self:T3( "ClientGroup = " .. self.ClientName ) if ClientGroup then
if ClientGroup:isExist() then self:T3( "ClientGroup = " .. self.ClientName )
self:T3( "Normal logic" ) if ClientGroup:isExist() then
self:T3( self.ClientName .. " : group found!" ) self:T3( "Normal logic" )
return ClientGroup self:T3( self.ClientName .. " : group found!" )
end return ClientGroup
end end
end
end
self.ClientGroupID = nil self.ClientGroupID = nil
self.ClientGroupUnit = nil self.ClientGroupUnit = nil
@ -240,16 +254,9 @@ end
-- @return DCSTypes#Group.ID -- @return DCSTypes#Group.ID
function CLIENT:GetClientGroupID() function CLIENT:GetClientGroupID()
if not self.ClientGroupID then local ClientGroup = self:GetDCSGroup()
local ClientGroup = self:GetDCSGroup()
if ClientGroup and ClientGroup:isExist() then
self.ClientGroupID = ClientGroup:getID()
else
self.ClientGroupID = self.ClientID
end
end
self:T( self.ClientGroupID ) --self:E( self.ClientGroupID ) -- Determined in GetDCSGroup()
return self.ClientGroupID return self.ClientGroupID
end end
@ -259,16 +266,9 @@ end
-- @return #string -- @return #string
function CLIENT:GetClientGroupName() function CLIENT:GetClientGroupName()
if not self.ClientGroupName then local ClientGroup = self:GetDCSGroup()
local ClientGroup = self:GetDCSGroup()
if ClientGroup and ClientGroup:isExist() then
self.ClientGroupName = ClientGroup:getName()
else
self.ClientGroupName = self.ClientName
end
end
self:T( self.ClientGroupName ) self:T( self.ClientGroupName ) -- Determined in GetDCSGroup()
return self.ClientGroupName return self.ClientGroupName
end end
@ -276,14 +276,15 @@ end
-- @param #CLIENT self -- @param #CLIENT self
-- @return Unit#UNIT -- @return Unit#UNIT
function CLIENT:GetClientGroupUnit() function CLIENT:GetClientGroupUnit()
self:F() self:F2()
local ClientGroup = self:GetDCSGroup() local ClientDCSUnit = Unit.getByName( self.ClientName )
if ClientGroup and ClientGroup:isExist() then self:T( self.ClientDCSUnit )
return UNIT:New( ClientGroup:getUnit(1) ) if ClientDCSUnit and ClientDCSUnit:isExist() then
else local ClientUnit = _DATABASE.Units[ self.ClientName ]
return UNIT:New( self.ClientGroupUnit ) self:T2( ClientUnit )
return ClientUnit
end end
end end
@ -293,12 +294,11 @@ end
function CLIENT:GetClientGroupDCSUnit() function CLIENT:GetClientGroupDCSUnit()
self:F2() self:F2()
local ClientGroup = self:GetDCSGroup() local ClientDCSUnit = Unit.getByName( self.ClientName )
if ClientGroup and ClientGroup:isExist() then if ClientDCSUnit and ClientDCSUnit:isExist() then
return ClientGroup:getUnit(1) self:T2( ClientDCSUnit )
else return ClientDCSUnit
return self.ClientGroupUnit
end end
end end
@ -315,7 +315,7 @@ end
function CLIENT:GetPointVec2() function CLIENT:GetPointVec2()
self:F() self:F()
ClientGroupUnit = self:GetClientGroupDCSUnit() local ClientGroupUnit = self:GetClientGroupDCSUnit()
if ClientGroupUnit then if ClientGroupUnit then
if ClientGroupUnit:isExist() then if ClientGroupUnit:isExist() then
@ -331,6 +331,44 @@ function CLIENT:GetPointVec2()
return nil return nil
end end
function CLIENT:GetPositionVec3()
self:F( self.ClientName )
local DCSUnit = Unit.getByName( self.ClientName )
local UnitPos = DCSUnit:getPosition().p
self:T( UnitPos )
return UnitPos
end
function CLIENT:GetID()
self:F( self.ClientName )
local DCSUnit = Unit.getByName( self.ClientName )
local UnitID = DCSUnit:getID()
self:T( UnitID )
return UnitID
end
function CLIENT:GetName()
self:F( self.ClientName )
self:T( self.ClientName )
return self.ClientName
end
function CLIENT:GetTypeName()
self:F( self.ClientName )
local DCSUnit = Unit.getByName( self.ClientName )
local TypeName = DCSUnit:getTypeName()
self:T( TypeName )
return TypeName
end
--- Returns the position of the CLIENT in @{DCSTypes#Vec3} format. --- Returns the position of the CLIENT in @{DCSTypes#Vec3} format.
-- @param #CLIENT self -- @param #CLIENT self
@ -338,7 +376,7 @@ end
function CLIENT:ClientPosition() function CLIENT:ClientPosition()
self:F() self:F()
ClientGroupUnit = self:GetClientGroupDCSUnit() local ClientGroupUnit = self:GetClientGroupDCSUnit()
if ClientGroupUnit then if ClientGroupUnit then
if ClientGroupUnit:isExist() then if ClientGroupUnit:isExist() then
@ -355,7 +393,7 @@ end
function CLIENT:GetAltitude() function CLIENT:GetAltitude()
self:F() self:F()
ClientGroupUnit = self:GetClientGroupDCSUnit() local ClientGroupUnit = self:GetClientGroupDCSUnit()
if ClientGroupUnit then if ClientGroupUnit then
if ClientGroupUnit:isExist() then if ClientGroupUnit:isExist() then

View File

@ -66,25 +66,35 @@ Include.File( "Routines" )
Include.File( "Base" ) Include.File( "Base" )
Include.File( "Menu" ) Include.File( "Menu" )
Include.File( "Group" ) Include.File( "Group" )
Include.File( "Unit" )
Include.File( "Event" ) Include.File( "Event" )
Include.File( "Client" )
--- DATABASE class --- DATABASE class
-- @type DATABASE -- @type DATABASE
-- @extends Base#BASE -- @extends Base#BASE
DATABASE = { DATABASE = {
ClassName = "DATABASE", ClassName = "DATABASE",
Templates = {
Units = {},
Groups = {},
ClientsByName = {},
ClientsByID = {},
},
DCSUnits = {}, DCSUnits = {},
DCSUnitsAlive = {}, DCSUnitsAlive = {},
Units = {},
Groups = {},
DCSGroups = {}, DCSGroups = {},
DCSGroupsAlive = {}, DCSGroupsAlive = {},
Units = {},
UnitsAlive = {},
Groups = {},
GroupsAlive = {},
NavPoints = {}, NavPoints = {},
Statics = {}, Statics = {},
Players = {}, Players = {},
AlivePlayers = {}, PlayersAlive = {},
ClientsByName = {}, Clients = {},
ClientsByID = {}, ClientsAlive = {},
Filter = { Filter = {
Coalitions = nil, Coalitions = nil,
Categories = nil, Categories = nil,
@ -140,6 +150,14 @@ function DATABASE:New()
_EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self ) _EVENTDISPATCHER:OnDead( self._EventOnDeadOrCrash, self )
_EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self ) _EVENTDISPATCHER:OnCrash( self._EventOnDeadOrCrash, self )
-- Add database with registered clients and already alive players
-- Follow alive players and clients
_EVENTDISPATCHER:OnPlayerEnterUnit( self._EventOnPlayerEnterUnit, self )
_EVENTDISPATCHER:OnPlayerLeaveUnit( self._EventOnPlayerLeaveUnit, self )
return self return self
end end
@ -260,16 +278,43 @@ function DATABASE:FilterStart()
-- OK, we have a _DATABASE -- OK, we have a _DATABASE
-- Now use the different filters to build the set. -- Now use the different filters to build the set.
-- We first take ALL of the Units of the _DATABASE. -- We first take ALL of the Units of the _DATABASE.
for UnitRegistrationID, UnitRegistration in pairs( _DATABASE.Units ) do
self:T( UnitRegistration ) self:E( { "Adding Database Datapoints with filters" } )
local DCSUnit = Unit.getByName( UnitRegistration.UnitName ) for DCSUnitName, DCSUnit in pairs( _DATABASE.DCSUnits ) do
if self:_IsIncludeDCSUnit( DCSUnit ) then if self:_IsIncludeDCSUnit( DCSUnit ) then
self.DCSUnits[DCSUnit:getName()] = DCSUnit
end self:E( { "Adding Unit:", DCSUnitName } )
if self:_IsAliveDCSUnit( DCSUnit ) then self.DCSUnits[DCSUnitName] = _DATABASE.DCSUnits[DCSUnitName]
self.DCSUnitsAlive[DCSUnit:getName()] = DCSUnit self.Units[DCSUnitName] = _DATABASE.Units[DCSUnitName]
if _DATABASE.DCSUnitsAlive[DCSUnitName] then
self.DCSUnitsAlive[DCSUnitName] = _DATABASE.DCSUnitsAlive[DCSUnitName]
self.UnitsAlive[DCSUnitName] = _DATABASE.UnitsAlive[DCSUnitName]
end
end end
end end
for DCSGroupName, DCSGroup in pairs( _DATABASE.DCSGroups ) do
--if self:_IsIncludeDCSGroup( DCSGroup ) then
self:E( { "Adding Group:", DCSGroupName } )
self.DCSGroups[DCSGroupName] = _DATABASE.DCSGroups[DCSGroupName]
self.Groups[DCSGroupName] = _DATABASE.Groups[DCSGroupName]
--end
if _DATABASE.DCSGroupsAlive[DCSGroupName] then
self.DCSGroupsAlive[DCSGroupName] = _DATABASE.DCSGroupsAlive[DCSGroupName]
self.GroupsAlive[DCSGroupName] = _DATABASE.GroupsAlive[DCSGroupName]
end
end
for DCSUnitName, Client in pairs( _DATABASE.Clients ) do
self:E( { "Adding Client for Unit:", DCSUnitName } )
self.Clients[DCSUnitName] = _DATABASE.Clients[DCSUnitName]
end
else else
self:E( "There is a structural error in MOOSE. No _DATABASE has been defined! Cannot build this custom DATABASE." ) self:E( "There is a structural error in MOOSE. No _DATABASE has been defined! Cannot build this custom DATABASE." )
end end
@ -282,6 +327,9 @@ end
-- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined: -- This method expects EXACTLY the same structure as a structure within the ME, and needs 2 additional fields defined:
-- SpawnCountryID, SpawnCategoryID -- SpawnCountryID, SpawnCategoryID
-- This method is used by the SPAWN class. -- This method is used by the SPAWN class.
-- @param #DATABASE self
-- @param #table SpawnTemplate
-- @return #DATABASE self
function DATABASE:Spawn( SpawnTemplate ) function DATABASE:Spawn( SpawnTemplate )
self:F( SpawnTemplate.name ) self:F( SpawnTemplate.name )
@ -315,7 +363,7 @@ end
function DATABASE:SetStatusGroup( GroupName, Status ) function DATABASE:SetStatusGroup( GroupName, Status )
self:F( Status ) self:F( Status )
self.Groups[GroupName].Status = Status self.Templates.Groups[GroupName].Status = Status
end end
@ -323,47 +371,127 @@ end
function DATABASE:GetStatusGroup( GroupName ) function DATABASE:GetStatusGroup( GroupName )
self:F( Status ) self:F( Status )
if self.Groups[GroupName] then if self.Templates.Groups[GroupName] then
return self.Groups[GroupName].Status return self.Templates.Groups[GroupName].Status
else else
return "" return ""
end end
end end
--- Registers new Group Templates within the DATABASE Object. --- Private method that registers new Group Templates within the DATABASE Object.
-- @param #DATABASE self
-- @param #table GroupTemplate
-- @return #DATABASE self
function DATABASE:_RegisterGroup( GroupTemplate ) function DATABASE:_RegisterGroup( GroupTemplate )
local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name) local GroupTemplateName = env.getValueDictByKey(GroupTemplate.name)
if not self.Groups[GroupTemplateName] then if not self.Templates.Groups[GroupTemplateName] then
self.Groups[GroupTemplateName] = {} self.Templates.Groups[GroupTemplateName] = {}
self.Groups[GroupTemplateName].Status = nil self.Templates.Groups[GroupTemplateName].Status = nil
end end
self.Groups[GroupTemplateName].GroupName = GroupTemplateName
self.Groups[GroupTemplateName].Template = GroupTemplate
self.Groups[GroupTemplateName].groupId = GroupTemplate.groupId
self.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units
self.Groups[GroupTemplateName].Units = GroupTemplate.units
self:T( { "Group", self.Groups[GroupTemplateName].GroupName, self.Groups[GroupTemplateName].UnitCount } ) -- Delete the spans from the route, it is not needed and takes memory.
if GroupTemplate.route and GroupTemplate.route.spans then
GroupTemplate.route.spans = nil
end
for unit_num, UnitTemplate in pairs(GroupTemplate.units) do self.Templates.Groups[GroupTemplateName].GroupName = GroupTemplateName
self.Templates.Groups[GroupTemplateName].Template = GroupTemplate
self.Templates.Groups[GroupTemplateName].groupId = GroupTemplate.groupId
self.Templates.Groups[GroupTemplateName].UnitCount = #GroupTemplate.units
self.Templates.Groups[GroupTemplateName].Units = GroupTemplate.units
self:T( { "Group", self.Templates.Groups[GroupTemplateName].GroupName, self.Templates.Groups[GroupTemplateName].UnitCount } )
for unit_num, UnitTemplate in pairs( GroupTemplate.units ) do
local UnitTemplateName = env.getValueDictByKey(UnitTemplate.name) local UnitTemplateName = env.getValueDictByKey(UnitTemplate.name)
self.Units[UnitTemplateName] = {} self.Templates.Units[UnitTemplateName] = {}
self.Units[UnitTemplateName].UnitName = UnitTemplateName self.Templates.Units[UnitTemplateName].UnitName = UnitTemplateName
self.Units[UnitTemplateName].Template = UnitTemplate self.Templates.Units[UnitTemplateName].Template = UnitTemplate
self.Units[UnitTemplateName].GroupName = GroupTemplateName self.Templates.Units[UnitTemplateName].GroupName = GroupTemplateName
self.Units[UnitTemplateName].GroupTemplate = GroupTemplate self.Templates.Units[UnitTemplateName].GroupTemplate = GroupTemplate
self.Units[UnitTemplateName].GroupId = GroupTemplate.groupId self.Templates.Units[UnitTemplateName].GroupId = GroupTemplate.groupId
self:E( {"skill",UnitTemplate.skill})
if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then if UnitTemplate.skill and (UnitTemplate.skill == "Client" or UnitTemplate.skill == "Player") then
self.ClientsByName[UnitTemplateName] = UnitTemplate self.Templates.ClientsByName[UnitTemplateName] = UnitTemplate
self.ClientsByID[UnitTemplate.unitId] = UnitTemplate self.Templates.ClientsByID[UnitTemplate.unitId] = UnitTemplate
end end
self:E( { "Unit", self.Units[UnitTemplateName].UnitName } ) self:E( { "Unit", self.Templates.Units[UnitTemplateName].UnitName } )
end end
end end
--- Private method that registers all alive players in the mission.
-- @param #DATABASE self
-- @return #DATABASE self
function DATABASE:_RegisterPlayers()
local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) }
for CoalitionId, CoalitionData in pairs( CoalitionsData ) do
for UnitId, UnitData in pairs( CoalitionData ) do
self:T3( { "UnitData:", UnitData } )
if UnitData and UnitData:isExist() then
local UnitName = UnitData:getName()
if not self.PlayersAlive[UnitName] then
self:E( { "Add player for unit:", UnitName, UnitData:getPlayerName() } )
self.PlayersAlive[UnitName] = UnitData:getPlayerName()
end
end
end
end
return self
end
--- Private method that registers all datapoints within in the mission.
-- @param #DATABASE self
-- @return #DATABASE self
function DATABASE:_RegisterDatabase()
local CoalitionsData = { AlivePlayersRed = coalition.getGroups( coalition.side.RED ), AlivePlayersBlue = coalition.getGroups( coalition.side.BLUE ) }
for CoalitionId, CoalitionData in pairs( CoalitionsData ) do
for DCSGroupId, DCSGroup in pairs( CoalitionData ) do
local DCSGroupName = DCSGroup:getName()
self:E( { "Register Group:", DCSGroup, DCSGroupName } )
self.DCSGroups[DCSGroupName] = DCSGroup
self.Groups[DCSGroupName] = GROUP:New( DCSGroup )
if self:_IsAliveDCSGroup(DCSGroup) then
self:E( { "Register Alive Group:", DCSGroup, DCSGroupName } )
self.DCSGroupsAlive[DCSGroupName] = DCSGroup
self.GroupsAlive[DCSGroupName] = self.Groups[DCSGroupName]
end
for DCSUnitId, DCSUnit in pairs( DCSGroup:getUnits() ) do
local DCSUnitName = DCSUnit:getName()
self:E( { "Register Unit:", DCSUnit, DCSUnitName } )
self.DCSUnits[DCSUnitName] = DCSUnit
self.Units[DCSUnitName] = UNIT:New( DCSUnit )
if self:_IsAliveDCSUnit(DCSUnit) then
self:E( { "Register Alive Unit:", DCSUnit, DCSUnitName } )
self.DCSUnitsAlive[DCSUnitName] = DCSUnit
self.UnitsAlive[DCSUnitName] = self.Units[DCSUnitName]
end
end
for ClientName, ClientTemplate in pairs( self.Templates.ClientsByName ) do
self.Clients[ClientName] = CLIENT:New( ClientName )
end
end
end
return self
end
--- Events
--- Handles the OnBirth event for the alive units set. --- Handles the OnBirth event for the alive units set.
-- @param #DATABASE self -- @param #DATABASE self
-- @param Event#EVENTDATA Event -- @param Event#EVENTDATA Event
@ -374,6 +502,14 @@ function DATABASE:_EventOnBirth( Event )
if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then
self.DCSUnits[Event.IniDCSUnitName] = Event.IniDCSUnit self.DCSUnits[Event.IniDCSUnitName] = Event.IniDCSUnit
self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit self.DCSUnitsAlive[Event.IniDCSUnitName] = Event.IniDCSUnit
self.Units[Event.IniDCSUnitName] = UNIT:New( Event.IniDCSUnit )
--if not self.DCSGroups[Event.IniDCSGroupName] then
-- self.DCSGroups[Event.IniDCSGroupName] = Event.IniDCSGroupName
-- self.DCSGroupsAlive[Event.IniDCSGroupName] = Event.IniDCSGroupName
-- self.Groups[Event.IniDCSGroupName] = GROUP:New( Event.IniDCSGroup )
--end
self:_EventOnPlayerEnterUnit( Event )
end end
end end
end end
@ -392,18 +528,54 @@ function DATABASE:_EventOnDeadOrCrash( Event )
end end
end end
--- Interate the DATABASE and call an interator function for each **alive** unit, providing the Unit and optional parameters. --- Handles the OnPlayerEnterUnit event to fill the active players table (with the unit filter applied).
-- @param #DATABASE self -- @param #DATABASE self
-- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter. -- @param Event#EVENTDATA Event
function DATABASE:_EventOnPlayerEnterUnit( Event )
self:F( { Event } )
if Event.IniDCSUnit then
if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then
if not self.PlayersAlive[Event.IniDCSUnitName] then
self:E( { "Add player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } )
self.PlayersAlive[Event.IniDCSUnitName] = Event.IniDCSUnit:getPlayerName()
self.ClientsAlive[Event.IniDCSUnitName] = _DATABASE.Clients[ Event.IniDCSUnitName ]
end
end
end
end
--- Handles the OnPlayerLeaveUnit event to clean the active players table.
-- @param #DATABASE self
-- @param Event#EVENTDATA Event
function DATABASE:_EventOnPlayerLeaveUnit( Event )
self:F( { Event } )
if Event.IniDCSUnit then
if self:_IsIncludeDCSUnit( Event.IniDCSUnit ) then
if self.PlayersAlive[Event.IniDCSUnitName] then
self:E( { "Cleaning player for unit:", Event.IniDCSUnitName, Event.IniDCSUnit:getPlayerName() } )
self.PlayersAlive[Event.IniDCSUnitName] = nil
self.ClientsAlive[Event.IniDCSUnitName] = nil
end
end
end
end
--- Iterators
--- Interate the DATABASE and call an interator function for the given set, providing the Object for each element within the set and optional parameters.
-- @param #DATABASE self
-- @param #function IteratorFunction The function that will be called when there is an alive player in the database.
-- @return #DATABASE self -- @return #DATABASE self
function DATABASE:ForEachAliveUnit( IteratorFunction, ... ) function DATABASE:ForEach( IteratorFunction, arg, Set )
self:F( arg ) self:F( arg )
local function CoRoutine() local function CoRoutine()
local Count = 0 local Count = 0
for DCSUnitID, DCSUnit in pairs( self.DCSUnitsAlive ) do for ObjectID, Object in pairs( Set ) do
self:T2( DCSUnit ) self:T2( Object )
IteratorFunction( DCSUnit, unpack( arg ) ) IteratorFunction( Object, unpack( arg ) )
Count = Count + 1 Count = Count + 1
if Count % 10 == 0 then if Count % 10 == 0 then
coroutine.yield( false ) coroutine.yield( false )
@ -423,15 +595,56 @@ function DATABASE:ForEachAliveUnit( IteratorFunction, ... )
error( res ) error( res )
end end
if res == false then if res == false then
timer.scheduleFunction( Schedule, {}, timer.getTime() + 0.001 ) return true -- resume next time the loop
end end
return false
end end
timer.scheduleFunction( Schedule, {}, timer.getTime() + 1 ) local Scheduler = SCHEDULER:New( self, Schedule, {}, 0.001, 0.001, 0 )
return self return self
end end
--- Interate the DATABASE and call an interator function for each **alive** unit, providing the Unit and optional parameters.
-- @param #DATABASE self
-- @param #function IteratorFunction The function that will be called when there is an alive unit in the database. The function needs to accept a UNIT parameter.
-- @return #DATABASE self
function DATABASE:ForEachDCSUnitAlive( IteratorFunction, ... )
self:F( arg )
self:ForEach( IteratorFunction, arg, self.DCSUnitsAlive )
return self
end
--- Interate the DATABASE and call an interator function for each **alive** player, providing the Unit of the player and optional parameters.
-- @param #DATABASE self
-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a UNIT parameter.
-- @return #DATABASE self
function DATABASE:ForEachPlayer( IteratorFunction, ... )
self:F( arg )
self:ForEach( IteratorFunction, arg, self.PlayersAlive )
return self
end
--- Interate the DATABASE and call an interator function for each client, providing the Client to the function and optional parameters.
-- @param #DATABASE self
-- @param #function IteratorFunction The function that will be called when there is an alive player in the database. The function needs to accept a CLIENT parameter.
-- @return #DATABASE self
function DATABASE:ForEachClient( IteratorFunction, ... )
self:F( arg )
self:ForEach( IteratorFunction, arg, self.Clients )
return self
end
function DATABASE:ScanEnvironment() function DATABASE:ScanEnvironment()
self:F() self:F()
@ -495,6 +708,9 @@ function DATABASE:ScanEnvironment()
end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then end --if coa_name == 'red' or coa_name == 'blue' and type(coa_data) == 'table' then
end --for coa_name, coa_data in pairs(mission.coalition) do end --for coa_name, coa_data in pairs(mission.coalition) do
self:_RegisterDatabase()
self:_RegisterPlayers()
return self return self
end end
@ -582,6 +798,22 @@ function DATABASE:_IsAliveDCSUnit( DCSUnit )
return DCSUnitAlive return DCSUnitAlive
end end
---
-- @param #DATABASE self
-- @param DCSGroup#Group DCSGroup
-- @return #DATABASE self
function DATABASE:_IsAliveDCSGroup( DCSGroup )
self:F( DCSGroup )
local DCSGroupAlive = false
if DCSGroup and DCSGroup:isExist() then
if self.DCSGroups[DCSGroup:getName()] then
DCSGroupAlive = true
end
end
self:T( DCSGroupAlive )
return DCSGroupAlive
end
--- Traces the current database contents in the log ... (for debug reasons). --- Traces the current database contents in the log ... (for debug reasons).
-- @param #DATABASE self -- @param #DATABASE self

View File

@ -437,6 +437,32 @@ function EVENT:OnHitForUnit( EventDCSUnitName, EventFunction, EventSelf )
return self return self
end end
--- Set a new listener for an S_EVENT_PLAYER_ENTER_UNIT event.
-- @param #EVENT self
-- @param #function EventFunction The function to be called when the event occurs for the unit.
-- @param Base#BASE EventSelf The self instance of the class for which the event is.
-- @return #EVENT
function EVENT:OnPlayerEnterUnit( EventFunction, EventSelf )
self:F()
self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_ENTER_UNIT )
return self
end
--- Set a new listener for an S_EVENT_PLAYER_LEAVE_UNIT event.
-- @param #EVENT self
-- @param #function EventFunction The function to be called when the event occurs for the unit.
-- @param Base#BASE EventSelf The self instance of the class for which the event is.
-- @return #EVENT
function EVENT:OnPlayerLeaveUnit( EventFunction, EventSelf )
self:F()
self:OnEventGeneric( EventFunction, EventSelf, world.event.S_EVENT_PLAYER_LEAVE_UNIT )
return self
end
function EVENT:onEvent( Event ) function EVENT:onEvent( Event )
@ -468,6 +494,7 @@ function EVENT:onEvent( Event )
Event.WeaponName = Event.Weapon:getTypeName() Event.WeaponName = Event.Weapon:getTypeName()
--Event.WeaponTgtDCSUnit = Event.Weapon:getTarget() --Event.WeaponTgtDCSUnit = Event.Weapon:getTarget()
end end
self:E( { _EVENTCODES[Event.id], Event } )
for ClassName, EventData in pairs( self.Events[Event.id] ) do for ClassName, EventData in pairs( self.Events[Event.id] ) do
if Event.IniDCSUnitName and EventData.IniUnit and EventData.IniUnit[Event.IniDCSUnitName] then if Event.IniDCSUnitName and EventData.IniUnit and EventData.IniUnit[Event.IniDCSUnitName] then
self:T2( { "Calling event function for class ", ClassName, " unit ", Event.IniDCSUnitName } ) self:T2( { "Calling event function for class ", ClassName, " unit ", Event.IniDCSUnitName } )

View File

@ -92,6 +92,18 @@ function GROUP:NewFromDCSUnit( DCSUnit )
return self return self
end end
--- Returns the name of the Group.
-- @param #GROUP self
-- @return #string GroupName
function GROUP:GetName()
local GroupName = self.DCSGroup:getName()
return GroupName
end
--- Retrieve the group mission and allow to place function hooks within the mission waypoint plan. --- Retrieve the group mission and allow to place function hooks within the mission waypoint plan.
-- Use the method @{Group#GROUP:WayPointFunction} to define the hook functions for specific waypoints. -- Use the method @{Group#GROUP:WayPointFunction} to define the hook functions for specific waypoints.
-- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. -- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan.
@ -128,7 +140,12 @@ function GROUP:TaskFunction( WayPoint, WayPointIndex, FunctionString, FunctionAr
local DCSScript = {} local DCSScript = {}
DCSScript[#DCSScript+1] = "local MissionGroup = GROUP.FindGroup( ... ) " DCSScript[#DCSScript+1] = "local MissionGroup = GROUP.FindGroup( ... ) "
DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")"
if FunctionArguments.n > 0 then
DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup, " .. table.concat( FunctionArguments, "," ) .. ")"
else
DCSScript[#DCSScript+1] = FunctionString .. "( MissionGroup )"
end
DCSTask = self:TaskWrappedAction( DCSTask = self:TaskWrappedAction(
self:CommandDoScript( self:CommandDoScript(
@ -594,6 +611,41 @@ function GROUP:TaskWrappedAction( DCSCommand, Index )
return DCSTaskWrappedAction return DCSTaskWrappedAction
end end
--- Executes a command action
-- @param #GROUP self
-- @param DCSCommand#Command DCSCommand
-- @return #GROUP self
function GROUP:SetCommand( DCSCommand )
self:F( DCSCommand )
local Controller = self:_GetController()
Controller:setCommand( DCSCommand )
return self
end
--- Perform a switch waypoint command
-- @param #GROUP self
-- @param #number FromWayPoint
-- @param #number ToWayPoint
-- @return DCSTask#Task
function GROUP:CommandSwitchWayPoint( FromWayPoint, ToWayPoint, Index )
self:F( { FromWayPoint, ToWayPoint, Index } )
local CommandSwitchWayPoint = {
id = 'SwitchWaypoint',
params = {
fromWaypointIndex = FromWayPoint,
goToWaypointIndex = ToWayPoint,
},
}
self:T( { CommandSwitchWayPoint } )
return CommandSwitchWayPoint
end
--- Orbit at a specified position at a specified alititude during a specified duration with a specified speed. --- Orbit at a specified position at a specified alititude during a specified duration with a specified speed.
-- @param #GROUP self -- @param #GROUP self
-- @param #Vec2 Point The point to hold the position. -- @param #Vec2 Point The point to hold the position.
@ -601,7 +653,7 @@ end
-- @param #number Speed The speed flying when holding the position. -- @param #number Speed The speed flying when holding the position.
-- @return #GROUP self -- @return #GROUP self
function GROUP:TaskOrbitCircleAtVec2( Point, Altitude, Speed ) function GROUP:TaskOrbitCircleAtVec2( Point, Altitude, Speed )
self:F( { self.GroupName, Point, Altitude, Speed } ) self:F( { self.GroupName, Point, Altitude, Speed } )
-- pattern = enum AI.Task.OribtPattern, -- pattern = enum AI.Task.OribtPattern,
-- point = Vec2, -- point = Vec2,
@ -732,8 +784,41 @@ function GROUP:TaskAttackUnit( AttackUnit )
params = { unitId = AttackUnit:GetID(), params = { unitId = AttackUnit:GetID(),
expend = AI.Task.WeaponExpend.TWO, expend = AI.Task.WeaponExpend.TWO,
groupAttack = true, groupAttack = true,
} },
} },
self:T( { DCSTask } )
return DCSTask
end
--- Attack a Group.
-- @param #GROUP self
-- @param Group#GROUP AttackGroup The Group to be attacked.
-- @return DCSTask#Task The DCS task structure.
function GROUP:TaskAttackGroup( AttackGroup )
self:F( { self.GroupName, AttackGroup } )
-- AttackGroup = {
-- id = 'AttackGroup',
-- params = {
-- groupId = Group.ID,
-- weaponType = number,
-- expend = enum AI.Task.WeaponExpend,
-- attackQty = number,
-- directionEnabled = boolean,
-- direction = Azimuth,
-- altitudeEnabled = boolean,
-- altitude = Distance,
-- attackQtyLimit = boolean,
-- }
-- }
local DCSTask
DCSTask = { id = 'AttackGroup',
params = { groupId = AttackGroup:GetID(),
expend = AI.Task.WeaponExpend.TWO,
},
},
self:T( { DCSTask } ) self:T( { DCSTask } )
return DCSTask return DCSTask
@ -999,7 +1084,7 @@ end
function GROUP:GetTaskMission() function GROUP:GetTaskMission()
self:F( self.GroupName ) self:F( self.GroupName )
return routines.utils.deepCopy( _DATABASE.Groups[self.GroupName].Template ) return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template )
end end
--- Return the mission route of the group. --- Return the mission route of the group.
@ -1008,7 +1093,7 @@ end
function GROUP:GetTaskRoute() function GROUP:GetTaskRoute()
self:F( self.GroupName ) self:F( self.GroupName )
return routines.utils.deepCopy( _DATABASE.Groups[self.GroupName].Template.route.points ) return routines.utils.deepCopy( _DATABASE.Templates.Groups[self.GroupName].Template.route.points )
end end
--- Return the route of a group by using the @{Database#DATABASE} class. --- Return the route of a group by using the @{Database#DATABASE} class.
@ -1032,7 +1117,7 @@ function GROUP:CopyRoute( Begin, End, Randomize, Radius )
self:T( { GroupName } ) self:T( { GroupName } )
local Template = _DATABASE.Groups[GroupName].Template local Template = _DATABASE.Templates.Groups[GroupName].Template
if Template then if Template then
if not Begin then if not Begin then

View File

@ -245,3 +245,127 @@ function MENU_CLIENT_COMMAND:Remove()
self.ParentMenu.Menus[self.MenuPath] = nil self.ParentMenu.Menus[self.MenuPath] = nil
return nil return nil
end end
--- The MENU_COALITION class
-- @type MENU_COALITION
-- @extends Menu#MENU
MENU_COALITION = {
ClassName = "MENU_COALITION"
}
--- Creates a new coalition menu item
-- @param #MENU_COALITION self
-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu.
-- @param #string MenuText The text for the menu.
-- @param #table ParentMenu The parent menu.
-- @return #MENU_COALITION self
function MENU_COALITION:New( MenuCoalition, MenuText, ParentMenu )
-- Arrange meta tables
local MenuParentPath = {}
if ParentMenu ~= nil then
MenuParentPath = ParentMenu.MenuPath
end
local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) )
self:F( { MenuCoalition, MenuText, ParentMenu } )
self.MenuCoalition = MenuCoalition
self.MenuParentPath = MenuParentPath
self.MenuText = MenuText
self.ParentMenu = ParentMenu
self.Menus = {}
self:T( { MenuParentPath, MenuText } )
self.MenuPath = missionCommands.addSubMenuForCoalition( self.MenuCoalition, MenuText, MenuParentPath )
self:T( { self.MenuPath } )
if ParentMenu and ParentMenu.Menus then
ParentMenu.Menus[self.MenuPath] = self
end
return self
end
--- Removes the sub menus recursively of this MENU_COALITION.
-- @param #MENU_COALITION self
-- @return #MENU_COALITION self
function MENU_COALITION:RemoveSubMenus()
self:F( self.MenuPath )
for MenuID, Menu in pairs( self.Menus ) do
Menu:Remove()
end
end
--- Removes the sub menus recursively of this MENU_COALITION.
-- @param #MENU_COALITION self
-- @return #MENU_COALITION self
function MENU_COALITION:Remove()
self:F( self.MenuPath )
self:RemoveSubMenus()
missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath )
self.ParentMenu.Menus[self.MenuPath] = nil
return nil
end
--- The MENU_COALITION_COMMAND class
-- @type MENU_COALITION_COMMAND
-- @extends Menu#MENU
MENU_COALITION_COMMAND = {
ClassName = "MENU_COALITION_COMMAND"
}
--- Creates a new radio command item for a group
-- @param #MENU_COALITION_COMMAND self
-- @param DCSCoalition#coalition.side MenuCoalition The coalition owning the menu.
-- @param MenuText The text for the menu.
-- @param ParentMenu The parent menu.
-- @param CommandMenuFunction A function that is called when the menu key is pressed.
-- @param CommandMenuArgument An argument for the function.
-- @return #MENU_COALITION_COMMAND self
function MENU_COALITION_COMMAND:New( MenuCoalition, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArgument )
-- Arrange meta tables
local MenuParentPath = {}
if ParentMenu ~= nil then
MenuParentPath = ParentMenu.MenuPath
end
local self = BASE:Inherit( self, MENU:New( MenuText, MenuParentPath ) )
self.MenuCoalition = MenuCoalition
self.MenuParentPath = MenuParentPath
self.MenuText = MenuText
self.ParentMenu = ParentMenu
self:T( { MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } )
self.MenuPath = missionCommands.addCommandForCoalition( self.MenuCoalition, MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument )
self.CommandMenuFunction = CommandMenuFunction
self.CommandMenuArgument = CommandMenuArgument
ParentMenu.Menus[self.MenuPath] = self
return self
end
--- Removes a radio command item for a coalition
-- @param #MENU_COALITION_COMMAND self
-- @return #MENU_COALITION_COMMAND self
function MENU_COALITION_COMMAND:Remove()
self:F( self.MenuPath )
missionCommands.removeItemForCoalition( self.MenuCoalition, self.MenuPath )
self.ParentMenu.Menus[self.MenuPath] = nil
return nil
end

680
Moose/MissileTrainer.lua Normal file
View File

@ -0,0 +1,680 @@
--- Provides missile training functions.
--
-- @{#MISSILETRAINER} class
-- ========================
-- The @{#MISSILETRAINER} class uses the DCS world messaging system to be alerted of any missiles fired, and when a missile would hit your aircraft,
-- the class will destroy the missile within a certain range, to avoid damage to your aircraft.
-- It suports the following functionality:
--
-- * Track the missiles fired at you and other players, providing bearing and range information of the missiles towards the airplanes.
-- * Provide alerts of missile launches, including detailed information of the units launching, including bearing, range …
-- * Provide alerts when a missile would have killed your aircraft.
-- * Provide alerts when the missile self destructs.
-- * Enable / Disable and Configure the Missile Trainer using the various menu options.
--
-- When running a mission where MISSILETRAINER is used, the following radio menu structure ( 'Radio Menu' -> 'Other (F10)' -> 'MissileTrainer' ) options are available for the players:
--
-- * **Messages**: Menu to configure all messages.
-- * **Messages On**: Show all messages.
-- * **Messages Off**: Disable all messages.
-- * **Tracking**: Menu to configure missile tracking messages.
-- * **To All**: Shows missile tracking messages to all players.
-- * **To Target**: Shows missile tracking messages only to the player where the missile is targetted at.
-- * **Tracking On**: Show missile tracking messages.
-- * **Tracking Off**: Disable missile tracking messages.
-- * **Frequency Increase**: Increases the missile tracking message frequency with one second.
-- * **Frequency Decrease**: Decreases the missile tracking message frequency with one second.
-- * **Alerts**: Menu to configure alert messages.
-- * **To All**: Shows alert messages to all players.
-- * **To Target**: Shows alert messages only to the player where the missile is (was) targetted at.
-- * **Hits On**: Show missile hit alert messages.
-- * **Hits Off**: Disable missile hit alert messages.
-- * **Launches On**: Show missile launch messages.
-- * **Launches Off**: Disable missile launch messages.
-- * **Details**: Menu to configure message details.
-- * **Range On**: Shows range information when a missile is fired to a target.
-- * **Range Off**: Disable range information when a missile is fired to a target.
-- * **Bearing On**: Shows bearing information when a missile is fired to a target.
-- * **Bearing Off**: Disable bearing information when a missile is fired to a target.
-- * **Distance**: Menu to configure the distance when a missile needs to be destroyed when near to a player, during tracking. This will improve/influence hit calculation accuracy, but has the risk of damaging the aircraft when the missile reaches the aircraft before the distance is measured.
-- * **50 meter**: Destroys the missile when the distance to the aircraft is below or equal to 50 meter.
-- * **100 meter**: Destroys the missile when the distance to the aircraft is below or equal to 100 meter.
-- * **150 meter**: Destroys the missile when the distance to the aircraft is below or equal to 150 meter.
-- * **200 meter**: Destroys the missile when the distance to the aircraft is below or equal to 200 meter.
--
--
-- MISSILETRAINER construction methods:
-- ====================================
-- Create a new MISSILETRAINER object with the @{#MISSILETRAINER.New} method:
--
-- * @{#MISSILETRAINER.New}: Creates a new MISSILETRAINER object taking the maximum distance to your aircraft to evaluate when a missile needs to be destroyed.
--
-- MISSILETRAINER will collect each unit declared in the mission with a skill level "Client" and "Player", and will monitor the missiles shot at those.
--
-- MISSILETRAINER initialization methods:
-- ======================================
-- A MISSILETRAINER object will behave differently based on the usage of initialization methods:
--
-- * @{#MISSILETRAINER.InitMessagesOnOff}: Sets by default the display of any message to be ON or OFF.
-- * @{#MISSILETRAINER.InitTrackingToAll}: Sets by default the missile tracking report for all players or only for those missiles targetted to you.
-- * @{#MISSILETRAINER.InitTrackingOnOff}: Sets by default the display of missile tracking report to be ON or OFF.
-- * @{#MISSILETRAINER.InitTrackingFrequency}: Increases, decreases the missile tracking message display frequency with the provided time interval in seconds.
-- * @{#MISSILETRAINER.InitAlertsToAll}: Sets by default the display of alerts to be shown to all players or only to you.
-- * @{#MISSILETRAINER.InitAlertsHitsOnOff}: Sets by default the display of hit alerts ON or OFF.
-- * @{#MISSILETRAINER.InitAlertsLaunchesOnOff}: Sets by default the display of launch alerts ON or OFF.
-- * @{#MISSILETRAINER.InitRangeOnOff}: Sets by default the display of range information of missiles ON of OFF.
-- * @{#MISSILETRAINER.InitBearingOnOff}: Sets by default the display of bearing information of missiles ON of OFF.
-- * @{#MISSILETRAINER.InitMenusOnOff}: Allows to configure the options through the radio menu.
--
-- @module MissileTrainer
-- @author FlightControl
Include.File( "Client" )
Include.File( "Scheduler" )
--- The MISSILETRAINER class
-- @type MISSILETRAINER
-- @extends Base#BASE
MISSILETRAINER = {
ClassName = "MISSILETRAINER",
}
--- Creates the main object which is handling missile tracking.
-- When a missile is fired a SCHEDULER is set off that follows the missile. When near a certain a client player, the missile will be destroyed.
-- @param #MISSILETRAINER self
-- @param #number Distance The distance in meters when a tracked missile needs to be destroyed when close to a player.
-- @param #string Briefing (Optional) Will show a text to the players when starting their mission. Can be used for briefing purposes.
-- @return #MISSILETRAINER
function MISSILETRAINER:New( Distance, Briefing )
local self = BASE:Inherit( self, BASE:New() )
self:F( Distance )
if Briefing then
self.Briefing = Briefing
end
self.Schedulers = {}
self.SchedulerID = 0
self.MessageInterval = 2
self.MessageLastTime = timer.getTime()
self.Distance = Distance / 1000
_EVENTDISPATCHER:OnShot( self._EventShot, self )
self.DB = DATABASE:New():FilterStart()
self.DBClients = self.DB.Clients
self.DBUnits = self.DB.Units
for ClientID, Client in pairs( self.DBClients ) do
local function _Alive( Client )
if self.Briefing then
Client:Message( self.Briefing, 15, "HELLO WORLD", "Trainer" )
end
if self.MenusOnOff == true then
Client:Message( "Use the 'Radio Menu' -> 'Other (F10)' -> 'Missile Trainer' menu options to change the Missile Trainer settings (for all players).", 15, "MENU", "Trainer" )
Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil ) -- Menu#MENU_CLIENT
Client.MenuMessages = MENU_CLIENT:New( Client, "Messages", Client.MainMenu )
Client.MenuOn = MENU_CLIENT_COMMAND:New( Client, "Messages On", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = true } )
Client.MenuOff = MENU_CLIENT_COMMAND:New( Client, "Messages Off", Client.MenuMessages, self._MenuMessages, { MenuSelf = self, MessagesOnOff = false } )
Client.MenuTracking = MENU_CLIENT:New( Client, "Tracking", Client.MainMenu )
Client.MenuTrackingToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = true } )
Client.MenuTrackingToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingToAll = false } )
Client.MenuTrackOn = MENU_CLIENT_COMMAND:New( Client, "Tracking On", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = true } )
Client.MenuTrackOff = MENU_CLIENT_COMMAND:New( Client, "Tracking Off", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingOnOff = false } )
Client.MenuTrackIncrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Increase", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = -1 } )
Client.MenuTrackDecrease = MENU_CLIENT_COMMAND:New( Client, "Frequency Decrease", Client.MenuTracking, self._MenuMessages, { MenuSelf = self, TrackingFrequency = 1 } )
Client.MenuAlerts = MENU_CLIENT:New( Client, "Alerts", Client.MainMenu )
Client.MenuAlertsToAll = MENU_CLIENT_COMMAND:New( Client, "To All", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = true } )
Client.MenuAlertsToTarget = MENU_CLIENT_COMMAND:New( Client, "To Target", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsToAll = false } )
Client.MenuHitsOn = MENU_CLIENT_COMMAND:New( Client, "Hits On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = true } )
Client.MenuHitsOff = MENU_CLIENT_COMMAND:New( Client, "Hits Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsHitsOnOff = false } )
Client.MenuLaunchesOn = MENU_CLIENT_COMMAND:New( Client, "Launches On", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = true } )
Client.MenuLaunchesOff = MENU_CLIENT_COMMAND:New( Client, "Launches Off", Client.MenuAlerts, self._MenuMessages, { MenuSelf = self, AlertsLaunchesOnOff = false } )
Client.MenuDetails = MENU_CLIENT:New( Client, "Details", Client.MainMenu )
Client.MenuDetailsDistanceOn = MENU_CLIENT_COMMAND:New( Client, "Range On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = true } )
Client.MenuDetailsDistanceOff = MENU_CLIENT_COMMAND:New( Client, "Range Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsRangeOnOff = false } )
Client.MenuDetailsBearingOn = MENU_CLIENT_COMMAND:New( Client, "Bearing On", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = true } )
Client.MenuDetailsBearingOff = MENU_CLIENT_COMMAND:New( Client, "Bearing Off", Client.MenuDetails, self._MenuMessages, { MenuSelf = self, DetailsBearingOnOff = false } )
Client.MenuDistance = MENU_CLIENT:New( Client, "Set distance to plane", Client.MainMenu )
Client.MenuDistance50 = MENU_CLIENT_COMMAND:New( Client, "50 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 50 / 1000 } )
Client.MenuDistance100 = MENU_CLIENT_COMMAND:New( Client, "100 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 100 / 1000 } )
Client.MenuDistance150 = MENU_CLIENT_COMMAND:New( Client, "150 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 150 / 1000 } )
Client.MenuDistance200 = MENU_CLIENT_COMMAND:New( Client, "200 meter", Client.MenuDistance, self._MenuMessages, { MenuSelf = self, Distance = 200 / 1000 } )
else
if Client.MainMenu then
Client.MainMenu:Remove()
end
end
local ClientID = Client:GetID()
self:T( ClientID )
if not self.TrackingMissiles[ClientID] then
self.TrackingMissiles[ClientID] = {}
end
self.TrackingMissiles[ClientID].Client = Client
if not self.TrackingMissiles[ClientID].MissileData then
self.TrackingMissiles[ClientID].MissileData = {}
end
end
Client:Alive( _Alive )
end
-- self.DB:ForEachClient(
-- --- @param Client#CLIENT Client
-- function( Client )
--
-- ... actions ...
--
-- end
-- )
self.MessagesOnOff = true
self.TrackingToAll = false
self.TrackingOnOff = true
self.TrackingFrequency = 3
self.AlertsToAll = true
self.AlertsHitsOnOff = true
self.AlertsLaunchesOnOff = true
self.DetailsRangeOnOff = true
self.DetailsBearingOnOff = true
self.MenusOnOff = true
self.TrackingMissiles = {}
self.TrackingScheduler = SCHEDULER:New( self, self._TrackMissiles, {}, 0.5, 0.05, 0 )
return self
end
-- Initialization methods.
--- Sets by default the display of any message to be ON or OFF.
-- @param #MISSILETRAINER self
-- @param #boolean MessagesOnOff true or false
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitMessagesOnOff( MessagesOnOff )
self:F( MessagesOnOff )
self.MessagesOnOff = MessagesOnOff
if self.MessagesOnOff == true then
MESSAGE:New( "Messages ON", "Menu", 15, "ID" ):ToAll()
else
MESSAGE:New( "Messages OFF", "Menu", 15, "ID" ):ToAll()
end
return self
end
--- Sets by default the missile tracking report for all players or only for those missiles targetted to you.
-- @param #MISSILETRAINER self
-- @param #boolean TrackingToAll true or false
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitTrackingToAll( TrackingToAll )
self:F( TrackingToAll )
self.TrackingToAll = TrackingToAll
if self.TrackingToAll == true then
MESSAGE:New( "Missile tracking to all players ON", "Menu", 15, "ID" ):ToAll()
else
MESSAGE:New( "Missile tracking to all players OFF", "Menu", 15, "ID" ):ToAll()
end
return self
end
--- Sets by default the display of missile tracking report to be ON or OFF.
-- @param #MISSILETRAINER self
-- @param #boolean TrackingOnOff true or false
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitTrackingOnOff( TrackingOnOff )
self:F( TrackingOnOff )
self.TrackingOnOff = TrackingOnOff
if self.TrackingOnOff == true then
MESSAGE:New( "Missile tracking ON", "Menu", 15, "ID" ):ToAll()
else
MESSAGE:New( "Missile tracking OFF", "Menu", 15, "ID" ):ToAll()
end
return self
end
--- Increases, decreases the missile tracking message display frequency with the provided time interval in seconds.
-- The default frequency is a 3 second interval, so the Tracking Frequency parameter specifies the increase or decrease from the default 3 seconds or the last frequency update.
-- @param #MISSILETRAINER self
-- @param #number TrackingFrequency Provide a negative or positive value in seconds to incraese or decrease the display frequency.
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitTrackingFrequency( TrackingFrequency )
self:F( TrackingFrequency )
self.TrackingFrequency = self.TrackingFrequency + TrackingFrequency
if self.TrackingFrequency < 0.5 then
self.TrackingFrequency = 0.5
end
if self.TrackingFrequency then
MESSAGE:New( "Missile tracking frequency is " .. self.TrackingFrequency .. " seconds.", "Menu", 15, "ID" ):ToAll()
end
return self
end
--- Sets by default the display of alerts to be shown to all players or only to you.
-- @param #MISSILETRAINER self
-- @param #boolean AlertsToAll true or false
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitAlertsToAll( AlertsToAll )
self:F( AlertsToAll )
self.AlertsToAll = AlertsToAll
if self.AlertsToAll == true then
MESSAGE:New( "Alerts to all players ON", "Menu", 15, "ID" ):ToAll()
else
MESSAGE:New( "Alerts to all players OFF", "Menu", 15, "ID" ):ToAll()
end
return self
end
--- Sets by default the display of hit alerts ON or OFF.
-- @param #MISSILETRAINER self
-- @param #boolean AlertsHitsOnOff true or false
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitAlertsHitsOnOff( AlertsHitsOnOff )
self:F( AlertsHitsOnOff )
self.AlertsHitsOnOff = AlertsHitsOnOff
if self.AlertsHitsOnOff == true then
MESSAGE:New( "Alerts Hits ON", "Menu", 15, "ID" ):ToAll()
else
MESSAGE:New( "Alerts Hits OFF", "Menu", 15, "ID" ):ToAll()
end
return self
end
--- Sets by default the display of launch alerts ON or OFF.
-- @param #MISSILETRAINER self
-- @param #boolean AlertsLaunchesOnOff true or false
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitAlertsLaunchesOnOff( AlertsLaunchesOnOff )
self:F( AlertsLaunchesOnOff )
self.AlertsLaunchesOnOff = AlertsLaunchesOnOff
if self.AlertsLaunchesOnOff == true then
MESSAGE:New( "Alerts Launches ON", "Menu", 15, "ID" ):ToAll()
else
MESSAGE:New( "Alerts Launches OFF", "Menu", 15, "ID" ):ToAll()
end
return self
end
--- Sets by default the display of range information of missiles ON of OFF.
-- @param #MISSILETRAINER self
-- @param #boolean DetailsRangeOnOff true or false
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitRangeOnOff( DetailsRangeOnOff )
self:F( DetailsRangeOnOff )
self.DetailsRangeOnOff = DetailsRangeOnOff
if self.DetailsRangeOnOff == true then
MESSAGE:New( "Range display ON", "Menu", 15, "ID" ):ToAll()
else
MESSAGE:New( "Range display OFF", "Menu", 15, "ID" ):ToAll()
end
return self
end
--- Sets by default the display of bearing information of missiles ON of OFF.
-- @param #MISSILETRAINER self
-- @param #boolean DetailsBearingOnOff true or false
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitBearingOnOff( DetailsBearingOnOff )
self:F( DetailsBearingOnOff )
self.DetailsBearingOnOff = DetailsBearingOnOff
if self.DetailsBearingOnOff == true then
MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll()
else
MESSAGE:New( "Bearing display OFF", "Menu", 15, "ID" ):ToAll()
end
return self
end
--- Enables / Disables the menus.
-- @param #MISSILETRAINER self
-- @param #boolean MenusOnOff true or false
-- @return #MISSILETRAINER self
function MISSILETRAINER:InitMenusOnOff( MenusOnOff )
self:F( MenusOnOff )
self.MenusOnOff = MenusOnOff
if self.MenusOnOff == true then
MESSAGE:New( "Menus are ENABLED (only when a player rejoins a slot)", "Menu", 15, "ID" ):ToAll()
else
MESSAGE:New( "Menus are DISABLED", "Menu", 15, "ID" ):ToAll()
end
return self
end
-- Menu functions
function MISSILETRAINER._MenuMessages( MenuParameters )
local self = MenuParameters.MenuSelf
if MenuParameters.MessagesOnOff ~= nil then
self:InitMessagesOnOff( MenuParameters.MessagesOnOff )
end
if MenuParameters.TrackingToAll ~= nil then
self:InitTrackingToAll( MenuParameters.TrackingToAll )
end
if MenuParameters.TrackingOnOff ~= nil then
self:InitTrackingOnOff( MenuParameters.TrackingOnOff )
end
if MenuParameters.TrackingFrequency ~= nil then
self:InitTrackingFrequency( MenuParameters.TrackingFrequency )
end
if MenuParameters.AlertsToAll ~= nil then
self:InitAlertsToAll( MenuParameters.AlertsToAll )
end
if MenuParameters.AlertsHitsOnOff ~= nil then
self:InitAlertsHitsOnOff( MenuParameters.AlertsHitsOnOff )
end
if MenuParameters.AlertsLaunchesOnOff ~= nil then
self:InitAlertsLaunchesOnOff( MenuParameters.AlertsLaunchesOnOff )
end
if MenuParameters.DetailsRangeOnOff ~= nil then
self:InitRangeOnOff( MenuParameters.DetailsRangeOnOff )
end
if MenuParameters.DetailsBearingOnOff ~= nil then
self:InitBearingOnOff( MenuParameters.DetailsBearingOnOff )
end
if MenuParameters.Distance ~= nil then
self.Distance = MenuParameters.Distance
MESSAGE:New( "Hit detection distance set to " .. self.Distance .. " meters", "Menu", 15, "ID" ):ToAll()
end
end
--- Detects if an SA site was shot with an anti radiation missile. In this case, take evasive actions based on the skill level set within the ME.
-- @param #MISSILETRAINER self
-- @param Event#EVENTDATA Event
function MISSILETRAINER:_EventShot( Event )
self:F( { Event } )
local TrainerSourceDCSUnit = Event.IniDCSUnit
local TrainerSourceDCSUnitName = Event.IniDCSUnitName
local TrainerWeapon = Event.Weapon -- Identify the weapon fired
local TrainerWeaponName = Event.WeaponName -- return weapon type
self:T( "Missile Launched = " .. TrainerWeaponName )
local TrainerTargetDCSUnit = TrainerWeapon:getTarget() -- Identify target
local TrainerTargetDCSUnitName = Unit.getName( TrainerTargetDCSUnit )
local TrainerTargetSkill = _DATABASE.Templates.Units[TrainerTargetDCSUnitName].Template.skill
self:T(TrainerTargetDCSUnitName )
local Client = self.DBClients[TrainerTargetDCSUnitName]
if Client then
local TrainerSourceUnit = UNIT:New(TrainerSourceDCSUnit)
local TrainerTargetUnit = UNIT:New(TrainerTargetDCSUnit)
if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then
local Message = MESSAGE:New(
string.format( "%s launched a %s",
TrainerSourceUnit:GetTypeName(),
TrainerWeaponName
) .. self:_AddRange( Client, TrainerWeapon ) .. self:_AddBearing( Client, TrainerWeapon ),"Launch Alert", 5, "ID" )
if self.AlertsToAll then
Message:ToAll()
else
Message:ToClient( Client )
end
end
local ClientID = Client:GetID()
local MissileData = {}
MissileData.TrainerSourceUnit = TrainerSourceUnit
MissileData.TrainerWeapon = TrainerWeapon
MissileData.TrainerTargetUnit = TrainerTargetUnit
MissileData.TrainerWeaponTypeName = TrainerWeapon:getTypeName()
MissileData.TrainerWeaponLaunched = true
table.insert( self.TrackingMissiles[ClientID].MissileData, MissileData )
--self:T( self.TrackingMissiles )
end
end
function MISSILETRAINER:_AddRange( Client, TrainerWeapon )
local RangeText = ""
if self.DetailsRangeOnOff then
local PositionMissile = TrainerWeapon:getPoint()
local PositionTarget = Client:GetPositionVec3()
local Range = ( ( PositionMissile.x - PositionTarget.x )^2 +
( PositionMissile.y - PositionTarget.y )^2 +
( PositionMissile.z - PositionTarget.z )^2
) ^ 0.5 / 1000
RangeText = string.format( ", at %4.2fkm", Range )
end
return RangeText
end
function MISSILETRAINER:_AddBearing( Client, TrainerWeapon )
local BearingText = ""
if self.DetailsBearingOnOff then
local PositionMissile = TrainerWeapon:getPoint()
local PositionTarget = Client:GetPositionVec3()
self:T2( { PositionTarget, PositionMissile })
local DirectionVector = { x = PositionMissile.x - PositionTarget.x, y = PositionMissile.y - PositionTarget.y, z = PositionMissile.z - PositionTarget.z }
local DirectionRadians = math.atan2( DirectionVector.z, DirectionVector.x )
--DirectionRadians = DirectionRadians + routines.getNorthCorrection( PositionTarget )
if DirectionRadians < 0 then
DirectionRadians = DirectionRadians + 2 * math.pi
end
local DirectionDegrees = DirectionRadians * 180 / math.pi
BearingText = string.format( ", %d degrees", DirectionDegrees )
end
return BearingText
end
function MISSILETRAINER:_TrackMissiles()
self:F2()
local ShowMessages = false
if self.MessagesOnOff and self.MessageLastTime + self.TrackingFrequency <= timer.getTime() then
self.MessageLastTime = timer.getTime()
ShowMessages = true
end
-- ALERTS PART
-- Loop for all Player Clients to check the alerts and deletion of missiles.
for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do
local Client = ClientData.Client
self:T2( { Client:GetName() } )
for MissileDataID, MissileData in pairs( ClientData.MissileData ) do
self:T3( MissileDataID )
local TrainerSourceUnit = MissileData.TrainerSourceUnit
local TrainerWeapon = MissileData.TrainerWeapon
local TrainerTargetUnit = MissileData.TrainerTargetUnit
local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName
local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched
if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then
local PositionMissile = TrainerWeapon:getPosition().p
local PositionTarget = Client:GetPositionVec3()
local Distance = ( ( PositionMissile.x - PositionTarget.x )^2 +
( PositionMissile.y - PositionTarget.y )^2 +
( PositionMissile.z - PositionTarget.z )^2
) ^ 0.5 / 1000
if Distance <= self.Distance then
-- Hit alert
TrainerWeapon:destroy()
if self.MessagesOnOff == true and self.AlertsHitsOnOff == true then
self:T( "killed" )
local Message = MESSAGE:New(
string.format( "%s launched by %s killed %s",
TrainerWeapon:getTypeName(),
TrainerSourceUnit:GetTypeName(),
TrainerTargetUnit:GetPlayerName()
),"Hit Alert", 15, "ID" )
if self.AlertsToAll == true then
Message:ToAll()
else
Message:ToClient( Client )
end
MissileData = nil
table.remove( ClientData.MissileData, MissileDataID )
self:T(ClientData.MissileData)
end
end
else
if not ( TrainerWeapon and TrainerWeapon:isExist() ) then
if self.MessagesOnOff == true and self.AlertsLaunchesOnOff == true then
-- Weapon does not exist anymore. Delete from Table
local Message = MESSAGE:New(
string.format( "%s launched by %s self destructed!",
TrainerWeaponTypeName,
TrainerSourceUnit:GetTypeName()
),"Tracking", 5, "ID" )
if self.AlertsToAll == true then
Message:ToAll()
else
Message:ToClient( Client )
end
end
MissileData = nil
table.remove( ClientData.MissileData, MissileDataID )
self:T( ClientData.MissileData )
end
end
end
end
if ShowMessages == true and self.MessagesOnOff == true and self.TrackingOnOff == true then -- Only do this when tracking information needs to be displayed.
-- TRACKING PART
-- For the current client, the missile range and bearing details are displayed To the Player Client.
-- For the other clients, the missile range and bearing details are displayed To the other Player Clients.
-- To achieve this, a cross loop is done for each Player Client <-> Other Player Client missile information.
-- Main Player Client loop
for ClientDataID, ClientData in pairs( self.TrackingMissiles ) do
local Client = ClientData.Client
self:T2( { Client:GetName() } )
ClientData.MessageToClient = ""
ClientData.MessageToAll = ""
-- Other Players Client loop
for TrackingDataID, TrackingData in pairs( self.TrackingMissiles ) do
for MissileDataID, MissileData in pairs( TrackingData.MissileData ) do
self:T3( MissileDataID )
local TrainerSourceUnit = MissileData.TrainerSourceUnit
local TrainerWeapon = MissileData.TrainerWeapon
local TrainerTargetUnit = MissileData.TrainerTargetUnit
local TrainerWeaponTypeName = MissileData.TrainerWeaponTypeName
local TrainerWeaponLaunched = MissileData.TrainerWeaponLaunched
if Client and Client:IsAlive() and TrainerSourceUnit and TrainerSourceUnit:IsAlive() and TrainerWeapon and TrainerWeapon:isExist() and TrainerTargetUnit and TrainerTargetUnit:IsAlive() then
if ShowMessages == true then
local TrackingTo
TrackingTo = string.format( " -> %s",
TrainerWeaponTypeName
)
if ClientDataID == TrackingDataID then
if ClientData.MessageToClient == "" then
ClientData.MessageToClient = "Missiles to You:\n"
end
ClientData.MessageToClient = ClientData.MessageToClient .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. "\n"
else
if self.TrackingToAll == true then
if ClientData.MessageToAll == "" then
ClientData.MessageToAll = "Missiles to other Players:\n"
end
ClientData.MessageToAll = ClientData.MessageToAll .. TrackingTo .. self:_AddRange( ClientData.Client, TrainerWeapon ) .. self:_AddBearing( ClientData.Client, TrainerWeapon ) .. " ( " .. TrainerTargetUnit:GetPlayerName() .. " )\n"
end
end
end
end
end
end
-- Once the Player Client and the Other Player Client tracking messages are prepared, show them.
if ClientData.MessageToClient ~= "" or ClientData.MessageToAll ~= "" then
local Message = MESSAGE:New( ClientData.MessageToClient .. ClientData.MessageToAll, "Tracking", 1, "ID" ):ToClient( Client )
end
end
end
return true
end

View File

@ -474,7 +474,9 @@ function MISSIONSCHEDULER.Scheduler()
if Mission.GoalFunction ~= nil then if Mission.GoalFunction ~= nil then
Mission.GoalFunction( Mission, Client ) Mission.GoalFunction( Mission, Client )
end end
_DATABASE:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 ) if MISSIONSCHEDULER.Scoring then
MISSIONSCHEDULER.Scoring:_AddMissionTaskScore( Client:GetClientGroupDCSUnit(), Mission.Name, 25 )
end
-- if not Mission:IsCompleted() then -- if not Mission:IsCompleted() then
-- end -- end

View File

@ -31,7 +31,7 @@ function PICKUPTASK:New( CargoType, OnBoardSide )
self.CargoType = CargoType self.CargoType = CargoType
self.GoalVerb = CargoType .. " " .. self.GoalVerb self.GoalVerb = CargoType .. " " .. self.GoalVerb
self.OnBoardSide = OnBoardSide self.OnBoardSide = OnBoardSide
self.IsLandingRequired = false -- required to decide whether the client needs to land or not self.IsLandingRequired = true -- required to decide whether the client needs to land or not
self.IsSlingLoad = false -- Indicates whether the cargo is a sling load cargo self.IsSlingLoad = false -- Indicates whether the cargo is a sling load cargo
self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGELOAD:New(), STAGEDONE:New() } self.Stages = { STAGE_CARGO_INIT:New(), STAGE_CARGO_LOAD:New(), STAGEBRIEF:New(), STAGESTART:New(), STAGEROUTE:New(), STAGELANDING:New(), STAGELANDED:New(), STAGELOAD:New(), STAGEDONE:New() }
self.SetStage( self, 1 ) self.SetStage( self, 1 )

View File

@ -1524,6 +1524,47 @@ function routines.IsUnitInZones( TransportUnit, LandingZones )
end end
end end
function routines.IsUnitNearZonesRadius( TransportUnit, LandingZones, ZoneRadius )
--trace.f("", "routines.IsUnitInZones" )
local TransportZoneResult = nil
local TransportZonePos = nil
local TransportZone = nil
-- fill-up some local variables to support further calculations to determine location of units within the zone.
if TransportUnit then
local TransportUnitPos = TransportUnit:getPosition().p
if type( LandingZones ) == "table" then
for LandingZoneID, LandingZoneName in pairs( LandingZones ) do
TransportZone = trigger.misc.getZone( LandingZoneName )
if TransportZone then
TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z}
if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then
TransportZoneResult = LandingZoneID
break
end
end
end
else
TransportZone = trigger.misc.getZone( LandingZones )
TransportZonePos = {radius = TransportZone.radius, x = TransportZone.point.x, y = TransportZone.point.y, z = TransportZone.point.z}
if ((( TransportUnitPos.x - TransportZonePos.x)^2 + (TransportUnitPos.z - TransportZonePos.z)^2)^0.5 <= ZoneRadius ) then
TransportZoneResult = 1
end
end
if TransportZoneResult then
--trace.i( "routines", "TransportZone:" .. TransportZoneResult )
else
--trace.i( "routines", "TransportZone:nil logic" )
end
return TransportZoneResult
else
--trace.i( "routines", "TransportZone:nil hard" )
return nil
end
end
function routines.IsStaticInZones( TransportStatic, LandingZones ) function routines.IsStaticInZones( TransportStatic, LandingZones )
--trace.f() --trace.f()
@ -1696,7 +1737,7 @@ function routines.getGroupRoute(groupIdent, task) -- same as getGroupPoints bu
-- refactor to search by groupId and allow groupId and groupName as inputs -- refactor to search by groupId and allow groupId and groupName as inputs
local gpId = groupIdent local gpId = groupIdent
if type(groupIdent) == 'string' and not tonumber(groupIdent) then if type(groupIdent) == 'string' and not tonumber(groupIdent) then
gpId = _DATABASE.Groups[groupIdent].groupId gpId = _DATABASE.Templates.Groups[groupIdent].groupId
end end
for coa_name, coa_data in pairs(env.mission.coalition) do for coa_name, coa_data in pairs(env.mission.coalition) do

114
Moose/Scheduler.lua Normal file
View File

@ -0,0 +1,114 @@
--- Models time events calling event handing functions.
-- @module Scheduler
-- @author FlightControl
Include.File( "Routines" )
Include.File( "Base" )
Include.File( "Cargo" )
Include.File( "Message" )
--- The SCHEDULER class
-- @type SCHEDULER
-- @extends Base#BASE
SCHEDULER = {
ClassName = "SCHEDULER",
}
--- SCHEDULER constructor.
-- @param #SCHEDULER self
-- @param #table TimeEventObject
-- @param #function TimeEventFunction
-- @param #table TimeEventFunctionArguments
-- @param #number StartSeconds
-- @param #number RepeatSecondsInterval
-- @param #number RandomizationFactor
-- @param #number StopSeconds
-- @return #SCHEDULER
function SCHEDULER:New( TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds )
local self = BASE:Inherit( self, BASE:New() )
self:F( { TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds } )
self.TimeEventObject = TimeEventObject
self.TimeEventFunction = TimeEventFunction
self.TimeEventFunctionArguments = TimeEventFunctionArguments
self.StartSeconds = StartSeconds
if RepeatSecondsInterval then
self.RepeatSecondsInterval = RepeatSecondsInterval
else
self.RepeatSecondsInterval = 0
end
if RandomizationFactor then
self.RandomizationFactor = RandomizationFactor
else
self.RandomizationFactor = 0
end
if StopSeconds then
self.StopSeconds = StopSeconds
end
self.Repeat = false
self.StartTime = timer.getTime()
self:Start()
return self
end
function SCHEDULER:Scheduler()
self:F( self.TimeEventFunctionArguments )
local ErrorHandler = function( errmsg )
env.info( "Error in SCHEDULER function:" .. errmsg )
env.info( debug.traceback() )
return errmsg
end
local Status, Result
if self.TimeEventObject then
Status, Result = xpcall( function() return self.TimeEventFunction( self.TimeEventObject, unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler )
else
Status, Result = xpcall( function() return self.TimeEventFunction( unpack( self.TimeEventFunctionArguments ) ) end, ErrorHandler )
end
self:T( { Status, Result } )
if Status and Status == true and Result and Result == true then
if self.Repeat and ( not self.StopSeconds or ( self.StopSeconds and timer.getTime() <= self.StartTime + self.StopSeconds ) ) then
timer.scheduleFunction(
self.Scheduler,
self,
timer.getTime() + self.RepeatSecondsInterval + math.random( - ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ), ( self.RandomizationFactor * self.RepeatSecondsInterval / 2 ) ) + 0.01
)
end
end
end
function SCHEDULER:Start()
self:F( self.TimeEventObject )
self.Repeat = true
timer.scheduleFunction( self.Scheduler, self, timer.getTime() + self.StartSeconds + .01 )
return self
end
function SCHEDULER:Stop()
self:F( self.TimeEventObject )
self.Repeat = false
end

View File

@ -197,7 +197,7 @@ end
function SCORING:_AddPlayerFromUnit( UnitData ) function SCORING:_AddPlayerFromUnit( UnitData )
self:F( UnitData ) self:F( UnitData )
if UnitData:isExist() then if UnitData and UnitData:isExist() then
local UnitName = UnitData:getName() local UnitName = UnitData:getName()
local PlayerName = UnitData:getPlayerName() local PlayerName = UnitData:getPlayerName()
local UnitDesc = UnitData:getDesc() local UnitDesc = UnitData:getDesc()
@ -324,7 +324,7 @@ function SCORING:_EventOnHit( Event )
local InitUnitName = "" local InitUnitName = ""
local InitGroup = nil local InitGroup = nil
local InitGroupName = "" local InitGroupName = ""
local InitPlayerName = "dummy" local InitPlayerName = nil
local InitCoalition = nil local InitCoalition = nil
local InitCategory = nil local InitCategory = nil

View File

@ -67,7 +67,7 @@ function SEAD:EventShot( Event )
local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon)) local _targetMimgroup = Unit.getGroup(Weapon.getTarget(SEADWeapon))
local _targetMimgroupName = _targetMimgroup:getName() local _targetMimgroupName = _targetMimgroup:getName()
local _targetMimcont= _targetMimgroup:getController() local _targetMimcont= _targetMimgroup:getController()
local _targetskill = _DATABASE.Units[_targetMimname].Template.skill local _targetskill = _DATABASE.Templates.Units[_targetMimname].Template.skill
self:T( self.SEADGroupPrefixes ) self:T( self.SEADGroupPrefixes )
self:T( _targetMimgroupName ) self:T( _targetMimgroupName )
local SEADGroupFound = false local SEADGroupFound = false

View File

@ -80,6 +80,7 @@ Include.File( "Database" )
Include.File( "Group" ) Include.File( "Group" )
Include.File( "Zone" ) Include.File( "Zone" )
Include.File( "Event" ) Include.File( "Event" )
Include.File( "Scheduler" )
--- SPAWN Class --- SPAWN Class
-- @type SPAWN -- @type SPAWN
@ -323,8 +324,8 @@ function SPAWN:CleanUp( SpawnCleanUpInterval )
self.SpawnCleanUpInterval = SpawnCleanUpInterval self.SpawnCleanUpInterval = SpawnCleanUpInterval
self.SpawnCleanUpTimeStamps = {} self.SpawnCleanUpTimeStamps = {}
self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval ) --self.CleanUpFunction = routines.scheduleFunction( self._SpawnCleanUpScheduler, { self }, timer.getTime() + 1, SpawnCleanUpInterval )
self.CleanUpScheduler = SCHEDULER:New( self, self._SpawnCleanUpScheduler, {}, 1, SpawnCleanUpInterval, 0.2 )
return self return self
end end
@ -457,6 +458,8 @@ function SPAWN:SpawnWithIndex( SpawnIndex )
_EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self ) _EVENTDISPATCHER:OnEngineShutDownForTemplate( self.SpawnGroups[self.SpawnIndex].SpawnTemplate, self._OnEngineShutDown, self )
end end
self:T( self.SpawnGroups[self.SpawnIndex].SpawnTemplate )
self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate ) self.SpawnGroups[self.SpawnIndex].Group = _DATABASE:Spawn( self.SpawnGroups[self.SpawnIndex].SpawnTemplate )
-- If there is a SpawnFunction hook defined, call it. -- If there is a SpawnFunction hook defined, call it.
@ -497,23 +500,29 @@ end
function SPAWN:SpawnScheduled( SpawnTime, SpawnTimeVariation ) function SPAWN:SpawnScheduled( SpawnTime, SpawnTimeVariation )
self:F( { SpawnTime, SpawnTimeVariation } ) self:F( { SpawnTime, SpawnTimeVariation } )
self.SpawnCurrentTimer = 0 -- The internal timer counter to trigger a scheduled spawning of SpawnTemplatePrefix.
self.SpawnSetTimer = 0 -- The internal timer value when a scheduled spawning of SpawnTemplatePrefix occurs.
self.AliveFactor = 1 --
self.SpawnLowTimer = 0
self.SpawnHighTimer = 0
if SpawnTime ~= nil and SpawnTimeVariation ~= nil then if SpawnTime ~= nil and SpawnTimeVariation ~= nil then
self.SpawnLowTimer = SpawnTime - SpawnTime / 2 * SpawnTimeVariation self.SpawnScheduler = SCHEDULER:New( self, self._Scheduler, {}, 1, SpawnTime, SpawnTimeVariation )
self.SpawnHighTimer = SpawnTime + SpawnTime / 2 * SpawnTimeVariation
self:SpawnScheduleStart()
end end
self:T( { self.SpawnLowTimer, self.SpawnHighTimer } )
return self return self
end end
--- Will re-start the spawning scheduler.
-- Note: This function is only required to be called when the schedule was stopped.
function SPAWN:SpawnScheduleStart()
self:F( { self.SpawnTemplatePrefix } )
self.SpawnScheduler:Start()
end
--- Will stop the scheduled spawning scheduler.
function SPAWN:SpawnScheduleStop()
self:F( { self.SpawnTemplatePrefix } )
self.SpawnScheduler:Stop()
end
--- Allows to place a CallFunction hook when a new group spawns. --- Allows to place a CallFunction hook when a new group spawns.
-- The provided function will be called when a new group is spawned, including its given parameters. -- The provided function will be called when a new group is spawned, including its given parameters.
-- The first parameter of the SpawnFunction is the @{Group#GROUP} that was spawned. -- The first parameter of the SpawnFunction is the @{Group#GROUP} that was spawned.
@ -535,30 +544,6 @@ end
--- Will start the spawning scheduler.
-- Note: This function is called automatically when @{#SPAWN.Scheduled} is called.
function SPAWN:SpawnScheduleStart()
self:F( { self.SpawnTemplatePrefix } )
--local ClientUnit = #AlivePlayerUnits()
self.AliveFactor = 10 -- ( 10 - ClientUnit ) / 10
if self.SpawnIsScheduled == false then
self.SpawnIsScheduled = true
self.SpawnInit = true
self.SpawnSetTimer = math.random( self.SpawnLowTimer * self.AliveFactor / 10 , self.SpawnHighTimer * self.AliveFactor / 10 )
self.SpawnFunction = routines.scheduleFunction( self._Scheduler, { self }, timer.getTime() + 1, 1 )
end
end
--- Will stop the scheduled spawning scheduler.
function SPAWN:SpawnScheduleStop()
self:F( { self.SpawnTemplatePrefix } )
self.SpawnIsScheduled = false
end
--- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone. --- Will spawn a group from a hosting unit. This function is mostly advisable to be used if you want to simulate spawning from air units, like helicopters, which are dropping infantry into a defined Landing Zone.
-- Note that each point in the route assigned to the spawning group is reset to the point of the spawn. -- Note that each point in the route assigned to the spawning group is reset to the point of the spawn.
@ -587,6 +572,9 @@ function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex )
if SpawnTemplate then if SpawnTemplate then
local UnitPoint = HostUnit:GetPointVec2() local UnitPoint = HostUnit:GetPointVec2()
self:T( { "Current point of ", self.SpawnTemplatePrefix, UnitPoint } )
--for PointID, Point in pairs( SpawnTemplate.route.points ) do --for PointID, Point in pairs( SpawnTemplate.route.points ) do
--Point.x = UnitPoint.x --Point.x = UnitPoint.x
--Point.y = UnitPoint.y --Point.y = UnitPoint.y
@ -594,9 +582,6 @@ function SPAWN:SpawnFromUnit( HostUnit, OuterRadius, InnerRadius, SpawnIndex )
--Point.alt_type = nil --Point.alt_type = nil
--end --end
SpawnTemplate.route.points = nil
SpawnTemplate.route.points = {}
SpawnTemplate.route.points[1] = {}
SpawnTemplate.route.points[1].x = UnitPoint.x SpawnTemplate.route.points[1].x = UnitPoint.x
SpawnTemplate.route.points[1].y = UnitPoint.y SpawnTemplate.route.points[1].y = UnitPoint.y
@ -677,8 +662,9 @@ function SPAWN:SpawnInZone( Zone, ZoneRandomize, SpawnIndex )
-- Apply SpawnFormation -- Apply SpawnFormation
for UnitID = 1, #SpawnTemplate.units do for UnitID = 1, #SpawnTemplate.units do
SpawnTemplate.units[UnitID].x = ZonePoint.x local ZonePointUnit = Zone:GetRandomPointVec2()
SpawnTemplate.units[UnitID].y = ZonePoint.y SpawnTemplate.units[UnitID].x = ZonePointUnit.x
SpawnTemplate.units[UnitID].y = ZonePointUnit.y
self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y ) self:T( 'SpawnTemplate.units['..UnitID..'].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units['..UnitID..'].y = ' .. SpawnTemplate.units[UnitID].y )
end end
@ -907,7 +893,6 @@ function SPAWN:_InitializeSpawnGroups( SpawnIndex )
self.SpawnGroups[SpawnIndex].Visible = false self.SpawnGroups[SpawnIndex].Visible = false
self.SpawnGroups[SpawnIndex].Spawned = false self.SpawnGroups[SpawnIndex].Spawned = false
self.SpawnGroups[SpawnIndex].UnControlled = false self.SpawnGroups[SpawnIndex].UnControlled = false
self.SpawnGroups[SpawnIndex].Spawned = false
self.SpawnGroups[SpawnIndex].SpawnTime = 0 self.SpawnGroups[SpawnIndex].SpawnTime = 0
self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefix self.SpawnGroups[SpawnIndex].SpawnTemplatePrefix = self.SpawnTemplatePrefix
@ -961,12 +946,15 @@ end
--- Gets the Group Template from the ME environment definition. --- Gets the Group Template from the ME environment definition.
-- This method used the @{DATABASE} object, which contains ALL initial and new spawned object in MOOSE. -- This method used the @{DATABASE} object, which contains ALL initial and new spawned object in MOOSE.
-- @param #SPAWN self
-- @param #string SpawnTemplatePrefix
-- @return @SPAWN self
function SPAWN:_GetTemplate( SpawnTemplatePrefix ) function SPAWN:_GetTemplate( SpawnTemplatePrefix )
self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnTemplatePrefix } ) self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnTemplatePrefix } )
local SpawnTemplate = nil local SpawnTemplate = nil
SpawnTemplate = routines.utils.deepCopy( _DATABASE.Groups[SpawnTemplatePrefix].Template ) SpawnTemplate = routines.utils.deepCopy( _DATABASE.Templates.Groups[SpawnTemplatePrefix].Template )
if SpawnTemplate == nil then if SpawnTemplate == nil then
error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix ) error( 'No Template returned for SpawnTemplatePrefix = ' .. SpawnTemplatePrefix )
@ -981,6 +969,10 @@ function SPAWN:_GetTemplate( SpawnTemplatePrefix )
end end
--- Prepares the new Group Template. --- Prepares the new Group Template.
-- @param #SPAWN self
-- @param #string SpawnTemplatePrefix
-- @param #number SpawnIndex
-- @return #SPAWN self
function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex ) function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex )
self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } ) self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix } )
@ -991,6 +983,7 @@ function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex )
SpawnTemplate.lateActivation = false SpawnTemplate.lateActivation = false
if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then if SpawnTemplate.SpawnCategoryID == Group.Category.GROUND then
self:T( "For ground units, visible needs to be false..." )
SpawnTemplate.visible = false SpawnTemplate.visible = false
end end
@ -1010,7 +1003,7 @@ function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex )
end end
--- Internal function randomizing the routes. --- Private method randomizing the routes.
-- @param #SPAWN self -- @param #SPAWN self
-- @param #number SpawnIndex The index of the group to be spawned. -- @param #number SpawnIndex The index of the group to be spawned.
-- @return #SPAWN -- @return #SPAWN
@ -1034,7 +1027,10 @@ function SPAWN:_RandomizeRoute( SpawnIndex )
return self return self
end end
--- Private method that randomizes the template of the group.
-- @param #SPAWN self
-- @param #number SpawnIndex
-- @return #SPAWN self
function SPAWN:_RandomizeTemplate( SpawnIndex ) function SPAWN:_RandomizeTemplate( SpawnIndex )
self:F( { self.SpawnTemplatePrefix, SpawnIndex } ) self:F( { self.SpawnTemplatePrefix, SpawnIndex } )
@ -1044,6 +1040,7 @@ function SPAWN:_RandomizeTemplate( SpawnIndex )
self.SpawnGroups[SpawnIndex].SpawnTemplate.route = routines.utils.deepCopy( self.SpawnTemplate.route ) self.SpawnGroups[SpawnIndex].SpawnTemplate.route = routines.utils.deepCopy( self.SpawnTemplate.route )
self.SpawnGroups[SpawnIndex].SpawnTemplate.x = self.SpawnTemplate.x self.SpawnGroups[SpawnIndex].SpawnTemplate.x = self.SpawnTemplate.x
self.SpawnGroups[SpawnIndex].SpawnTemplate.y = self.SpawnTemplate.y self.SpawnGroups[SpawnIndex].SpawnTemplate.y = self.SpawnTemplate.y
self.SpawnGroups[SpawnIndex].SpawnTemplate.start_time = self.SpawnTemplate.start_time
for UnitID = 1, #self.SpawnGroups[SpawnIndex].SpawnTemplate.units do for UnitID = 1, #self.SpawnGroups[SpawnIndex].SpawnTemplate.units do
self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].heading = self.SpawnTemplate.units[1].heading self.SpawnGroups[SpawnIndex].SpawnTemplate.units[UnitID].heading = self.SpawnTemplate.units[1].heading
end end
@ -1226,19 +1223,10 @@ end
function SPAWN:_Scheduler() function SPAWN:_Scheduler()
self:F( { "_Scheduler", self.SpawnTemplatePrefix, self.SpawnAliasPrefix, self.SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive } ) self:F( { "_Scheduler", self.SpawnTemplatePrefix, self.SpawnAliasPrefix, self.SpawnIndex, self.SpawnMaxGroups, self.SpawnMaxUnitsAlive } )
if self.SpawnInit or self.SpawnCurrentTimer == self.SpawnSetTimer then -- Validate if there are still groups left in the batch...
-- Validate if there are still groups left in the batch... self:Spawn()
self:Spawn()
self.SpawnInit = false return true
if self.SpawnIsScheduled == true then
--local ClientUnit = #AlivePlayerUnits()
self.AliveFactor = 1 -- ( 10 - ClientUnit ) / 10
self.SpawnCurrentTimer = 0
self.SpawnSetTimer = math.random( self.SpawnLowTimer * self.AliveFactor , self.SpawnHighTimer * self.AliveFactor )
end
else
self.SpawnCurrentTimer = self.SpawnCurrentTimer + 1
end
end end
function SPAWN:_SpawnCleanUpScheduler() function SPAWN:_SpawnCleanUpScheduler()
@ -1270,4 +1258,6 @@ function SPAWN:_SpawnCleanUpScheduler()
end end
return true -- Repeat
end end

View File

@ -255,7 +255,7 @@ function STAGEROUTE:Validate( Mission, Client, Task )
-- check if the Client is in the landing zone -- check if the Client is in the landing zone
self:T( Task.LandingZones.LandingZoneNames ) self:T( Task.LandingZones.LandingZoneNames )
Task.CurrentLandingZoneName = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames ) Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 )
if Task.CurrentLandingZoneName then if Task.CurrentLandingZoneName then
@ -268,9 +268,11 @@ function STAGEROUTE:Validate( Mission, Client, Task )
end end
end end
self:T( 1 )
return 1 return 1
end end
self:T( 0 )
return 0 return 0
end end
@ -346,7 +348,16 @@ function STAGELANDING:Execute( Mission, Client, Task )
HostMessage = "Use the Radio menu and F6 to find the cargo, then fly or land near the cargo and " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "." HostMessage = "Use the Radio menu and F6 to find the cargo, then fly or land near the cargo and " .. Task.TEXT[1] .. " " .. Task.CargoNames .. "."
end end
Client:Message( HostMessage, self.MSG.TIME, Mission.Name .. "/STAGELANDING.EXEC." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")", 10 ) local Host = "Command"
if Task.HostUnitName then
Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")"
else
if Client:IsMultiSeated() then
Host = "Co-Pilot"
end
end
Client:Message( HostMessage, self.MSG.TIME, Mission.Name .. "/STAGELANDING.EXEC." .. Host, Host, 10 )
end end
end end
@ -354,7 +365,7 @@ end
function STAGELANDING:Validate( Mission, Client, Task ) function STAGELANDING:Validate( Mission, Client, Task )
self:F() self:F()
Task.CurrentLandingZoneName = routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames ) Task.CurrentLandingZoneName = routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.LandingZones.LandingZoneNames, 500 )
if Task.CurrentLandingZoneName then if Task.CurrentLandingZoneName then
-- Client is in de landing zone. -- Client is in de landing zone.
@ -377,14 +388,34 @@ function STAGELANDING:Validate( Mission, Client, Task )
end end
Task.Signalled = false Task.Signalled = false
Task:RemoveCargoMenus( Client ) Task:RemoveCargoMenus( Client )
self:T( -1 )
return -1 return -1
end end
if Task.IsLandingRequired and Client:GetClientGroupDCSUnit():inAir() then
return 0 local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity()
local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5
local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint()
local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } )
local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight
self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } )
if Task.IsLandingRequired and not Client:GetClientGroupDCSUnit():inAir() then
self:T( 1 )
Task.IsInAirTestRequired = true
return 1
end
self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } )
if Task.IsLandingRequired and DCSUnitVelocity <= 0.05 and DCSUnitHeight <= Task.CurrentCargoZone.SignalHeight then
self:T( 1 )
Task.IsInAirTestRequired = false
return 1
end end
return 1 self:T( 0 )
return 0
end end
STAGELANDED = { STAGELANDED = {
@ -405,9 +436,20 @@ function STAGELANDED:Execute( Mission, Client, Task )
self:F() self:F()
if Task.IsLandingRequired then if Task.IsLandingRequired then
Client:Message( 'You have landed within the landing zone. Use the radio menu (F10) to ' .. Task.TEXT[1] .. ' the ' .. Task.CargoType .. '.',
self.MSG.TIME, Mission.Name .. "/STAGELANDED.EXEC." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" ) local Host = "Command"
if not self.MenusAdded then if Task.HostUnitName then
Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")"
else
if Client:IsMultiSeated() then
Host = "Co-Pilot"
end
end
Client:Message( 'You have landed within the landing zone. Use the radio menu (F10) to ' .. Task.TEXT[1] .. ' the ' .. Task.CargoType .. '.',
self.MSG.TIME, Mission.Name .. "/STAGELANDED.EXEC" .. Host, Host )
if not self.MenusAdded then
Task.Cargo = nil Task.Cargo = nil
Task:RemoveCargoMenus( Client ) Task:RemoveCargoMenus( Client )
Task:AddCargoMenus( Client, CARGOS, 250 ) Task:AddCargoMenus( Client, CARGOS, 250 )
@ -420,26 +462,44 @@ end
function STAGELANDED:Validate( Mission, Client, Task ) function STAGELANDED:Validate( Mission, Client, Task )
self:F() self:F()
if not routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName ) then if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then
self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." ) self:T( "Client is not anymore in the landing zone, go back to stage Route, and remove cargo menus." )
Task.Signalled = false Task.Signalled = false
Task:RemoveCargoMenus( Client ) Task:RemoveCargoMenus( Client )
self:T( -2 )
return -2 return -2
end end
if Task.IsLandingRequired and Client:GetClientGroupDCSUnit():inAir() then local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity()
self:T( "Client went back in the air. Go back to stage Landing." ) local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5
Task.Signalled = false
return -1 local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint()
end local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } )
local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight
self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } )
if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then
self:T( "Client went back in the air. Go back to stage Landing." )
self:T( -1 )
return -1
end
self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } )
if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then
self:T( "It seems the Client went back in the air and over the boundary limits. Go back to stage Landing." )
self:T( -1 )
return -1
end
-- Wait until cargo is selected from the menu. -- Wait until cargo is selected from the menu.
if Task.IsLandingRequired then if Task.IsLandingRequired then
if not Task.Cargo then if not Task.Cargo then
self:T( 0 )
return 0 return 0
end end
end end
self:T( 1 )
return 1 return 1
end end
@ -503,7 +563,7 @@ function STAGEUNLOAD:Validate( Mission, Client, Task )
self:F() self:F()
env.info( 'STAGEUNLOAD:Validate()' ) env.info( 'STAGEUNLOAD:Validate()' )
if routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName ) then if routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then
else else
Task.ExecuteStage = _TransportExecuteStage.FAILED Task.ExecuteStage = _TransportExecuteStage.FAILED
Task:RemoveCargoMenus( Client ) Task:RemoveCargoMenus( Client )
@ -562,10 +622,21 @@ function STAGELOAD:Execute( Mission, Client, Task )
self:F() self:F()
if not Task.IsSlingLoad then if not Task.IsSlingLoad then
local Host = "Command"
if Task.HostUnitName then
Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")"
else
if Client:IsMultiSeated() then
Host = "Co-Pilot"
end
end
Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.', Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.',
_TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.EXEC." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" ) _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.EXEC." .. Host, Host )
-- Route the cargo to the Carrier -- Route the cargo to the Carrier
Task.Cargo:OnBoard( Client, Task.CurrentCargoZone, Task.OnBoardSide ) Task.Cargo:OnBoard( Client, Task.CurrentCargoZone, Task.OnBoardSide )
Task.ExecuteStage = _TransportExecuteStage.EXECUTING Task.ExecuteStage = _TransportExecuteStage.EXECUTING
else else
@ -578,6 +649,14 @@ function STAGELOAD:Executing( Mission, Client, Task )
-- If the Cargo is ready to be loaded, load it into the Client. -- If the Cargo is ready to be loaded, load it into the Client.
local Host = "Command"
if Task.HostUnitName then
Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")"
else
if Client:IsMultiSeated() then
Host = "Co-Pilot"
end
end
if not Task.IsSlingLoad then if not Task.IsSlingLoad then
self:T( Task.Cargo.CargoName) self:T( Task.Cargo.CargoName)
@ -589,14 +668,14 @@ function STAGELOAD:Executing( Mission, Client, Task )
-- Message to the pilot that cargo has been loaded. -- Message to the pilot that cargo has been loaded.
Client:Message( "The cargo " .. Task.Cargo.CargoName .. " has been loaded in our helicopter.", Client:Message( "The cargo " .. Task.Cargo.CargoName .. " has been loaded in our helicopter.",
20, Mission.Name .. "/STAGELANDING.LOADING1." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" ) 20, Mission.Name .. "/STAGELANDING.LOADING1." .. Host, Host )
Task.ExecuteStage = _TransportExecuteStage.SUCCESS Task.ExecuteStage = _TransportExecuteStage.SUCCESS
Client:ShowCargo() Client:ShowCargo()
end end
else else
Client:Message( "Hook the " .. Task.CargoNames .. " onto the helicopter " .. Task.TEXT[3] .. " within the landing zone.", Client:Message( "Hook the " .. Task.CargoNames .. " onto the helicopter " .. Task.TEXT[3] .. " within the landing zone.",
_TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.LOADING.1." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")", 10 ) _TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.LOADING.1." .. Host, Host , 10 )
for CargoID, Cargo in pairs( CARGOS ) do for CargoID, Cargo in pairs( CARGOS ) do
self:T( "Cargo.CargoName = " .. Cargo.CargoName ) self:T( "Cargo.CargoName = " .. Cargo.CargoName )
@ -612,7 +691,7 @@ function STAGELOAD:Executing( Mission, Client, Task )
Cargo:StatusLoaded() Cargo:StatusLoaded()
Task.Cargo = Cargo Task.Cargo = Cargo
Client:Message( 'The Cargo has been successfully hooked onto the helicopter and is now being sling loaded. Fly outside the landing zone.', Client:Message( 'The Cargo has been successfully hooked onto the helicopter and is now being sling loaded. Fly outside the landing zone.',
self.MSG.TIME, Mission.Name .. "/STAGELANDING.LOADING.2." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" ) self.MSG.TIME, Mission.Name .. "/STAGELANDING.LOADING.2." .. Host, Host )
Task.ExecuteStage = _TransportExecuteStage.SUCCESS Task.ExecuteStage = _TransportExecuteStage.SUCCESS
break break
end end
@ -630,32 +709,61 @@ function STAGELOAD:Validate( Mission, Client, Task )
self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName ) self:T( "Task.CurrentLandingZoneName = " .. Task.CurrentLandingZoneName )
local Host = "Command"
if Task.HostUnitName then
Host = Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")"
else
if Client:IsMultiSeated() then
Host = "Co-Pilot"
end
end
if not Task.IsSlingLoad then if not Task.IsSlingLoad then
if not routines.IsUnitInZones( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName ) then if not routines.IsUnitNearZonesRadius( Client:GetClientGroupDCSUnit(), Task.CurrentLandingZoneName, 500 ) then
Task:RemoveCargoMenus( Client ) Task:RemoveCargoMenus( Client )
Task.ExecuteStage = _TransportExecuteStage.FAILED Task.ExecuteStage = _TransportExecuteStage.FAILED
Task.CargoName = nil Task.CargoName = nil
Client:Message( "The " .. Task.CargoType .. " loading has been aborted. You flew outside the pick-up zone while loading. ", Client:Message( "The " .. Task.CargoType .. " loading has been aborted. You flew outside the pick-up zone while loading. ",
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" ) self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host )
self:T( -1 )
return -1 return -1
end end
if not Client:GetClientGroupDCSUnit():inAir() then local DCSUnitVelocityVec3 = Client:GetClientGroupDCSUnit():getVelocity()
else local DCSUnitVelocity = ( DCSUnitVelocityVec3.x ^2 + DCSUnitVelocityVec3.y ^2 + DCSUnitVelocityVec3.z ^2 ) ^ 0.5
-- The carrier is back in the air, undo the loading process.
Task:RemoveCargoMenus( Client ) local DCSUnitPointVec3 = Client:GetClientGroupDCSUnit():getPoint()
Task.ExecuteStage = _TransportExecuteStage.NONE local LandHeight = land.getHeight( { x = DCSUnitPointVec3.x, y = DCSUnitPointVec3.z } )
Task.CargoName = nil local DCSUnitHeight = DCSUnitPointVec3.y - LandHeight
Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.",
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.2." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" ) self:T( { Task.IsLandingRequired, Client:GetClientGroupDCSUnit():inAir() } )
return -1 if Task.IsLandingRequired and Task.IsInAirTestRequired == true and Client:GetClientGroupDCSUnit():inAir() then
end Task:RemoveCargoMenus( Client )
Task.ExecuteStage = _TransportExecuteStage.FAILED
Task.CargoName = nil
Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.",
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host )
self:T( -1 )
return -1
end
self:T( { DCSUnitVelocity, DCSUnitHeight, LandHeight, Task.CurrentCargoZone.SignalHeight } )
if Task.IsLandingRequired and Task.IsInAirTestRequired == false and DCSUnitVelocity >= 2 and DCSUnitHeight >= Task.CurrentCargoZone.SignalHeight then
Task:RemoveCargoMenus( Client )
Task.ExecuteStage = _TransportExecuteStage.FAILED
Task.CargoName = nil
Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.",
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host )
self:T( -1 )
return -1
end
if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then
Task:RemoveCargoMenus( Client ) Task:RemoveCargoMenus( Client )
Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " within the landing zone.", Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " within the landing zone.",
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.3." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" ) self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.3." .. Host, Host )
Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 )
self:T( 1 )
return 1 return 1
end end
@ -664,8 +772,9 @@ function STAGELOAD:Validate( Mission, Client, Task )
CargoStatic = StaticObject.getByName( Task.Cargo.CargoStaticName ) CargoStatic = StaticObject.getByName( Task.Cargo.CargoStaticName )
if CargoStatic and not routines.IsStaticInZones( CargoStatic, Task.CurrentLandingZoneName ) then if CargoStatic and not routines.IsStaticInZones( CargoStatic, Task.CurrentLandingZoneName ) then
Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " and flown outside of the landing zone.", Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " and flown outside of the landing zone.",
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.4." .. Task.HostUnitName, Task.HostUnitName .. " (" .. Task.HostUnitTypeName .. ")" ) self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.4." .. Host, Host )
Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.Cargo.CargoName, 1 ) Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.Cargo.CargoName, 1 )
self:T( 1 )
return 1 return 1
end end
end end
@ -673,6 +782,7 @@ function STAGELOAD:Validate( Mission, Client, Task )
end end
self:T( 0 )
return 0 return 0
end end

View File

@ -56,11 +56,13 @@ UNIT = {
-- @return Unit#UNIT -- @return Unit#UNIT
function UNIT:New( DCSUnit ) function UNIT:New( DCSUnit )
local self = BASE:Inherit( self, BASE:New() ) local self = BASE:Inherit( self, BASE:New() )
self:F( DCSUnit:getName() ) self:F( DCSUnit )
self.DCSUnit = DCSUnit self.DCSUnit = DCSUnit
self.UnitName = DCSUnit:getName() if DCSUnit then
self.UnitID = DCSUnit:getID() self.UnitName = DCSUnit:getName()
self.UnitID = DCSUnit:getID()
end
return self return self
end end
@ -91,6 +93,18 @@ function UNIT:GetName()
return self.UnitName return self.UnitName
end end
function UNIT:GetPlayerName()
self:F( self.UnitName )
local DCSUnit = Unit.getByName( self.UnitName )
local PlayerName = DCSUnit:getPlayerName()
if PlayerName == nil then
PlayerName = ""
end
return PlayerName
end
function UNIT:GetTypeName() function UNIT:GetTypeName()
self:F( self.UnitName ) self:F( self.UnitName )

View File

@ -40,6 +40,17 @@ function ZONE:GetPointVec2()
return Point return Point
end end
function ZONE:GetPointVec3( Height )
self:F( self.ZoneName )
local Zone = trigger.misc.getZone( self.ZoneName )
local Point = { x = Zone.point.x, y = land.getHeight( self:GetPointVec2() ) + Height, z = Zone.point.z }
self:T( { Zone, Point } )
return Point
end
function ZONE:GetRandomPointVec2() function ZONE:GetRandomPointVec2()
self:F( self.ZoneName ) self:F( self.ZoneName )

Binary file not shown.

View File

@ -0,0 +1,20 @@
-- Only use Include.File when developing new MOOSE classes.
-- When using Moose.lua in the DO SCIPTS FILE initialization box,
-- these Include.File statements are not needed, because all classes within Moose will be loaded.
Include.File("MissileTrainer")
-- This is an example of a global
local Trainer = MISSILETRAINER
:New( 200, "Trainer: Welcome to the missile training, trainee! Missiles will be fired at you. Try to evade them. Good luck!" )
:InitMessagesOnOff(true)
:InitAlertsToAll(true)
:InitAlertsHitsOnOff(true)
:InitAlertsLaunchesOnOff(false) -- I'll put it on below ...
:InitBearingOnOff(true)
:InitRangeOnOff(true)
:InitTrackingOnOff(true)
:InitTrackingToAll(true)
:InitMenusOnOff(false)
Trainer:InitAlertsToAll(true) -- Now alerts are also on

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -1,60 +0,0 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="UTF-8">
<title>Moose by FlightControl-Master</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="stylesheets/normalize.css" media="screen">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
</head>
<body>
<section class="page-header">
<h1 class="project-name">Moose</h1>
<h2 class="project-tagline">Mission Object Oriented Scripting Environment (MOOSE) for lua mission scripting design in DCS World</h2>
<a href="https://github.com/FlightControl-Master/MOOSE" class="btn">View on GitHub</a>
<a href="https://github.com/FlightControl-Master/MOOSE/zipball/master" class="btn">Download .zip</a>
<a href="https://github.com/FlightControl-Master/MOOSE/tarball/master" class="btn">Download .tar.gz</a>
</section>
<section class="main-content">
<h1>
<a id="context" class="anchor" href="#context" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Context</h1>
<p>A development has been ongoing for a while now, which allows to create missions quickly using an Object Oriented Framework developed in lua.
MOOSE is currently still in alpha version, but will evolve over time. Right now, it has been updated to work with DCS world 1.5.</p>
<p>MOOSE is a <strong>M</strong>ission <strong>O</strong>bject <strong>O</strong>riented <strong>S</strong>cripting <strong>E</strong>nvironment, and is meant for mission designers and mission hosters. It allows to quickly setup complex missions using pre-scripted scenarios using the available classes within the framework.</p>
<p>You can find the source of MOOSE here on GITHUB. It is free for download:
<a href="https://github.com/FlightControl-Master/MOOSE/">https://github.com/FlightControl-Master/MOOSE/</a></p>
<h1>
<a id="goals" class="anchor" href="#goals" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Goals</h1>
<p>The goal of MOOSE is to allow mission designers to enhance their scripting with mission orchestration objects, which can be instantiated from defined classes within the framework. This will allow to write mission scripts with minimal code embedded. Of course, the richness of the framework will determine the richness of the misson scenarios. We can expect that MOOSE will evolve over time, as more missions will be designed within the framework.</p>
<h1>
<a id="classes" class="anchor" href="#classes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Classes</h1>
<p>The following classes are currently embedded within MOOSE:</p>
<ul>
<li><p><a href="Documentation/Base.html">BASE</a>: The main class from which all MOOSE classes are derived from. The BASE class contains essential functions to support inheritance and MOOSE object execution tracing (logging within the DCS.log file in the saved games folder of the user).</p></li>
<li><p><a href="Documentation/DATABASE.html">DATABASE</a>: Create sets of units (and groups) upon defined filter criteria. These sets can be used to iterate the DATABASE calling a defined function for each unit (or group).</p></li>
<li><p><a href="Documentation/Spawn.html">SPAWN</a>: Spawn new groups (and units) during mission execution.</p></li>
<li><p><a href="Documentation/Escort.html">ESCORT</a>: Makes groups consisting of helicopters, airplanes, ground troops or ships within a mission joining your flight. You can control these groups through the ratio menu during your flight. Available commands are around: Navigation, Position Hold, Reporting (Target Detection), Attacking, Assisted Attacks, ROE, Evasion, Mission Execution and more ...</p></li>
</ul>
<footer class="site-footer">
<span class="site-footer-owner"><a href="https://github.com/FlightControl-Master/MOOSE">Moose</a> is maintained by <a href="https://github.com/FlightControl-Master">FlightControl-Master</a>.</span>
<span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a> using the <a href="https://github.com/jasonlong/cayman-theme">Cayman theme</a> by <a href="https://twitter.com/jasonlong">Jason Long</a>.</span>
</footer>
</section>
</body>
</html>

View File

@ -1 +0,0 @@
console.log('This would be the main JS file.');

View File

@ -1,6 +0,0 @@
{
"name": "Moose",
"tagline": "Mission Object Oriented Scripting Environment (MOOSE) for lua mission scripting design in DCS World",
"body": "# Context\r\n\r\nA development has been ongoing for a while now, which allows to create missions quickly using an Object Oriented Framework developed in lua.\r\nMOOSE is currently still in alpha version, but will evolve over time. Right now, it has been updated to work with DCS world 1.5.\r\n\r\nMOOSE is a **M**ission **O**bject **O**riented **S**cripting **E**nvironment, and is meant for mission designers and mission hosters. It allows to quickly setup complex missions using pre-scripted scenarios using the available classes within the framework.\r\n\r\nYou can find the source of MOOSE here on GITHUB. It is free for download: \r\nhttps://github.com/FlightControl-Master/MOOSE/\r\n\r\n# Goals\r\n\r\nThe goal of MOOSE is to allow mission designers to enhance their scripting with mission orchestration objects, which can be instantiated from defined classes within the framework. This will allow to write mission scripts with minimal code embedded. Of course, the richness of the framework will determine the richness of the misson scenarios. We can expect that MOOSE will evolve over time, as more missions will be designed within the framework.\r\n\r\n# Classes\r\n\r\nThe following classes are currently embedded within MOOSE:\r\n\r\n* [BASE](Documentation/Base.html): The main class from which all MOOSE classes are derived from. The BASE class contains essential functions to support inheritance and MOOSE object execution tracing (logging within the DCS.log file in the saved games folder of the user).\r\n\r\n* [DATABASE](Documentation/DATABASE.html): Create sets of units (and groups) upon defined filter criteria. These sets can be used to iterate the DATABASE calling a defined function for each unit (or group).\r\n\r\n* [SPAWN](Documentation/Spawn.html): Spawn new groups (and units) during mission execution.\r\n\r\n* [ESCORT](Documentation/Escort.html): Makes groups consisting of helicopters, airplanes, ground troops or ships within a mission joining your flight. You can control these groups through the ratio menu during your flight. Available commands are around: Navigation, Position Hold, Reporting (Target Detection), Attacking, Assisted Attacks, ROE, Evasion, Mission Execution and more ...\r\n\r\n",
"note": "Don't delete this file! It's used internally to help with page regeneration."
}

View File

@ -1,124 +0,0 @@
/*
The MIT License (MIT)
Copyright (c) 2015 GitHub, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
.pl-c /* comment */ {
color: #969896;
}
.pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */,
.pl-s .pl-v /* string variable */ {
color: #0086b3;
}
.pl-e /* entity */,
.pl-en /* entity.name */ {
color: #795da3;
}
.pl-s .pl-s1 /* string source */,
.pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ {
color: #333;
}
.pl-ent /* entity.name.tag */ {
color: #63a35c;
}
.pl-k /* keyword, storage, storage.type */ {
color: #a71d5d;
}
.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
.pl-s /* string */,
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
.pl-sr /* string.regexp */,
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */,
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */ {
color: #183691;
}
.pl-v /* variable */ {
color: #ed6a43;
}
.pl-id /* invalid.deprecated */ {
color: #b52a1d;
}
.pl-ii /* invalid.illegal */ {
background-color: #b52a1d;
color: #f8f8f8;
}
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
color: #63a35c;
font-weight: bold;
}
.pl-ml /* markup.list */ {
color: #693a17;
}
.pl-mh /* markup.heading */,
.pl-mh .pl-en /* markup.heading entity.name */,
.pl-ms /* meta.separator */ {
color: #1d3e81;
font-weight: bold;
}
.pl-mq /* markup.quote */ {
color: #008080;
}
.pl-mi /* markup.italic */ {
color: #333;
font-style: italic;
}
.pl-mb /* markup.bold */ {
color: #333;
font-weight: bold;
}
.pl-md /* markup.deleted, meta.diff.header.from-file */ {
background-color: #ffecec;
color: #bd2c00;
}
.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
background-color: #eaffea;
color: #55a532;
}
.pl-mdr /* meta.diff.range */ {
color: #795da3;
font-weight: bold;
}
.pl-mo /* meta.output */ {
color: #1d3e81;
}

View File

@ -1,424 +0,0 @@
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
box-sizing: content-box;
height: 0;
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit; /* 1 */
font: inherit; /* 2 */
margin: 0; /* 3 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal;
}
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */ /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto;
}
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold;
}
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}

View File

@ -1,228 +0,0 @@
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
padding: 0;
margin: 0;
font: inherit;
font-size: 100%;
vertical-align: baseline;
border: 0;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-spacing: 0;
border-collapse: collapse;
}
body {
font-family: 'Helvetica Neue', Helvetica, Arial, serif;
font-size: 13px;
line-height: 1.5;
color: #000;
}
a {
font-weight: bold;
color: #d5000d;
}
header {
padding-top: 35px;
padding-bottom: 10px;
}
header h1 {
font-size: 48px;
font-weight: bold;
line-height: 1.2;
color: #303030;
letter-spacing: -1px;
}
header h2 {
font-size: 24px;
font-weight: normal;
line-height: 1.3;
color: #aaa;
letter-spacing: -1px;
}
#downloads {
display: none;
}
#main_content {
padding-top: 20px;
}
code, pre {
margin-bottom: 30px;
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;
font-size: 12px;
color: #222;
}
code {
padding: 0 3px;
}
pre {
padding: 20px;
overflow: auto;
border: solid 1px #ddd;
}
pre code {
padding: 0;
}
ul, ol, dl {
margin-bottom: 20px;
}
/* COMMON STYLES */
table {
width: 100%;
border: 1px solid #ebebeb;
}
th {
font-weight: 500;
}
td {
font-weight: 300;
text-align: center;
border: 1px solid #ebebeb;
}
form {
padding: 20px;
background: #f2f2f2;
}
/* GENERAL ELEMENT TYPE STYLES */
h1 {
font-size: 2.8em;
}
h2 {
margin-bottom: 8px;
font-size: 22px;
font-weight: bold;
color: #303030;
}
h3 {
margin-bottom: 8px;
font-size: 18px;
font-weight: bold;
color: #d5000d;
}
h4 {
font-size: 16px;
font-weight: bold;
color: #303030;
}
h5 {
font-size: 1em;
color: #303030;
}
h6 {
font-size: .8em;
color: #303030;
}
p {
margin-bottom: 20px;
font-weight: 300;
}
a {
text-decoration: none;
}
p a {
font-weight: 400;
}
blockquote {
padding: 0 0 0 30px;
margin-bottom: 20px;
font-size: 1.6em;
border-left: 10px solid #e9e9e9;
}
ul li {
padding-left: 20px;
list-style-position: inside;
list-style: disc;
}
ol li {
padding-left: 3px;
list-style-position: inside;
list-style: decimal;
}
dl dd {
font-style: italic;
font-weight: 100;
}
footer {
padding-top: 20px;
padding-bottom: 30px;
margin-top: 40px;
font-size: 13px;
color: #aaa;
}
footer a {
color: #666;
}
/* MISC */
.clearfix:after {
display: block;
height: 0;
clear: both;
visibility: hidden;
content: '.';
}
.clearfix {display: inline-block;}
* html .clearfix {height: 1%;}
.clearfix {display: block;}

View File

@ -1,245 +0,0 @@
* {
box-sizing: border-box; }
body {
padding: 0;
margin: 0;
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
color: #606c71; }
a {
color: #1e6bb8;
text-decoration: none; }
a:hover {
text-decoration: underline; }
.btn {
display: inline-block;
margin-bottom: 1rem;
color: rgba(255, 255, 255, 0.7);
background-color: rgba(255, 255, 255, 0.08);
border-color: rgba(255, 255, 255, 0.2);
border-style: solid;
border-width: 1px;
border-radius: 0.3rem;
transition: color 0.2s, background-color 0.2s, border-color 0.2s; }
.btn + .btn {
margin-left: 1rem; }
.btn:hover {
color: rgba(255, 255, 255, 0.8);
text-decoration: none;
background-color: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.3); }
@media screen and (min-width: 64em) {
.btn {
padding: 0.75rem 1rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.btn {
padding: 0.6rem 0.9rem;
font-size: 0.9rem; } }
@media screen and (max-width: 42em) {
.btn {
display: block;
width: 100%;
padding: 0.75rem;
font-size: 0.9rem; }
.btn + .btn {
margin-top: 1rem;
margin-left: 0; } }
.page-header {
color: #fff;
text-align: center;
background-color: #159957;
background-image: linear-gradient(120deg, #155799, #159957); }
@media screen and (min-width: 64em) {
.page-header {
padding: 5rem 6rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.page-header {
padding: 3rem 4rem; } }
@media screen and (max-width: 42em) {
.page-header {
padding: 2rem 1rem; } }
.project-name {
margin-top: 0;
margin-bottom: 0.1rem; }
@media screen and (min-width: 64em) {
.project-name {
font-size: 3.25rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.project-name {
font-size: 2.25rem; } }
@media screen and (max-width: 42em) {
.project-name {
font-size: 1.75rem; } }
.project-tagline {
margin-bottom: 2rem;
font-weight: normal;
opacity: 0.7; }
@media screen and (min-width: 64em) {
.project-tagline {
font-size: 1.25rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.project-tagline {
font-size: 1.15rem; } }
@media screen and (max-width: 42em) {
.project-tagline {
font-size: 1rem; } }
.main-content :first-child {
margin-top: 0; }
.main-content img {
max-width: 100%; }
.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 {
margin-top: 2rem;
margin-bottom: 1rem;
font-weight: normal;
color: #159957; }
.main-content p {
margin-bottom: 1em; }
.main-content code {
padding: 2px 4px;
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 0.9rem;
color: #383e41;
background-color: #f3f6fa;
border-radius: 0.3rem; }
.main-content pre {
padding: 0.8rem;
margin-top: 0;
margin-bottom: 1rem;
font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;
color: #567482;
word-wrap: normal;
background-color: #f3f6fa;
border: solid 1px #dce6f0;
border-radius: 0.3rem; }
.main-content pre > code {
padding: 0;
margin: 0;
font-size: 0.9rem;
color: #567482;
word-break: normal;
white-space: pre;
background: transparent;
border: 0; }
.main-content .highlight {
margin-bottom: 1rem; }
.main-content .highlight pre {
margin-bottom: 0;
word-break: normal; }
.main-content .highlight pre, .main-content pre {
padding: 0.8rem;
overflow: auto;
font-size: 0.9rem;
line-height: 1.45;
border-radius: 0.3rem; }
.main-content pre code, .main-content pre tt {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0; }
.main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after {
content: normal; }
.main-content ul, .main-content ol {
margin-top: 0; }
.main-content blockquote {
padding: 0 1rem;
margin-left: 0;
color: #819198;
border-left: 0.3rem solid #dce6f0; }
.main-content blockquote > :first-child {
margin-top: 0; }
.main-content blockquote > :last-child {
margin-bottom: 0; }
.main-content table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all; }
.main-content table th {
font-weight: bold; }
.main-content table th, .main-content table td {
padding: 0.5rem 1rem;
border: 1px solid #e9ebec; }
.main-content dl {
padding: 0; }
.main-content dl dt {
padding: 0;
margin-top: 1rem;
font-size: 1rem;
font-weight: bold; }
.main-content dl dd {
padding: 0;
margin-bottom: 1rem; }
.main-content hr {
height: 2px;
padding: 0;
margin: 1rem 0;
background-color: #eff0f1;
border: 0; }
@media screen and (min-width: 64em) {
.main-content {
max-width: 64rem;
padding: 2rem 6rem;
margin: 0 auto;
font-size: 1.1rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.main-content {
padding: 2rem 4rem;
font-size: 1.1rem; } }
@media screen and (max-width: 42em) {
.main-content {
padding: 2rem 1rem;
font-size: 1rem; } }
.site-footer {
padding-top: 2rem;
margin-top: 2rem;
border-top: solid 1px #eff0f1; }
.site-footer-owner {
display: block;
font-weight: bold; }
.site-footer-credits {
color: #819198; }
@media screen and (min-width: 64em) {
.site-footer {
font-size: 1rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.site-footer {
font-size: 1rem; } }
@media screen and (max-width: 42em) {
.site-footer {
font-size: 0.9rem; } }