diff --git a/Moose Development/Moose/Functional/RAT.lua b/Moose Development/Moose/Functional/RAT.lua index 1f5625a9d..bd094ba25 100644 --- a/Moose Development/Moose/Functional/RAT.lua +++ b/Moose Development/Moose/Functional/RAT.lua @@ -40,13 +40,15 @@ -- -- # Demo Missions -- +-- ### [RAT Demo Missions](https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/Release/RAT%20-%20Random%20Air%20Traffic) -- ### [ALL Demo Missions pack of the last release](https://github.com/FlightControl-Master/MOOSE_MISSIONS/releases) -- -- ==== -- -- # YouTube Channel -- --- ### [RAT YouTube Channel](https://www.youtube.com/playlist?list=PL7ZUrU4zZUl1jirWIo4t4YxqN-HxjqRkL) +-- ### RAT videos are work in progress. +-- ### [MOOSE YouTube Channel](https://www.youtube.com/playlist?list=PL7ZUrU4zZUl1jirWIo4t4YxqN-HxjqRkL) -- -- === -- @@ -104,7 +106,8 @@ -- @field #number respawn_delay Delay in seconds until repawn happens after landing. -- @field #table markerids Array with marker IDs. -- @field #string livery Livery of the aircraft set by user. --- @field #string skill Skill of AI. +-- @field #string skill Skill of AI. +-- @field #boolean ATC Enable ATC. -- @extends Functional.Spawn#SPAWN ---# RAT class, extends @{Spawn#SPAWN} @@ -232,11 +235,25 @@ -- * @{#RAT.SetMinDistance}(100) will cause only random destination airports to be selected which are **at least** 100 km away from the departure airport. -- * @{#RAT.SetMaxDistance}(150) will allow only destination airports which are **less than** 150 km away from the departure airport. -- +-- ![Process](..\Presentations\RAT\RAT_Gaussian.png) +-- +-- By default planes get a cruise altitude of ~20,000 ft ASL. The actual altitude is sampled from a Gaussian distribution. The picture shows this distribution +-- if one would spawn 1000 planes. As can be seen most planes get a cruising alt of around FL200. Other values are possible but less likely the further away +-- one gets from the expectation value. +-- +-- The expectation value, i.e. the altitude most aircraft get, can be set with the function @{#RAT.SetFLcruise}(). +-- It is possible to restrict the minimum cruise altitude by @{#RAT.SetFLmin}() and the maximum cruise altitude by @{#RAT.SetFLmax}() +-- +-- The cruise altitude can also be given in meters ASL by the functions @{#RAT.SetCruiseAltitude}(), @{#RAT.SetMinCruiseAltitude}() and @{#RAT.SetMaxCruiseAltitude}(). +-- +-- For example: +-- +-- * @{#RAT.SetFLcruise}(300) will cause most planes fly around FL300. +-- * @{#RAT.SetFLmin}(100) restricts the cruising alt such that no plane will fly below FL100. Note that this automatically changes the minimum distance from departure to destination. +-- That means that only destinations are possible for which the aircraft has had enought time to reach that flight level and descent again. +-- * @{#RAT.SetFLmax}(200) will restrict the cruise alt to maximum FL200, i.e. no aircraft will travel above this height. +-- -- --- Certain other options like the flight level can also be specified. However, note that this might not be a good idea for random departures and/or destinations. --- For example the random route might be too short to reach that altitude, which would result in very high climb and descent rates or strange flight plans. --- --- -- @field #RAT RAT={ ClassName = "RAT", -- Name of class: RAT = Random Air Traffic. @@ -284,6 +301,7 @@ RAT={ markerids={}, -- Array with marker IDs. livery=nil, -- Livery of the aircraft. skill="High", -- Skill of AI. + ATC=true, -- Enable ATC. } ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -448,7 +466,7 @@ function RAT:New(groupname, alias) self:_GetAirportsOfMap() -- Init RAT ATC if not already done. - if not RAT.ATC.init then + if self.ATC and not RAT.ATC.init then RAT:_ATCInit(self.airports_map) end @@ -800,6 +818,14 @@ function RAT:MenuName(name) self.SubMenuName=tostring(name) end +--- Enable ATC, which manages the landing queue for RAT aircraft if they arrive simultaniously at the same airport. +-- @param #RAT self +-- @param #boolean switch true=enable ATC, false=disable ATC. +function RAT:EnableATC(switch) + switch=switch or true + self.ATC=switch +end + --- Set minimum distance between departure and destination. Default is 5 km. -- Minimum distance should not be smaller than maybe ~500 meters to ensure that departure and destination are different. -- @param #RAT self @@ -858,7 +884,7 @@ end --- Set max cruising altitude above sea level. -- @param #RAT self -- @param #number alt Altitude ASL in meters. -function RAT:SetMaCruiseAltitude(alt) +function RAT:SetMaxCruiseAltitude(alt) self.FLmaxuser=alt end @@ -1007,7 +1033,9 @@ function RAT:_SpawnWithRoute(_departure, _destination) self.alive=self.alive+1 -- ATC is monitoring this flight. - RAT:_ATCAddFlight(group:GetName(), destination:GetName()) + if self.ATC then + RAT:_ATCAddFlight(group:GetName(), destination:GetName()) + end -- Set ROE, default is "weapon hold". self:_SetROE(group, self.roe) @@ -1774,7 +1802,7 @@ function RAT:Status(message, forID) local Dholding=Pn:Get2DDistance(Hp) -- If distance to holding point is less then 10 km we register the plane - if Dholding<10000 and self.ratcraft[i].status~="Holding" then + if self.ATC and Dholding<10000 and self.ratcraft[i].status~="Holding" then RAT:_ATCRegisterFlight(group:GetName(), Tnow) self.ratcraft[i].status="Holding" end @@ -1801,7 +1829,9 @@ function RAT:Status(message, forID) --text=text..string.format("Speed = %i km/h\n", vel) text=text..string.format("Distance travelled = %6.1f km\n", self.ratcraft[i]["Distance"]/1000) text=text..string.format("Distance to destination = %6.1f km\n", Ddestination/1000) - text=text..string.format("Distance to holding point = %6.1f km", Dholding/1000) + if self.ATC then + text=text..string.format("Distance to holding point = %6.1f km", Dholding/1000) + end if not airborne then text=text..string.format("\nTime on ground = %6.0f seconds\n", Tg) text=text..string.format("Position change = %8.1f m since %3.0f seconds.", Dg, dTlast) @@ -2002,7 +2032,9 @@ function RAT:_OnLand(EventData) self:_SetStatus(SpawnGroup, "Taxiing (after landing)") -- ATC plane landed. Take it out of the queue and set runway to free. - RAT:_ATCFlightLanded(SpawnGroup:GetName()) + if self.ATC then + RAT:_ATCFlightLanded(SpawnGroup:GetName()) + end if self.respawn_at_landing then text="Event: Group "..SpawnGroup:GetName().." will be respawned." @@ -2816,6 +2848,9 @@ end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--- Initializes the ATC arrays and starts schedulers. +-- @param #RAT self +-- @param #table airports_map List of all airports of the map. function RAT:_ATCInit(airports_map) if not RAT.ATC.init then env.info("Starting RAT ATC") @@ -2832,6 +2867,11 @@ function RAT:_ATCInit(airports_map) end end + +--- Deletes a flight from ATC lists after it landed. +-- @param #RAT self +-- @param #table t Table. +-- @param #string entry Flight name which shall be deleted. function RAT:_ATCDelFlight(t,entry) for k,_ in pairs(t) do if k==entry then @@ -2840,6 +2880,10 @@ function RAT:_ATCDelFlight(t,entry) end end +--- Adds andd initializes a new flight after it was spawned. +-- @param #RAT self +-- @param #string name Group name of the flight. +-- @param #string dest Name of the destination airport. function RAT:_ATCAddFlight(name, dest) env.info(string.format("ATC: Adding flight %s with destination %s.", name, dest)) RAT.ATC.flight[name]={} @@ -2847,6 +2891,10 @@ function RAT:_ATCAddFlight(name, dest) RAT.ATC.flight[name].holding=-1 end +--- Registers a flight once it is near its holding point at the final destination. +-- @param #RAT self +-- @param #string name Group name of the flight. +-- @param #number time Time the fight first registered. function RAT:_ATCRegisterFlight(name, time) env.info("ATC: Reg name "..name) env.info("ATC: Reg time "..time) @@ -2854,6 +2902,9 @@ function RAT:_ATCRegisterFlight(name, time) RAT.ATC.flight[name].holding=0 end +--- Takes care of organisational stuff after a plane has landed. +-- @param #RAT self +-- @param #string name Group name of flight. function RAT:_ATCFlightLanded(name) -- Destination airport. @@ -2872,6 +2923,10 @@ function RAT:_ATCFlightLanded(name) env.info(string.format("ATC: Flight %s landed at %s.", name, dest)) end +--- Giving landing clearance for aircraft by setting user flag. +-- @param #RAT self +-- @param #string airport Name of destination airport. +-- @param #string flight Group name of flight, which gets landing clearence. function RAT:_ATCClearForLanding(airport, flight) -- Flight is cleared for landing. RAT.ATC.flight[flight].holding=RAT.ATC.onfinal @@ -2879,12 +2934,14 @@ function RAT:_ATCClearForLanding(airport, flight) RAT.ATC.airport[airport].busy=true -- Flight which is landing. RAT.ATC.airport[airport].onfinal=flight - env.info("ATC: setting user flag "..flight.." to 1.") + -- Set user flag to 1 ==> stop condition for holding. trigger.action.setUserFlag(flight, 1) - local flagvalue=trigger.misc.getUserFlag(flight) - env.info("ATC: user flag "..flight.." ="..flagvalue) + --local flagvalue=trigger.misc.getUserFlag(flight) + env.info(RAT.id.."ATC: Flight "..flight.."cleared for landing.") end +--- ATC status report about flights. +-- @param #RAT self function RAT:_ATCStatus() for name,_ in pairs(RAT.ATC.flight) do @@ -2913,6 +2970,8 @@ function RAT:_ATCStatus() end +--- Main ATC function. Updates the landing queue of all airports and inceases holding time for all flights. +-- @param #RAT self function RAT:_ATCCheck() -- Init queue of flights at all airports. @@ -2950,6 +3009,8 @@ function RAT:_ATCCheck() end end +--- Creates a landing queue for all flights holding at airports. Aircraft with longest holding time gets first permission to land. +-- @param #RAT self function RAT:_ATCQueue() --env.info("Queue:") for airport,_ in pairs(RAT.ATC.airport) do diff --git a/docs/Documentation/Rat.html b/docs/Documentation/Rat.html index 41cd88aa0..1c82ec0a5 100644 --- a/docs/Documentation/Rat.html +++ b/docs/Documentation/Rat.html @@ -17,90 +17,7 @@ index
@@ -155,13 +72,15 @@

