Improved ATC_GROUND

* Added speed limits.
  * Speed limits can now be set per airbase.
  * Maximum speed to prevent takeoff can be set.
  * Maximum speed can be set per airbase.
  * Improved documentation.
This commit is contained in:
FlightControl_Master 2017-10-31 08:32:47 +01:00
parent f6f2695808
commit 0c70a34561
15 changed files with 647 additions and 176 deletions

View File

@ -1,4 +1,4 @@
--- **Functional** -- The ATC_GROUND classes monitor airbase traffic and regulate speed while taxiing. --- **Functional** -- The ATC\_GROUND classes monitor airbase traffic and regulate speed while taxiing.
-- --
-- === -- ===
-- --
@ -18,20 +18,21 @@
-- @field Core.Set#SET_CLIENT SetClient -- @field Core.Set#SET_CLIENT SetClient
-- @extends Core.Base#BASE -- @extends Core.Base#BASE
--- Base class for ATC_GROUND implementations. --- Base class for ATC\_GROUND implementations.
-- @field #ATC_GROUND -- @field #ATC_GROUND
ATC_GROUND = { ATC_GROUND = {
ClassName = "ATC_GROUND", ClassName = "ATC_GROUND",
SetClient = nil, SetClient = nil,
Airbases = nil, Airbases = nil,
AirbaseNames = nil, AirbaseNames = nil,
--KickSpeed = nil, -- The maximum speed in meters per second for all airbases until a player gets kicked. This is overridden at each derived class.
} }
--- @type ATC_GROUND.AirbaseNames --- @type ATC_GROUND.AirbaseNames
-- @list <#string> -- @list <#string>
--- Creates a new ATC_GROUND object. --- Creates a new ATC\_GROUND object.
-- @param #ATC_GROUND self -- @param #ATC_GROUND self
-- @param Airbases A table of Airbase Names. -- @param Airbases A table of Airbase Names.
-- @return #ATC_GROUND self -- @return #ATC_GROUND self
@ -79,14 +80,10 @@ function ATC_GROUND:New( Airbases, AirbaseList )
end end
) )
self.AirbaseMonitor = SCHEDULER:New( self, self._AirbaseMonitor, {self }, 0, 2, 0.05 )
-- This is simple slot blocker is used on the server. -- This is simple slot blocker is used on the server.
SSB = USERFLAG:New( "SSB" ) SSB = USERFLAG:New( "SSB" )
SSB:Set( 100 ) SSB:Set( 100 )
self:SetKickSpeedKmph( 100 )
return self return self
end end
@ -105,25 +102,138 @@ function ATC_GROUND:SmokeRunways( SmokeColor )
end end
--- Set the maximum speed in meters per second (Mps) until the player gets kicked.
-- An airbase can be specified to set the kick speed for.
-- @param #ATC_GROUND self
-- @param #number KickSpeed The speed in Mps.
-- @param Wrapper.Airbase#AIRBASE Airbase (optional) The airbase to set the kick speed for.
-- @return #ATC_GROUND self
-- @usage
--
-- -- Declare Atc_Ground using one of those, depending on the map.
--
-- Atc_Ground = ATC_GROUND_CAUCAUS:New()
-- Atc_Ground = ATC_GROUND_NEVADA:New()
-- Atc_Ground = ATC_GROUND_NORMANDY:New()
--
-- -- Then use one of these methods...
--
-- Atc_Ground:SetKickSpeed( UTILS.KmphToMps( 80 ) ) -- Kick the players at 80 kilometers per hour
--
-- Atc_Ground:SetKickSpeed( UTILS.MiphToMps( 100 ) ) -- Kick the players at 100 miles per hour
--
-- Atc_Ground:SetKickSpeed( 24 ) -- Kick the players at 24 meters per second ( 24 * 3.6 = 86.4 kilometers per hour )
--
function ATC_GROUND:SetKickSpeed( KickSpeed, Airbase )
if not Airbase then
self.KickSpeed = KickSpeed
else
self.Airbases[Airbase].KickSpeed = KickSpeed
end
return self
end
--- Set the maximum speed in Kmph until the player gets kicked. --- Set the maximum speed in Kmph until the player gets kicked.
-- @param #ATC_GROUND self -- @param #ATC_GROUND self
-- @param #number KickSpeed Set the maximum speed in Kmph until the player gets kicked. -- @param #number KickSpeed Set the speed in Kmph.
-- @param Wrapper.Airbase#AIRBASE Airbase (optional) The airbase to set the kick speed for.
-- @return #ATC_GROUND self -- @return #ATC_GROUND self
function ATC_GROUND:SetKickSpeedKmph( KickSpeed ) --
-- Atc_Ground:SetKickSpeedKmph( 80 ) -- Kick the players at 80 kilometers per hour
--
function ATC_GROUND:SetKickSpeedKmph( KickSpeed, Airbase )
self.KickSpeed = UTILS.KmphToMps( KickSpeed ) self:SetKickSpeed( UTILS.KmphToMps( KickSpeed ), Airbase )
return self
end end
--- Set the maximum speed in Miph until the player gets kicked. --- Set the maximum speed in Miph until the player gets kicked.
-- @param #ATC_GROUND self -- @param #ATC_GROUND self
-- @param #number KickSpeedMiph Set the maximum speed in Mph until the player gets kicked. -- @param #number KickSpeedMiph Set the speed in Mph.
-- @param Wrapper.Airbase#AIRBASE Airbase (optional) The airbase to set the kick speed for.
-- @return #ATC_GROUND self -- @return #ATC_GROUND self
function ATC_GROUND:SetKickSpeedMiph( KickSpeedMiph ) --
-- Atc_Ground:SetKickSpeedMiph( 100 ) -- Kick the players at 100 miles per hour
--
function ATC_GROUND:SetKickSpeedMiph( KickSpeedMiph, Airbase )
self.KickSpeed = UTILS.MiphToMps( KickSpeedMiph ) self:SetKickSpeed( UTILS.MiphToMps( KickSpeedMiph ), Airbase )
return self
end end
--- Set the maximum kick speed in meters per second (Mps) until the player gets kicked.
-- There are no warnings given if this speed is reached, and is to prevent players to take off from the airbase!
-- An airbase can be specified to set the maximum kick speed for.
-- @param #ATC_GROUND self
-- @param #number MaximumKickSpeed The speed in Mps.
-- @param Wrapper.Airbase#AIRBASE Airbase (optional) The airbase to set the kick speed for.
-- @return #ATC_GROUND self
-- @usage
--
-- -- Declare Atc_Ground using one of those, depending on the map.
--
-- Atc_Ground = ATC_GROUND_CAUCAUS:New()
-- Atc_Ground = ATC_GROUND_NEVADA:New()
-- Atc_Ground = ATC_GROUND_NORMANDY:New()
--
-- -- Then use one of these methods...
--
-- Atc_Ground:SetMaximumKickSpeed( UTILS.KmphToMps( 80 ) ) -- Kick the players at 80 kilometers per hour
--
-- Atc_Ground:SetMaximumKickSpeed( UTILS.MiphToMps( 100 ) ) -- Kick the players at 100 miles per hour
--
-- Atc_Ground:SetMaximumKickSpeed( 24 ) -- Kick the players at 24 meters per second ( 24 * 3.6 = 86.4 kilometers per hour )
--
function ATC_GROUND:SetMaximumKickSpeed( MaximumKickSpeed, Airbase )
if not Airbase then
self.MaximumKickSpeed = MaximumKickSpeed
else
self.Airbases[Airbase].MaximumKickSpeed = MaximumKickSpeed
end
return self
end
--- Set the maximum kick speed in kilometers per hour (Kmph) until the player gets kicked.
-- There are no warnings given if this speed is reached, and is to prevent players to take off from the airbase!
-- An airbase can be specified to set the maximum kick speed for.
-- @param #ATC_GROUND self
-- @param #number MaximumKickSpeed Set the speed in Kmph.
-- @param Wrapper.Airbase#AIRBASE Airbase (optional) The airbase to set the kick speed for.
-- @return #ATC_GROUND self
--
-- Atc_Ground:SetMaximumKickSpeedKmph( 150 ) -- Kick the players at 150 kilometers per hour
--
function ATC_GROUND:SetMaximumKickSpeedKmph( MaximumKickSpeed, Airbase )
self:SetMaximumKickSpeed( UTILS.KmphToMps( MaximumKickSpeed ), Airbase )
return self
end
--- Set the maximum kick speed in miles per hour (Miph) until the player gets kicked.
-- There are no warnings given if this speed is reached, and is to prevent players to take off from the airbase!
-- An airbase can be specified to set the maximum kick speed for.
-- @param #ATC_GROUND self
-- @param #number MaximumKickSpeedMiph Set the speed in Mph.
-- @param Wrapper.Airbase#AIRBASE Airbase (optional) The airbase to set the kick speed for.
-- @return #ATC_GROUND self
--
-- Atc_Ground:SetMaximumKickSpeedMiph( 100 ) -- Kick the players at 100 miles per hour
--
function ATC_GROUND:SetMaximumKickSpeedMiph( MaximumKickSpeedMiph, Airbase )
self:SetMaximumKickSpeed( UTILS.MiphToMps( MaximumKickSpeedMiph ), Airbase )
return self
end
--- @param #ATC_GROUND self --- @param #ATC_GROUND self
function ATC_GROUND:_AirbaseMonitor() function ATC_GROUND:_AirbaseMonitor()
@ -137,7 +247,7 @@ function ATC_GROUND:_AirbaseMonitor()
local IsOnGround = Client:InAir() == false local IsOnGround = Client:InAir() == false
for AirbaseID, AirbaseMeta in pairs( self.Airbases ) do for AirbaseID, AirbaseMeta in pairs( self.Airbases ) do
self:E( AirbaseID, AirbaseMeta.MaximumSpeed ) self:E( AirbaseID, AirbaseMeta.KickSpeed )
if AirbaseMeta.Monitor == true and Client:IsInZone( AirbaseMeta.ZoneBoundary ) then if AirbaseMeta.Monitor == true and Client:IsInZone( AirbaseMeta.ZoneBoundary ) then
@ -152,7 +262,9 @@ function ATC_GROUND:_AirbaseMonitor()
local Taxi = Client:GetState( self, "Taxi" ) local Taxi = Client:GetState( self, "Taxi" )
self:E( Taxi ) self:E( Taxi )
if Taxi == false then if Taxi == false then
Client:Message( "Welcome at " .. AirbaseID .. ". The maximum taxiing speed is " .. AirbaseMeta.MaximumSpeed .. " km/h.", 20, "ATC" ) local Velocity = VELOCITY:New( AirbaseMeta.KickSpeed or self.KickSpeed )
Client:Message( "Welcome at " .. AirbaseID .. ". The maximum taxiing speed is " ..
Velocity:ToString() , 20, "ATC" )
Client:SetState( self, "Taxi", true ) Client:SetState( self, "Taxi", true )
end end
@ -163,8 +275,19 @@ function ATC_GROUND:_AirbaseMonitor()
self:T( IsAboveRunway, IsOnGround ) self:T( IsAboveRunway, IsOnGround )
if IsOnGround then if IsOnGround then
if Velocity:Get() > self.KickSpeed then local Speeding = false
MESSAGE:New( "Penalty! Player " .. Client:GetPlayerName() .. " is kicked, due to a severe airbase traffic rule violation ...", 10, "ATC" ):ToAll() if AirbaseMeta.MaximumKickSpeed then
if Velocity:Get() > AirbaseMeta.MaximumKickSpeed then
Speeding = true
end
else
if Velocity:Get() > self.MaximumKickSpeed then
Speeding = true
end
end
if Speeding == true then
MESSAGE:New( "Penalty! Player " .. Client:GetPlayerName() ..
" is kicked, due to a severe airbase traffic rule violation ...", 10, "ATC" ):ToAll()
Client:Destroy() Client:Destroy()
Client:SetState( self, "Speeding", false ) Client:SetState( self, "Speeding", false )
Client:SetState( self, "Warnings", 0 ) Client:SetState( self, "Warnings", 0 )
@ -174,7 +297,17 @@ function ATC_GROUND:_AirbaseMonitor()
if IsOnGround then if IsOnGround then
if Velocity:GetKmph() > AirbaseMeta.MaximumSpeed then local Speeding = false
if AirbaseMeta.KickSpeed then -- If there is a speed defined for the airbase, use that only.
if Velocity:Get() > AirbaseMeta.KickSpeed then
Speeding = true
end
else
if Velocity:Get() > self.KickSpeed then
Speeding = true
end
end
if Speeding == true then
local IsSpeeding = Client:GetState( self, "Speeding" ) local IsSpeeding = Client:GetState( self, "Speeding" )
if IsSpeeding == true then if IsSpeeding == true then
@ -183,7 +316,7 @@ function ATC_GROUND:_AirbaseMonitor()
if SpeedingWarnings <= 3 then if SpeedingWarnings <= 3 then
Client:Message( "Warning " .. SpeedingWarnings .. "/3! Airbase traffic rule violation! Slow down now! Your speed is " .. Client:Message( "Warning " .. SpeedingWarnings .. "/3! Airbase traffic rule violation! Slow down now! Your speed is " ..
string.format( "%s", Velocity:ToString() ), 5, "ATC" ) Velocity:ToString(), 5, "ATC" )
Client:SetState( self, "Warnings", SpeedingWarnings + 1 ) Client:SetState( self, "Warnings", SpeedingWarnings + 1 )
else else
MESSAGE:New( "Penalty! Player " .. Client:GetPlayerName() .. " is kicked, due to a severe airbase traffic rule violation ...", 10, "ATC" ):ToAll() MESSAGE:New( "Penalty! Player " .. Client:GetPlayerName() .. " is kicked, due to a severe airbase traffic rule violation ...", 10, "ATC" ):ToAll()
@ -194,7 +327,8 @@ function ATC_GROUND:_AirbaseMonitor()
end end
else else
Client:Message( "Attention! You are speeding on the taxiway, slow down! Your speed is " .. string.format( "%s", Velocity:ToString() ), 5, "ATC" ) Client:Message( "Attention! You are speeding on the taxiway, slow down! Your speed is " ..
Velocity:ToString(), 5, "ATC" )
Client:SetState( self, "Speeding", true ) Client:SetState( self, "Speeding", true )
Client:SetState( self, "Warnings", 1 ) Client:SetState( self, "Warnings", 1 )
end end
@ -271,7 +405,9 @@ end
-- --
-- --- -- ---
-- --
-- The maximum speed for the airbases at Caucasus is **50 km/h**. -- The default maximum speed for the airbases at Caucasus is **50 km/h**. Warnings are given if this speed limit is trespassed.
-- Players will be immediately kicked when driving faster than **150 km/h** on the taxi way.
--
-- --
-- The pilot will receive 3 times a warning during speeding. After the 3rd warning, if the pilot is still driving -- 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. -- faster than the maximum allowed speed, the pilot will be kicked.
@ -310,15 +446,18 @@ end
-- --
-- ## In Single Player Missions -- ## In Single Player Missions
-- --
-- ATC_GROUND is fully functional in single player. -- ATC\_GROUND is fully functional in single player.
-- --
-- ## In Multi Player Missions -- ## In Multi Player Missions
-- --
-- ATC_GROUND is NOT functional in multi player, for client machines connecting to the server, running the mission. -- ATC\_GROUND is functional in multi player, however ...
--
-- Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player. -- 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 -- 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. -- by Ciribob.
-- ATC_GROUND is communicating with this modified script to kick players! --
-- With the help of __Ciribob__, this script has been extended to also kick client players while in flight.
-- ATC\_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. -- Install the file **SimpleSlotBlockGameGUI.lua** on the server, following the installation instructions described by Ciribob.
-- --
@ -333,7 +472,7 @@ end
-- -- This creates a new ATC_GROUND_CAUCASUS object. -- -- This creates a new ATC_GROUND_CAUCASUS object.
-- --
-- -- Monitor all the airbases. -- -- Monitor all the airbases.
-- AirbasePoliceCaucasus = ATC_GROUND_CAUCASUS:New() -- ATC_Ground = ATC_GROUND_CAUCASUS:New()
-- --
-- -- Monitor specific airbases only. -- -- Monitor specific airbases only.
-- --
@ -343,6 +482,23 @@ end
-- } -- }
-- ) -- )
-- --
-- ## 2. Set various options
--
-- There are various methods that you can use to tweak the behaviour of the ATC\_GROUND classes.
--
-- ### 2.1 Speed limit at an airbase.
--
-- * @{#ATC_GROUND.SetKickSpeed}(): Set the speed limit allowed at an airbase in meters per second.
-- * @{#ATC_GROUND.SetKickSpeedKmph}(): Set the speed limit allowed at an airbase in kilometers per hour.
-- * @{#ATC_GROUND.SetKickSpeedMiph}(): Set the speed limit allowed at an airbase in miles per hour.
--
-- ### 2.2 Prevent Takeoff at an airbase. Players will be kicked immediately.
--
-- * @{#ATC_GROUND.SetMaximumKickSpeed}(): Set the maximum speed allowed at an airbase in meters per second.
-- * @{#ATC_GROUND.SetMaximumKickSpeedKmph}(): Set the maximum speed allowed at an airbase in kilometers per hour.
-- * @{#ATC_GROUND.SetMaximumKickSpeedMiph}(): Set the maximum speed allowed at an airbase in miles per hour.
--
--
-- @field #ATC_GROUND_CAUCASUS -- @field #ATC_GROUND_CAUCASUS
ATC_GROUND_CAUCASUS = { ATC_GROUND_CAUCASUS = {
ClassName = "ATC_GROUND_CAUCASUS", ClassName = "ATC_GROUND_CAUCASUS",
@ -357,7 +513,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=242140.57142858,["x"]=-6480.0000000011,} [5]={["y"]=242140.57142858,["x"]=-6480.0000000011,}
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Batumi] = { [AIRBASE.Caucasus.Batumi] = {
PointsRunways = { PointsRunways = {
@ -378,7 +533,6 @@ ATC_GROUND_CAUCASUS = {
[14]={["y"]=616441.42857142,["x"]=-355092.57142858,}, [14]={["y"]=616441.42857142,["x"]=-355092.57142858,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Beslan] = { [AIRBASE.Caucasus.Beslan] = {
PointsRunways = { PointsRunways = {
@ -390,7 +544,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=842104,["x"]=-148460.28571429,}, [5]={["y"]=842104,["x"]=-148460.28571429,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Gelendzhik] = { [AIRBASE.Caucasus.Gelendzhik] = {
PointsRunways = { PointsRunways = {
@ -402,7 +555,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=297835.14285715,["x"]=-51107.714285715,}, [5]={["y"]=297835.14285715,["x"]=-51107.714285715,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Gudauta] = { [AIRBASE.Caucasus.Gudauta] = {
PointsRunways = { PointsRunways = {
@ -414,7 +566,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=517097.99999999,["x"]=-197807.42857143,}, [5]={["y"]=517097.99999999,["x"]=-197807.42857143,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Kobuleti] = { [AIRBASE.Caucasus.Kobuleti] = {
PointsRunways = { PointsRunways = {
@ -426,7 +577,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=634510.28571429,["x"]=-318339.71428572,}, [5]={["y"]=634510.28571429,["x"]=-318339.71428572,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Krasnodar_Center] = { [AIRBASE.Caucasus.Krasnodar_Center] = {
PointsRunways = { PointsRunways = {
@ -438,7 +588,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=369208.85714286,["x"]=11788.57142857,}, [5]={["y"]=369208.85714286,["x"]=11788.57142857,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Krasnodar_Pashkovsky] = { [AIRBASE.Caucasus.Krasnodar_Pashkovsky] = {
PointsRunways = { PointsRunways = {
@ -457,7 +606,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=386714.57142858,["x"]=6674.5714285703,}, [5]={["y"]=386714.57142858,["x"]=6674.5714285703,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Krymsk] = { [AIRBASE.Caucasus.Krymsk] = {
PointsRunways = { PointsRunways = {
@ -469,7 +617,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=293523.14285715,["x"]=-7568.2857142868,}, [5]={["y"]=293523.14285715,["x"]=-7568.2857142868,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Kutaisi] = { [AIRBASE.Caucasus.Kutaisi] = {
PointsRunways = { PointsRunways = {
@ -481,7 +628,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=682638.28571429,["x"]=-285202.85714286,}, [5]={["y"]=682638.28571429,["x"]=-285202.85714286,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Maykop_Khanskaya] = { [AIRBASE.Caucasus.Maykop_Khanskaya] = {
PointsRunways = { PointsRunways = {
@ -493,7 +639,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=457004.57142857,["x"]=-27669.714285715,}, [5]={["y"]=457004.57142857,["x"]=-27669.714285715,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Mineralnye_Vody] = { [AIRBASE.Caucasus.Mineralnye_Vody] = {
PointsRunways = { PointsRunways = {
@ -505,7 +650,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=703902,["x"]=-50352.000000002,}, [5]={["y"]=703902,["x"]=-50352.000000002,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Mozdok] = { [AIRBASE.Caucasus.Mozdok] = {
PointsRunways = { PointsRunways = {
@ -517,7 +661,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=832200.57142857,["x"]=-83700.000000002,}, [5]={["y"]=832200.57142857,["x"]=-83700.000000002,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Nalchik] = { [AIRBASE.Caucasus.Nalchik] = {
PointsRunways = { PointsRunways = {
@ -529,7 +672,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=759456,["x"]=-125552.57142857,}, [5]={["y"]=759456,["x"]=-125552.57142857,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Novorossiysk] = { [AIRBASE.Caucasus.Novorossiysk] = {
PointsRunways = { PointsRunways = {
@ -541,7 +683,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=278672.00000001,["x"]=-41614.857142858,}, [5]={["y"]=278672.00000001,["x"]=-41614.857142858,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Senaki_Kolkhi] = { [AIRBASE.Caucasus.Senaki_Kolkhi] = {
PointsRunways = { PointsRunways = {
@ -553,7 +694,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=646063.71428571,["x"]=-281738.85714286,}, [5]={["y"]=646063.71428571,["x"]=-281738.85714286,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Sochi_Adler] = { [AIRBASE.Caucasus.Sochi_Adler] = {
PointsRunways = { PointsRunways = {
@ -572,7 +712,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=460831.42857143,["x"]=-165177.14285714,}, [5]={["y"]=460831.42857143,["x"]=-165177.14285714,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Soganlug] = { [AIRBASE.Caucasus.Soganlug] = {
PointsRunways = { PointsRunways = {
@ -584,7 +723,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=894524.57142857,["x"]=-316963.71428571,}, [5]={["y"]=894524.57142857,["x"]=-316963.71428571,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Sukhumi_Babushara] = { [AIRBASE.Caucasus.Sukhumi_Babushara] = {
PointsRunways = { PointsRunways = {
@ -596,7 +734,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=562684.57142857,["x"]=-219782.57142857,}, [5]={["y"]=562684.57142857,["x"]=-219782.57142857,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Tbilisi_Lochini] = { [AIRBASE.Caucasus.Tbilisi_Lochini] = {
PointsRunways = { PointsRunways = {
@ -615,7 +752,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=895606,["x"]=-314724.85714286,} [5]={["y"]=895606,["x"]=-314724.85714286,}
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Caucasus.Vaziani] = { [AIRBASE.Caucasus.Vaziani] = {
PointsRunways = { PointsRunways = {
@ -627,7 +763,6 @@ ATC_GROUND_CAUCASUS = {
[5]={["y"]=902247.71428571,["x"]=-318190.85714286,}, [5]={["y"]=902247.71428571,["x"]=-318190.85714286,},
}, },
}, },
MaximumSpeed = 50,
}, },
}, },
} }
@ -641,7 +776,10 @@ function ATC_GROUND_CAUCASUS:New( AirbaseNames )
-- Inherits from BASE -- Inherits from BASE
local self = BASE:Inherit( self, ATC_GROUND:New( self.Airbases, AirbaseNames ) ) local self = BASE:Inherit( self, ATC_GROUND:New( self.Airbases, AirbaseNames ) )
self.AirbaseMonitor = SCHEDULER:New( self, self._AirbaseMonitor, { self }, 0, 2, 0.05 )
self:SetKickSpeedKmph( 50 )
self:SetMaximumKickSpeedKmph( 150 )
-- -- AnapaVityazevo -- -- AnapaVityazevo
-- local AnapaVityazevoBoundary = GROUP:FindByName( "AnapaVityazevo Boundary" ) -- local AnapaVityazevoBoundary = GROUP:FindByName( "AnapaVityazevo Boundary" )
@ -869,6 +1007,9 @@ end
-- --
-- --- -- ---
-- --
-- The default maximum speed for the airbases at Nevada is **50 km/h**. Warnings are given if this speed limit is trespassed.
-- Players will be immediately kicked when driving faster than **150 km/h** on the taxi way.
--
-- The ATC\_GROUND\_NEVADA class monitors the speed of the airplanes at the airbase during taxi. -- The ATC\_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 pilots may not drive faster than the maximum speed for the airbase, or they will be despawned.
-- --
@ -905,15 +1046,18 @@ end
-- --
-- ## In Single Player Missions -- ## In Single Player Missions
-- --
-- ATC_GROUND is fully functional in single player. -- ATC\_GROUND is fully functional in single player.
-- --
-- ## In Multi Player Missions -- ## In Multi Player Missions
-- --
-- ATC_GROUND is NOT functional in multi player, for client machines connecting to the server, running the mission. -- ATC\_GROUND is functional in multi player, however ...
--
-- Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player. -- 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 -- 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. -- by Ciribob.
-- ATC_GROUND is communicating with this modified script to kick players! --
-- With the help of __Ciribob__, this script has been extended to also kick client players while in flight.
-- ATC\_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. -- Install the file **SimpleSlotBlockGameGUI.lua** on the server, following the installation instructions described by Ciribob.
-- --
@ -928,7 +1072,7 @@ end
-- -- This creates a new ATC_GROUND_NEVADA object. -- -- This creates a new ATC_GROUND_NEVADA object.
-- --
-- -- Monitor all the airbases. -- -- Monitor all the airbases.
-- AirbasePoliceCaucasus = ATC_GROUND_NEVADA:New() -- ATC_Ground = ATC_GROUND_NEVADA:New()
-- --
-- --
-- -- Monitor specific airbases. -- -- Monitor specific airbases.
@ -941,6 +1085,23 @@ end
-- } -- }
-- ) -- )
-- --
-- ## 2. Set various options
--
-- There are various methods that you can use to tweak the behaviour of the ATC\_GROUND classes.
--
-- ### 2.1 Speed limit at an airbase.
--
-- * @{#ATC_GROUND.SetKickSpeed}(): Set the speed limit allowed at an airbase in meters per second.
-- * @{#ATC_GROUND.SetKickSpeedKmph}(): Set the speed limit allowed at an airbase in kilometers per hour.
-- * @{#ATC_GROUND.SetKickSpeedMiph}(): Set the speed limit allowed at an airbase in miles per hour.
--
-- ### 2.2 Prevent Takeoff at an airbase. Players will be kicked immediately.
--
-- * @{#ATC_GROUND.SetMaximumKickSpeed}(): Set the maximum speed allowed at an airbase in meters per second.
-- * @{#ATC_GROUND.SetMaximumKickSpeedKmph}(): Set the maximum speed allowed at an airbase in kilometers per hour.
-- * @{#ATC_GROUND.SetMaximumKickSpeedMiph}(): Set the maximum speed allowed at an airbase in miles per hour.
--
--
-- @field #ATC_GROUND_NEVADA -- @field #ATC_GROUND_NEVADA
ATC_GROUND_NEVADA = { ATC_GROUND_NEVADA = {
ClassName = "ATC_GROUND_NEVADA", ClassName = "ATC_GROUND_NEVADA",
@ -955,7 +1116,6 @@ ATC_GROUND_NEVADA = {
[4]={["y"]=-174971.01828571,["x"]=-329682.59171429,}, [4]={["y"]=-174971.01828571,["x"]=-329682.59171429,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Boulder_City_Airport] = { [AIRBASE.Nevada.Boulder_City_Airport] = {
PointsRunways = { PointsRunways = {
@ -972,7 +1132,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-1883.955714286,["x"]=-429807.83742856,}, [4] = {["y"]=-1883.955714286,["x"]=-429807.83742856,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Creech_AFB] = { [AIRBASE.Nevada.Creech_AFB] = {
PointsRunways = { PointsRunways = {
@ -989,7 +1148,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-75734.142857144,["x"]=-359023.14285714,}, [4] = {["y"]=-75734.142857144,["x"]=-359023.14285714,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Echo_Bay] = { [AIRBASE.Nevada.Echo_Bay] = {
PointsRunways = { PointsRunways = {
@ -1000,7 +1158,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=33185.422285715,["x"]=-388717.82228571,}, [4] = {["y"]=33185.422285715,["x"]=-388717.82228571,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Groom_Lake_AFB] = { [AIRBASE.Nevada.Groom_Lake_AFB] = {
PointsRunways = { PointsRunways = {
@ -1017,7 +1174,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-86799.623714285,["x"]=-290374.16771428,}, [4] = {["y"]=-86799.623714285,["x"]=-290374.16771428,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Henderson_Executive_Airport] = { [AIRBASE.Nevada.Henderson_Executive_Airport] = {
PointsRunways = { PointsRunways = {
@ -1034,7 +1190,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-25708.296285714,["x"]=-426515.15114285,}, [4] = {["y"]=-25708.296285714,["x"]=-426515.15114285,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Jean_Airport] = { [AIRBASE.Nevada.Jean_Airport] = {
PointsRunways = { PointsRunways = {
@ -1051,7 +1206,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-42609.216571429,["x"]=-449891.28628571,}, [4] = {["y"]=-42609.216571429,["x"]=-449891.28628571,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Laughlin_Airport] = { [AIRBASE.Nevada.Laughlin_Airport] = {
PointsRunways = { PointsRunways = {
@ -1068,7 +1222,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=28138.022857143,["x"]=-515573.07514286,}, [4] = {["y"]=28138.022857143,["x"]=-515573.07514286,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Lincoln_County] = { [AIRBASE.Nevada.Lincoln_County] = {
PointsRunways = { PointsRunways = {
@ -1079,7 +1232,6 @@ ATC_GROUND_NEVADA = {
[4]={["y"]=33201.198857147,["x"]=-223960.54457143,}, [4]={["y"]=33201.198857147,["x"]=-223960.54457143,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.McCarran_International_Airport] = { [AIRBASE.Nevada.McCarran_International_Airport] = {
PointsRunways = { PointsRunways = {
@ -1108,7 +1260,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-29073.000000001,["x"]=-416386.85714284,}, [4] = {["y"]=-29073.000000001,["x"]=-416386.85714284,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Mesquite] = { [AIRBASE.Nevada.Mesquite] = {
PointsRunways = { PointsRunways = {
@ -1129,7 +1280,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-290104.69085714,["x"]=-160956.19457143,}, [4] = {["y"]=-290104.69085714,["x"]=-160956.19457143,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Nellis_AFB] = { [AIRBASE.Nevada.Nellis_AFB] = {
PointsRunways = { PointsRunways = {
@ -1146,7 +1296,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-18451.571428572,["x"]=-399580.85714285,}, [4] = {["y"]=-18451.571428572,["x"]=-399580.85714285,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Pahute_Mesa_Airstrip] = { [AIRBASE.Nevada.Pahute_Mesa_Airstrip] = {
PointsRunways = { PointsRunways = {
@ -1157,7 +1306,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-132759.988,["x"]=-302723.326,}, [4] = {["y"]=-132759.988,["x"]=-302723.326,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Tonopah_Test_Range_Airfield] = { [AIRBASE.Nevada.Tonopah_Test_Range_Airfield] = {
PointsRunways = { PointsRunways = {
@ -1168,7 +1316,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-175452.38685714,["x"]=-224806.84200001,}, [4] = {["y"]=-175452.38685714,["x"]=-224806.84200001,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.Tonopah_Airport] = { [AIRBASE.Nevada.Tonopah_Airport] = {
PointsRunways = { PointsRunways = {
@ -1185,7 +1332,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-202097.14314285,["x"]=-196739.16514286,}, [4] = {["y"]=-202097.14314285,["x"]=-196739.16514286,},
}, },
}, },
MaximumSpeed = 50,
}, },
[AIRBASE.Nevada.North_Las_Vegas] = { [AIRBASE.Nevada.North_Las_Vegas] = {
PointsRunways = { PointsRunways = {
@ -1208,7 +1354,6 @@ ATC_GROUND_NEVADA = {
[4] = {["y"]=-31884.969142858,["x"]=-401020.59771429,}, [4] = {["y"]=-31884.969142858,["x"]=-401020.59771429,},
}, },
}, },
MaximumSpeed = 50,
}, },
}, },
} }
@ -1222,7 +1367,10 @@ function ATC_GROUND_NEVADA:New( AirbaseNames )
-- Inherits from BASE -- Inherits from BASE
local self = BASE:Inherit( self, ATC_GROUND:New( self.Airbases, AirbaseNames ) ) local self = BASE:Inherit( self, ATC_GROUND:New( self.Airbases, AirbaseNames ) )
self.AirbaseMonitor = SCHEDULER:New( self, self._AirbaseMonitor, { self }, 0, 2, 0.05 )
self:SetKickSpeedKmph( 50 )
self:SetMaximumKickSpeedKmph( 150 )
-- These lines here are for the demonstration mission. -- These lines here are for the demonstration mission.
-- They create in the dcs.log the coordinates of the runway polygons, that are then -- They create in the dcs.log the coordinates of the runway polygons, that are then
@ -1399,6 +1547,9 @@ end
-- --
-- --- -- ---
-- --
-- The default maximum speed for the airbases at Caucasus is **40 km/h**. Warnings are given if this speed limit is trespassed.
-- Players will be immediately kicked when driving faster than **100 km/h** on the taxi way.
--
-- The ATC\_GROUND\_NORMANDY class monitors the speed of the airplanes at the airbase during taxi. -- The ATC\_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 pilots may not drive faster than the maximum speed for the airbase, or they will be despawned.
-- --
@ -1448,15 +1599,18 @@ end
-- --
-- ## In Single Player Missions -- ## In Single Player Missions
-- --
-- ATC_GROUND is fully functional in single player. -- ATC\_GROUND is fully functional in single player.
-- --
-- ## In Multi Player Missions -- ## In Multi Player Missions
-- --
-- ATC_GROUND is NOT functional in multi player, for client machines connecting to the server, running the mission. -- ATC\_GROUND is functional in multi player, however ...
--
-- Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player. -- 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 -- 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. -- by Ciribob.
-- ATC_GROUND is communicating with this modified script to kick players! --
-- With the help of __Ciribob__, this script has been extended to also kick client players while in flight.
-- ATC\_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. -- Install the file **SimpleSlotBlockGameGUI.lua** on the server, following the installation instructions described by Ciribob.
-- --
@ -1480,6 +1634,22 @@ end
-- ) -- )
-- --
-- --
-- ## 2. Set various options
--
-- There are various methods that you can use to tweak the behaviour of the ATC\_GROUND classes.
--
-- ### 2.1 Speed limit at an airbase.
--
-- * @{#ATC_GROUND.SetKickSpeed}(): Set the speed limit allowed at an airbase in meters per second.
-- * @{#ATC_GROUND.SetKickSpeedKmph}(): Set the speed limit allowed at an airbase in kilometers per hour.
-- * @{#ATC_GROUND.SetKickSpeedMiph}(): Set the speed limit allowed at an airbase in miles per hour.
--
-- ### 2.2 Prevent Takeoff at an airbase. Players will be kicked immediately.
--
-- * @{#ATC_GROUND.SetMaximumKickSpeed}(): Set the maximum speed allowed at an airbase in meters per second.
-- * @{#ATC_GROUND.SetMaximumKickSpeedKmph}(): Set the maximum speed allowed at an airbase in kilometers per hour.
-- * @{#ATC_GROUND.SetMaximumKickSpeedMiph}(): Set the maximum speed allowed at an airbase in miles per hour.
--
-- @field #ATC_GROUND_NORMANDY -- @field #ATC_GROUND_NORMANDY
ATC_GROUND_NORMANDY = { ATC_GROUND_NORMANDY = {
ClassName = "ATC_GROUND_NORMANDY", ClassName = "ATC_GROUND_NORMANDY",
@ -1493,7 +1663,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-74176.959142857,["x"]=-2741.997142857,}, [4]={["y"]=-74176.959142857,["x"]=-2741.997142857,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Bazenville] = { [AIRBASE.Normandy.Bazenville] = {
PointsRunways = { PointsRunways = {
@ -1504,7 +1673,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-19217.791999999,["x"]=-21283.597714285,}, [4]={["y"]=-19217.791999999,["x"]=-21283.597714285,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Beny_sur_Mer] = { [AIRBASE.Normandy.Beny_sur_Mer] = {
PointsRunways = { PointsRunways = {
@ -1515,7 +1683,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-8451.0482857133,["x"]=-20368.87542857,}, [4]={["y"]=-8451.0482857133,["x"]=-20368.87542857,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Beuzeville] = { [AIRBASE.Normandy.Beuzeville] = {
PointsRunways = { PointsRunways = {
@ -1526,7 +1693,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-71585.849428571,["x"]=-8709.9648571426,}, [4]={["y"]=-71585.849428571,["x"]=-8709.9648571426,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Biniville] = { [AIRBASE.Normandy.Biniville] = {
PointsRunways = { PointsRunways = {
@ -1537,7 +1703,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-84784.969714286,["x"]=-7402.0588571427,}, [4]={["y"]=-84784.969714286,["x"]=-7402.0588571427,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Brucheville] = { [AIRBASE.Normandy.Brucheville] = {
PointsRunways = { PointsRunways = {
@ -1548,7 +1713,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-65528.393714285,["x"]=-14657.995714286,}, [4]={["y"]=-65528.393714285,["x"]=-14657.995714286,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Cardonville] = { [AIRBASE.Normandy.Cardonville] = {
PointsRunways = { PointsRunways = {
@ -1559,7 +1723,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-54323.354571428,["x"]=-15855.004,}, [4]={["y"]=-54323.354571428,["x"]=-15855.004,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Carpiquet] = { [AIRBASE.Normandy.Carpiquet] = {
PointsRunways = { PointsRunways = {
@ -1570,7 +1733,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-10794.90942857,["x"]=-34287.041428571,}, [4]={["y"]=-10794.90942857,["x"]=-34287.041428571,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Chailey] = { [AIRBASE.Normandy.Chailey] = {
PointsRunways = { PointsRunways = {
@ -1588,7 +1750,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=11726.973428578,["x"]=164489.94257143,}, [4]={["y"]=11726.973428578,["x"]=164489.94257143,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Chippelle] = { [AIRBASE.Normandy.Chippelle] = {
PointsRunways = { PointsRunways = {
@ -1599,7 +1760,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-48555.657714285,["x"]=-28839.90142857,}, [4]={["y"]=-48555.657714285,["x"]=-28839.90142857,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Cretteville] = { [AIRBASE.Normandy.Cretteville] = {
PointsRunways = { PointsRunways = {
@ -1610,7 +1770,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-78380.008857143,["x"]=-18208.011142857,}, [4]={["y"]=-78380.008857143,["x"]=-18208.011142857,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Cricqueville_en_Bessin] = { [AIRBASE.Normandy.Cricqueville_en_Bessin] = {
PointsRunways = { PointsRunways = {
@ -1621,7 +1780,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-50910.569428571,["x"]=-14327.562857142,}, [4]={["y"]=-50910.569428571,["x"]=-14327.562857142,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Deux_Jumeaux] = { [AIRBASE.Normandy.Deux_Jumeaux] = {
PointsRunways = { PointsRunways = {
@ -1632,7 +1790,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-49584.839428571,["x"]=-16617.732571428,}, [4]={["y"]=-49584.839428571,["x"]=-16617.732571428,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Evreux] = { [AIRBASE.Normandy.Evreux] = {
PointsRunways = { PointsRunways = {
@ -1649,7 +1806,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=111966.03657143,["x"]=-45112.604285713,}, [4]={["y"]=111966.03657143,["x"]=-45112.604285713,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Ford] = { [AIRBASE.Normandy.Ford] = {
PointsRunways = { PointsRunways = {
@ -1666,7 +1822,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-25252.357999994,["x"]=148448.64457143,}, [4]={["y"]=-25252.357999994,["x"]=148448.64457143,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Funtington] = { [AIRBASE.Normandy.Funtington] = {
PointsRunways = { PointsRunways = {
@ -1684,7 +1839,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-45871.25971428,["x"]=153136.82714286,}, [4]={["y"]=-45871.25971428,["x"]=153136.82714286,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Lantheuil] = { [AIRBASE.Normandy.Lantheuil] = {
PointsRunways = { PointsRunways = {
@ -1695,7 +1849,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-17090.734857142,["x"]=-24673.248,}, [4]={["y"]=-17090.734857142,["x"]=-24673.248,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Lessay] = { [AIRBASE.Normandy.Lessay] = {
PointsRunways = { PointsRunways = {
@ -1712,7 +1865,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-87087.688571429,["x"]=-34258.272285715,}, [4]={["y"]=-87087.688571429,["x"]=-34258.272285715,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Lignerolles] = { [AIRBASE.Normandy.Lignerolles] = {
PointsRunways = { PointsRunways = {
@ -1723,7 +1875,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-35263.548285713,["x"]=-35192.75542857,}, [4]={["y"]=-35263.548285713,["x"]=-35192.75542857,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Longues_sur_Mer] = { [AIRBASE.Normandy.Longues_sur_Mer] = {
PointsRunways = { PointsRunways = {
@ -1734,7 +1885,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-29529.616285713,["x"]=-16477.766571428,}, [4]={["y"]=-29529.616285713,["x"]=-16477.766571428,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Maupertus] = { [AIRBASE.Normandy.Maupertus] = {
PointsRunways = { PointsRunways = {
@ -1745,7 +1895,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-85613.626571429,["x"]=16132.410571429,}, [4]={["y"]=-85613.626571429,["x"]=16132.410571429,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Meautis] = { [AIRBASE.Normandy.Meautis] = {
PointsRunways = { PointsRunways = {
@ -1756,7 +1905,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-72631.715714286,["x"]=-24639.966857143,}, [4]={["y"]=-72631.715714286,["x"]=-24639.966857143,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Le_Molay] = { [AIRBASE.Normandy.Le_Molay] = {
PointsRunways = { PointsRunways = {
@ -1767,7 +1915,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-41913.638285713,["x"]=-26665.137999999,}, [4]={["y"]=-41913.638285713,["x"]=-26665.137999999,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Needs_Oar_Point] = { [AIRBASE.Normandy.Needs_Oar_Point] = {
PointsRunways = { PointsRunways = {
@ -1785,7 +1932,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-84605.051428566,["x"]=141966.01428572,}, [4]={["y"]=-84605.051428566,["x"]=141966.01428572,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Picauville] = { [AIRBASE.Normandy.Picauville] = {
PointsRunways = { PointsRunways = {
@ -1796,7 +1942,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-80827.815142857,["x"]=-11901.835142857,}, [4]={["y"]=-80827.815142857,["x"]=-11901.835142857,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Rucqueville] = { [AIRBASE.Normandy.Rucqueville] = {
PointsRunways = { PointsRunways = {
@ -1807,7 +1952,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-20022.218857141,["x"]=-26608.505428571,}, [4]={["y"]=-20022.218857141,["x"]=-26608.505428571,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Saint_Pierre_du_Mont] = { [AIRBASE.Normandy.Saint_Pierre_du_Mont] = {
PointsRunways = { PointsRunways = {
@ -1818,7 +1962,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-48016.837142856,["x"]=-11929.371142857,}, [4]={["y"]=-48016.837142856,["x"]=-11929.371142857,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Sainte_Croix_sur_Mer] = { [AIRBASE.Normandy.Sainte_Croix_sur_Mer] = {
PointsRunways = { PointsRunways = {
@ -1829,7 +1972,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-15878.229142856,["x"]=-18764.071428571,}, [4]={["y"]=-15878.229142856,["x"]=-18764.071428571,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Sainte_Laurent_sur_Mer] = { [AIRBASE.Normandy.Sainte_Laurent_sur_Mer] = {
PointsRunways = { PointsRunways = {
@ -1840,7 +1982,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-41687.120571427,["x"]=-14509.680857142,}, [4]={["y"]=-41687.120571427,["x"]=-14509.680857142,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Sommervieu] = { [AIRBASE.Normandy.Sommervieu] = {
PointsRunways = { PointsRunways = {
@ -1851,7 +1992,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-26818.002285713,["x"]=-21440.532857142,}, [4]={["y"]=-26818.002285713,["x"]=-21440.532857142,},
}, },
}, },
MaximumSpeed = 40,
}, },
[AIRBASE.Normandy.Tangmere] = { [AIRBASE.Normandy.Tangmere] = {
PointsRunways = { PointsRunways = {
@ -1868,7 +2008,6 @@ ATC_GROUND_NORMANDY = {
[4]={["y"]=-33176.545999994,["x"]=150870.22542857,}, [4]={["y"]=-33176.545999994,["x"]=150870.22542857,},
}, },
}, },
MaximumSpeed = 40,
}, },
}, },
} }
@ -1881,7 +2020,12 @@ ATC_GROUND_NORMANDY = {
function ATC_GROUND_NORMANDY:New( AirbaseNames ) function ATC_GROUND_NORMANDY:New( AirbaseNames )
-- Inherits from BASE -- Inherits from BASE
local self = BASE:Inherit( self, ATC_GROUND:New( self.Airbases, AirbaseNames ) ) local self = BASE:Inherit( self, ATC_GROUND:New( self.Airbases, AirbaseNames ) ) -- #ATC_GROUND_NORMANDY
self.AirbaseMonitor = SCHEDULER:New( self, self._AirbaseMonitor, { self }, 0, 2, 0.05 )
self:SetKickSpeedKmph( 40 )
self:SetMaximumKickSpeedKmph( 100 )
-- These lines here are for the demonstration mission. -- These lines here are for the demonstration mission.
-- They create in the dcs.log the coordinates of the runway polygons, that are then -- They create in the dcs.log the coordinates of the runway polygons, that are then

View File

@ -1,5 +1,5 @@
env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' )
env.info( 'Moose Generation Timestamp: 20171026_1116' ) env.info( 'Moose Generation Timestamp: 20171031_0744' )
local base = _G local base = _G

View File

@ -1,5 +1,5 @@
env.info('*** MOOSE DYNAMIC INCLUDE START *** ') env.info('*** MOOSE DYNAMIC INCLUDE START *** ')
env.info('Moose Generation Timestamp: 20171026_1116') env.info('Moose Generation Timestamp: 20171031_0744')
local base=_G local base=_G
__Moose={} __Moose={}
__Moose.Include=function(IncludeFile) __Moose.Include=function(IncludeFile)

View File

@ -672,7 +672,6 @@
<dl class="function"> <dl class="function">
<dt> <dt>
<em>#number</em>
<a id="#(AI_A2A).IdleCount" > <a id="#(AI_A2A).IdleCount" >
<strong>AI_A2A.IdleCount</strong> <strong>AI_A2A.IdleCount</strong>
</a> </a>

View File

@ -937,6 +937,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> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">

View File

@ -177,12 +177,6 @@
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).AirbaseList">ATC_GROUND.AirbaseList</a></td> <td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).AirbaseList">ATC_GROUND.AirbaseList</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).AirbaseMonitor">ATC_GROUND.AirbaseMonitor</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -195,6 +189,12 @@
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).KickSpeed">ATC_GROUND.KickSpeed</a></td> <td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).KickSpeed">ATC_GROUND.KickSpeed</a></td>
<td class="summary"> <td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).MaximumKickSpeed">ATC_GROUND.MaximumKickSpeed</a></td>
<td class="summary">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -210,15 +210,39 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).SetKickSpeedKmph">ATC_GROUND:SetKickSpeedKmph(KickSpeed)</a></td> <td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).SetKickSpeed">ATC_GROUND:SetKickSpeed(KickSpeed, Airbase)</a></td>
<td class="summary">
<p>Set the maximum speed in meters per second (Mps) until the player gets kicked.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).SetKickSpeedKmph">ATC_GROUND:SetKickSpeedKmph(KickSpeed, Airbase)</a></td>
<td class="summary"> <td class="summary">
<p>Set the maximum speed in Kmph until the player gets kicked.</p> <p>Set the maximum speed in Kmph until the player gets kicked.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).SetKickSpeedMiph">ATC_GROUND:SetKickSpeedMiph(KickSpeedMiph)</a></td> <td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).SetKickSpeedMiph">ATC_GROUND:SetKickSpeedMiph(KickSpeedMiph, Airbase)</a></td>
<td class="summary"> <td class="summary">
<p>Set the maximum speed in Miph until the player gets kicked.</p> <p>Set the maximum speed in Miph until the player gets kicked.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).SetMaximumKickSpeed">ATC_GROUND:SetMaximumKickSpeed(MaximumKickSpeed, Airbase)</a></td>
<td class="summary">
<p>Set the maximum kick speed in meters per second (Mps) until the player gets kicked.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).SetMaximumKickSpeedKmph">ATC_GROUND:SetMaximumKickSpeedKmph(MaximumKickSpeed, Airbase)</a></td>
<td class="summary">
<p>Set the maximum kick speed in kilometers per hour (Kmph) until the player gets kicked.</p>
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND).SetMaximumKickSpeedMiph">ATC_GROUND:SetMaximumKickSpeedMiph(MaximumKickSpeedMiph, Airbase)</a></td>
<td class="summary">
<p>Set the maximum kick speed in miles per hour (Miph) until the player gets kicked.</p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -258,6 +282,12 @@
<h2><a id="#(ATC_GROUND_NORMANDY)">Type <code>ATC_GROUND_NORMANDY</code></a></h2> <h2><a id="#(ATC_GROUND_NORMANDY)">Type <code>ATC_GROUND_NORMANDY</code></a></h2>
<table class="function_list"> <table class="function_list">
<tr> <tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND_NORMANDY).AirbaseMonitor">ATC_GROUND_NORMANDY.AirbaseMonitor</a></td>
<td class="summary">
</td>
</tr>
<tr>
<td class="name" nowrap="nowrap"><a href="##(ATC_GROUND_NORMANDY).New">ATC_GROUND_NORMANDY:New(AirbaseNames)</a></td> <td class="name" nowrap="nowrap"><a href="##(ATC_GROUND_NORMANDY).New">ATC_GROUND_NORMANDY:New(AirbaseNames)</a></td>
<td class="summary"> <td class="summary">
<p>Creates a new ATC<em>GROUND</em>NORMANDY object.</p> <p>Creates a new ATC<em>GROUND</em>NORMANDY object.</p>
@ -303,7 +333,9 @@
<hr/> <hr/>
<p>The maximum speed for the airbases at Caucasus is <strong>50 km/h</strong>.</p> <p>The default maximum speed for the airbases at Caucasus is <strong>50 km/h</strong>. Warnings are given if this speed limit is trespassed.
Players will be immediately kicked when driving faster than <strong>150 km/h</strong> on the taxi way.</p>
<p>The pilot will receive 3 times a warning during speeding. After the 3rd warning, if the pilot is still driving <p>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.</p> faster than the maximum allowed speed, the pilot will be kicked.</p>
@ -348,11 +380,14 @@ Use the <a href="Airbase.html##(AIRBASE).Caucasus">Airbase#AIRBASE.Caucasus</a>
<h2>In Multi Player Missions</h2> <h2>In Multi Player Missions</h2>
<p>ATC<em>GROUND is NOT functional in multi player, for client machines connecting to the server, running the mission. <p>ATC_GROUND is functional in multi player, however ...</p>
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 <p>Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player.
by Ciribob. With the help of <strong>Ciribob</strong>, this script has been extended to also kick client players while in flight. To <strong>work around this problem</strong>, a much better solution has been made, using the <strong>slot blocker</strong> script designed
ATC</em>GROUND is communicating with this modified script to kick players!</p> by Ciribob. </p>
<p>With the help of <strong>Ciribob</strong>, this script has been extended to also kick client players while in flight.
ATC_GROUND is communicating with this modified script to kick players!</p>
<p>Install the file <strong>SimpleSlotBlockGameGUI.lua</strong> on the server, following the installation instructions described by Ciribob.</p> <p>Install the file <strong>SimpleSlotBlockGameGUI.lua</strong> on the server, following the installation instructions described by Ciribob.</p>
@ -367,7 +402,7 @@ ATC</em>GROUND is communicating with this modified script to kick players!</p>
<pre><code>-- This creates a new ATC_GROUND_CAUCASUS object. <pre><code>-- This creates a new ATC_GROUND_CAUCASUS object.
-- Monitor all the airbases. -- Monitor all the airbases.
AirbasePoliceCaucasus = ATC_GROUND_CAUCASUS:New() ATC_Ground = ATC_GROUND_CAUCASUS:New()
-- Monitor specific airbases only. -- Monitor specific airbases only.
@ -376,9 +411,30 @@ ATC_Ground = ATC_GROUND_CAUCASUS:New(
AIRBASE.Caucasus.Krymsk AIRBASE.Caucasus.Krymsk
} }
) )
</code></pre> </code></pre>
<h2>2. Set various options</h2>
<p>There are various methods that you can use to tweak the behaviour of the ATC_GROUND classes.</p>
<h3>2.1 Speed limit at an airbase.</h3>
<ul>
<li><a href="##(ATC_GROUND).SetKickSpeed">ATC_GROUND.SetKickSpeed</a>(): Set the speed limit allowed at an airbase in meters per second.</li>
<li><a href="##(ATC_GROUND).SetKickSpeedKmph">ATC_GROUND.SetKickSpeedKmph</a>(): Set the speed limit allowed at an airbase in kilometers per hour.</li>
<li><a href="##(ATC_GROUND).SetKickSpeedMiph">ATC_GROUND.SetKickSpeedMiph</a>(): Set the speed limit allowed at an airbase in miles per hour.</li>
</ul>
<h3>2.2 Prevent Takeoff at an airbase. Players will be kicked immediately.</h3>
<ul>
<li><a href="##(ATC_GROUND).SetMaximumKickSpeed">ATC_GROUND.SetMaximumKickSpeed</a>(): Set the maximum speed allowed at an airbase in meters per second. </li>
<li><a href="##(ATC_GROUND).SetMaximumKickSpeedKmph">ATC_GROUND.SetMaximumKickSpeedKmph</a>(): Set the maximum speed allowed at an airbase in kilometers per hour.</li>
<li><a href="##(ATC_GROUND).SetMaximumKickSpeedMiph">ATC_GROUND.SetMaximumKickSpeedMiph</a>(): Set the maximum speed allowed at an airbase in miles per hour.</li>
</ul>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -404,6 +460,9 @@ ATC_Ground = ATC_GROUND_CAUCASUS:New(
<hr/> <hr/>
<p>The default maximum speed for the airbases at Nevada is <strong>50 km/h</strong>. Warnings are given if this speed limit is trespassed.
Players will be immediately kicked when driving faster than <strong>150 km/h</strong> on the taxi way.</p>
<p>The ATC_GROUND_NEVADA class monitors the speed of the airplanes at the airbase during taxi. <p>The ATC_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.</p> The pilots may not drive faster than the maximum speed for the airbase, or they will be despawned.</p>
@ -446,11 +505,14 @@ Use the <a href="Airbase.html##(AIRBASE).Nevada">Airbase#AIRBASE.Nevada</a> enum
<h2>In Multi Player Missions</h2> <h2>In Multi Player Missions</h2>
<p>ATC<em>GROUND is NOT functional in multi player, for client machines connecting to the server, running the mission. <p>ATC_GROUND is functional in multi player, however ...</p>
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 <p>Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player.
by Ciribob. With the help of Ciribob, this script has been extended to also kick client players while in flight. To <strong>work around this problem</strong>, a much better solution has been made, using the <strong>slot blocker</strong> script designed
ATC</em>GROUND is communicating with this modified script to kick players!</p> by Ciribob. </p>
<p>With the help of <strong>Ciribob</strong>, this script has been extended to also kick client players while in flight.
ATC_GROUND is communicating with this modified script to kick players!</p>
<p>Install the file <strong>SimpleSlotBlockGameGUI.lua</strong> on the server, following the installation instructions described by Ciribob.</p> <p>Install the file <strong>SimpleSlotBlockGameGUI.lua</strong> on the server, following the installation instructions described by Ciribob.</p>
@ -465,7 +527,7 @@ ATC</em>GROUND is communicating with this modified script to kick players!</p>
<pre><code>-- This creates a new ATC_GROUND_NEVADA object. <pre><code>-- This creates a new ATC_GROUND_NEVADA object.
-- Monitor all the airbases. -- Monitor all the airbases.
AirbasePoliceCaucasus = ATC_GROUND_NEVADA:New() ATC_Ground = ATC_GROUND_NEVADA:New()
-- Monitor specific airbases. -- Monitor specific airbases.
@ -479,6 +541,27 @@ ATC_Ground = ATC_GROUND_NEVADA:New(
) )
</code></pre> </code></pre>
<h2>2. Set various options</h2>
<p>There are various methods that you can use to tweak the behaviour of the ATC_GROUND classes.</p>
<h3>2.1 Speed limit at an airbase.</h3>
<ul>
<li><a href="##(ATC_GROUND).SetKickSpeed">ATC_GROUND.SetKickSpeed</a>(): Set the speed limit allowed at an airbase in meters per second.</li>
<li><a href="##(ATC_GROUND).SetKickSpeedKmph">ATC_GROUND.SetKickSpeedKmph</a>(): Set the speed limit allowed at an airbase in kilometers per hour.</li>
<li><a href="##(ATC_GROUND).SetKickSpeedMiph">ATC_GROUND.SetKickSpeedMiph</a>(): Set the speed limit allowed at an airbase in miles per hour.</li>
</ul>
<h3>2.2 Prevent Takeoff at an airbase. Players will be kicked immediately.</h3>
<ul>
<li><a href="##(ATC_GROUND).SetMaximumKickSpeed">ATC_GROUND.SetMaximumKickSpeed</a>(): Set the maximum speed allowed at an airbase in meters per second. </li>
<li><a href="##(ATC_GROUND).SetMaximumKickSpeedKmph">ATC_GROUND.SetMaximumKickSpeedKmph</a>(): Set the maximum speed allowed at an airbase in kilometers per hour.</li>
<li><a href="##(ATC_GROUND).SetMaximumKickSpeedMiph">ATC_GROUND.SetMaximumKickSpeedMiph</a>(): Set the maximum speed allowed at an airbase in miles per hour.</li>
</ul>
<p> </p>
</dd> </dd>
</dl> </dl>
@ -505,6 +588,9 @@ ATC_Ground = ATC_GROUND_NEVADA:New(
<hr/> <hr/>
<p>The default maximum speed for the airbases at Caucasus is <strong>40 km/h</strong>. Warnings are given if this speed limit is trespassed.
Players will be immediately kicked when driving faster than <strong>100 km/h</strong> on the taxi way.</p>
<p>The ATC_GROUND_NORMANDY class monitors the speed of the airplanes at the airbase during taxi. <p>The ATC_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.</p> The pilots may not drive faster than the maximum speed for the airbase, or they will be despawned.</p>
@ -560,11 +646,14 @@ Use the <a href="Airbase.html##(AIRBASE).Normandy">Airbase#AIRBASE.Normandy</a>
<h2>In Multi Player Missions</h2> <h2>In Multi Player Missions</h2>
<p>ATC<em>GROUND is NOT functional in multi player, for client machines connecting to the server, running the mission. <p>ATC_GROUND is functional in multi player, however ...</p>
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 <p>Due to a bug in DCS since release 1.5, the despawning of clients are not anymore working in multi player.
by Ciribob. With the help of Ciribob, this script has been extended to also kick client players while in flight. To <strong>work around this problem</strong>, a much better solution has been made, using the <strong>slot blocker</strong> script designed
ATC</em>GROUND is communicating with this modified script to kick players!</p> by Ciribob. </p>
<p>With the help of <strong>Ciribob</strong>, this script has been extended to also kick client players while in flight.
ATC_GROUND is communicating with this modified script to kick players!</p>
<p>Install the file <strong>SimpleSlotBlockGameGUI.lua</strong> on the server, following the installation instructions described by Ciribob.</p> <p>Install the file <strong>SimpleSlotBlockGameGUI.lua</strong> on the server, following the installation instructions described by Ciribob.</p>
@ -589,6 +678,26 @@ ATC_Ground = ATC_GROUND_NORMANDY:New(
</code></pre> </code></pre>
<h2>2. Set various options</h2>
<p>There are various methods that you can use to tweak the behaviour of the ATC_GROUND classes.</p>
<h3>2.1 Speed limit at an airbase.</h3>
<ul>
<li><a href="##(ATC_GROUND).SetKickSpeed">ATC_GROUND.SetKickSpeed</a>(): Set the speed limit allowed at an airbase in meters per second.</li>
<li><a href="##(ATC_GROUND).SetKickSpeedKmph">ATC_GROUND.SetKickSpeedKmph</a>(): Set the speed limit allowed at an airbase in kilometers per hour.</li>
<li><a href="##(ATC_GROUND).SetKickSpeedMiph">ATC_GROUND.SetKickSpeedMiph</a>(): Set the speed limit allowed at an airbase in miles per hour.</li>
</ul>
<h3>2.2 Prevent Takeoff at an airbase. Players will be kicked immediately.</h3>
<ul>
<li><a href="##(ATC_GROUND).SetMaximumKickSpeed">ATC_GROUND.SetMaximumKickSpeed</a>(): Set the maximum speed allowed at an airbase in meters per second. </li>
<li><a href="##(ATC_GROUND).SetMaximumKickSpeedKmph">ATC_GROUND.SetMaximumKickSpeedKmph</a>(): Set the maximum speed allowed at an airbase in kilometers per hour.</li>
<li><a href="##(ATC_GROUND).SetMaximumKickSpeedMiph">ATC_GROUND.SetMaximumKickSpeedMiph</a>(): Set the maximum speed allowed at an airbase in miles per hour.
</li>
</ul>
</dd> </dd>
</dl> </dl>
@ -625,20 +734,6 @@ ATC_Ground = ATC_GROUND_NORMANDY:New(
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(ATC_GROUND).AirbaseMonitor" >
<strong>ATC_GROUND.AirbaseMonitor</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -667,6 +762,20 @@ ATC_Ground = ATC_GROUND_NORMANDY:New(
</dd>
</dl>
<dl class="function">
<dt>
<em></em>
<a id="#(ATC_GROUND).MaximumKickSpeed" >
<strong>ATC_GROUND.MaximumKickSpeed</strong>
</a>
</dt>
<dd>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -718,20 +827,29 @@ self</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(ATC_GROUND).SetKickSpeedKmph" > <a id="#(ATC_GROUND).SetKickSpeed" >
<strong>ATC_GROUND:SetKickSpeedKmph(KickSpeed)</strong> <strong>ATC_GROUND:SetKickSpeed(KickSpeed, Airbase)</strong>
</a> </a>
</dt> </dt>
<dd> <dd>
<p>Set the maximum speed in Kmph until the player gets kicked.</p> <p>Set the maximum speed in meters per second (Mps) until the player gets kicked.</p>
<h3>Parameter</h3>
<p>An airbase can be specified to set the kick speed for.</p>
<h3>Parameters</h3>
<ul> <ul>
<li> <li>
<p><code><em>#number KickSpeed </em></code>: <p><code><em>#number KickSpeed </em></code>:
Set the maximum speed in Kmph until the player gets kicked.</p> The speed in Mps.</p>
</li>
<li>
<p><code><em><a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a> Airbase </em></code>:
(optional) The airbase to set the kick speed for.</p>
</li> </li>
</ul> </ul>
@ -740,25 +858,84 @@ Set the maximum speed in Kmph until the player gets kicked.</p>
<p><em><a href="##(ATC_GROUND)">#ATC_GROUND</a>:</em> <p><em><a href="##(ATC_GROUND)">#ATC_GROUND</a>:</em>
self</p> self</p>
<h3>Usage:</h3>
<pre class="example"><code>
-- Declare Atc_Ground using one of those, depending on the map.
Atc_Ground = ATC_GROUND_CAUCAUS:New()
Atc_Ground = ATC_GROUND_NEVADA:New()
Atc_Ground = ATC_GROUND_NORMANDY:New()
-- Then use one of these methods...
Atc_Ground:SetKickSpeed( UTILS.KmphToMps( 80 ) ) -- Kick the players at 80 kilometers per hour
Atc_Ground:SetKickSpeed( UTILS.MiphToMps( 100 ) ) -- Kick the players at 100 miles per hour
Atc_Ground:SetKickSpeed( 24 ) -- Kick the players at 24 meters per second ( 24 * 3.6 = 86.4 kilometers per hour )
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(ATC_GROUND).SetKickSpeedKmph" >
<strong>ATC_GROUND:SetKickSpeedKmph(KickSpeed, Airbase)</strong>
</a>
</dt>
<dd>
<p>Set the maximum speed in Kmph until the player gets kicked.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#number KickSpeed </em></code>:
Set the speed in Kmph.</p>
</li>
<li>
<p><code><em><a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a> Airbase </em></code>:
(optional) The airbase to set the kick speed for.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(ATC_GROUND)">#ATC_GROUND</a>:</em>
self</p>
<p> Atc_Ground:SetKickSpeedKmph( 80 ) -- Kick the players at 80 kilometers per hour</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
<dt> <dt>
<a id="#(ATC_GROUND).SetKickSpeedMiph" > <a id="#(ATC_GROUND).SetKickSpeedMiph" >
<strong>ATC_GROUND:SetKickSpeedMiph(KickSpeedMiph)</strong> <strong>ATC_GROUND:SetKickSpeedMiph(KickSpeedMiph, Airbase)</strong>
</a> </a>
</dt> </dt>
<dd> <dd>
<p>Set the maximum speed in Miph until the player gets kicked.</p> <p>Set the maximum speed in Miph until the player gets kicked.</p>
<h3>Parameter</h3> <h3>Parameters</h3>
<ul> <ul>
<li> <li>
<p><code><em>#number KickSpeedMiph </em></code>: <p><code><em>#number KickSpeedMiph </em></code>:
Set the maximum speed in Mph until the player gets kicked.</p> Set the speed in Mph.</p>
</li>
<li>
<p><code><em><a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a> Airbase </em></code>:
(optional) The airbase to set the kick speed for.</p>
</li> </li>
</ul> </ul>
@ -767,6 +944,143 @@ Set the maximum speed in Mph until the player gets kicked.</p>
<p><em><a href="##(ATC_GROUND)">#ATC_GROUND</a>:</em> <p><em><a href="##(ATC_GROUND)">#ATC_GROUND</a>:</em>
self</p> self</p>
<p> Atc_Ground:SetKickSpeedMiph( 100 ) -- Kick the players at 100 miles per hour</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(ATC_GROUND).SetMaximumKickSpeed" >
<strong>ATC_GROUND:SetMaximumKickSpeed(MaximumKickSpeed, Airbase)</strong>
</a>
</dt>
<dd>
<p>Set the maximum kick speed in meters per second (Mps) until the player gets kicked.</p>
<p>There are no warnings given if this speed is reached, and is to prevent players to take off from the airbase!
An airbase can be specified to set the maximum kick speed for.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#number MaximumKickSpeed </em></code>:
The speed in Mps.</p>
</li>
<li>
<p><code><em><a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a> Airbase </em></code>:
(optional) The airbase to set the kick speed for.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(ATC_GROUND)">#ATC_GROUND</a>:</em>
self</p>
<h3>Usage:</h3>
<pre class="example"><code>
-- Declare Atc_Ground using one of those, depending on the map.
Atc_Ground = ATC_GROUND_CAUCAUS:New()
Atc_Ground = ATC_GROUND_NEVADA:New()
Atc_Ground = ATC_GROUND_NORMANDY:New()
-- Then use one of these methods...
Atc_Ground:SetMaximumKickSpeed( UTILS.KmphToMps( 80 ) ) -- Kick the players at 80 kilometers per hour
Atc_Ground:SetMaximumKickSpeed( UTILS.MiphToMps( 100 ) ) -- Kick the players at 100 miles per hour
Atc_Ground:SetMaximumKickSpeed( 24 ) -- Kick the players at 24 meters per second ( 24 * 3.6 = 86.4 kilometers per hour )
</code></pre>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(ATC_GROUND).SetMaximumKickSpeedKmph" >
<strong>ATC_GROUND:SetMaximumKickSpeedKmph(MaximumKickSpeed, Airbase)</strong>
</a>
</dt>
<dd>
<p>Set the maximum kick speed in kilometers per hour (Kmph) until the player gets kicked.</p>
<p>There are no warnings given if this speed is reached, and is to prevent players to take off from the airbase!
An airbase can be specified to set the maximum kick speed for.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#number MaximumKickSpeed </em></code>:
Set the speed in Kmph.</p>
</li>
<li>
<p><code><em><a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a> Airbase </em></code>:
(optional) The airbase to set the kick speed for.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(ATC_GROUND)">#ATC_GROUND</a>:</em>
self</p>
<p> Atc_Ground:SetMaximumKickSpeedKmph( 150 ) -- Kick the players at 150 kilometers per hour</p>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(ATC_GROUND).SetMaximumKickSpeedMiph" >
<strong>ATC_GROUND:SetMaximumKickSpeedMiph(MaximumKickSpeedMiph, Airbase)</strong>
</a>
</dt>
<dd>
<p>Set the maximum kick speed in miles per hour (Miph) until the player gets kicked.</p>
<p>There are no warnings given if this speed is reached, and is to prevent players to take off from the airbase!
An airbase can be specified to set the maximum kick speed for.</p>
<h3>Parameters</h3>
<ul>
<li>
<p><code><em>#number MaximumKickSpeedMiph </em></code>:
Set the speed in Mph.</p>
</li>
<li>
<p><code><em><a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a> Airbase </em></code>:
(optional) The airbase to set the kick speed for.</p>
</li>
</ul>
<h3>Return value</h3>
<p><em><a href="##(ATC_GROUND)">#ATC_GROUND</a>:</em>
self</p>
<p> Atc_Ground:SetMaximumKickSpeedMiph( 100 ) -- Kick the players at 100 miles per hour</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -877,6 +1191,20 @@ self</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(ATC_GROUND_NORMANDY).AirbaseMonitor" >
<strong>ATC_GROUND_NORMANDY.AirbaseMonitor</strong>
</a>
</dt>
<dd>
</dd>
</dl>
<dl class="function">
<dt>
<a id="#(ATC_GROUND_NORMANDY).New" > <a id="#(ATC_GROUND_NORMANDY).New" >
<strong>ATC_GROUND_NORMANDY:New(AirbaseNames)</strong> <strong>ATC_GROUND_NORMANDY:New(AirbaseNames)</strong>
</a> </a>

View File

@ -3699,7 +3699,6 @@ The range till cargo will board.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(CARGO_UNIT).CargoCarrier" > <a id="#(CARGO_UNIT).CargoCarrier" >
<strong>CARGO_UNIT.CargoCarrier</strong> <strong>CARGO_UNIT.CargoCarrier</strong>
</a> </a>

View File

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

View File

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

View File

@ -3496,7 +3496,6 @@ The y coordinate.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(POINT_VEC2).z" > <a id="#(POINT_VEC2).z" >
<strong>POINT_VEC2.z</strong> <strong>POINT_VEC2.z</strong>
</a> </a>

View File

@ -2315,6 +2315,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> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">
@ -3408,7 +3411,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> </dd>
</dl> </dl>

View File

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

View File

@ -776,6 +776,7 @@ true if it is lasing</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(SPOT).ScheduleID" > <a id="#(SPOT).ScheduleID" >
<strong>SPOT.ScheduleID</strong> <strong>SPOT.ScheduleID</strong>
</a> </a>
@ -789,6 +790,7 @@ true if it is lasing</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(SPOT).SpotIR" > <a id="#(SPOT).SpotIR" >
<strong>SPOT.SpotIR</strong> <strong>SPOT.SpotIR</strong>
</a> </a>
@ -802,6 +804,7 @@ true if it is lasing</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(SPOT).SpotLaser" > <a id="#(SPOT).SpotLaser" >
<strong>SPOT.SpotLaser</strong> <strong>SPOT.SpotLaser</strong>
</a> </a>
@ -815,6 +818,7 @@ true if it is lasing</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(SPOT).Target" > <a id="#(SPOT).Target" >
<strong>SPOT.Target</strong> <strong>SPOT.Target</strong>
</a> </a>

View File

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

View File

@ -490,7 +490,6 @@ The name of the player.</p>
<dl class="function"> <dl class="function">
<dt> <dt>
<em></em>
<a id="#(ZONE_GOAL).SmokeTime" > <a id="#(ZONE_GOAL).SmokeTime" >
<strong>ZONE_GOAL.SmokeTime</strong> <strong>ZONE_GOAL.SmokeTime</strong>
</a> </a>
@ -499,9 +498,6 @@ The name of the player.</p>
<p>self.SmokeColor = nil</p>
</dd> </dd>
</dl> </dl>
<dl class="function"> <dl class="function">