Fixed some glitches in Detection (when set is empty) + documentation

This commit is contained in:
FlightControl_Master
2017-07-22 08:20:23 +02:00
parent 4d33abb0eb
commit b769ad143d
12 changed files with 223 additions and 54 deletions

View File

@@ -1304,11 +1304,49 @@ The route points define the form of the CAP zone polygon. </p>
<p>This prevents airbases to get cluttered with airplanes taking off, it also reduces the risk of human players colliding with taxiiing airplanes,
resulting in the airbase to halt operations.</p>
<p>You can change the way how planes take off by using the inherited methods from AI_A2A_DISPATCHER:</p>
<ul>
<li><a href="##(AI_A2A_DISPATCHER).SetSquadronTakeoff">AI<em>A2A</em>DISPATCHER.SetSquadronTakeoff</a>() is the generic configuration method to control takeoff from the air, hot, cold or from the runway. See the method for further details.</li>
<li><a href="##(AI_A2A_DISPATCHER).SetSquadronTakeoffInAir">AI<em>A2A</em>DISPATCHER.SetSquadronTakeoffInAir</a>() will spawn new aircraft from the squadron directly in the air.</li>
<li><a href="##(AI_A2A_DISPATCHER).SetSquadronTakeoffFromParkingCold">AI<em>A2A</em>DISPATCHER.SetSquadronTakeoffFromParkingCold</a>() will spawn new aircraft in without running engines at a parking spot at the airfield.</li>
<li><a href="##(AI_A2A_DISPATCHER).SetSquadronTakeoffFromParkingHot">AI<em>A2A</em>DISPATCHER.SetSquadronTakeoffFromParkingHot</a>() will spawn new aircraft in with running engines at a parking spot at the airfield.</li>
<li><a href="##(AI_A2A_DISPATCHER).SetSquadronTakeoffFromRunway">AI<em>A2A</em>DISPATCHER.SetSquadronTakeoffFromRunway</a>() will spawn new aircraft at the runway at the airfield.</li>
</ul>
<p>Use these methods to fine-tune for specific airfields that are known to create bottlenecks, or have reduced airbase efficiency.
The more and the longer aircraft need to taxi at an airfield, the more risk there is that:</p>
<ul>
<li>aircraft will stop waiting for each other or for a landing aircraft before takeoff.</li>
<li>aircraft may get into a "dead-lock" situation, where two aircraft are blocking each other.</li>
<li>aircraft may collide at the airbase.</li>
<li>aircraft may be awaiting the landing of a plane currently in the air, but never lands ...</li>
</ul>
<p>Currently within the DCS engine, the airfield traffic coordination is erroneous and contains a lot of bugs.
If you experience while testing problems with aircraft take-off or landing, please use one of the above methods as a solution to workaround these issues!</p>
<h3>2.2) Planes return near the airbase or will land if damaged.</h3>
<p>When damaged airplanes return to the airbase, they will be routed and will dissapear in the air when they are near the airbase.
There are exceptions to this rule, airplanes that aren't "listening" anymore due to damage or out of fuel, will return to the airbase and land.</p>
<p>You can change the way how planes land by using the inherited methods from AI_A2A_DISPATCHER:</p>
<ul>
<li><a href="##(AI_A2A_DISPATCHER).SetSquadronLanding">AI<em>A2A</em>DISPATCHER.SetSquadronLanding</a>() is the generic configuration method to control landing, namely despawn the aircraft near the airfield in the air, right after landing, or at engine shutdown.</li>
<li><a href="##(AI_A2A_DISPATCHER).SetSquadronLandingNearAirbase">AI<em>A2A</em>DISPATCHER.SetSquadronLandingNearAirbase</a>() will despawn the returning aircraft in the air when near the airfield.</li>
<li><a href="##(AI_A2A_DISPATCHER).SetSquadronLandingAtRunway">AI<em>A2A</em>DISPATCHER.SetSquadronLandingAtRunway</a>() will despawn the returning aircraft directly after landing at the runway.</li>
<li><a href="##(AI_A2A_DISPATCHER).SetSquadronLandingAtEngineShutdown">AI<em>A2A</em>DISPATCHER.SetSquadronLandingAtEngineShutdown</a>() will despawn the returning aircraft when the aircraft has returned to its parking spot and has turned off its engines.</li>
</ul>
<p>You can use these methods to minimize the airbase coodination overhead and to increase the airbase efficiency.
When there are lots of aircraft returning for landing, at the same airbase, the takeoff process will be halted, which can cause a complete failure of the
A2A defense system, as no new CAP or GCI planes can takeoff.
Note that the method <a href="##(AI_A2A_DISPATCHER).SetSquadronLandingNearAirbase">AI<em>A2A</em>DISPATCHER.SetSquadronLandingNearAirbase</a>() will only work for returning aircraft, not for damaged or out of fuel aircraft.
Damaged or out-of-fuel aircraft are returning to the nearest friendly airbase and will land, and are out of control from ground control.</p>
<h3>2.3) CAP operations setup for specific airbases, will be executed with the following parameters:</h3>
<ul>
@@ -1317,12 +1355,55 @@ There are exceptions to this rule, airplanes that aren't "listening" anymore due
<li>The engage speed between 800 and 1200 km/h.</li>
</ul>
<p>You can change or add a CAP zone by using the inherited methods from AI_A2A_DISPATCHER:</p>
<p>The method <a href="##(AI_A2A_DISPATCHER).SetSquadronCap">AI<em>A2A</em>DISPATCHER.SetSquadronCap</a>() defines a CAP execution for a squadron.</p>
<p>Setting-up a CAP zone also requires specific parameters:</p>
<ul>
<li>The minimum and maximum altitude</li>
<li>The minimum speed and maximum patrol speed</li>
<li>The minimum and maximum engage speed</li>
<li>The type of altitude measurement</li>
</ul>
<p>These define how the squadron will perform the CAP while partrolling. Different terrain types requires different types of CAP. </p>
<p>The <a href="##(AI_A2A_DISPATCHER).SetSquadronCapInterval">AI<em>A2A</em>DISPATCHER.SetSquadronCapInterval</a>() method specifies <strong>how much</strong> and <strong>when</strong> CAP flights will takeoff.</p>
<p>It is recommended not to overload the air defense with CAP flights, as these will decrease the performance of the overall system. </p>
<p>For example, the following setup will create a CAP for squadron "Sochi":</p>
<p> A2ADispatcher:SetSquadronCap( "Sochi", CAPZoneWest, 4000, 8000, 600, 800, 800, 1200, "BARO" )
A2ADispatcher:SetSquadronCapInterval( "Sochi", 2, 30, 120, 1 )</p>
<h3>2.4) Each airbase will perform GCI when required, with the following parameters:</h3>
<ul>
<li>The engage speed is between 800 and 1200 km/h.</li>
</ul>
<p>You can change or add a GCI parameters by using the inherited methods from AI_A2A_DISPATCHER:</p>
<p>The method <a href="##(AI_A2A_DISPATCHER).SetSquadronGci">AI<em>A2A</em>DISPATCHER.SetSquadronGci</a>() defines a GCI execution for a squadron.</p>
<p>Setting-up a GCI readiness also requires specific parameters:</p>
<ul>
<li>The minimum speed and maximum patrol speed</li>
</ul>
<p>Essentially this controls how many flights of GCI aircraft can be active at any time.
Note allowing large numbers of active GCI flights can adversely impact mission performance on low or medium specification hosts/servers.
GCI needs to be setup at strategic airbases. Too far will mean that the aircraft need to fly a long way to reach the intruders,
too short will mean that the intruders may have alraedy passed the ideal interception point!</p>
<p>For example, the following setup will create a GCI for squadron "Sochi":</p>
<p> A2ADispatcher:SetSquadronGci( "Mozdok", 900, 1200 )</p>
<h3>2.5) Grouping or detected targets.</h3>
<p>Detected targets are constantly re-grouped, that is, when certain detected aircraft are moving further than the group radius, then these aircraft will become a separate
@@ -1342,9 +1423,6 @@ Each defense system needs its own EWR network setup, airplane templates and CAP
<p>This is a good implementation, because maybe in the future, more coalitions may become available in DCS world.</p>
<h2>4) Coding example how to use the AI_A2A_GCICAP class:</h2>
<pre><code> -- Setup the AI_A2A_GCICAP dispatcher for one coalition, and initialize it.

