mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Progress
This commit is contained in:
parent
32a179d0b6
commit
61f55b3bd8
@ -1,89 +1,930 @@
|
||||
--- This module contains the AIRBASEPOLICE classes.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- 1) @{AirbasePolice#AIRBASEPOLICE_BASE} class, extends @{Base#BASE}
|
||||
-- ==================================================================
|
||||
-- The @{AirbasePolice#AIRBASEPOLICE_BASE} class provides the main methods to monitor CLIENT behaviour at airbases.
|
||||
-- CLIENTS should not be allowed to:
|
||||
--
|
||||
-- * Don't taxi faster than 40 km/h.
|
||||
-- * Don't take-off on taxiways.
|
||||
-- * Avoid to hit other planes on the airbase.
|
||||
-- * Obey ground control orders.
|
||||
--
|
||||
-- 2) @{AirbasePolice#AIRBASEPOLICE_CAUCASUS} class, extends @{AirbasePolice#AIRBASEPOLICE_BASE}
|
||||
-- =============================================================================================
|
||||
-- All the airbases on the caucasus map can be monitored using this class.
|
||||
-- If you want to monitor specific airbases, you need to use the @{#AIRBASEPOLICE_BASE.Monitor}() method, which takes a table or airbase names.
|
||||
-- The following names can be given:
|
||||
-- * AnapaVityazevo
|
||||
-- * Batumi
|
||||
-- * Beslan
|
||||
-- * Gelendzhik
|
||||
-- * Gudauta
|
||||
-- * Kobuleti
|
||||
-- * KrasnodarCenter
|
||||
-- * KrasnodarPashkovsky
|
||||
-- * Krymsk
|
||||
-- * Kutaisi
|
||||
-- * MaykopKhanskaya
|
||||
-- * MineralnyeVody
|
||||
-- * Mozdok
|
||||
-- * Nalchik
|
||||
-- * Novorossiysk
|
||||
-- * SenakiKolkhi
|
||||
-- * SochiAdler
|
||||
-- * Soganlug
|
||||
-- * SukhumiBabushara
|
||||
-- * TbilisiLochini
|
||||
-- * Vaziani
|
||||
--
|
||||
-- @module AirbasePolice
|
||||
-- @author FlightControl
|
||||
|
||||
--- @type AIRBASEPOLICE
|
||||
|
||||
--- @type AIRBASEPOLICE_BASE
|
||||
-- @field Set#SET_CLIENT SetClient
|
||||
-- @extends Base#BASE
|
||||
|
||||
AIRBASEPOLICE = {
|
||||
ClassName = "AIRBASEPOLICE",
|
||||
PolygonsTaxiways = {},
|
||||
PolygonsRunways = {},
|
||||
AIRBASEPOLICE_BASE = {
|
||||
ClassName = "AIRBASEPOLICE_BASE",
|
||||
SetClient = nil,
|
||||
Airbases = nil,
|
||||
AirbaseNames = nil,
|
||||
}
|
||||
|
||||
--- Creates a new AIRBASEPOLICE object.
|
||||
-- @param #AIRBASEPOLICE self
|
||||
|
||||
--- Creates a new AIRBASEPOLICE_BASE object.
|
||||
-- @param #AIRBASEPOLICE_BASE self
|
||||
-- @param SetClient A SET_CLIENT object that will contain the CLIENT objects to be monitored if they follow the rules of the airbase.
|
||||
-- @return #AIRBASEPOLICE self
|
||||
function AIRBASEPOLICE:New( SetClient )
|
||||
-- @param Airbases A table of Airbase Names.
|
||||
-- @return #AIRBASEPOLICE_BASE self
|
||||
function AIRBASEPOLICE_BASE:New( SetClient, Airbases )
|
||||
|
||||
-- Inherits from BASE
|
||||
local self = BASE:Inherit( self, BASE:New() )
|
||||
|
||||
self.SetClient = SetClient
|
||||
|
||||
local PolygonBatumiTaxiwaysGroup1 = GROUP:FindByName( "Polygon Batumi Taxiway 1" )
|
||||
self.PolygonsTaxiways[#self.PolygonsTaxiways+1] = ZONE_POLYGON:New( "Batumi Taxiway", PolygonBatumiTaxiwaysGroup1 ):SmokeZone(POINT_VEC3.SmokeColor.White)
|
||||
self:E( { self.ClassName, SetClient, Airbases } )
|
||||
|
||||
local PolygonBatumiRunwaysGroup1 = GROUP:FindByName( "Polygon Batumi Runway 1" )
|
||||
self.PolygonsRunways[#self.PolygonsRunways+1] = ZONE_POLYGON:New( "Batumi Runway", PolygonBatumiRunwaysGroup1 ):SmokeZone(POINT_VEC3.SmokeColor.Red)
|
||||
self.SetClient = SetClient
|
||||
self.Airbases = Airbases
|
||||
|
||||
for AirbaseID, Airbase in pairs( self.Airbases ) do
|
||||
Airbase.ZoneBoundary = ZONE_POLYGON_BASE:New( "Boundary", Airbase.PointsBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
for PointsRunwayID, PointsRunway in pairs( Airbase.PointsRunways ) do
|
||||
Airbase.ZoneRunways[PointsRunwayID] = ZONE_POLYGON_BASE:New( "Runway " .. PointsRunwayID, PointsRunway ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
end
|
||||
end
|
||||
|
||||
-- -- Template
|
||||
-- local TemplateBoundary = GROUP:FindByName( "Template Boundary" )
|
||||
-- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local TemplateRunway1 = GROUP:FindByName( "Template Runway 1" )
|
||||
-- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
|
||||
self.SetClient:ForEachClient(
|
||||
|
||||
--- @param Client#CLIENT Client
|
||||
function( Client )
|
||||
Client:SetState( self, "Speeding", false )
|
||||
Client:SetState( self, "Warnings", 0)
|
||||
Client:SetState( self, "Taxi", false )
|
||||
end
|
||||
|
||||
)
|
||||
self.AirbaseMonitor = SCHEDULER:New( self, self._AirbaseMonitor, {}, 0, 5, 0 )
|
||||
|
||||
|
||||
self.AirbaseMonitor = SCHEDULER:New( self, self._AirbaseMonitor, {}, 0, 2, 0.05 )
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- @param #AIRBASEPOLICE self
|
||||
function AIRBASEPOLICE:_AirbaseMonitor()
|
||||
--- @type AIRBASEPOLICE_BASE.AirbaseNames
|
||||
-- @list <#string>
|
||||
|
||||
--- Monitor a table of airbase names.
|
||||
-- @param #AIRBASEPOLICE_BASE self
|
||||
-- @param #AIRBASEPOLICE_BASE.AirbaseNames AirbaseNames A list of AirbaseNames to monitor. If this parameters is nil, then all airbases will be monitored.
|
||||
-- @return #AIRBASEPOLICE_BASE self
|
||||
function AIRBASEPOLICE_BASE:Monitor( AirbaseNames )
|
||||
|
||||
if AirbaseNames then
|
||||
if type( AirbaseNames ) == "table" then
|
||||
self.AirbaseNames = AirbaseNames
|
||||
else
|
||||
self.AirbaseNames = { AirbaseNames }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- @param #AIRBASEPOLICE_BASE self
|
||||
function AIRBASEPOLICE_BASE:_AirbaseMonitor()
|
||||
|
||||
for AirbaseID, Airbase in pairs( self.Airbases ) do
|
||||
|
||||
if not self.AirbaseNames or self.AirbaseNames[AirbaseID] then
|
||||
|
||||
self:E( AirbaseID )
|
||||
|
||||
self.SetClient:ForEachClientInZone( Airbase.ZoneBoundary,
|
||||
|
||||
--- @param Client#CLIENT Client
|
||||
function( Client )
|
||||
|
||||
self:E( Client.UnitName )
|
||||
if Client:IsAlive() then
|
||||
local NotInRunwayZone = true
|
||||
for ZoneRunwayID, ZoneRunway in pairs( Airbase.ZoneRunways ) do
|
||||
NotInRunwayZone = ( Client:IsNotInZone( ZoneRunway ) == true ) and NotInRunwayZone or false
|
||||
end
|
||||
|
||||
if NotInRunwayZone then
|
||||
local Taxi = self:GetState( self, "Taxi" )
|
||||
self:E( Taxi )
|
||||
if Taxi == false then
|
||||
Client:Message( "Welcome at " .. AirbaseID .. ". The maximum taxiing speed is " .. Airbase.MaximumSpeed " km/h.", 20, "ATC" )
|
||||
self:SetState( self, "Taxi", true )
|
||||
end
|
||||
|
||||
local VelocityVec3 = Client:GetVelocity()
|
||||
local Velocity = math.abs(VelocityVec3.x) + math.abs(VelocityVec3.y) + math.abs(VelocityVec3.z)
|
||||
local IsAboveRunway = Client:IsAboveRunway()
|
||||
local IsOnGround = Client:InAir() == false
|
||||
self:T( IsAboveRunway, IsOnGround )
|
||||
|
||||
if IsAboveRunway and IsOnGround then
|
||||
|
||||
if Velocity > 10 then
|
||||
local IsSpeeding = Client:GetState( self, "Speeding" )
|
||||
|
||||
if IsSpeeding == true then
|
||||
local SpeedingWarnings = Client:GetState( self, "Warnings" )
|
||||
self:T( SpeedingWarnings )
|
||||
|
||||
if SpeedingWarnings <= 5 then
|
||||
Client:Message( "You are speeding on the taxiway! Slow down or you will be removed from this airbase! Your current velocity is " .. string.format( "%2.0f km/h", Velocity ), 5, "Warning " .. SpeedingWarnings .. " / 5" )
|
||||
Client:SetState( self, "Warnings", SpeedingWarnings + 1 )
|
||||
else
|
||||
MESSAGE:New( "Player " .. Client:GetPlayerName() .. " has been removed from the airbase, due to a speeding violation ...", 10, "Airbase Police" ):ToAll()
|
||||
Client:GetGroup():Destroy()
|
||||
Client:SetState( self, "Speeding", false )
|
||||
Client:SetState( self, "Warnings", 0 )
|
||||
end
|
||||
|
||||
else
|
||||
Client:Message( "You are speeding on the taxiway! Slow down please ...! Your current velocity is " .. string.format( "%2.0f km/h", Velocity ), 5, "Attention! " )
|
||||
Client:SetState( self, "Speeding", true )
|
||||
Client:SetState( self, "Warnings", 1 )
|
||||
end
|
||||
|
||||
for PolygonTaxiID, PolygonTaxi in pairs( self.PolygonsTaxiways ) do
|
||||
self.SetClient:ForEachClientInZone( PolygonTaxi,
|
||||
|
||||
--- @param Client#CLIENT Client
|
||||
function( Client )
|
||||
if Client:IsAlive() then
|
||||
local VelocityVec3 = Client:GetVelocity()
|
||||
local Velocity = math.abs(VelocityVec3.x) + math.abs(VelocityVec3.y) + math.abs(VelocityVec3.z)
|
||||
local IsAboveRunway = Client:IsAboveRunway()
|
||||
local IsOnGround = Client:InAir() == false
|
||||
self:T( IsAboveRunway, IsOnGround )
|
||||
if IsAboveRunway and IsOnGround then
|
||||
if Velocity > 10 then
|
||||
local IsSpeeding = Client:GetState( self, "Speeding" )
|
||||
if IsSpeeding == true then
|
||||
local SpeedingWarnings = Client:GetState( self, "Warnings" )
|
||||
self:T( SpeedingWarnings )
|
||||
if SpeedingWarnings <= 5 then
|
||||
Client:Message( "You are speeding on the taxiway! Slow down or you will be removed from this airbase! Your current velocity is " .. string.format( "%2.0f km/h", Velocity ), 5, "Speeding", "Warning " .. SpeedingWarnings .. " / 5" )
|
||||
Client:SetState( self, "Warnings", SpeedingWarnings + 1 )
|
||||
else
|
||||
MESSAGE:New( "Player " .. Client:GetPlayerName() .. " has been removed from the airbase, due to a speeding violation ...", 10, "Airbase Police" ):ToAll()
|
||||
Client:GetGroup():Destroy()
|
||||
Client:SetState( self, "Speeding", false )
|
||||
Client:SetState( self, "Warnings", 0 )
|
||||
end
|
||||
else
|
||||
Client:Message( "You are speeding on the taxiway! Slow down please ...! Your current velocity is " .. string.format( "%2.0f km/h", Velocity ), 5, "Speeding", "Attention! " )
|
||||
Client:SetState( self, "Speeding", true )
|
||||
Client:SetState( self, "Warnings", 1 )
|
||||
end
|
||||
|
||||
else
|
||||
Client:SetState( self, "Speeding", false )
|
||||
Client:SetState( self, "Warnings", 0 )
|
||||
local Taxi = self:GetState( self, "Taxi" )
|
||||
if Taxi == true then
|
||||
Client:Message( "You have progressed to the runway ... Await take-off clearance ...", 20, "ATC" )
|
||||
self:SetState( self, "Taxi", false )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
--- @type AIRBASEPOLICE_CAUCASUS
|
||||
-- @field Set#SET_CLIENT SetClient
|
||||
-- @extends #AIRBASEPOLICE_BASE
|
||||
|
||||
AIRBASEPOLICE_CAUCASUS = {
|
||||
ClassName = "AIRBASEPOLICE_CAUCASUS",
|
||||
Airbases = {
|
||||
AnapaVityazevo = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=242234.85714287,["x"]=-6616.5714285726,},
|
||||
[2]={["y"]=241060.57142858,["x"]=-5585.142857144,},
|
||||
[3]={["y"]=243806.2857143,["x"]=-3962.2857142868,},
|
||||
[4]={["y"]=245240.57142858,["x"]=-4816.5714285726,},
|
||||
[5]={["y"]=244783.42857144,["x"]=-5630.8571428583,},
|
||||
[6]={["y"]=243800.57142858,["x"]=-5065.142857144,},
|
||||
[7]={["y"]=242232.00000001,["x"]=-6622.2857142868,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=242140.57142858,["x"]=-6478.8571428583,},
|
||||
[2]={["y"]=242188.57142858,["x"]=-6522.0000000011,},
|
||||
[3]={["y"]=244124.2857143,["x"]=-4344.0000000011,},
|
||||
[4]={["y"]=244068.2857143,["x"]=-4296.5714285726,},
|
||||
[5]={["y"]=242140.57142858,["x"]=-6480.0000000011,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Batumi = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=617567.14285714,["x"]=-355313.14285715,},
|
||||
[2]={["y"]=616181.42857142,["x"]=-354800.28571429,},
|
||||
[3]={["y"]=616007.14285714,["x"]=-355128.85714286,},
|
||||
[4]={["y"]=618230,["x"]=-356914.57142858,},
|
||||
[5]={["y"]=618727.14285714,["x"]=-356166,},
|
||||
[6]={["y"]=617572.85714285,["x"]=-355308.85714286,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=616451.42857142,["x"]=-355103.14285715,},
|
||||
[2]={["y"]=618450.57142857,["x"]=-356522,},
|
||||
[3]={["y"]=618407.71428571,["x"]=-356584.85714286,},
|
||||
[4]={["y"]=618361.99999999,["x"]=-356554.85714286,},
|
||||
[5]={["y"]=618324.85714285,["x"]=-356599.14285715,},
|
||||
[6]={["y"]=618250.57142856,["x"]=-356543.42857143,},
|
||||
[7]={["y"]=618257.7142857,["x"]=-356496.28571429,},
|
||||
[8]={["y"]=618237.7142857,["x"]=-356459.14285715,},
|
||||
[9]={["y"]=616555.71428571,["x"]=-355258.85714286,},
|
||||
[10]={["y"]=616486.28571428,["x"]=-355280.57142858,},
|
||||
[11]={["y"]=616410.57142856,["x"]=-355227.71428572,},
|
||||
[12]={["y"]=616441.99999999,["x"]=-355179.14285715,},
|
||||
[13]={["y"]=616401.99999999,["x"]=-355147.71428572,},
|
||||
[14]={["y"]=616441.42857142,["x"]=-355092.57142858,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Beslan = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=842082.57142857,["x"]=-148445.14285715,},
|
||||
[2]={["y"]=845237.71428572,["x"]=-148639.71428572,},
|
||||
[3]={["y"]=845232,["x"]=-148765.42857143,},
|
||||
[4]={["y"]=844220.57142857,["x"]=-149168.28571429,},
|
||||
[5]={["y"]=843274.85714286,["x"]=-149125.42857143,},
|
||||
[6]={["y"]=842077.71428572,["x"]=-148554,},
|
||||
[7]={["y"]=842083.42857143,["x"]=-148445.42857143,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=842104.57142857,["x"]=-148460.57142857,},
|
||||
[2]={["y"]=845225.71428572,["x"]=-148656,},
|
||||
[3]={["y"]=845220.57142858,["x"]=-148750,},
|
||||
[4]={["y"]=842098.85714286,["x"]=-148556.28571429,},
|
||||
[5]={["y"]=842104,["x"]=-148460.28571429,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Gelendzhik = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=297856.00000001,["x"]=-51151.428571429,},
|
||||
[2]={["y"]=299044.57142858,["x"]=-49720.000000001,},
|
||||
[3]={["y"]=298861.71428572,["x"]=-49580.000000001,},
|
||||
[4]={["y"]=298198.85714286,["x"]=-49842.857142858,},
|
||||
[5]={["y"]=297990.28571429,["x"]=-50151.428571429,},
|
||||
[6]={["y"]=297696.00000001,["x"]=-51054.285714286,},
|
||||
[7]={["y"]=297850.28571429,["x"]=-51160.000000001,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=297834.00000001,["x"]=-51107.428571429,},
|
||||
[2]={["y"]=297786.57142858,["x"]=-51068.857142858,},
|
||||
[3]={["y"]=298946.57142858,["x"]=-49686.000000001,},
|
||||
[4]={["y"]=298993.14285715,["x"]=-49725.714285715,},
|
||||
[5]={["y"]=297835.14285715,["x"]=-51107.714285715,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Gudauta = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=517246.57142857,["x"]=-197850.28571429,},
|
||||
[2]={["y"]=516749.42857142,["x"]=-198070.28571429,},
|
||||
[3]={["y"]=515755.14285714,["x"]=-197598.85714286,},
|
||||
[4]={["y"]=515369.42857142,["x"]=-196538.85714286,},
|
||||
[5]={["y"]=515623.71428571,["x"]=-195618.85714286,},
|
||||
[6]={["y"]=515946.57142857,["x"]=-195510.28571429,},
|
||||
[7]={["y"]=517243.71428571,["x"]=-197858.85714286,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=517096.57142857,["x"]=-197804.57142857,},
|
||||
[2]={["y"]=515880.85714285,["x"]=-195590.28571429,},
|
||||
[3]={["y"]=515812.28571428,["x"]=-195628.85714286,},
|
||||
[4]={["y"]=517036.57142857,["x"]=-197834.57142857,},
|
||||
[5]={["y"]=517097.99999999,["x"]=-197807.42857143,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Kobuleti = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=634427.71428571,["x"]=-318290.28571429,},
|
||||
[2]={["y"]=635033.42857143,["x"]=-317550.2857143,},
|
||||
[3]={["y"]=635864.85714286,["x"]=-317333.14285715,},
|
||||
[4]={["y"]=636967.71428571,["x"]=-317261.71428572,},
|
||||
[5]={["y"]=637144.85714286,["x"]=-317913.14285715,},
|
||||
[6]={["y"]=634630.57142857,["x"]=-318687.42857144,},
|
||||
[7]={["y"]=634424.85714286,["x"]=-318290.2857143,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=634509.71428571,["x"]=-318339.42857144,},
|
||||
[2]={["y"]=636767.42857143,["x"]=-317516.57142858,},
|
||||
[3]={["y"]=636790,["x"]=-317575.71428572,},
|
||||
[4]={["y"]=634531.42857143,["x"]=-318398.00000001,},
|
||||
[5]={["y"]=634510.28571429,["x"]=-318339.71428572,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 50,
|
||||
},
|
||||
KrasnodarCenter = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=366680.28571429,["x"]=11699.142857142,},
|
||||
[2]={["y"]=366654.28571429,["x"]=11225.142857142,},
|
||||
[3]={["y"]=367497.14285715,["x"]=11082.285714285,},
|
||||
[4]={["y"]=368025.71428572,["x"]=10396.57142857,},
|
||||
[5]={["y"]=369854.28571429,["x"]=11367.999999999,},
|
||||
[6]={["y"]=369840.00000001,["x"]=11910.857142856,},
|
||||
[7]={["y"]=366682.57142858,["x"]=11697.999999999,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=369205.42857144,["x"]=11789.142857142,},
|
||||
[2]={["y"]=369209.71428572,["x"]=11714.857142856,},
|
||||
[3]={["y"]=366699.71428572,["x"]=11581.714285713,},
|
||||
[4]={["y"]=366698.28571429,["x"]=11659.142857142,},
|
||||
[5]={["y"]=369208.85714286,["x"]=11788.57142857,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 50,
|
||||
},
|
||||
KrasnodarPashkovsky = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=386754,["x"]=6476.5714285703,},
|
||||
[2]={["y"]=389182.57142858,["x"]=8722.2857142846,},
|
||||
[3]={["y"]=388832.57142858,["x"]=9086.5714285703,},
|
||||
[4]={["y"]=386961.14285715,["x"]=7707.9999999989,},
|
||||
[5]={["y"]=385404,["x"]=9179.4285714274,},
|
||||
[6]={["y"]=383239.71428572,["x"]=7386.5714285703,},
|
||||
[7]={["y"]=383954,["x"]=6486.5714285703,},
|
||||
[8]={["y"]=385775.42857143,["x"]=8097.9999999989,},
|
||||
[9]={["y"]=386804,["x"]=7319.4285714274,},
|
||||
[10]={["y"]=386375.42857143,["x"]=6797.9999999989,},
|
||||
[11]={["y"]=386746.85714286,["x"]=6472.2857142846,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=385891.14285715,["x"]=8416.5714285703,},
|
||||
[2]={["y"]=385842.28571429,["x"]=8467.9999999989,},
|
||||
[3]={["y"]=384180.85714286,["x"]=6917.1428571417,},
|
||||
[4]={["y"]=384228.57142858,["x"]=6867.7142857132,},
|
||||
[5]={["y"]=385891.14285715,["x"]=8416.5714285703,},
|
||||
},
|
||||
[2] = {
|
||||
[1]={["y"]=386714.85714286,["x"]=6674.857142856,},
|
||||
[2]={["y"]=386757.71428572,["x"]=6627.7142857132,},
|
||||
[3]={["y"]=389028.57142858,["x"]=8741.4285714275,},
|
||||
[4]={["y"]=388981.71428572,["x"]=8790.5714285703,},
|
||||
[5]={["y"]=386714.57142858,["x"]=6674.5714285703,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 45,
|
||||
},
|
||||
Krymsk = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=293338.00000001,["x"]=-7575.4285714297,},
|
||||
[2]={["y"]=295199.42857144,["x"]=-5434.0000000011,},
|
||||
[3]={["y"]=295595.14285715,["x"]=-6239.7142857154,},
|
||||
[4]={["y"]=294152.2857143,["x"]=-8325.4285714297,},
|
||||
[5]={["y"]=293345.14285715,["x"]=-7596.8571428582,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=293522.00000001,["x"]=-7567.4285714297,},
|
||||
[2]={["y"]=293578.57142858,["x"]=-7616.0000000011,},
|
||||
[3]={["y"]=295246.00000001,["x"]=-5591.142857144,},
|
||||
[4]={["y"]=295187.71428573,["x"]=-5546.0000000011,},
|
||||
[5]={["y"]=293523.14285715,["x"]=-7568.2857142868,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Kutaisi = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=682087.42857143,["x"]=-284512.85714286,},
|
||||
[2]={["y"]=685387.42857143,["x"]=-283662.85714286,},
|
||||
[3]={["y"]=685294.57142857,["x"]=-284977.14285715,},
|
||||
[4]={["y"]=682744.57142857,["x"]=-286505.71428572,},
|
||||
[5]={["y"]=682094.57142857,["x"]=-284527.14285715,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=682638,["x"]=-285202.28571429,},
|
||||
[2]={["y"]=685050.28571429,["x"]=-284507.42857144,},
|
||||
[3]={["y"]=685068.85714286,["x"]=-284578.85714286,},
|
||||
[4]={["y"]=682657.42857143,["x"]=-285264.28571429,},
|
||||
[5]={["y"]=682638.28571429,["x"]=-285202.85714286,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
MaykopKhanskaya = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=456876.28571429,["x"]=-27665.42857143,},
|
||||
[2]={["y"]=457800,["x"]=-28392.857142858,},
|
||||
[3]={["y"]=459368.57142857,["x"]=-26378.571428573,},
|
||||
[4]={["y"]=459425.71428572,["x"]=-25242.857142858,},
|
||||
[5]={["y"]=458961.42857143,["x"]=-24964.285714287,},
|
||||
[6]={["y"]=456878.57142857,["x"]=-27667.714285715,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=457005.42857143,["x"]=-27668.000000001,},
|
||||
[2]={["y"]=459028.85714286,["x"]=-25168.857142858,},
|
||||
[3]={["y"]=459082.57142857,["x"]=-25216.857142858,},
|
||||
[4]={["y"]=457060,["x"]=-27714.285714287,},
|
||||
[5]={["y"]=457004.57142857,["x"]=-27669.714285715,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
MineralnyeVody = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=703857.14285714,["x"]=-50226.000000002,},
|
||||
[2]={["y"]=707385.71428571,["x"]=-51911.714285716,},
|
||||
[3]={["y"]=707595.71428571,["x"]=-51434.857142859,},
|
||||
[4]={["y"]=707900,["x"]=-51568.857142859,},
|
||||
[5]={["y"]=707542.85714286,["x"]=-52326.000000002,},
|
||||
[6]={["y"]=706628.57142857,["x"]=-52568.857142859,},
|
||||
[7]={["y"]=705142.85714286,["x"]=-51790.285714288,},
|
||||
[8]={["y"]=703678.57142857,["x"]=-50611.714285716,},
|
||||
[9]={["y"]=703857.42857143,["x"]=-50226.857142859,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=703904,["x"]=-50352.571428573,},
|
||||
[2]={["y"]=707596.28571429,["x"]=-52094.571428573,},
|
||||
[3]={["y"]=707560.57142858,["x"]=-52161.714285716,},
|
||||
[4]={["y"]=703871.71428572,["x"]=-50420.571428573,},
|
||||
[5]={["y"]=703902,["x"]=-50352.000000002,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Mozdok = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=832123.42857143,["x"]=-83608.571428573,},
|
||||
[2]={["y"]=835916.28571429,["x"]=-83144.285714288,},
|
||||
[3]={["y"]=835474.28571429,["x"]=-84170.571428573,},
|
||||
[4]={["y"]=832911.42857143,["x"]=-84470.571428573,},
|
||||
[5]={["y"]=832487.71428572,["x"]=-85565.714285716,},
|
||||
[6]={["y"]=831573.42857143,["x"]=-85351.42857143,},
|
||||
[7]={["y"]=832123.71428572,["x"]=-83610.285714288,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=832201.14285715,["x"]=-83699.428571431,},
|
||||
[2]={["y"]=832212.57142857,["x"]=-83780.571428574,},
|
||||
[3]={["y"]=835730.28571429,["x"]=-83335.714285717,},
|
||||
[4]={["y"]=835718.85714286,["x"]=-83246.571428574,},
|
||||
[5]={["y"]=832200.57142857,["x"]=-83700.000000002,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Nalchik = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=759370,["x"]=-125502.85714286,},
|
||||
[2]={["y"]=761384.28571429,["x"]=-124177.14285714,},
|
||||
[3]={["y"]=761472.85714286,["x"]=-124325.71428572,},
|
||||
[4]={["y"]=761092.85714286,["x"]=-125048.57142857,},
|
||||
[5]={["y"]=760295.71428572,["x"]=-125685.71428572,},
|
||||
[6]={["y"]=759444.28571429,["x"]=-125734.28571429,},
|
||||
[7]={["y"]=759375.71428572,["x"]=-125511.42857143,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=759454.28571429,["x"]=-125551.42857143,},
|
||||
[2]={["y"]=759492.85714286,["x"]=-125610.85714286,},
|
||||
[3]={["y"]=761406.28571429,["x"]=-124304.28571429,},
|
||||
[4]={["y"]=761361.14285714,["x"]=-124239.71428572,},
|
||||
[5]={["y"]=759456,["x"]=-125552.57142857,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Novorossiysk = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=278677.71428573,["x"]=-41656.571428572,},
|
||||
[2]={["y"]=278446.2857143,["x"]=-41453.714285715,},
|
||||
[3]={["y"]=278989.14285716,["x"]=-40188.000000001,},
|
||||
[4]={["y"]=279717.71428573,["x"]=-39968.000000001,},
|
||||
[5]={["y"]=280020.57142859,["x"]=-40208.000000001,},
|
||||
[6]={["y"]=278674.85714287,["x"]=-41660.857142858,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=278673.14285716,["x"]=-41615.142857144,},
|
||||
[2]={["y"]=278625.42857144,["x"]=-41570.571428572,},
|
||||
[3]={["y"]=279835.42857144,["x"]=-40226.000000001,},
|
||||
[4]={["y"]=279882.2857143,["x"]=-40270.000000001,},
|
||||
[5]={["y"]=278672.00000001,["x"]=-41614.857142858,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
SenakiKolkhi = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=646036.57142857,["x"]=-281778.85714286,},
|
||||
[2]={["y"]=646045.14285714,["x"]=-281191.71428571,},
|
||||
[3]={["y"]=647032.28571429,["x"]=-280598.85714285,},
|
||||
[4]={["y"]=647669.42857143,["x"]=-281273.14285714,},
|
||||
[5]={["y"]=648323.71428571,["x"]=-281370.28571428,},
|
||||
[6]={["y"]=648520.85714286,["x"]=-281978.85714285,},
|
||||
[7]={["y"]=646039.42857143,["x"]=-281783.14285714,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=646060.85714285,["x"]=-281736,},
|
||||
[2]={["y"]=646056.57142857,["x"]=-281631.71428571,},
|
||||
[3]={["y"]=648442.28571428,["x"]=-281840.28571428,},
|
||||
[4]={["y"]=648432.28571428,["x"]=-281918.85714286,},
|
||||
[5]={["y"]=646063.71428571,["x"]=-281738.85714286,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
SochiAdler = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=460642.28571428,["x"]=-164861.71428571,},
|
||||
[2]={["y"]=462820.85714285,["x"]=-163368.85714286,},
|
||||
[3]={["y"]=463649.42857142,["x"]=-163340.28571429,},
|
||||
[4]={["y"]=463835.14285714,["x"]=-164040.28571429,},
|
||||
[5]={["y"]=462535.14285714,["x"]=-165654.57142857,},
|
||||
[6]={["y"]=460678,["x"]=-165247.42857143,},
|
||||
[7]={["y"]=460635.14285714,["x"]=-164876,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=460831.42857143,["x"]=-165180,},
|
||||
[2]={["y"]=460878.57142857,["x"]=-165257.14285714,},
|
||||
[3]={["y"]=463663.71428571,["x"]=-163793.14285714,},
|
||||
[4]={["y"]=463612.28571428,["x"]=-163697.42857143,},
|
||||
[5]={["y"]=460831.42857143,["x"]=-165177.14285714,},
|
||||
},
|
||||
[2] = {
|
||||
[1]={["y"]=460831.42857143,["x"]=-165180,},
|
||||
[2]={["y"]=460878.57142857,["x"]=-165257.14285714,},
|
||||
[3]={["y"]=463663.71428571,["x"]=-163793.14285714,},
|
||||
[4]={["y"]=463612.28571428,["x"]=-163697.42857143,},
|
||||
[5]={["y"]=460831.42857143,["x"]=-165177.14285714,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Soganlug = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=894530.85714286,["x"]=-316928.28571428,},
|
||||
[2]={["y"]=896422.28571428,["x"]=-318622.57142857,},
|
||||
[3]={["y"]=896090.85714286,["x"]=-318934,},
|
||||
[4]={["y"]=894019.42857143,["x"]=-317119.71428571,},
|
||||
[5]={["y"]=894533.71428571,["x"]=-316925.42857143,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=894525.71428571,["x"]=-316964,},
|
||||
[2]={["y"]=896363.14285714,["x"]=-318634.28571428,},
|
||||
[3]={["y"]=896299.14285714,["x"]=-318702.85714286,},
|
||||
[4]={["y"]=894464,["x"]=-317031.71428571,},
|
||||
[5]={["y"]=894524.57142857,["x"]=-316963.71428571,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
SukhumiBabushara = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=562541.14285714,["x"]=-219852.28571429,},
|
||||
[2]={["y"]=562691.14285714,["x"]=-219395.14285714,},
|
||||
[3]={["y"]=564326.85714286,["x"]=-219523.71428571,},
|
||||
[4]={["y"]=566262.57142857,["x"]=-221166.57142857,},
|
||||
[5]={["y"]=566069.71428571,["x"]=-221580.85714286,},
|
||||
[6]={["y"]=562534,["x"]=-219873.71428571,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=562684,["x"]=-219779.71428571,},
|
||||
[2]={["y"]=562717.71428571,["x"]=-219718,},
|
||||
[3]={["y"]=566046.85714286,["x"]=-221376.57142857,},
|
||||
[4]={["y"]=566012.28571428,["x"]=-221446.57142857,},
|
||||
[5]={["y"]=562684.57142857,["x"]=-219782.57142857,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
TbilisiLochini = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=895172.85714286,["x"]=-314667.42857143,},
|
||||
[2]={["y"]=895337.42857143,["x"]=-314143.14285714,},
|
||||
[3]={["y"]=895990.28571429,["x"]=-314036,},
|
||||
[4]={["y"]=897730.28571429,["x"]=-315284.57142857,},
|
||||
[5]={["y"]=897901.71428571,["x"]=-316284.57142857,},
|
||||
[6]={["y"]=897684.57142857,["x"]=-316618.85714286,},
|
||||
[7]={["y"]=895173.14285714,["x"]=-314667.42857143,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=895261.14285715,["x"]=-314652.28571428,},
|
||||
[2]={["y"]=897654.57142857,["x"]=-316523.14285714,},
|
||||
[3]={["y"]=897711.71428571,["x"]=-316450.28571429,},
|
||||
[4]={["y"]=895327.42857143,["x"]=-314568.85714286,},
|
||||
[5]={["y"]=895261.71428572,["x"]=-314656,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
Vaziani = {
|
||||
PointsBoundary = {
|
||||
[1]={["y"]=902122,["x"]=-318163.71428572,},
|
||||
[2]={["y"]=902678.57142857,["x"]=-317594,},
|
||||
[3]={["y"]=903275.71428571,["x"]=-317405.42857143,},
|
||||
[4]={["y"]=903418.57142857,["x"]=-317891.14285714,},
|
||||
[5]={["y"]=904292.85714286,["x"]=-318748.28571429,},
|
||||
[6]={["y"]=904542,["x"]=-319740.85714286,},
|
||||
[7]={["y"]=904042,["x"]=-320166.57142857,},
|
||||
[8]={["y"]=902121.42857143,["x"]=-318164.85714286,},
|
||||
},
|
||||
PointsRunways = {
|
||||
[1] = {
|
||||
[1]={["y"]=902239.14285714,["x"]=-318190.85714286,},
|
||||
[2]={["y"]=904014.28571428,["x"]=-319994.57142857,},
|
||||
[3]={["y"]=904064.85714285,["x"]=-319945.14285715,},
|
||||
[4]={["y"]=902294.57142857,["x"]=-318146,},
|
||||
[5]={["y"]=902247.71428571,["x"]=-318190.85714286,},
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 40,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
--- Creates a new AIRBASEPOLICE_CAUCASUS object.
|
||||
-- @param #AIRBASEPOLICE_CAUCASUS self
|
||||
-- @param SetClient A SET_CLIENT object that will contain the CLIENT objects to be monitored if they follow the rules of the airbase.
|
||||
-- @return #AIRBASEPOLICE_CAUCASUS self
|
||||
function AIRBASEPOLICE_CAUCASUS:New( SetClient )
|
||||
|
||||
-- Inherits from BASE
|
||||
local self = BASE:Inherit( self, AIRBASEPOLICE_BASE:New( SetClient, self.Airbases ) )
|
||||
|
||||
-- -- AnapaVityazevo
|
||||
-- local AnapaVityazevoBoundary = GROUP:FindByName( "AnapaVityazevo Boundary" )
|
||||
-- self.Airbases.AnapaVityazevo.ZoneBoundary = ZONE_POLYGON:New( "AnapaVityazevo Boundary", AnapaVityazevoBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local AnapaVityazevoRunway1 = GROUP:FindByName( "AnapaVityazevo Runway 1" )
|
||||
-- self.Airbases.AnapaVityazevo.ZoneRunways[1] = ZONE_POLYGON:New( "AnapaVityazevo Runway 1", AnapaVityazevoRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Batumi
|
||||
-- local BatumiBoundary = GROUP:FindByName( "Batumi Boundary" )
|
||||
-- self.Airbases.Batumi.ZoneBoundary = ZONE_POLYGON:New( "Batumi Boundary", BatumiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local BatumiRunway1 = GROUP:FindByName( "Batumi Runway 1" )
|
||||
-- self.Airbases.Batumi.ZoneRunways[1] = ZONE_POLYGON:New( "Batumi Runway 1", BatumiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Beslan
|
||||
-- local BeslanBoundary = GROUP:FindByName( "Beslan Boundary" )
|
||||
-- self.Airbases.Beslan.ZoneBoundary = ZONE_POLYGON:New( "Beslan Boundary", BeslanBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local BeslanRunway1 = GROUP:FindByName( "Beslan Runway 1" )
|
||||
-- self.Airbases.Beslan.ZoneRunways[1] = ZONE_POLYGON:New( "Beslan Runway 1", BeslanRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Gelendzhik
|
||||
-- local GelendzhikBoundary = GROUP:FindByName( "Gelendzhik Boundary" )
|
||||
-- self.Airbases.Gelendzhik.ZoneBoundary = ZONE_POLYGON:New( "Gelendzhik Boundary", GelendzhikBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local GelendzhikRunway1 = GROUP:FindByName( "Gelendzhik Runway 1" )
|
||||
-- self.Airbases.Gelendzhik.ZoneRunways[1] = ZONE_POLYGON:New( "Gelendzhik Runway 1", GelendzhikRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Gudauta
|
||||
-- local GudautaBoundary = GROUP:FindByName( "Gudauta Boundary" )
|
||||
-- self.Airbases.Gudauta.ZoneBoundary = ZONE_POLYGON:New( "Gudauta Boundary", GudautaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local GudautaRunway1 = GROUP:FindByName( "Gudauta Runway 1" )
|
||||
-- self.Airbases.Gudauta.ZoneRunways[1] = ZONE_POLYGON:New( "Gudauta Runway 1", GudautaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Kobuleti
|
||||
-- local KobuletiBoundary = GROUP:FindByName( "Kobuleti Boundary" )
|
||||
-- self.Airbases.Kobuleti.ZoneBoundary = ZONE_POLYGON:New( "Kobuleti Boundary", KobuletiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local KobuletiRunway1 = GROUP:FindByName( "Kobuleti Runway 1" )
|
||||
-- self.Airbases.Kobuleti.ZoneRunways[1] = ZONE_POLYGON:New( "Kobuleti Runway 1", KobuletiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- KrasnodarCenter
|
||||
-- local KrasnodarCenterBoundary = GROUP:FindByName( "KrasnodarCenter Boundary" )
|
||||
-- self.Airbases.KrasnodarCenter.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarCenter Boundary", KrasnodarCenterBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local KrasnodarCenterRunway1 = GROUP:FindByName( "KrasnodarCenter Runway 1" )
|
||||
-- self.Airbases.KrasnodarCenter.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarCenter Runway 1", KrasnodarCenterRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- KrasnodarPashkovsky
|
||||
-- local KrasnodarPashkovskyBoundary = GROUP:FindByName( "KrasnodarPashkovsky Boundary" )
|
||||
-- self.Airbases.KrasnodarPashkovsky.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarPashkovsky Boundary", KrasnodarPashkovskyBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local KrasnodarPashkovskyRunway1 = GROUP:FindByName( "KrasnodarPashkovsky Runway 1" )
|
||||
-- self.Airbases.KrasnodarPashkovsky.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 1", KrasnodarPashkovskyRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
-- local KrasnodarPashkovskyRunway2 = GROUP:FindByName( "KrasnodarPashkovsky Runway 2" )
|
||||
-- self.Airbases.KrasnodarPashkovsky.ZoneRunways[2] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 2", KrasnodarPashkovskyRunway2 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Krymsk
|
||||
-- local KrymskBoundary = GROUP:FindByName( "Krymsk Boundary" )
|
||||
-- self.Airbases.Krymsk.ZoneBoundary = ZONE_POLYGON:New( "Krymsk Boundary", KrymskBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local KrymskRunway1 = GROUP:FindByName( "Krymsk Runway 1" )
|
||||
-- self.Airbases.Krymsk.ZoneRunways[1] = ZONE_POLYGON:New( "Krymsk Runway 1", KrymskRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Kutaisi
|
||||
-- local KutaisiBoundary = GROUP:FindByName( "Kutaisi Boundary" )
|
||||
-- self.Airbases.Kutaisi.ZoneBoundary = ZONE_POLYGON:New( "Kutaisi Boundary", KutaisiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local KutaisiRunway1 = GROUP:FindByName( "Kutaisi Runway 1" )
|
||||
-- self.Airbases.Kutaisi.ZoneRunways[1] = ZONE_POLYGON:New( "Kutaisi Runway 1", KutaisiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- MaykopKhanskaya
|
||||
-- local MaykopKhanskayaBoundary = GROUP:FindByName( "MaykopKhanskaya Boundary" )
|
||||
-- self.Airbases.MaykopKhanskaya.ZoneBoundary = ZONE_POLYGON:New( "MaykopKhanskaya Boundary", MaykopKhanskayaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local MaykopKhanskayaRunway1 = GROUP:FindByName( "MaykopKhanskaya Runway 1" )
|
||||
-- self.Airbases.MaykopKhanskaya.ZoneRunways[1] = ZONE_POLYGON:New( "MaykopKhanskaya Runway 1", MaykopKhanskayaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- MineralnyeVody
|
||||
-- local MineralnyeVodyBoundary = GROUP:FindByName( "MineralnyeVody Boundary" )
|
||||
-- self.Airbases.MineralnyeVody.ZoneBoundary = ZONE_POLYGON:New( "MineralnyeVody Boundary", MineralnyeVodyBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local MineralnyeVodyRunway1 = GROUP:FindByName( "MineralnyeVody Runway 1" )
|
||||
-- self.Airbases.MineralnyeVody.ZoneRunways[1] = ZONE_POLYGON:New( "MineralnyeVody Runway 1", MineralnyeVodyRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Mozdok
|
||||
-- local MozdokBoundary = GROUP:FindByName( "Mozdok Boundary" )
|
||||
-- self.Airbases.Mozdok.ZoneBoundary = ZONE_POLYGON:New( "Mozdok Boundary", MozdokBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local MozdokRunway1 = GROUP:FindByName( "Mozdok Runway 1" )
|
||||
-- self.Airbases.Mozdok.ZoneRunways[1] = ZONE_POLYGON:New( "Mozdok Runway 1", MozdokRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Nalchik
|
||||
-- local NalchikBoundary = GROUP:FindByName( "Nalchik Boundary" )
|
||||
-- self.Airbases.Nalchik.ZoneBoundary = ZONE_POLYGON:New( "Nalchik Boundary", NalchikBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local NalchikRunway1 = GROUP:FindByName( "Nalchik Runway 1" )
|
||||
-- self.Airbases.Nalchik.ZoneRunways[1] = ZONE_POLYGON:New( "Nalchik Runway 1", NalchikRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Novorossiysk
|
||||
-- local NovorossiyskBoundary = GROUP:FindByName( "Novorossiysk Boundary" )
|
||||
-- self.Airbases.Novorossiysk.ZoneBoundary = ZONE_POLYGON:New( "Novorossiysk Boundary", NovorossiyskBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local NovorossiyskRunway1 = GROUP:FindByName( "Novorossiysk Runway 1" )
|
||||
-- self.Airbases.Novorossiysk.ZoneRunways[1] = ZONE_POLYGON:New( "Novorossiysk Runway 1", NovorossiyskRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- SenakiKolkhi
|
||||
-- local SenakiKolkhiBoundary = GROUP:FindByName( "SenakiKolkhi Boundary" )
|
||||
-- self.Airbases.SenakiKolkhi.ZoneBoundary = ZONE_POLYGON:New( "SenakiKolkhi Boundary", SenakiKolkhiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local SenakiKolkhiRunway1 = GROUP:FindByName( "SenakiKolkhi Runway 1" )
|
||||
-- self.Airbases.SenakiKolkhi.ZoneRunways[1] = ZONE_POLYGON:New( "SenakiKolkhi Runway 1", SenakiKolkhiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- SochiAdler
|
||||
-- local SochiAdlerBoundary = GROUP:FindByName( "SochiAdler Boundary" )
|
||||
-- self.Airbases.SochiAdler.ZoneBoundary = ZONE_POLYGON:New( "SochiAdler Boundary", SochiAdlerBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local SochiAdlerRunway1 = GROUP:FindByName( "SochiAdler Runway 1" )
|
||||
-- self.Airbases.SochiAdler.ZoneRunways[1] = ZONE_POLYGON:New( "SochiAdler Runway 1", SochiAdlerRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
-- local SochiAdlerRunway2 = GROUP:FindByName( "SochiAdler Runway 2" )
|
||||
-- self.Airbases.SochiAdler.ZoneRunways[2] = ZONE_POLYGON:New( "SochiAdler Runway 2", SochiAdlerRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Soganlug
|
||||
-- local SoganlugBoundary = GROUP:FindByName( "Soganlug Boundary" )
|
||||
-- self.Airbases.Soganlug.ZoneBoundary = ZONE_POLYGON:New( "Soganlug Boundary", SoganlugBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local SoganlugRunway1 = GROUP:FindByName( "Soganlug Runway 1" )
|
||||
-- self.Airbases.Soganlug.ZoneRunways[1] = ZONE_POLYGON:New( "Soganlug Runway 1", SoganlugRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- SukhumiBabushara
|
||||
-- local SukhumiBabusharaBoundary = GROUP:FindByName( "SukhumiBabushara Boundary" )
|
||||
-- self.Airbases.SukhumiBabushara.ZoneBoundary = ZONE_POLYGON:New( "SukhumiBabushara Boundary", SukhumiBabusharaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local SukhumiBabusharaRunway1 = GROUP:FindByName( "SukhumiBabushara Runway 1" )
|
||||
-- self.Airbases.SukhumiBabushara.ZoneRunways[1] = ZONE_POLYGON:New( "SukhumiBabushara Runway 1", SukhumiBabusharaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- TbilisiLochini
|
||||
-- local TbilisiLochiniBoundary = GROUP:FindByName( "TbilisiLochini Boundary" )
|
||||
-- self.Airbases.TbilisiLochini.ZoneBoundary = ZONE_POLYGON:New( "TbilisiLochini Boundary", TbilisiLochiniBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local TbilisiLochiniRunway1 = GROUP:FindByName( "TbilisiLochini Runway 1" )
|
||||
-- self.Airbases.TbilisiLochini.ZoneRunways[1] = ZONE_POLYGON:New( "TbilisiLochini Runway 1", TbilisiLochiniRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
-- -- Vaziani
|
||||
-- local VazianiBoundary = GROUP:FindByName( "Vaziani Boundary" )
|
||||
-- self.Airbases.Vaziani.ZoneBoundary = ZONE_POLYGON:New( "Vaziani Boundary", VazianiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local VazianiRunway1 = GROUP:FindByName( "Vaziani Runway 1" )
|
||||
-- self.Airbases.Vaziani.ZoneRunways[1] = ZONE_POLYGON:New( "Vaziani Runway 1", VazianiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
--
|
||||
--
|
||||
--
|
||||
|
||||
|
||||
-- -- Template
|
||||
-- local TemplateBoundary = GROUP:FindByName( "Template Boundary" )
|
||||
-- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush()
|
||||
--
|
||||
-- local TemplateRunway1 = GROUP:FindByName( "Template Runway 1" )
|
||||
-- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush()
|
||||
|
||||
return self
|
||||
|
||||
end
|
||||
|
||||
|
||||
@ -333,6 +333,7 @@ function BASE:SetState( Object, StateName, State )
|
||||
end
|
||||
|
||||
self.States[ClassNameAndID][StateName] = State
|
||||
self:E( { "SetState " .. ClassNameAndID .. "." .. StateName, State } )
|
||||
|
||||
return self.States[ClassNameAndID][StateName]
|
||||
end
|
||||
@ -341,6 +342,7 @@ function BASE:GetState( Object, StateName )
|
||||
|
||||
local ClassNameAndID = Object:GetClassNameAndID()
|
||||
if self.States[ClassNameAndID] then
|
||||
self:E( { " GetState " .. ClassNameAndID .. "." .. StateName, self.States[ClassNameAndID][StateName] } )
|
||||
return self.States[ClassNameAndID][StateName]
|
||||
end
|
||||
|
||||
|
||||
@ -127,7 +127,7 @@ function CARGO_ZONE:ReportCargosToClient( Client, CargoType )
|
||||
HostMessage = "No Cargo Available."
|
||||
end
|
||||
|
||||
Client:Message( HostMessage, 20, Mission.Name .. "/StageHosts." .. SignalUnitTypeName, SignalUnitTypeName .. ": Reporting Cargo", 10 )
|
||||
Client:Message( HostMessage, 20, SignalUnitTypeName .. ": Reporting Cargo", 10 )
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -173,7 +173,7 @@ function CLIENT:ShowBriefing()
|
||||
Briefing = Briefing .. self.ClientBriefing
|
||||
end
|
||||
Briefing = Briefing .. " Press [LEFT ALT]+[B] to view the complete mission briefing."
|
||||
self:Message( Briefing, 60, self.ClientName .. '/ClientBriefing', "Briefing" )
|
||||
self:Message( Briefing, 60, "Briefing" )
|
||||
end
|
||||
|
||||
return self
|
||||
@ -187,7 +187,7 @@ function CLIENT:ShowMissionBriefing( MissionBriefing )
|
||||
self:F( { self.ClientName } )
|
||||
|
||||
if MissionBriefing then
|
||||
self:Message( MissionBriefing, 60, self.ClientName .. '/MissionBriefing', "Mission Briefing" )
|
||||
self:Message( MissionBriefing, 60, "Mission Briefing" )
|
||||
end
|
||||
|
||||
return self
|
||||
@ -420,7 +420,7 @@ function CLIENT:ShowCargo()
|
||||
CargoMsg = "empty"
|
||||
end
|
||||
|
||||
self:Message( CargoMsg, 15, self.ClientName .. "/Cargo", "Co-Pilot: Cargo Status", 30 )
|
||||
self:Message( CargoMsg, 15, "Co-Pilot: Cargo Status", 30 )
|
||||
|
||||
end
|
||||
|
||||
@ -435,11 +435,11 @@ end
|
||||
-- @param #CLIENT self
|
||||
-- @param #string Message is the text describing the message.
|
||||
-- @param #number MessageDuration is the duration in seconds that the Message should be displayed.
|
||||
-- @param #string MessageId is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId
|
||||
-- @param #string MessageCategory is the category of the message (the title).
|
||||
-- @param #number MessageInterval is the interval in seconds between the display of the @{Message#MESSAGE} when the CLIENT is in the air.
|
||||
function CLIENT:Message( Message, MessageDuration, MessageId, MessageCategory, MessageInterval )
|
||||
self:F( { Message, MessageDuration, MessageId, MessageCategory, MessageInterval } )
|
||||
-- @param #string MessageID is the identifier of the message when displayed with intervals.
|
||||
function CLIENT:Message( Message, MessageDuration, MessageCategory, MessageInterval, MessageID )
|
||||
self:F( { Message, MessageDuration, MessageCategory, MessageInterval } )
|
||||
|
||||
if not self.MenuMessages then
|
||||
if self:GetClientGroupID() then
|
||||
@ -453,29 +453,33 @@ function CLIENT:Message( Message, MessageDuration, MessageId, MessageCategory, M
|
||||
if MessageCategory == nil then
|
||||
MessageCategory = "Messages"
|
||||
end
|
||||
if self.Messages[MessageId] == nil then
|
||||
self.Messages[MessageId] = {}
|
||||
self.Messages[MessageId].MessageId = MessageId
|
||||
self.Messages[MessageId].MessageTime = timer.getTime()
|
||||
self.Messages[MessageId].MessageDuration = MessageDuration
|
||||
if MessageInterval == nil then
|
||||
self.Messages[MessageId].MessageInterval = 600
|
||||
else
|
||||
self.Messages[MessageId].MessageInterval = MessageInterval
|
||||
end
|
||||
MESSAGE:New( Message, MessageDuration, MessageCategory ):ToClient( self )
|
||||
if MessageID ~= nil then
|
||||
if self.Messages[MessageID] == nil then
|
||||
self.Messages[MessageID] = {}
|
||||
self.Messages[MessageID].MessageId = MessageID
|
||||
self.Messages[MessageID].MessageTime = timer.getTime()
|
||||
self.Messages[MessageID].MessageDuration = MessageDuration
|
||||
if MessageInterval == nil then
|
||||
self.Messages[MessageID].MessageInterval = 600
|
||||
else
|
||||
self.Messages[MessageID].MessageInterval = MessageInterval
|
||||
end
|
||||
MESSAGE:New( Message, MessageDuration, MessageCategory ):ToClient( self )
|
||||
else
|
||||
if self:GetClientGroupDCSUnit() and not self:GetClientGroupDCSUnit():inAir() then
|
||||
if timer.getTime() - self.Messages[MessageID].MessageTime >= self.Messages[MessageID].MessageDuration + 10 then
|
||||
MESSAGE:New( Message, MessageDuration , MessageCategory):ToClient( self )
|
||||
self.Messages[MessageID].MessageTime = timer.getTime()
|
||||
end
|
||||
else
|
||||
if timer.getTime() - self.Messages[MessageID].MessageTime >= self.Messages[MessageID].MessageDuration + self.Messages[MessageID].MessageInterval then
|
||||
MESSAGE:New( Message, MessageDuration, MessageCategory ):ToClient( self )
|
||||
self.Messages[MessageID].MessageTime = timer.getTime()
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if self:GetClientGroupDCSUnit() and not self:GetClientGroupDCSUnit():inAir() then
|
||||
if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + 10 then
|
||||
MESSAGE:New( Message, MessageDuration , MessageCategory):ToClient( self )
|
||||
self.Messages[MessageId].MessageTime = timer.getTime()
|
||||
end
|
||||
else
|
||||
if timer.getTime() - self.Messages[MessageId].MessageTime >= self.Messages[MessageId].MessageDuration + self.Messages[MessageId].MessageInterval then
|
||||
MESSAGE:New( Message, MessageDuration, MessageCategory ):ToClient( self )
|
||||
self.Messages[MessageId].MessageTime = timer.getTime()
|
||||
end
|
||||
end
|
||||
end
|
||||
MESSAGE:New( Message, MessageDuration, MessageCategory ):ToClient( self )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -82,11 +82,11 @@ MISSILETRAINER = {
|
||||
function MISSILETRAINER._Alive( Client, self )
|
||||
|
||||
if self.Briefing then
|
||||
Client:Message( self.Briefing, 15, "HELLO WORLD", "Trainer" )
|
||||
Client:Message( self.Briefing, 15, "Trainer" )
|
||||
end
|
||||
|
||||
if self.MenusOnOff == true then
|
||||
Client:Message( "Use the 'Radio Menu' -> 'Other (F10)' -> 'Missile Trainer' menu options to change the Missile Trainer settings (for all players).", 15, "MENU", "Trainer" )
|
||||
Client:Message( "Use the 'Radio Menu' -> 'Other (F10)' -> 'Missile Trainer' menu options to change the Missile Trainer settings (for all players).", 15, "Trainer" )
|
||||
|
||||
Client.MainMenu = MENU_CLIENT:New( Client, "Missile Trainer", nil ) -- Menu#MENU_CLIENT
|
||||
|
||||
|
||||
@ -137,7 +137,7 @@ function MISSION:StatusToClients()
|
||||
self:F()
|
||||
if self.MissionReportFlash then
|
||||
for ClientID, Client in pairs( self._Clients ) do
|
||||
Client:Message( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. '! ( ' .. self.MissionPriority .. ' mission ) ', 10, self.Name .. '/Status', "Mission Command: Mission Status")
|
||||
Client:Message( self.MissionCoalition .. ' "' .. self.Name .. '": ' .. self.MissionStatus .. '! ( ' .. self.MissionPriority .. ' mission ) ', 10, "Mission Command: Mission Status")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -113,9 +113,9 @@ function STAGESTART:Execute( Mission, Client, Task )
|
||||
self:F()
|
||||
local Valid = BASE:Inherited(self):Execute( Mission, Client, Task )
|
||||
if Task.TaskBriefing then
|
||||
Client:Message( Task.TaskBriefing, 30, Mission.Name .. "/Stage", "Command" )
|
||||
Client:Message( Task.TaskBriefing, 30, "Command" )
|
||||
else
|
||||
Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, Mission.Name .. "/Stage", "Command" )
|
||||
Client:Message( 'Task ' .. Task.TaskNumber .. '.', 30, "Command" )
|
||||
end
|
||||
self.StageStartTime = timer.getTime()
|
||||
return Valid
|
||||
@ -242,9 +242,9 @@ function STAGEROUTE:Execute( Mission, Client, Task )
|
||||
end
|
||||
|
||||
if Client:IsMultiSeated() then
|
||||
Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Co-Pilot", 20 )
|
||||
Client:Message( RouteMessage, self.MSG.TIME, "Co-Pilot", 20, "Route" )
|
||||
else
|
||||
Client:Message( RouteMessage, self.MSG.TIME, Mission.Name .. "/StageRoute", "Command", 20 )
|
||||
Client:Message( RouteMessage, self.MSG.TIME, "Command", 20, "Route" )
|
||||
end
|
||||
|
||||
|
||||
@ -307,9 +307,9 @@ function STAGELANDING:Execute( Mission, Client, Task )
|
||||
self:F()
|
||||
|
||||
if Client:IsMultiSeated() then
|
||||
Client:Message( "We have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Co-Pilot", 10 )
|
||||
Client:Message( "We have arrived at the landing zone.", self.MSG.TIME, "Co-Pilot" )
|
||||
else
|
||||
Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, Mission.Name .. "/StageArrived", "Command", 10 )
|
||||
Client:Message( "You have arrived at the landing zone.", self.MSG.TIME, "Command" )
|
||||
end
|
||||
|
||||
Task.HostUnit = Task.CurrentCargoZone:GetHostUnit()
|
||||
@ -363,7 +363,7 @@ function STAGELANDING:Execute( Mission, Client, Task )
|
||||
end
|
||||
end
|
||||
|
||||
Client:Message( HostMessage, self.MSG.TIME, Mission.Name .. "/STAGELANDING.EXEC." .. Host, Host, 10 )
|
||||
Client:Message( HostMessage, self.MSG.TIME, Host )
|
||||
|
||||
end
|
||||
end
|
||||
@ -453,7 +453,7 @@ function STAGELANDED:Execute( Mission, Client, Task )
|
||||
end
|
||||
|
||||
Client:Message( 'You have landed within the landing zone. Use the radio menu (F10) to ' .. Task.TEXT[1] .. ' the ' .. Task.CargoType .. '.',
|
||||
self.MSG.TIME, Mission.Name .. "/STAGELANDED.EXEC" .. Host, Host )
|
||||
self.MSG.TIME, Host )
|
||||
|
||||
if not self.MenusAdded then
|
||||
Task.Cargo = nil
|
||||
@ -532,10 +532,10 @@ function STAGEUNLOAD:Execute( Mission, Client, Task )
|
||||
|
||||
if Client:IsMultiSeated() then
|
||||
Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.',
|
||||
self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Co-Pilot" )
|
||||
"Co-Pilot" )
|
||||
else
|
||||
Client:Message( 'You are unloading the ' .. Task.CargoType .. ' ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.',
|
||||
self.MSG.TIME, Mission.Name .. "/StageUnLoad", "Command" )
|
||||
"Command" )
|
||||
end
|
||||
Task:RemoveCargoMenus( Client )
|
||||
end
|
||||
@ -575,10 +575,10 @@ function STAGEUNLOAD:Validate( Mission, Client, Task )
|
||||
Task:RemoveCargoMenus( Client )
|
||||
if Client:IsMultiSeated() then
|
||||
Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.',
|
||||
_TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" )
|
||||
_TransportStageMsgTime.DONE, "Co-Pilot" )
|
||||
else
|
||||
Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.',
|
||||
_TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" )
|
||||
_TransportStageMsgTime.DONE, "Command" )
|
||||
end
|
||||
return 1
|
||||
end
|
||||
@ -589,19 +589,19 @@ function STAGEUNLOAD:Validate( Mission, Client, Task )
|
||||
Task:RemoveCargoMenus( Client )
|
||||
if Client:IsMultiSeated() then
|
||||
Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.',
|
||||
_TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Co-Pilot" )
|
||||
_TransportStageMsgTime.DONE, "Co-Pilot" )
|
||||
else
|
||||
Client:Message( 'The ' .. Task.CargoType .. " haven't been successfully " .. Task.TEXT[3] .. ' within the landing zone. Task and mission has failed.',
|
||||
_TransportStageMsgTime.DONE, Mission.Name .. "/StageFailure", "Command" )
|
||||
_TransportStageMsgTime.DONE, "Command" )
|
||||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then
|
||||
if Client:IsMultiSeated() then
|
||||
Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Co-Pilot" )
|
||||
Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, "Co-Pilot" )
|
||||
else
|
||||
Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, Mission.Name .. "/Stage", "Command" )
|
||||
Client:Message( 'The ' .. Task.CargoType .. ' have been sucessfully ' .. Task.TEXT[3] .. ' within the landing zone.', _TransportStageMsgTime.DONE, "Command" )
|
||||
end
|
||||
Task:RemoveCargoMenus( Client )
|
||||
Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 ) -- We set the cargo as one more goal completed in the mission.
|
||||
@ -639,7 +639,7 @@ function STAGELOAD:Execute( Mission, Client, Task )
|
||||
end
|
||||
|
||||
Client:Message( 'The ' .. Task.CargoType .. ' are being ' .. Task.TEXT[2] .. ' within the landing zone. Wait until the helicopter is ' .. Task.TEXT[3] .. '.',
|
||||
_TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.EXEC." .. Host, Host )
|
||||
_TransportStageMsgTime.EXECUTING, Host )
|
||||
|
||||
-- Route the cargo to the Carrier
|
||||
|
||||
@ -674,14 +674,14 @@ function STAGELOAD:Executing( Mission, Client, Task )
|
||||
|
||||
-- Message to the pilot that cargo has been loaded.
|
||||
Client:Message( "The cargo " .. Task.Cargo.CargoName .. " has been loaded in our helicopter.",
|
||||
20, Mission.Name .. "/STAGELANDING.LOADING1." .. Host, Host )
|
||||
20, Host )
|
||||
Task.ExecuteStage = _TransportExecuteStage.SUCCESS
|
||||
|
||||
Client:ShowCargo()
|
||||
end
|
||||
else
|
||||
Client:Message( "Hook the " .. Task.CargoNames .. " onto the helicopter " .. Task.TEXT[3] .. " within the landing zone.",
|
||||
_TransportStageMsgTime.EXECUTING, Mission.Name .. "/STAGELOAD.LOADING.1." .. Host, Host , 10 )
|
||||
_TransportStageMsgTime.EXECUTING, Host )
|
||||
for CargoID, Cargo in pairs( CARGOS ) do
|
||||
self:T( "Cargo.CargoName = " .. Cargo.CargoName )
|
||||
|
||||
@ -697,7 +697,7 @@ function STAGELOAD:Executing( Mission, Client, Task )
|
||||
Cargo:StatusLoaded()
|
||||
Task.Cargo = Cargo
|
||||
Client:Message( 'The Cargo has been successfully hooked onto the helicopter and is now being sling loaded. Fly outside the landing zone.',
|
||||
self.MSG.TIME, Mission.Name .. "/STAGELANDING.LOADING.2." .. Host, Host )
|
||||
self.MSG.TIME, Host )
|
||||
Task.ExecuteStage = _TransportExecuteStage.SUCCESS
|
||||
break
|
||||
end
|
||||
@ -730,7 +730,7 @@ function STAGELOAD:Validate( Mission, Client, Task )
|
||||
Task.ExecuteStage = _TransportExecuteStage.FAILED
|
||||
Task.CargoName = nil
|
||||
Client:Message( "The " .. Task.CargoType .. " loading has been aborted. You flew outside the pick-up zone while loading. ",
|
||||
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host )
|
||||
self.MSG.TIME, Host )
|
||||
self:T( -1 )
|
||||
return -1
|
||||
end
|
||||
@ -748,7 +748,7 @@ function STAGELOAD:Validate( Mission, Client, Task )
|
||||
Task.ExecuteStage = _TransportExecuteStage.FAILED
|
||||
Task.CargoName = nil
|
||||
Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.",
|
||||
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host )
|
||||
self.MSG.TIME, Host )
|
||||
self:T( -1 )
|
||||
return -1
|
||||
end
|
||||
@ -759,7 +759,7 @@ function STAGELOAD:Validate( Mission, Client, Task )
|
||||
Task.ExecuteStage = _TransportExecuteStage.FAILED
|
||||
Task.CargoName = nil
|
||||
Client:Message( "The " .. Task.CargoType .. " loading has been aborted. Re-start the " .. Task.TEXT[3] .. " process. Don't fly outside the pick-up zone.",
|
||||
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.1." .. Host, Host )
|
||||
self.MSG.TIME, Host )
|
||||
self:T( -1 )
|
||||
return -1
|
||||
end
|
||||
@ -767,7 +767,7 @@ function STAGELOAD:Validate( Mission, Client, Task )
|
||||
if Task.ExecuteStage == _TransportExecuteStage.SUCCESS then
|
||||
Task:RemoveCargoMenus( Client )
|
||||
Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " within the landing zone.",
|
||||
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.3." .. Host, Host )
|
||||
self.MSG.TIME, Host )
|
||||
Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.CargoName, 1 )
|
||||
self:T( 1 )
|
||||
return 1
|
||||
@ -778,7 +778,7 @@ function STAGELOAD:Validate( Mission, Client, Task )
|
||||
CargoStatic = StaticObject.getByName( Task.Cargo.CargoStaticName )
|
||||
if CargoStatic and not routines.IsStaticInZones( CargoStatic, Task.CurrentLandingZoneName ) then
|
||||
Client:Message( "Good Job. The " .. Task.CargoType .. " has been sucessfully " .. Task.TEXT[3] .. " and flown outside of the landing zone.",
|
||||
self.MSG.TIME, Mission.Name .. "/STAGELANDING.VALIDATE.4." .. Host, Host )
|
||||
self.MSG.TIME, Host )
|
||||
Task.MissionTask:AddGoalCompletion( Task.MissionTask.GoalVerb, Task.Cargo.CargoName, 1 )
|
||||
self:T( 1 )
|
||||
return 1
|
||||
@ -842,9 +842,9 @@ function STAGEARRIVE:Execute( Mission, Client, Task )
|
||||
self:F()
|
||||
|
||||
if Client:IsMultiSeated() then
|
||||
Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Co-Pilot" )
|
||||
Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, "Co-Pilot" )
|
||||
else
|
||||
Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, Mission.Name .. "/Stage", "Command" )
|
||||
Client:Message( 'We have arrived at ' .. Task.CurrentLandingZoneName .. ".", self.MSG.TIME, "Command" )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -131,7 +131,7 @@ function TASK:ShowGoalProgress( Mission, Client )
|
||||
end
|
||||
|
||||
if Mission.MissionReportFlash or Mission.MissionReportShow then
|
||||
Client:Message( GoalsText, 10, "/TASKPROGRESS" .. self.ClassName, "Mission Command: Task Status", 30 )
|
||||
Client:Message( GoalsText, 10, "Mission Command: Task Status", 30, "Task status" )
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -633,10 +633,14 @@ end
|
||||
function UNIT:IsInZone( Zone )
|
||||
self:F2( { self.UnitName, Zone } )
|
||||
|
||||
local IsInZone = Zone:IsPointVec3InZone( self:GetPointVec3() )
|
||||
if self:IsAlive() then
|
||||
local IsInZone = Zone:IsPointVec3InZone( self:GetPointVec3() )
|
||||
|
||||
self:T( { IsInZone } )
|
||||
return IsInZone
|
||||
self:T( { IsInZone } )
|
||||
return IsInZone
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
--- Returns true if the unit is not within a @{Zone}.
|
||||
@ -646,10 +650,14 @@ end
|
||||
function UNIT:IsNotInZone( Zone )
|
||||
self:F2( { self.UnitName, Zone } )
|
||||
|
||||
local IsInZone = not Zone:IsPointVec3InZone( self:GetPointVec3() )
|
||||
|
||||
self:T( { IsInZone } )
|
||||
return IsInZone
|
||||
if self:IsAlive() then
|
||||
local IsInZone = not Zone:IsPointVec3InZone( self:GetPointVec3() )
|
||||
|
||||
self:T( { IsInZone } )
|
||||
return IsInZone
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
--- Returns true if the DCS Unit is in the air.
|
||||
|
||||
@ -71,6 +71,7 @@
|
||||
|
||||
--- The ZONE_BASE class
|
||||
-- @type ZONE_BASE
|
||||
-- @field #string ZoneName Name of the zone.
|
||||
-- @extends Base#BASE
|
||||
ZONE_BASE = {
|
||||
ClassName = "ZONE_BASE",
|
||||
@ -380,43 +381,60 @@ function ZONE_UNIT:GetPointVec2()
|
||||
return ZonePointVec2
|
||||
end
|
||||
|
||||
-- Polygons
|
||||
|
||||
--- The ZONE_POLYGON class defined by a sequence of @{Group#GROUP} waypoints within the Mission Editor, forming a polygon.
|
||||
-- @type ZONE_POLYGON
|
||||
--- The ZONE_POLYGON_BASE class defined by an array of @{DCSTypes#Vec2}, forming a polygon.
|
||||
-- @type ZONE_POLYGON_BASE
|
||||
-- @field #ZONE_POLYGON_BASE.ListVec2 Polygon The polygon defined by an array of @{DCSTypes#Vec2}.
|
||||
-- @extends Zone#ZONE_BASE
|
||||
ZONE_POLYGON = {
|
||||
ClassName="ZONE_POLYGON",
|
||||
ZONE_POLYGON_BASE = {
|
||||
ClassName="ZONE_POLYGON_BASE",
|
||||
}
|
||||
|
||||
--- Constructor to create a ZONE_POLYGON instance, taking the zone name and the name of the @{Group#GROUP} defined within the Mission Editor.
|
||||
-- The @{Group#GROUP} waypoints define the polygon corners. The first and the last point are automatically connected by ZONE_POLYGON.
|
||||
-- @param #ZONE_POLYGON self
|
||||
-- @param #string ZoneName Name of the zone.
|
||||
-- @param Group#GROUP ZoneGroup The GROUP waypoints as defined within the Mission Editor define the polygon shape.
|
||||
-- @return #ZONE_POLYGON self
|
||||
function ZONE_POLYGON:New( ZoneName, ZoneGroup )
|
||||
local self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) )
|
||||
self:F( { ZoneName, ZoneGroup } )
|
||||
--- A points array.
|
||||
-- @type ZONE_POLYGON_BASE.ListVec2
|
||||
-- @list <DCSTypes#Vec2>
|
||||
|
||||
--- Constructor to create a ZONE_POLYGON_BASE instance, taking the zone name and an array of @{DCSTypes#Vec2}, forming a polygon.
|
||||
-- The @{Group#GROUP} waypoints define the polygon corners. The first and the last point are automatically connected.
|
||||
-- @param #ZONE_POLYGON_BASE self
|
||||
-- @param #string ZoneName Name of the zone.
|
||||
-- @param #ZONE_POLYGON_BASE.ListVec2 PointsArray An array of @{DCSTypes#Vec2}, forming a polygon..
|
||||
-- @return #ZONE_POLYGON_BASE self
|
||||
function ZONE_POLYGON_BASE:New( ZoneName, PointsArray )
|
||||
local self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) )
|
||||
self:F( { ZoneName, PointsArray } )
|
||||
|
||||
local GroupPoints = ZoneGroup:GetTaskRoute()
|
||||
local i = 0
|
||||
|
||||
self.Polygon = {}
|
||||
|
||||
for i = 1, #GroupPoints do
|
||||
for i = 1, #PointsArray do
|
||||
self.Polygon[i] = {}
|
||||
self.Polygon[i].x = GroupPoints[i].x
|
||||
self.Polygon[i].y = GroupPoints[i].y
|
||||
self.Polygon[i].x = PointsArray[i].x
|
||||
self.Polygon[i].y = PointsArray[i].y
|
||||
end
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- Flush polygon coordinates as a table in DCS.log.
|
||||
-- @param #ZONE_POLYGON_BASE self
|
||||
-- @return #ZONE_POLYGON_BASE self
|
||||
function ZONE_POLYGON_BASE:Flush()
|
||||
self:F2()
|
||||
|
||||
self:E( { Polygon = self.ZoneName, Coordinates = self.Polygon } )
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
--- Smokes the zone boundaries in a color.
|
||||
-- @param #ZONE_POLYGON self
|
||||
-- @param #ZONE_POLYGON_BASE self
|
||||
-- @param #POINT_VEC3.SmokeColor SmokeColor The smoke color.
|
||||
-- @return #ZONE_POLYGON self
|
||||
function ZONE_POLYGON:SmokeZone( SmokeColor )
|
||||
-- @return #ZONE_POLYGON_BASE self
|
||||
function ZONE_POLYGON_BASE:SmokeZone( SmokeColor )
|
||||
self:F2( SmokeColor )
|
||||
|
||||
local i
|
||||
@ -448,10 +466,10 @@ end
|
||||
|
||||
|
||||
--- Returns if a location is within the zone.
|
||||
-- @param #ZONE_POLYGON self
|
||||
-- @param #ZONE_POLYGON_BASE self
|
||||
-- @param DCSTypes#Vec2 PointVec2 The location to test.
|
||||
-- @return #boolean true if the location is within the zone.
|
||||
function ZONE_POLYGON:IsPointVec2InZone( PointVec2 )
|
||||
function ZONE_POLYGON_BASE:IsPointVec2InZone( PointVec2 )
|
||||
self:F2( PointVec2 )
|
||||
|
||||
local i
|
||||
@ -477,3 +495,29 @@ function ZONE_POLYGON:IsPointVec2InZone( PointVec2 )
|
||||
return c
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--- The ZONE_POLYGON class defined by a sequence of @{Group#GROUP} waypoints within the Mission Editor, forming a polygon.
|
||||
-- @type ZONE_POLYGON
|
||||
-- @extends Zone#ZONE_POLYGON_BASE
|
||||
ZONE_POLYGON = {
|
||||
ClassName="ZONE_POLYGON",
|
||||
}
|
||||
|
||||
--- Constructor to create a ZONE_POLYGON instance, taking the zone name and the name of the @{Group#GROUP} defined within the Mission Editor.
|
||||
-- The @{Group#GROUP} waypoints define the polygon corners. The first and the last point are automatically connected by ZONE_POLYGON.
|
||||
-- @param #ZONE_POLYGON self
|
||||
-- @param #string ZoneName Name of the zone.
|
||||
-- @param Group#GROUP ZoneGroup The GROUP waypoints as defined within the Mission Editor define the polygon shape.
|
||||
-- @return #ZONE_POLYGON self
|
||||
function ZONE_POLYGON:New( ZoneName, ZoneGroup )
|
||||
|
||||
local GroupPoints = ZoneGroup:GetTaskRoute()
|
||||
|
||||
local self = BASE:Inherit( self, ZONE_POLYGON_BASE:New( ZoneName, GroupPoints ) )
|
||||
self:F( { ZoneName, ZoneGroup, self.Polygon } )
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -1,6 +1,3 @@
|
||||
|
||||
local PlanesClientSet = SET_CLIENT:New():FilterCategories( "plane" ):FilterStart()
|
||||
local AirbasePolice = AIRBASEPOLICE:New( PlanesClientSet )
|
||||
|
||||
local PolygonBatumiTaxiwaysGroup1 = GROUP:FindByName( "Polygon Batumi Taxiways" )
|
||||
local PolygonBatumiTaxi = ZONE_POLYGON:New( "Batumi Taxi", PolygonBatumiTaxiwaysGroup1 ):SmokeZone(POINT_VEC3.SmokeColor.White)
|
||||
local AirbasePolice = AIRBASEPOLICE_CAUCASUS:New( PlanesClientSet )
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user