Demo Missions

+

RAT Demo Missions

ALL Demo Missions pack of the last release


YouTube Channel

-

RAT YouTube Channel

+

RAT videos are work in progress.

+

MOOSE YouTube Channel


@@ -184,6 +103,12 @@

Type RAT

+ + + + + + + + @@ -223,6 +154,12 @@ + + + + @@ -283,6 +220,12 @@ + + + + @@ -325,6 +268,12 @@ + + + + @@ -337,6 +286,12 @@ + + + + @@ -408,7 +363,7 @@ @@ -421,6 +376,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -493,6 +502,12 @@ + + + + @@ -739,12 +754,24 @@ + + + + + + + + @@ -775,6 +802,12 @@ + + + + @@ -829,6 +862,12 @@ + + + + @@ -902,7 +941,7 @@ @@ -936,7 +975,7 @@
  • Activate the "LATE ACTIVATION" tick box. Note that this aircraft will not be spawned itself but serves a template for each RAT aircraft spawned when the mission starts.
  • -

    Voil�, your already done!

    +

    Voilà, your already done!

    Optionally, you can set a specific livery for the aircraft or give it some weapons. However, the aircraft will by default not engage any enemies. Think of them as beeing on a peaceful or ferry mission.

    @@ -1023,9 +1062,25 @@ This setting can be changed using the RAT.SetTakeof
  • RAT.SetMaxDistance(150) will allow only destination airports which are less than 150 km away from the departure airport.
  • +

    Process

    -

    Certain other options like the flight level can also be specified. However, note that this might not be a good idea for random departures and/or destinations. -For example the random route might be too short to reach that altitude, which would result in very high climb and descent rates or strange flight plans.

    +

    By default planes get a cruise altitude of ~20,000 ft ASL. The actual altitude is sampled from a Gaussian distribution. The picture shows this distribution +if one would spawn 1000 planes. As can be seen most planes get a cruising alt of around FL200. Other values are possible but less likely the further away +one gets from the expectation value.

    + +

    The expectation value, i.e. the altitude most aircraft get, can be set with the function RAT.SetFLcruise(). +It is possible to restrict the minimum cruise altitude by RAT.SetFLmin() and the maximum cruise altitude by RAT.SetFLmax()

    + +

    The cruise altitude can also be given in meters ASL by the functions RAT.SetCruiseAltitude(), RAT.SetMinCruiseAltitude() and RAT.SetMaxCruiseAltitude().

    + +

    For example:

    + + @@ -1043,6 +1098,20 @@ For example the random route might be too short to reach that altitude, which wo
    + + +RAT.ATC + +
    +
    + + + +
    +
    +
    +
    + #number RAT.AlphaDescent @@ -1071,6 +1140,27 @@ For example the random route might be too short to reach that altitude, which wo
    + +RAT:ClearForLanding(name) + +
    +
    + + + +

    Parameter

    +
      +
    • + +

      name :

      + +
    • +
    +
    +
    +
    +
    + RAT:Commute(switch) @@ -1158,6 +1248,31 @@ Turn journey on=true or off=false. If no value is given switch=true.

    Flight level set by users explicitly.

    + +
    +
    +
    + + +RAT:Livery(skins) + +
    +
    + +

    Set livery of aircraft.

    + + +

    If more than one livery is specified in a table, the actually used one is chosen randomly from the selection.

    + +

    Parameter

    +
      +
    • + +

      #string skins : +Name of livery or table of names of liveries.

      + +
    • +
    @@ -1394,6 +1509,31 @@ Default is "same", so aircraft will use airports of the coalition their spawn te
    + +RAT:SetCruiseAltitude(alt) + +
    +
    + +

    Set cruising altitude.

    + + +

    This is still be checked for consitancy with selected route and prone to radomization.

    + +

    Parameter

    +
      +
    • + +

      #number alt : +Cruising altitude ASL in meters.

      + +
    • +
    +
    +
    +
    +
    + RAT:SetDeparture(names) @@ -1580,6 +1720,28 @@ Maximum FL in hundrets of feet.

    + +RAT:SetMaxCruiseAltitude(alt) + +
    +
    + +

    Set max cruising altitude above sea level.

    + +

    Parameter

    +
      +
    • + +

      #number alt : +Altitude ASL in meters.

      + +
    • +
    +
    +
    +
    +
    + RAT:SetMaxCruiseSpeed(speed) @@ -1627,6 +1789,28 @@ Distance in km.

    + +RAT:SetMinCruiseAltitude(alt) + +
    +
    + +

    Set min cruising altitude above sea level.

    + +

    Parameter

    +
      +
    • + +

      #number alt : +Altitude ASL in meters.

      + +
    • +
    +
    +
    +
    +
    + RAT:SetMinDistance(dist) @@ -1890,7 +2074,7 @@ true=on, false=off.

    Set the time after which inactive groups will be destroyed.

    -

    Default is 180 seconds.

    +

    Default is 300 seconds.

    Parameter

      @@ -1913,7 +2097,7 @@ Time in seconds.

    -

    Time in seconds after which inactive units will be destroyed. Default is 180 seconds.

    +

    Time in seconds after which inactive units will be destroyed. Default is 300 seconds.

    @@ -1948,6 +2132,207 @@ Time in seconds.

    + +RAT:_ATCAddFlight(name, dest) + +
    +
    + +

    Adds andd initializes a new flight after it was spawned.

    + +

    Parameters

    +
      +
    • + +

      #string name : +Group name of the flight.

      + +
    • +
    • + +

      #string dest : +Name of the destination airport.

      + +
    • +
    +
    +
    +
    +
    + + +RAT:_ATCCheck() + +
    +
    + +

    Main ATC function.

    + + +

    Updates the landing queue of all airports and inceases holding time for all flights.

    + +
    +
    +
    +
    + + +RAT:_ATCClearForLanding(airport, flight) + +
    +
    + +

    Giving landing clearance for aircraft by setting user flag.

    + +

    Parameters

    +
      +
    • + +

      #string airport : +Name of destination airport.

      + +
    • +
    • + +

      #string flight : +Group name of flight, which gets landing clearence.

      + +
    • +
    +
    +
    +
    +
    + + +RAT:_ATCDelFlight(t, entry) + +
    +
    + +

    Deletes a flight from ATC lists after it landed.

    + +

    Parameters

    +
      +
    • + +

      #table t : +Table.

      + +
    • +
    • + +

      #string entry : +Flight name which shall be deleted.

      + +
    • +
    +
    +
    +
    +
    + + +RAT:_ATCFlightLanded(name) + +
    +
    + +

    Takes care of organisational stuff after a plane has landed.

    + +

    Parameter

    +
      +
    • + +

      #string name : +Group name of flight.

      + +
    • +
    +
    +
    +
    +
    + + +RAT:_ATCInit(airports_map) + +
    +
    + +

    Initializes the ATC arrays and starts schedulers.

    + +

    Parameter

    +
      +
    • + +

      #table airports_map : +List of all airports of the map.

      + +
    • +
    +
    +
    +
    +
    + + +RAT:_ATCQueue() + +
    +
    + +

    Creates a landing queue for all flights holding at airports.

    + + +

    Aircraft with longest holding time gets first permission to land.

    + +
    +
    +
    +
    + + +RAT:_ATCRegisterFlight(name, time) + +
    +
    + +

    Registers a flight once it is near its holding point at the final destination.

    + +

    Parameters

    +
      +
    • + +

      #string name : +Group name of the flight.

      + +
    • +
    • + +

      #number time : +Time the fight first registered.

      + +
    • +
    +
    +
    +
    +
    + + +RAT:_ATCStatus() + +
    +
    + +

    ATC status report about flights.

    + +
    +
    +
    +
    + RAT:_AirportExists(name) @@ -2140,7 +2525,7 @@ Height [m] of departure airport. Note we implicitly assume that the height diffe

    Return value

    #number: - Maximal flight level in meters.

    +Maximal flight level in meters.

    @@ -2274,6 +2659,45 @@ Group of the aircraft in the mission editor.

    + +RAT:_MinDistance(alpha, beta, h) + +
    +
    + +

    Calculate min distance between departure and destination for given minimum flight level and climb/decent rates

    + +

    Parameters

    +
      +
    • + +

      #number alpha : +Angle of climb [rad].

      + +
    • +
    • + +

      #number beta : +Angle of descent [rad].

      + +
    • +
    • + +

      #number h : +min height AGL.

      + +
    • +
    +

    Return value

    + +

    #number: +Minimum distance between departure and destiantion.

    + +
    +
    +
    +
    + RAT:_ModifySpawnTemplate(waypoints) @@ -3253,6 +3677,39 @@ Waypoints for DCS task route or spawn template.

    Possible departure/destination airport: all=blue+red+neutral, same=spawn+neutral, spawnonly=spawn, blue=blue+neutral, blueonly=blue, red=red+neutral, redonly=red.

    + +
    +
    +
    + + +RAT:has_value(tab, val) + +
    +
    + +

    Utility function which checks if table contains a specific value.

    + +

    Parameters

    +
      +
    • + +

      #table tab : +Table with elements to check.

      + +
    • +
    • + +

      #string val : +The value we are looking for.

      + +
    • +
    +

    Return value

    + +

    #boolean: +True if element in the list, false otherwise.

    +
    @@ -3267,6 +3724,20 @@ Waypoints for DCS task route or spawn template.

    Some ID to identify who we are in output of the DCS.log file.

    + +
    +
    +
    + + #string + +RAT.livery + +
    +
    + +

    Livery of the aircraft set by user.

    +
    @@ -3337,6 +3808,23 @@ Waypoints for DCS task route or spawn template.

    Number of groups to be spawned in total.

    + +
    +
    +
    + + + +RAT.onboard_num + +
    +
    + + + + +

    Onboard number.

    +
    @@ -3463,6 +3951,20 @@ Waypoints for DCS task route or spawn template.

    ROT of spawned groups, default is no reaction. Possible: "noreaction", "passive", "evade".

    + +
    +
    +
    + + #string + +RAT.skill + +
    +
    + +

    Skill of AI.

    +
    diff --git a/docs/Presentations/RAT/RAT_Examples_Misc.png b/docs/Presentations/RAT/RAT_Examples_Misc.png index f6f0ba56e..357194eeb 100644 Binary files a/docs/Presentations/RAT/RAT_Examples_Misc.png and b/docs/Presentations/RAT/RAT_Examples_Misc.png differ diff --git a/docs/Presentations/RAT/RAT_Examples_Spawn_in_Air.png b/docs/Presentations/RAT/RAT_Examples_Spawn_in_Air.png index 376775bed..9096525f3 100644 Binary files a/docs/Presentations/RAT/RAT_Examples_Spawn_in_Air.png and b/docs/Presentations/RAT/RAT_Examples_Spawn_in_Air.png differ diff --git a/docs/Presentations/RAT/RAT_Examples_Specify_Departure_and_Destination.png b/docs/Presentations/RAT/RAT_Examples_Specify_Departure_and_Destination.png index 853eb9cbd..f27339fe6 100644 Binary files a/docs/Presentations/RAT/RAT_Examples_Specify_Departure_and_Destination.png and b/docs/Presentations/RAT/RAT_Examples_Specify_Departure_and_Destination.png differ diff --git a/docs/Presentations/RAT/RAT_Gaussian.png b/docs/Presentations/RAT/RAT_Gaussian.png new file mode 100644 index 000000000..c67b1cadd Binary files /dev/null and b/docs/Presentations/RAT/RAT_Gaussian.png differ
    RAT.ATC + +
    RAT.AlphaDescent

    Default angle of descenti in degrees. A value of 3.6 follows the 3:1 rule of 3 miles of travel and 1000 ft descent.

    @@ -193,6 +118,12 @@
    RAT.ClassName

    Name of the Class.

    +
    RAT:ClearForLanding(name) +
    RAT.FLuser

    Flight level set by users explicitly.

    +
    RAT:Livery(skins) +

    Set livery of aircraft.

    RAT:SetCoalition(friendly)

    Set the friendly coalitions from which the airports can be used as departure or destination.

    +
    RAT:SetCruiseAltitude(alt) +

    Set cruising altitude.

    RAT:SetFLmin(height)

    Set min flight level.

    +
    RAT:SetMaxCruiseAltitude(alt) +

    Set max cruising altitude above sea level.

    RAT:SetMaxDistance(dist)

    Set maximum distance between departure and destination.

    +
    RAT:SetMinCruiseAltitude(alt) +

    Set min cruising altitude above sea level.

    RAT.Tinactive -

    Time in seconds after which inactive units will be destroyed. Default is 180 seconds.

    +

    Time in seconds after which inactive units will be destroyed. Default is 300 seconds.

    RAT.Vcruisemax

    Max cruise speed in m/s (250 m/s = 900 km/h = 486 kt) set by user.

    +
    RAT:_ATCAddFlight(name, dest) +

    Adds andd initializes a new flight after it was spawned.

    +
    RAT:_ATCCheck() +

    Main ATC function.

    +
    RAT:_ATCClearForLanding(airport, flight) +

    Giving landing clearance for aircraft by setting user flag.

    +
    RAT:_ATCDelFlight(t, entry) +

    Deletes a flight from ATC lists after it landed.

    +
    RAT:_ATCFlightLanded(name) +

    Takes care of organisational stuff after a plane has landed.

    +
    RAT:_ATCInit(airports_map) +

    Initializes the ATC arrays and starts schedulers.

    +
    RAT:_ATCQueue() +

    Creates a landing queue for all flights holding at airports.

    +
    RAT:_ATCRegisterFlight(name, time) +

    Registers a flight once it is near its holding point at the final destination.

    +
    RAT:_ATCStatus() +

    ATC status report about flights.

    RAT:_InitAircraft(DCSgroup)

    Initialize basic parameters of the aircraft based on its (template) group in the mission editor.

    +
    RAT:_MinDistance(alpha, beta, h) +

    Calculate min distance between departure and destination for given minimum flight level and climb/decent rates

    RAT.friendly

    Possible departure/destination airport: all=blue+red+neutral, same=spawn+neutral, spawnonly=spawn, blue=blue+neutral, blueonly=blue, red=red+neutral, redonly=red.

    +
    RAT:has_value(tab, val) +

    Utility function which checks if table contains a specific value.

    RAT.id

    Some ID to identify who we are in output of the DCS.log file.

    +
    RAT.livery +

    Livery of the aircraft set by user.

    RAT.ngroups

    Number of groups to be spawned in total.

    +
    RAT.onboard_num +
    RAT.rot

    ROT of spawned groups, default is no reaction. Possible: "noreaction", "passive", "evade".

    +
    RAT.skill +

    Skill of AI.