View File

@@ -926,6 +926,9 @@ Use the method <a href="##(AI_PATROL_ZONE).ManageDamage">AI<em>PATROL</em>ZONE.M
<p> This table contains the targets detected during patrol.</p>
</dd>
</dl>
<dl class="function">

View File

@@ -917,7 +917,6 @@ function below will use the range 1-7 just in case</p>
<dl class="function">
<dt>
<em></em>
<a id="#(DESIGNATE).LaserCodes" >
<strong>DESIGNATE.LaserCodes</strong>
</a>

View File

@@ -196,6 +196,12 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).ClassName">DETECTION_AREAS.ClassName</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).CountryID">DETECTION_AREAS.CountryID</a></td>
<td class="summary">
</td>
</tr>
<tr>
@@ -368,12 +374,6 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).CleanDetectionItem">DETECTION_BASE:CleanDetectionItem(DetectedItem, DetectedItemID)</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).CountryID">DETECTION_BASE.CountryID</a></td>
<td class="summary">
</td>
</tr>
<tr>
@@ -1596,6 +1596,20 @@ self</p>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(DETECTION_AREAS).CountryID" >
<strong>DETECTION_AREAS.CountryID</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
@@ -2243,20 +2257,6 @@ The index of the DetectedItem.</p>
</li>
</ul>
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(DETECTION_BASE).CountryID" >
<strong>DETECTION_BASE.CountryID</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
@@ -2393,7 +2393,6 @@ The index of the DetectedItem.</p>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(DETECTION_BASE).DetectedItemCount" >
<strong>DETECTION_BASE.DetectedItemCount</strong>
</a>
@@ -2407,7 +2406,6 @@ The index of the DetectedItem.</p>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(DETECTION_BASE).DetectedItemMax" >
<strong>DETECTION_BASE.DetectedItemMax</strong>
</a>
@@ -2565,7 +2563,7 @@ The index of the DetectedItem.</p>
<dl class="function">
<dt>
<em>#number</em>
<em></em>
<a id="#(DETECTION_BASE).DetectionInterval" >
<strong>DETECTION_BASE.DetectionInterval</strong>
</a>

