@ -1,4 +1,4 @@
--- **Functional** -- The A IRBASEPOLICE classes monitor airbase traffic and regulate speed while taxiing.
--- **Functional** -- The A TC_GROUND classes monitor airbase traffic and regulate speed while taxiing.
--
-- ===
--
@ -7,34 +7,34 @@
--
-- ===
--
-- @module A irbasePolice
-- @module A TC_Ground
--- @type A IRBASEPOLICE_BASE
--- @type A TC_GROUND
-- @field Core.Set#SET_CLIENT SetClient
-- @extends Core.Base#BASE
--- Base class for A IRBASEPOLICE implementations.
-- @field #A IRBASEPOLICE_BASE
A IRBASEPOLICE_BASE = {
ClassName = " A IRBASEPOLICE_BASE " ,
--- Base class for A TC_GROUND implementations.
-- @field #A TC_GROUND
A TC_GROUND = {
ClassName = " A TC_GROUND " ,
SetClient = nil ,
Airbases = nil ,
AirbaseNames = nil ,
}
--- @type A IRBASEPOLICE_BASE .AirbaseNames
--- @type A TC_GROUND .AirbaseNames
-- @list <#string>
--- Creates a new A IRBASEPOLICE_BASE object.
-- @param #A IRBASEPOLICE_BASE self
--- Creates a new A TC_GROUND object.
-- @param #A TC_GROUND self
-- @param Airbases A table of Airbase Names.
-- @return #A IRBASEPOLICE_BASE self
function A IRBASEPOLICE_BASE : New ( Airbases , AirbaseList )
-- @return #A TC_GROUND self
function A TC_GROUND : New ( Airbases , AirbaseList )
-- Inherits from BASE
local self = BASE : Inherit ( self , BASE : New ( ) ) -- #A IRBASEPOLICE_BASE
local self = BASE : Inherit ( self , BASE : New ( ) ) -- #A TC_GROUND
self : E ( { self.ClassName , Airbases } )
self.Airbases = Airbases
@ -88,10 +88,10 @@ end
--- Smoke the airbases runways.
-- @param #A IRBASEPOLICE_BASE self
-- @param #A TC_GROUND self
-- @param Utilities.Utils#SMOKECOLOR SmokeColor The color of the smoke around the runways.
-- @return #A IRBASEPOLICE_BASE self
function A IRBASEPOLICE_BASE : SmokeRunways ( SmokeColor )
-- @return #A TC_GROUND self
function A TC_GROUND : SmokeRunways ( SmokeColor )
for AirbaseID , Airbase in pairs ( self.Airbases ) do
for PointsRunwayID , PointsRunway in pairs ( Airbase.PointsRunways ) do
@ -102,27 +102,27 @@ end
--- Set the maximum speed in Kmph until the player gets kicked.
-- @param #A IRBASEPOLICE_BASE self
-- @param #A TC_GROUND self
-- @param #number KickSpeed Set the maximum speed in Kmph until the player gets kicked.
-- @return #A IRBASEPOLICE_BASE self
function A IRBASEPOLICE_BASE : SetKickSpeedKmph ( KickSpeed )
-- @return #A TC_GROUND self
function A TC_GROUND : SetKickSpeedKmph ( KickSpeed )
self.KickSpeed = UTILS.KmphToMps ( KickSpeed )
end
--- Set the maximum speed in Miph until the player gets kicked.
-- @param #A IRBASEPOLICE_BASE self
-- @param #A TC_GROUND self
-- @param #number KickSpeedMiph Set the maximum speed in Mph until the player gets kicked.
-- @return #A IRBASEPOLICE_BASE self
function A IRBASEPOLICE_BASE : SetKickSpeedMiph ( KickSpeedMiph )
-- @return #A TC_GROUND self
function A TC_GROUND : SetKickSpeedMiph ( KickSpeedMiph )
self.KickSpeed = UTILS.MiphToMps ( KickSpeedMiph )
end
--- @param #A IRBASEPOLICE_BASE self
function A IRBASEPOLICE_BASE : _AirbaseMonitor ( )
--- @param #A TC_GROUND self
function A TC_GROUND : _AirbaseMonitor ( )
self : E ( " In Scheduler " )
@ -144,94 +144,96 @@ function AIRBASEPOLICE_BASE:_AirbaseMonitor()
NotInRunwayZone = ( Client : IsNotInZone ( ZoneRunway ) == true ) and NotInRunwayZone or false
end
local IsOnGround = Client : InAir ( ) == false
if NotInRunwayZone then
local Taxi = Client : GetState ( self , " Taxi " )
self : E ( Taxi )
if Taxi == false then
Client : Message ( " Welcome at " .. AirbaseID .. " . The maximum taxiing speed is " .. AirbaseMeta.MaximumSpeed .. " km/h. " , 20 , " ATC " )
Client : SetState ( self , " Taxi " , true )
end
-- TODO: GetVelocityKMH function usage
local Velocity = VELOCITY_POSITIONABLE : New ( Client )
--MESSAGE:New( "Velocity = " .. Velocity:ToString(), 1 ):ToAll()
local IsAboveRunway = Client : IsAboveRunway ( )
local IsOnGround = Client : InAir ( ) == false
self : T ( IsAboveRunway , IsOnGround )
if IsOnGround then
if Velocity : Get ( ) > self.KickSpeed then
MESSAGE : New ( " Penalty! Player " .. Client : GetPlayerName ( ) .. " is kicked, due to a severe airbase traffic rule violation ... " , 10 , " ATC " ) : ToAll ( )
Client : Destroy ( )
Client : SetState ( self , " Speeding " , false )
Client : SetState ( self , " Warnings " , 0 )
local Taxi = Client : GetState ( self , " Taxi " )
self : E ( Taxi )
if Taxi == false then
Client : Message ( " Welcome at " .. AirbaseID .. " . The maximum taxiing speed is " .. AirbaseMeta.MaximumSpeed .. " km/h. " , 20 , " ATC " )
Client : SetState ( self , " Taxi " , true )
end
-- TODO: GetVelocityKMH function usage
local Velocity = VELOCITY_POSITIONABLE : New ( Client )
--MESSAGE:New( "Velocity = " .. Velocity:ToString(), 1 ):ToAll()
local IsAboveRunway = Client : IsAboveRunway ( )
self : T ( IsAboveRunway , IsOnGround )
if IsOnGround then
if Velocity : Get ( ) > self.KickSpeed then
MESSAGE : New ( " Penalty! Player " .. Client : GetPlayerName ( ) .. " is kicked, due to a severe airbase traffic rule violation ... " , 10 , " ATC " ) : ToAll ( )
Client : Destroy ( )
Client : SetState ( self , " Speeding " , false )
Client : SetState ( self , " Warnings " , 0 )
end
end
if IsOnGround then
if Velocity : GetKmph ( ) > AirbaseMeta.MaximumSpeed then
local IsSpeeding = Client : GetState ( self , " Speeding " )
if IsSpeeding == true then
local SpeedingWarnings = Client : GetState ( self , " Warnings " )
self : T ( SpeedingWarnings )
if SpeedingWarnings <= 3 then
Client : Message ( " Warning " .. SpeedingWarnings .. " /3! Airbase traffic rule violation! Slow down now! Your speed is " ..
string.format ( " %s " , Velocity : ToString ( ) ) , 5 , " ATC " )
Client : SetState ( self , " Warnings " , SpeedingWarnings + 1 )
else
MESSAGE : New ( " Penalty! Player " .. Client : GetPlayerName ( ) .. " is kicked, due to a severe airbase traffic rule violation ... " , 10 , " ATC " ) : ToAll ( )
--- @param Wrapper.Client#CLIENT Client
Client : Destroy ( )
Client : SetState ( self , " Speeding " , false )
Client : SetState ( self , " Warnings " , 0 )
end
else
Client : Message ( " Attention! You are speeding on the taxiway, slow down! Your speed is " .. string.format ( " %s " , Velocity : ToString ( ) ) , 5 , " ATC " )
Client : SetState ( self , " Speeding " , true )
Client : SetState ( self , " Warnings " , 1 )
end
else
Client : SetState ( self , " Speeding " , false )
Client : SetState ( self , " Warnings " , 0 )
end
end
end
if IsOnGround then
if Velocity : GetKmph ( ) > AirbaseMeta.MaximumSpeed then
local IsSpeeding = Client : GetState ( self , " Speeding " )
if IsSpeeding == true then
local SpeedingWarnings = Client : GetState ( self , " Warnings " )
self : T ( SpeedingWarnings )
if SpeedingWarnings <= 3 then
Client : Message ( " Warning " .. SpeedingWarnings .. " /3! Airbase traffic rule violation! Slow down now! Your speed is " ..
string.format ( " %s " , Velocity : ToString ( ) ) , 5 , " ATC " )
Client : SetState ( self , " Warnings " , SpeedingWarnings + 1 )
if IsOnGround and not IsAboveRunway then
local IsOffRunway = Client : GetState ( self , " IsOffRunway " )
if IsOffRunway == true then
local OffRunwayWarnings = Client : GetState ( self , " OffRunwayWarnings " )
self : T ( OffRunwayWarnings )
if OffRunwayWarnings <= 3 then
Client : Message ( " Warning " .. OffRunwayWarnings .. " /3! Airbase traffic rule violation! Get back on the taxi immediately! " , 5 , " ATC " )
Client : SetState ( self , " OffRunwayWarnings " , OffRunwayWarnings + 1 )
else
MESSAGE : New ( " Penalty! Player " .. Client : GetPlayerName ( ) .. " is kicked, due to a severe airbase traffic rule violation ... " , 10 , " ATC " ) : ToAll ( )
--- @param Wrapper.Client#CLIENT Client
Client : Destroy ( )
Client : SetState ( self , " Speeding " , false )
Client : SetState ( self , " Warnings " , 0 )
Client : SetState ( self , " IsOffRunway " , false )
Client : SetState ( self , " OffRunway Warnings" , 0 )
end
else
Client : Message ( " Attention! You are speeding on the taxiway, slow down! Your speed is " .. string.format ( " %s " , Velocity : ToString ( ) ) , 5 , " ATC " )
Client : SetState ( self , " Speeding " , true )
Client : SetState ( self , " Warnings " , 1 )
Client : Message ( " Attention! You are off the taxiway. Get back on the taxiway immediately!" , 5 , " ATC " )
Client : SetState ( self , " IsOffRunway " , true )
Client : SetState ( self , " OffRunway Warnings" , 1 )
end
else
Client : SetState ( self , " Speeding " , false )
Client : SetState ( self , " Warnings " , 0 )
Client : SetState ( self , " IsOffRunway " , false )
Client : SetState ( self , " OffRunway Warnings" , 0 )
end
end
if IsOnGround and not IsAboveRunway then
local IsOffRunway = Client : GetState ( self , " IsOffRunway " )
if IsOffRunway == true then
local OffRunwayWarnings = Client : GetState ( self , " OffRunwayWarnings " )
self : T ( OffRunwayWarnings )
if OffRunwayWarnings <= 3 then
Client : Message ( " Warning " .. OffRunwayWarnings .. " /3! Airbase traffic rule violation! Get back on the taxi immediately! " , 5 , " ATC " )
Client : SetState ( self , " OffRunwayWarnings " , OffRunwayWarnings + 1 )
else
MESSAGE : New ( " Penalty! Player " .. Client : GetPlayerName ( ) .. " is kicked, due to a severe airbase traffic rule violation ... " , 10 , " ATC " ) : ToAll ( )
--- @param Wrapper.Client#CLIENT Client
Client : Destroy ( )
Client : SetState ( self , " IsOffRunway " , false )
Client : SetState ( self , " OffRunwayWarnings " , 0 )
end
else
Client : Message ( " Attention! You are off the taxiway. Get back on the taxiway immediately! " , 5 , " ATC " )
Client : SetState ( self , " IsOffRunway " , true )
Client : SetState ( self , " OffRunwayWarnings " , 1 )
end
else
Client : SetState ( self , " IsOffRunway " , false )
Client : SetState ( self , " OffRunwayWarnings " , 0 )
end
else
Client : SetState ( self , " Speeding " , false )
Client : SetState ( self , " Warnings " , 0 )
@ -243,6 +245,8 @@ function AIRBASEPOLICE_BASE:_AirbaseMonitor()
Client : SetState ( self , " Taxi " , false )
end
end
else
Client : SetState ( self , " Taxi " , false )
end
end
)
@ -253,14 +257,14 @@ function AIRBASEPOLICE_BASE:_AirbaseMonitor()
end
--- @type A IRBASEPOLICE _CAUCASUS
-- @extends #A IRBASEPOLICE_BASE
--- @type A TC_GROUND _CAUCASUS
-- @extends #A TC_GROUND
--- # A IRBASEPOLICE_CAUCASUS, extends @{#AIRBASEPOLICE_BASE }
--- # A TC_GROUND_CAUCASUS, extends @{#ATC_GROUND }
--
-- 
-- 
--
-- The A IRBASEPOLICE _CAUCASUS class monitors the speed of the airplanes at the airbase during taxi.
-- The A TC_GROUND _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**.
@ -272,44 +276,45 @@ end
--
-- # Airbases monitored
--
-- The following airbases are monitored at the Caucasus region:
-- The following airbases are monitored at the Caucasus region.
-- Use the AIRBASE.Caucasus enumeration to select the airbases to be monitored.
--
-- * 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
-- * ´ AIRBASE.Caucasus.Anapa_Vityazevo´
-- * ´ AIRBASE.Caucasus. Batumi´
-- * ´ AIRBASE.Caucasus. Beslan´
-- * ´ AIRBASE.Caucasus. Gelendzhik´
-- * ´ AIRBASE.Caucasus. Gudauta´
-- * ´ AIRBASE.Caucasus. Kobuleti´
-- * ´ AIRBASE.Caucasus.Krasnodar_Center´
-- * ´ AIRBASE.Caucasus.Krasnodar_Pashkovsky´
-- * ´ AIRBASE.Caucasus. Krymsk´
-- * ´ AIRBASE.Caucasus. Kutaisi´
-- * ´ AIRBASE.Caucasus.Maykop_Khanskaya´
-- * ´ AIRBASE.Caucasus.Mineralnye_Vody´
-- * ´ AIRBASE.Caucasus. Mozdok´
-- * ´ AIRBASE.Caucasus. Nalchik´
-- * ´ AIRBASE.Caucasus. Novorossiysk´
-- * ´ AIRBASE.Caucasus.Senaki_Kolkhi´
-- * ´ AIRBASE.Caucasus.Sochi_Adler´
-- * ´ AIRBASE.Caucasus. Soganlug´
-- * ´ AIRBASE.Caucasus.Sukhumi_Babushara´
-- * ´ AIRBASE.Caucasus.Tbilisi_Lochini´
-- * ´ AIRBASE.Caucasus. Vaziani´
--
--
-- # Installation
--
-- ## In Single Player Missions
--
-- A IRBASEPOLICE is fully functional in single player.
-- A TC_GROUND is fully functional in single player.
--
-- ## In Multi Player Missions
--
-- A IRBASEPOLICE is NOT functional in multi player, for client machines connecting to the server, running the mission.
-- A TC_GROUND 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.
-- A IRBASEPOLICE is communicating with this modified script to kick players!
-- A TC_GROUND is communicating with this modified script to kick players!
--
-- Install the file **SimpleSlotBlockGameGUI.lua** on the server, following the installation instructions described by Ciribob.
--
@ -317,18 +322,26 @@ end
--
-- # Script it!
--
-- ## 1. A IRBASEPOLICE _CAUCASUS Constructor
-- ## 1. A TC_GROUND _CAUCASUS Constructor
--
-- Creates a new A IRBASEPOLICE _CAUCASUS object that will monitor pilots taxiing behaviour.
-- Creates a new A TC_GROUND _CAUCASUS object that will monitor pilots taxiing behaviour.
--
-- -- This creates a new A IRBASEPOLICE _CAUCASUS object.
-- -- This creates a new A TC_GROUND _CAUCASUS object.
--
-- -- Monitor for these clients the airbases.
-- AirbasePoliceCaucasus = AIRBASEPOLICE_CAUCASUS:New()
-- -- Monitor all the airbases.
-- AirbasePoliceCaucasus = ATC_GROUND_CAUCASUS:New()
--
-- -- Monitor specific airbases only.
--
-- @field #AIRBASEPOLICE_CAUCASUS
AIRBASEPOLICE_CAUCASUS = {
ClassName = " AIRBASEPOLICE_CAUCASUS " ,
-- ATC_Ground = ATC_GROUND_CAUCASUS:New(
-- { AIRBASE.Caucasus.Gelendzhik,
-- AIRBASE.Caucasus.Krymsk
-- }
-- )
--
-- @field #ATC_GROUND_CAUCASUS
ATC_GROUND_CAUCASUS = {
ClassName = " ATC_GROUND_CAUCASUS " ,
Airbases = {
[ AIRBASE.Caucasus . Anapa_Vityazevo ] = {
PointsRunways = {
@ -615,14 +628,14 @@ AIRBASEPOLICE_CAUCASUS = {
} ,
}
--- Creates a new A IRBASEPOLICE _CAUCASUS object.
-- @param #A IRBASEPOLICE _CAUCASUS self
--- Creates a new A TC_GROUND _CAUCASUS object.
-- @param #A TC_GROUND _CAUCASUS self
-- @param AirbaseNames A list {} of airbase names (Use AIRBASE.Caucasus enumerator).
-- @return #A IRBASEPOLICE _CAUCASUS self
function A IRBASEPOLICE _CAUCASUS: New ( AirbaseNames )
-- @return #A TC_GROUND _CAUCASUS self
function A TC_GROUND _CAUCASUS: New ( AirbaseNames )
-- Inherits from BASE
local self = BASE : Inherit ( self , A IRBASEPOLICE_BASE : New ( self.Airbases , AirbaseNames ) )
local self = BASE : Inherit ( self , A TC_GROUND : New ( self.Airbases , AirbaseNames ) )
@ -838,15 +851,15 @@ end
--- @type A IRBASEPOLICE _NEVADA
-- @extends #A IRBASEPOLICE_BASE
--- @type A TC_GROUND _NEVADA
-- @extends #A TC_GROUND
--- # A IRBASEPOLICE_NEVADA, extends @{#AIRBASEPOLICE_BASE }
--- # A TC_GROUND_NEVADA, extends @{#ATC_GROUND }
--
-- 
-- 
--
-- The A IRBASEPOLICE _NEVADA class monitors the speed of the airplanes at the airbase during taxi.
-- The A TC_GROUND _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
@ -856,27 +869,41 @@ end
--
-- # Airbases monitored
--
-- The following airbases are monitored at the Caucasus region:
-- The following airbases are monitored at the Nevada region.
-- Use the AIRBASE.Nevada enumeration to select the airbases to be monitored.
--
-- * Nellis
-- * McCarran
-- * Creech
-- * GroomLake
--
-- * `AIRBASE.Nevada.Beatty_Airport`
-- * `AIRBASE.Nevada.Boulder_City_Airport`
-- * `AIRBASE.Nevada.Creech_AFB`
-- * `AIRBASE.Nevada.Echo_Bay`
-- * `AIRBASE.Nevada.Groom_Lake_AFB`
-- * `AIRBASE.Nevada.Henderson_Executive_Airport`
-- * `AIRBASE.Nevada.Jean_Airport`
-- * `AIRBASE.Nevada.Laughlin_Airport`
-- * `AIRBASE.Nevada.Lincoln_County`
-- * `AIRBASE.Nevada.McCarran_International_Airport`
-- * `AIRBASE.Nevada.Mellan_Airstrip`
-- * `AIRBASE.Nevada.Mesquite`
-- * `AIRBASE.Nevada.Mina_Airport_3Q0`
-- * `AIRBASE.Nevada.Nellis_AFB`
-- * `AIRBASE.Nevada.North_Las_Vegas`
-- * `AIRBASE.Nevada.Pahute_Mesa_Airstrip`
-- * `AIRBASE.Nevada.Tonopah_Airport`
-- * `AIRBASE.Nevada.Tonopah_Test_Range_Airfield`
--
-- # Installation
--
-- ## In Single Player Missions
--
-- AIRBASEPOLICE is fully functional in single player.
-- A TC_GROUND 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.
-- A TC_GROUND 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.
-- A IRBASEPOLICE is communicating with this modified script to kick players!
-- A TC_GROUND is communicating with this modified script to kick players!
--
-- Install the file **SimpleSlotBlockGameGUI.lua** on the server, following the installation instructions described by Ciribob.
--
@ -884,18 +911,29 @@ end
--
-- # Script it!
--
-- ## 1. A IRBASEPOLICE _NEVADA Constructor
-- ## 1. A TC_GROUND _NEVADA Constructor
--
-- Creates a new A IRBASEPOLICE _NEVADA object that will monitor pilots taxiing behaviour.
-- Creates a new A TC_GROUND _NEVADA object that will monitor pilots taxiing behaviour.
--
-- -- This creates a new A IRBASEPOLICE _NEVADA object.
-- -- This creates a new A TC_GROUND _NEVADA object.
--
-- -- Monitor for these clients the airbases.
-- AirbasePoliceCaucasus = A IRBASEPOLICE _NEVADA:New()
-- -- Monitor all the airbases.
-- AirbasePoliceCaucasus = A TC_GROUND _NEVADA:New()
--
-- @field #AIRBASEPOLICE_NEVADA
AIRBASEPOLICE_NEVADA = {
ClassName = " AIRBASEPOLICE_NEVADA " ,
--
-- -- Monitor specific airbases.
-- ATC_Ground = ATC_GROUND_NEVADA:New(
-- { AIRBASE.Nevada.Laughlin_Airport,
-- AIRBASE.Nevada.Mellan_Airstrip,
-- AIRBASE.Nevada.Lincoln_County,
-- AIRBASE.Nevada.North_Las_Vegas,
-- AIRBASE.Nevada.McCarran_International_Airport
-- }
-- )
--
-- @field #ATC_GROUND_NEVADA
ATC_GROUND_NEVADA = {
ClassName = " ATC_GROUND_NEVADA " ,
Airbases = {
[ AIRBASE.Nevada . Beatty_Airport ] = {
@ -1165,14 +1203,14 @@ AIRBASEPOLICE_NEVADA = {
} ,
}
--- Creates a new A IRBASEPOLICE _NEVADA object.
-- @param #A IRBASEPOLICE _NEVADA self
--- Creates a new A TC_GROUND _NEVADA object.
-- @param #A TC_GROUND _NEVADA self
-- @param AirbaseNames A list {} of airbase names (Use AIRBASE.Nevada enumerator).
-- @return #A IRBASEPOLICE _NEVADA self
function A IRBASEPOLICE _NEVADA: New ( AirbaseNames )
-- @return #A TC_GROUND _NEVADA self
function A TC_GROUND _NEVADA: New ( AirbaseNames )
-- Inherits from BASE
local self = BASE : Inherit ( self , A IRBASEPOLICE_BASE : New ( self.Airbases , AirbaseNames ) )
local self = BASE : Inherit ( self , A TC_GROUND : New ( self.Airbases , AirbaseNames ) )
@ -1335,15 +1373,15 @@ function AIRBASEPOLICE_NEVADA:New( AirbaseNames )
end
--- @type A IRBASEPOLICE _NORMANDY
-- @extends Functional.AirbasePolice#AIRBASEPOLICE_BASE
--- @type A TC_GROUND _NORMANDY
-- @extends #ATC_GROUND
--- # A IRBASEPOLICE_NORMANDY, extends @{#AIRBASEPOLICE_BASE }
--- # A TC_GROUND_NORMANDY, extends @{#ATC_GROUND }
--
-- 
-- 
--
-- The A IRBASEPOLICE _NORMANDY class monitors the speed of the airplanes at the airbase during taxi.
-- The A TC_GROUND _NORMANDY 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
@ -1353,27 +1391,54 @@ end
--
-- # Airbases monitored
--
-- The following airbases are monitored at the Caucasus region:
-- The following airbases are monitored at the Normandy region.
-- Use the AIRBASE.Normandy enumeration to select the airbases to be monitored.
--
-- * Nellis
-- * McCarran
-- * Creech
-- * GroomLake
--
-- * ´ AIRBASE.Normandy.Azeville´
-- * ´ AIRBASE.Normandy.Bazenville´
-- * ´ AIRBASE.Normandy.Beny_sur_Mer´
-- * ´ AIRBASE.Normandy.Beuzeville´
-- * ´ AIRBASE.Normandy.Biniville´
-- * ´ AIRBASE.Normandy.Brucheville´
-- * ´ AIRBASE.Normandy.Cardonville´
-- * ´ AIRBASE.Normandy.Carpiquet´
-- * ´ AIRBASE.Normandy.Chailey´
-- * ´ AIRBASE.Normandy.Chippelle´
-- * ´ AIRBASE.Normandy.Cretteville´
-- * ´ AIRBASE.Normandy.Cricqueville_en_Bessin´
-- * ´ AIRBASE.Normandy.Deux_Jumeaux´
-- * ´ AIRBASE.Normandy.Evreux´
-- * ´ AIRBASE.Normandy.Ford´
-- * ´ AIRBASE.Normandy.Funtington´
-- * ´ AIRBASE.Normandy.Lantheuil´
-- * ´ AIRBASE.Normandy.Le_Molay´
-- * ´ AIRBASE.Normandy.Lessay´
-- * ´ AIRBASE.Normandy.Lignerolles´
-- * ´ AIRBASE.Normandy.Longues_sur_Mer´
-- * ´ AIRBASE.Normandy.Maupertus´
-- * ´ AIRBASE.Normandy.Meautis´
-- * ´ AIRBASE.Normandy.Needs_Oar_Point´
-- * ´ AIRBASE.Normandy.Picauville´
-- * ´ AIRBASE.Normandy.Rucqueville´
-- * ´ AIRBASE.Normandy.Saint_Pierre_du_Mont´
-- * ´ AIRBASE.Normandy.Sainte_Croix_sur_Mer´
-- * ´ AIRBASE.Normandy.Sainte_Laurent_sur_Mer´
-- * ´ AIRBASE.Normandy.Sommervieu´
-- * ´ AIRBASE.Normandy.Tangmere´
--
-- # Installation
--
-- ## In Single Player Missions
--
-- AIRBASEPOLICE is fully functional in single player.
-- A TC_GROUND 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.
-- A TC_GROUND 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!
-- A TC_GROUND is communicating with this modified script to kick players!
--
-- Install the file **SimpleSlotBlockGameGUI.lua** on the server, following the installation instructions described by Ciribob.
--
@ -1381,18 +1446,25 @@ end
--
-- # Script it!
--
-- ## 1. A IRBASEPOLICE _NORMANDY Constructor
-- ## 1. A TC_GROUND _NORMANDY Constructor
--
-- Creates a new A IRBASEPOLICE _NORMANDY object that will monitor pilots taxiing behaviour.
-- Creates a new A TC_GROUND _NORMANDY object that will monitor pilots taxiing behaviour.
--
-- -- This creates a new A IRBASEPOLICE _NORMANDY object.
-- -- This creates a new A TC_GROUND _NORMANDY object.
--
-- -- Monitor for these clients the airbases.
-- AirbasePoliceCaucasus = AIRBASEPOLICE_NORMANDY:New()
-- AirbasePoliceCaucasus = ATC_GROUND_NORMANDY:New()
--
-- ATC_Ground = ATC_GROUND_NORMANDY:New(
-- { AIRBASE.Normandy.Chippelle,
-- AIRBASE.Normandy.Beuzeville
-- }
-- )
--
--
-- @field #AIRBASEPOLICE_NORMANDY
AIRBASEPOLICE_NORMANDY = {
ClassName = " AIRBASEPOLICE_NORMANDY " ,
-- @field #A TC_GROUND _NORMANDY
A TC_GROUND _NORMANDY = {
ClassName = " A TC_GROUND _NORMANDY" ,
Airbases = {
[ AIRBASE.Normandy . Azeville ] = {
PointsRunways = {
@ -1784,14 +1856,14 @@ AIRBASEPOLICE_NORMANDY = {
}
--- Creates a new A IRBASEPOLICE _NORMANDY object.
-- @param #A IRBASEPOLICE _NORMANDY self
--- Creates a new A TC_GROUND _NORMANDY object.
-- @param #A TC_GROUND _NORMANDY self
-- @param AirbaseNames A list {} of airbase names (Use AIRBASE.Normandy enumerator).
-- @return #A IRBASEPOLICE _NORMANDY self
function A IRBASEPOLICE _NORMANDY: New ( AirbaseNames )
-- @return #A TC_GROUND _NORMANDY self
function A TC_GROUND _NORMANDY: New ( AirbaseNames )
-- Inherits from BASE
local self = BASE : Inherit ( self , A IRBASEPOLICE_BASE : New ( self.Airbases , AirbaseNames ) )
local self = BASE : Inherit ( self , A TC_GROUND : New ( self.Airbases , AirbaseNames ) )
-- These lines here are for the demonstration mission.
-- They create in the dcs.log the coordinates of the runway polygons, that are then