diff --git a/Moose Development/Moose/Functional/AirbasePolice.lua b/Moose Development/Moose/Functional/AirbasePolice.lua
index f416c2516..6e6fe6be2 100644
--- a/Moose Development/Moose/Functional/AirbasePolice.lua
+++ b/Moose Development/Moose/Functional/AirbasePolice.lua
@@ -1,67 +1,21 @@
---- **Functional** -- This module monitors airbases traffic.
+--- **Functional** -- The AIRBASEPOLICE classes monitor airbase traffic and regulate speed while taxiing.
--
-- ===
--
--- 1) @{AirbasePolice#AIRBASEPOLICE_BASE} class, extends @{Base#BASE}
--- ==================================================================
--- The @{AirbasePolice#AIRBASEPOLICE_BASE} class provides the main methods to monitor CLIENT behaviour at airbases.
--- CLIENTS should not be allowed to:
---
--- * Don't taxi faster than 40 km/h.
--- * Don't take-off on taxiways.
--- * Avoid to hit other planes on the airbase.
--- * Obey ground control orders.
---
--- 2) @{AirbasePolice#AIRBASEPOLICE_CAUCASUS} class, extends @{AirbasePolice#AIRBASEPOLICE_BASE}
--- =============================================================================================
--- All the airbases on the caucasus map can be monitored using this class.
--- If you want to monitor specific airbases, you need to use the @{#AIRBASEPOLICE_BASE.Monitor}() method, which takes a table or airbase names.
--- The following names can be given:
--- * AnapaVityazevo
--- * Batumi
--- * Beslan
--- * Gelendzhik
--- * Gudauta
--- * Kobuleti
--- * KrasnodarCenter
--- * KrasnodarPashkovsky
--- * Krymsk
--- * Kutaisi
--- * MaykopKhanskaya
--- * MineralnyeVody
--- * Mozdok
--- * Nalchik
--- * Novorossiysk
--- * SenakiKolkhi
--- * SochiAdler
--- * Soganlug
--- * SukhumiBabushara
--- * TbilisiLochini
--- * Vaziani
---
--- 3) @{AirbasePolice#AIRBASEPOLICE_NEVADA} class, extends @{AirbasePolice#AIRBASEPOLICE_BASE}
--- =============================================================================================
--- All the airbases on the NEVADA map can be monitored using this class.
--- If you want to monitor specific airbases, you need to use the @{#AIRBASEPOLICE_BASE.Monitor}() method, which takes a table or airbase names.
--- The following names can be given:
--- * Nellis
--- * McCarran
--- * Creech
--- * Groom Lake
---
-- ### Contributions: Dutch Baron - Concept & Testing
-- ### Author: FlightControl - Framework Design & Programming
--
+-- ===
+--
-- @module AirbasePolice
-
-
-
--- @type AIRBASEPOLICE_BASE
-- @field Core.Set#SET_CLIENT SetClient
-- @extends Core.Base#BASE
+--- Base class for AIRBASEPOLICE implementations.
+-- @field #AIRBASEPOLICE_BASE
AIRBASEPOLICE_BASE = {
ClassName = "AIRBASEPOLICE_BASE",
SetClient = nil,
@@ -224,9 +178,82 @@ end
--- @type AIRBASEPOLICE_CAUCASUS
--- @field Core.Set#SET_CLIENT SetClient
-- @extends #AIRBASEPOLICE_BASE
+--- # AIRBASEPOLICE_CAUCASUS, extends @{#AIRBASEPOLICE_BASE}
+--
+-- 
+--
+-- The AIRBASEPOLICE_CAUCASUS class monitors the speed of the airplanes at the airbase during taxi.
+-- The pilots may not drive faster than the maximum speed for the airbase, or they will be despawned.
+--
+-- The maximum speed for the airbases at Caucasus is **50 km/h**.
+--
+-- The pilot will receive 3 times a warning during speeding. After the 3rd warning, if the pilot is still driving
+-- faster than the maximum allowed speed, the pilot will be kicked.
+--
+-- Different airbases have different maximum speeds, according safety regulations.
+--
+-- # Airbases monitored
+--
+-- The following airbases are monitored at the Caucasus region:
+--
+-- * Anapa Vityazevo
+-- * Batumi
+-- * Beslan
+-- * Gelendzhik
+-- * Gudauta
+-- * Kobuleti
+-- * Krasnodar Center
+-- * Krasnodar Pashkovsky
+-- * Krymsk
+-- * Kutaisi
+-- * Maykop Khanskaya
+-- * Mineralnye Vody
+-- * Mozdok
+-- * Nalchik
+-- * Novorossiysk
+-- * Senaki Kolkhi
+-- * Sochi Adler
+-- * Soganlug
+-- * Sukhumi Babushara
+-- * Tbilisi Lochini
+-- * Vaziani
+--
+--
+-- # Installation
+--
+-- ## In Single Player Missions
+--
+-- AIRBASEPOLICE is fully functional in single player.
+--
+-- ## In Multi Player Missions
+--
+-- AIRBASEPOLICE is NOT functional in multi player, for client machines connecting to the server, running the mission.
+-- Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player.
+-- To work around this problem, a much better solution has been made, using the slot blocker script designed
+-- by Ciribob. With the help of __Ciribob__, this script has been extended to also kick client players while in flight.
+-- AIRBASEPOLICE is communicating with this modified script to kick players!
+--
+-- Install the file **SimpleSlotBlockGameGUI.lua** on the server, following the installation instructions described by Ciribob.
+--
+-- [Simple Slot Blocker from Ciribob & FlightControl](https://github.com/ciribob/DCS-SimpleSlotBlock)
+--
+-- # Script it!
+--
+-- ## 1. AIRBASEPOLICE_CAUCASUS Constructor
+--
+-- Creates a new AIRBASEPOLICE_CAUCASUS object that will monitor pilots taxiing behaviour.
+--
+-- -- This creates a new AIRBASEPOLICE_CAUCASUS object.
+--
+-- -- Create a set of all clients in the mission.
+-- AllClientsSet = SET_CLIENT:New():FilterStart()
+--
+-- -- Monitor for these clients the airbases.
+-- AirbasePoliceCaucasus = AIRBASEPOLICE_CAUCASUS:New( AllClientsSet )
+--
+-- @field #AIRBASEPOLICE_CAUCASUS
AIRBASEPOLICE_CAUCASUS = {
ClassName = "AIRBASEPOLICE_CAUCASUS",
Airbases = {
@@ -965,7 +992,64 @@ end
--- @type AIRBASEPOLICE_NEVADA
--- @extends Functional.AirbasePolice#AIRBASEPOLICE_BASE
+-- @extends #AIRBASEPOLICE_BASE
+
+
+--- # AIRBASEPOLICE_NEVADA, extends @{#AIRBASEPOLICE_BASE}
+--
+-- 
+--
+-- The AIRBASEPOLICE_NEVADA class monitors the speed of the airplanes at the airbase during taxi.
+-- The pilots may not drive faster than the maximum speed for the airbase, or they will be despawned.
+--
+-- The pilot will receive 3 times a warning during speeding. After the 3rd warning, if the pilot is still driving
+-- faster than the maximum allowed speed, the pilot will be kicked.
+--
+-- Different airbases have different maximum speeds, according safety regulations.
+--
+-- # Airbases monitored
+--
+-- The following airbases are monitored at the Caucasus region:
+--
+-- * Nellis
+-- * McCarran
+-- * Creech
+-- * GroomLake
+--
+--
+-- # Installation
+--
+-- ## In Single Player Missions
+--
+-- AIRBASEPOLICE is fully functional in single player.
+--
+-- ## In Multi Player Missions
+--
+-- AIRBASEPOLICE is NOT functional in multi player, for client machines connecting to the server, running the mission.
+-- Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player.
+-- To work around this problem, a much better solution has been made, using the slot blocker script designed
+-- by Ciribob. With the help of Ciribob, this script has been extended to also kick client players while in flight.
+-- AIRBASEPOLICE is communicating with this modified script to kick players!
+--
+-- Install the file **SimpleSlotBlockGameGUI.lua** on the server, following the installation instructions described by Ciribob.
+--
+-- [Simple Slot Blocker from Ciribob & FlightControl](https://github.com/ciribob/DCS-SimpleSlotBlock)
+--
+-- # Script it!
+--
+-- ## 1. AIRBASEPOLICE_NEVADA Constructor
+--
+-- Creates a new AIRBASEPOLICE_NEVADA object that will monitor pilots taxiing behaviour.
+--
+-- -- This creates a new AIRBASEPOLICE_NEVADA object.
+--
+-- -- Create a set of all clients in the mission.
+-- AllClientsSet = SET_CLIENT:New():FilterStart()
+--
+-- -- Monitor for these clients the airbases.
+-- AirbasePoliceNevada = AIRBASEPOLICE_NEVADA:New( AllClientsSet )
+--
+-- @field #AIRBASEPOLICE_NEVADA
AIRBASEPOLICE_NEVADA = {
ClassName = "AIRBASEPOLICE_NEVADA",
Airbases = {
diff --git a/docs/Documentation/AI_A2A.html b/docs/Documentation/AI_A2A.html
index 38af29dd8..54b845efc 100644
--- a/docs/Documentation/AI_A2A.html
+++ b/docs/Documentation/AI_A2A.html
@@ -105,6 +105,7 @@
All the airbases on the caucasus map can be monitored using this class.
-If you want to monitor specific airbases, you need to use the AIRBASEPOLICE_BASE.Monitor() method, which takes a table or airbase names.
-The following names can be given:
- * AnapaVityazevo
- * Batumi
- * Beslan
- * Gelendzhik
- * Gudauta
- * Kobuleti
- * KrasnodarCenter
- * KrasnodarPashkovsky
- * Krymsk
- * Kutaisi
- * MaykopKhanskaya
- * MineralnyeVody
- * Mozdok
- * Nalchik
- * Novorossiysk
- * SenakiKolkhi
- * SochiAdler
- * Soganlug
- * SukhumiBabushara
- * TbilisiLochini
- * Vaziani
All the airbases on the NEVADA map can be monitored using this class.
-If you want to monitor specific airbases, you need to use the AIRBASEPOLICE_BASE.Monitor() method, which takes a table or airbase names.
-The following names can be given:
- * Nellis
- * McCarran
- * Creech
- * Groom Lake
The AIRBASEPOLICE_CAUCASUS class monitors the speed of the airplanes at the airbase during taxi.
+
+
+
The pilots may not drive faster than the maximum speed for the airbase, or they will be despawned.
+
+
The maximum speed for the airbases at Caucasus is 50 km/h.
+
+
The pilot will receive 3 times a warning during speeding. After the 3rd warning, if the pilot is still driving
+faster than the maximum allowed speed, the pilot will be kicked.
+
+
Different airbases have different maximum speeds, according safety regulations.
+
+
Airbases monitored
+
+
The following airbases are monitored at the Caucasus region:
+
+
+
Anapa Vityazevo
+
Batumi
+
Beslan
+
Gelendzhik
+
Gudauta
+
Kobuleti
+
Krasnodar Center
+
Krasnodar Pashkovsky
+
Krymsk
+
Kutaisi
+
Maykop Khanskaya
+
Mineralnye Vody
+
Mozdok
+
Nalchik
+
Novorossiysk
+
Senaki Kolkhi
+
Sochi Adler
+
Soganlug
+
Sukhumi Babushara
+
Tbilisi Lochini
+
Vaziani
+
+
+
+
Installation
+
+
In Single Player Missions
+
+
AIRBASEPOLICE is fully functional in single player.
+
+
In Multi Player Missions
+
+
AIRBASEPOLICE is NOT functional in multi player, for client machines connecting to the server, running the mission.
+Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player.
+To work around this problem, a much better solution has been made, using the slot blocker script designed
+by Ciribob. With the help of Ciribob, this script has been extended to also kick client players while in flight.
+AIRBASEPOLICE is communicating with this modified script to kick players!
+
+
Install the file SimpleSlotBlockGameGUI.lua on the server, following the installation instructions described by Ciribob.
Creates a new AIRBASEPOLICE_CAUCASUS object that will monitor pilots taxiing behaviour.
+
+
-- This creates a new AIRBASEPOLICE_CAUCASUS object.
+
+-- Create a set of all clients in the mission.
+AllClientsSet = SET_CLIENT:New():FilterStart()
+
+-- Monitor for these clients the airbases.
+AirbasePoliceCaucasus = AIRBASEPOLICE_CAUCASUS:New( AllClientsSet )
+
@@ -278,7 +332,82 @@ The following names can be given:
The AIRBASEPOLICE_NEVADA class monitors the speed of the airplanes at the airbase during taxi.
+
+
+
The pilots may not drive faster than the maximum speed for the airbase, or they will be despawned.
+
+
The pilot will receive 3 times a warning during speeding. After the 3rd warning, if the pilot is still driving
+faster than the maximum allowed speed, the pilot will be kicked.
+
+
Different airbases have different maximum speeds, according safety regulations.
+
+
Airbases monitored
+
+
The following airbases are monitored at the Caucasus region:
+
+
+
Nellis
+
McCarran
+
Creech
+
GroomLake
+
+
+
+
Installation
+
+
In Single Player Missions
+
+
AIRBASEPOLICE is fully functional in single player.
+
+
In Multi Player Missions
+
+
AIRBASEPOLICE is NOT functional in multi player, for client machines connecting to the server, running the mission.
+Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player.
+To work around this problem, a much better solution has been made, using the slot blocker script designed
+by Ciribob. With the help of Ciribob, this script has been extended to also kick client players while in flight.
+AIRBASEPOLICE is communicating with this modified script to kick players!
+
+
Install the file SimpleSlotBlockGameGUI.lua on the server, following the installation instructions described by Ciribob.
Creates a new AIRBASEPOLICE_NEVADA object that will monitor pilots taxiing behaviour.
+
+
-- This creates a new AIRBASEPOLICE_NEVADA object.
+
+-- Create a set of all clients in the mission.
+AllClientsSet = SET_CLIENT:New():FilterStart()
+
+-- Monitor for these clients the airbases.
+AirbasePoliceNevada = AIRBASEPOLICE_NEVADA:New( AllClientsSet )
+
The SPAWN class allows to spawn dynamically new groups.
-
Each SPAWN object needs to be have a related template group setup in the Mission Editor (ME),
+
Each SPAWN object needs to be have related template groups setup in the Mission Editor (ME),
which is a normal group with the Late Activation flag set.
This template group will never be activated in your mission.
SPAWN uses that template group to reference to all the characteristics
@@ -1825,6 +1846,99 @@ Spawn_US_Platoon_Right = SPAWN:New( 'US Tank Platoon Right' ):InitLimit( 12, 150
Randomize templates to be used as the unit representatives for the Spawned group, defined by specifying the prefix names.
+
+
+
This method becomes useful when you need to spawn groups with random templates of groups defined within the mission editor,
+but they will all follow the same Template route and have the same prefix name.
+In other words, this method randomizes between a defined set of groups the template to be used for each new spawn of a group.
+
+
Parameter
+
+
+
+
#string SpawnTemplatePrefixes :
+A string or a list of string that contains the prefixes of the groups that are possible unit representatives of the group to be spawned.
-- NATO Tank Platoons invading Gori.
+
+-- Choose between different 'US Tank Platoon Templates' configurations to be spawned for the
+-- 'US Tank Platoon Left', 'US Tank Platoon Middle' and 'US Tank Platoon Right' SPAWN objects.
+
+-- Each new SPAWN will randomize the route, with a defined time interval of 200 seconds with 40% time variation (randomization) and
+-- with a limit set of maximum 12 Units alive simulteneously and 150 Groups to be spawned during the whole mission.
+
+Spawn_US_Platoon_Left = SPAWN:New( 'US Tank Platoon Left' ):InitLimit( 12, 150 ):Schedule( 200, 0.4 ):InitRandomizeTemplatePrefixes( "US Tank Platoon Templates" ):InitRandomizeRoute( 3, 3, 2000 )
+Spawn_US_Platoon_Middle = SPAWN:New( 'US Tank Platoon Middle' ):InitLimit( 12, 150 ):Schedule( 200, 0.4 ):InitRandomizeTemplatePrefixes( "US Tank Platoon Templates" ):InitRandomizeRoute( 3, 3, 2000 )
+Spawn_US_Platoon_Right = SPAWN:New( 'US Tank Platoon Right' ):InitLimit( 12, 150 ):Schedule( 200, 0.4 ):InitRandomizeTemplatePrefixes( "US Tank Platoon Templates" ):InitRandomizeRoute( 3, 3, 2000 )
Randomize templates to be used as the unit representatives for the Spawned group, defined using a SET_GROUP object.
+
+
+
This method becomes useful when you need to spawn groups with random templates of groups defined within the mission editor,
+but they will all follow the same Template route and have the same prefix name.
+In other words, this method randomizes between a defined set of groups the template to be used for each new spawn of a group.
+
+
Parameter
+
+
+
+
Core.Set#SET_GROUP SpawnTemplateSet :
+A SET_GROUP object set, that contains the groups that are possible unit representatives of the group to be spawned.
-- NATO Tank Platoons invading Gori.
+
+-- Choose between different 'US Tank Platoon Template' configurations to be spawned for the
+-- 'US Tank Platoon Left', 'US Tank Platoon Middle' and 'US Tank Platoon Right' SPAWN objects.
+
+-- Each new SPAWN will randomize the route, with a defined time interval of 200 seconds with 40% time variation (randomization) and
+-- with a limit set of maximum 12 Units alive simulteneously and 150 Groups to be spawned during the whole mission.
+
+Spawn_US_PlatoonSet = SET_GROUP:New():FilterPrefixes( "US Tank Platoon Templates" ):FilterOnce()
+
+--- Now use the Spawn_US_PlatoonSet to define the templates using InitRandomizeTemplateSet.
+Spawn_US_Platoon_Left = SPAWN:New( 'US Tank Platoon Left' ):InitLimit( 12, 150 ):Schedule( 200, 0.4 ):InitRandomizeTemplateSet( Spawn_US_PlatoonSet ):InitRandomizeRoute( 3, 3, 2000 )
+Spawn_US_Platoon_Middle = SPAWN:New( 'US Tank Platoon Middle' ):InitLimit( 12, 150 ):Schedule( 200, 0.4 ):InitRandomizeTemplateSet( Spawn_US_PlatoonSet ):InitRandomizeRoute( 3, 3, 2000 )
+Spawn_US_Platoon_Right = SPAWN:New( 'US Tank Platoon Right' ):InitLimit( 12, 150 ):Schedule( 200, 0.4 ):InitRandomizeTemplateSet( Spawn_US_PlatoonSet ):InitRandomizeRoute( 3, 3, 2000 )
Functional (WIP) -- Base class that models processes to achieve goals involving a Zone and Cargo.
+
+
+
+
+
+
ZONEGOALCARGO models processes that have a Goal with a defined achievement involving a Zone and Cargo.
+Derived classes implement the ways how the achievements can be realized.