View File

@@ -1598,7 +1598,7 @@ A string defining the start state.</p>
<dl class="function">
<dt>
<em></em>
<em>#string</em>
<a id="#(FSM)._StartState" >
<strong>FSM._StartState</strong>
</a>
@@ -1897,7 +1897,6 @@ A string defining the start state.</p>
<dl class="function">
<dt>
<em></em>
<a id="#(FSM).current" >
<strong>FSM.current</strong>
</a>

View File

@@ -227,7 +227,6 @@ on defined intervals (currently every minute).</p>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(MOVEMENT).AliveUnits" >
<strong>MOVEMENT.AliveUnits</strong>
</a>
@@ -236,9 +235,6 @@ on defined intervals (currently every minute).</p>
<p> Contains the counter how many units are currently alive</p>
</dd>
</dl>
<dl class="function">

View File

@@ -2194,6 +2194,9 @@ The group that was spawned. You can use this group for further actions.</p>
<p> Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning.</p>
</dd>
</dl>
<dl class="function">
@@ -2726,6 +2729,9 @@ when nothing was spawned.</p>
<p> Overwrite unit names by default with group name.</p>
</dd>
</dl>
<dl class="function">
@@ -2740,6 +2746,9 @@ when nothing was spawned.</p>
<p> By default, no InitLimit</p>
</dd>
</dl>
<dl class="function">
@@ -2775,7 +2784,7 @@ when nothing was spawned.</p>
<dl class="function">
<dt>
<em></em>
<em>#number</em>
<a id="#(SPAWN).SpawnMaxGroups" >
<strong>SPAWN.SpawnMaxGroups</strong>
</a>
@@ -2792,7 +2801,7 @@ when nothing was spawned.</p>
<dl class="function">
<dt>
<em></em>
<em>#number</em>
<a id="#(SPAWN).SpawnMaxUnitsAlive" >
<strong>SPAWN.SpawnMaxUnitsAlive</strong>
</a>
@@ -3120,7 +3129,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 )
<dl class="function">
<dt>
<em></em>
<em>#boolean</em>
<a id="#(SPAWN).SpawnUnControlled" >
<strong>SPAWN.SpawnUnControlled</strong>
</a>
@@ -3144,7 +3153,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 )
<p> When the first Spawn executes, all the Groups need to be made visible before start.</p>
<p> Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned.</p>
</dd>
</dl>

View File

@@ -436,6 +436,7 @@ ptional) The name of the new static.</p>
<dl class="function">
<dt>
<em>#number</em>
<a id="#(SPAWNSTATIC).SpawnIndex" >
<strong>SPAWNSTATIC.SpawnIndex</strong>
</a>

View File

@@ -630,7 +630,7 @@ based on the tasking capabilities defined in <a href="Task.html##(TASK)">Task#TA
<dl class="function">
<dt>
<em>#number</em>
<em></em>
<a id="#(TASK_CARGO).CargoLimit" >
<strong>TASK_CARGO.CargoLimit</strong>
</a>