mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Merge pull request #74 from FlightControl-Master/Airbase-Guard
First release of Alpha version of Airbase Polic class
This commit is contained in:
commit
75277bd249
@ -17,4 +17,10 @@
|
||||
-- @param #Vec2 point point on the ground.
|
||||
-- @return DCSTypes#Distance
|
||||
|
||||
--- returns surface type at the given point.
|
||||
-- @function [parent=#land] getSurfaceType
|
||||
-- @param #Vec2 point Point on the land.
|
||||
-- @return #land.SurfaceType
|
||||
|
||||
|
||||
land = {} --#land
|
||||
925
Moose Development/Moose/AirbasePolice.lua
Normal file
925
Moose Development/Moose/AirbasePolice.lua
Normal file
@ -0,0 +1,925 @@
|
||||
--- 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_BASE
|
||||
-- @field Set#SET_CLIENT SetClient
|
||||
-- @extends Base#BASE
|
||||
|
||||
AIRBASEPOLICE_BASE = {
|
||||
ClassName = "AIRBASEPOLICE_BASE",
|
||||
SetClient = nil,
|
||||
Airbases = nil,
|
||||
AirbaseNames = nil,
|
||||
}
|
||||
|
||||
|
||||
--- 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.
|
||||
-- @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:E( { self.ClassName, SetClient, Airbases } )
|
||||
|
||||
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, 2, 0.05 )
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
--- @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 > Airbase.MaximumSpeed 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
|
||||
|
||||
else
|
||||
Client:SetState( self, "Speeding", false )
|
||||
Client:SetState( self, "Warnings", 0 )
|
||||
end
|
||||
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
|
||||
|
||||
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] = {
|
||||
},
|
||||
},
|
||||
ZoneBoundary = {},
|
||||
ZoneRunways = {},
|
||||
MaximumSpeed = 50,
|
||||
},
|
||||
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"]=616442.28571429,["x"]=-355090.28571429,},
|
||||
[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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
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 = 50,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
--- 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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -167,7 +167,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
|
||||
@ -181,7 +181,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
|
||||
@ -415,7 +415,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
|
||||
|
||||
@ -430,11 +430,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
|
||||
@ -448,29 +448,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
|
||||
|
||||
@ -36,6 +36,7 @@ Include.File( "Sead" )
|
||||
Include.File( "Escort" )
|
||||
Include.File( "MissileTrainer" )
|
||||
Include.File( "AIBalancer" )
|
||||
Include.File( "AirbasePolice" )
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
--- Models time events calling event handing functions.
|
||||
--- This module contains the SCHEDULER class.
|
||||
--
|
||||
-- @{SCHEDULER} class
|
||||
-- ===================
|
||||
-- The @{SCHEDULER} class models time events calling given event handling functions.
|
||||
-- 1) @{Scheduler#SCHEDULER} class, extends @{Base#BASE}
|
||||
-- =====================================================
|
||||
-- The @{Scheduler#SCHEDULER} class models time events calling given event handling functions.
|
||||
--
|
||||
-- SCHEDULER constructor
|
||||
-- =====================
|
||||
-- 1.1) SCHEDULER constructor
|
||||
-- --------------------------
|
||||
-- The SCHEDULER class is quite easy to use:
|
||||
--
|
||||
-- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters.
|
||||
-- * @{Scheduler#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters.
|
||||
--
|
||||
-- SCHEDULER timer methods
|
||||
-- =======================
|
||||
-- SCHEDULER timer stop and start
|
||||
-- ------------------------------
|
||||
-- The SCHEDULER can be stopped and restarted with the following methods:
|
||||
--
|
||||
-- * @{#SCHEDULER.Start}: (Re-)Start the scheduler.
|
||||
-- * @{#SCHEDULER.Start}: Stop the scheduler.
|
||||
-- * @{Scheduler#SCHEDULER.Start}: (Re-)Start the scheduler.
|
||||
-- * @{Scheduler#SCHEDULER.Stop}: Stop the scheduler.
|
||||
--
|
||||
-- @module Scheduler
|
||||
-- @author FlightControl
|
||||
@ -93,7 +93,9 @@ function SCHEDULER:Stop()
|
||||
self:F2( self.TimeEventObject )
|
||||
|
||||
self.Repeat = false
|
||||
timer.removeFunction( self.ScheduleID )
|
||||
if self.ScheduleID then
|
||||
timer.removeFunction( self.ScheduleID )
|
||||
end
|
||||
self.ScheduleID = nil
|
||||
|
||||
return self
|
||||
|
||||
@ -1464,14 +1464,14 @@ end
|
||||
-- @param Zone#ZONE ZoneObject The Zone to be tested for.
|
||||
-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the SET_CLIENT. The function needs to accept a CLIENT parameter.
|
||||
-- @return #SET_CLIENT self
|
||||
function SET_CLIENT:ForEachClientCompletelyInZone( ZoneObject, IteratorFunction, ... )
|
||||
function SET_CLIENT:ForEachClientInZone( ZoneObject, IteratorFunction, ... )
|
||||
self:F2( arg )
|
||||
|
||||
self:ForEach( IteratorFunction, arg, self.Set,
|
||||
--- @param Zone#ZONE_BASE ZoneObject
|
||||
-- @param Client#CLIENT ClientObject
|
||||
function( ZoneObject, ClientObject )
|
||||
if ClientObject:IsCompletelyInZone( ZoneObject ) then
|
||||
if ClientObject:IsInZone( ZoneObject ) then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -256,6 +256,30 @@ function UNIT:IsActive()
|
||||
return nil
|
||||
end
|
||||
|
||||
--- Returns if the unit is located above a runway.
|
||||
-- @param Unit#UNIT self
|
||||
-- @return #boolean true if Unit is above a runway.
|
||||
-- @return #nil The DCS Unit is not existing or alive.
|
||||
function UNIT:IsAboveRunway()
|
||||
self:F2( self.UnitName )
|
||||
|
||||
local DCSUnit = self:GetDCSUnit()
|
||||
|
||||
if DCSUnit then
|
||||
|
||||
local PointVec2 = self:GetPointVec2()
|
||||
local SurfaceType = land.getSurfaceType( PointVec2 )
|
||||
local IsAboveRunway = SurfaceType == land.SurfaceType.RUNWAY
|
||||
|
||||
self:T2( IsAboveRunway )
|
||||
return IsAboveRunway
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
|
||||
--- Returns name of the player that control the unit or nil if the unit is controlled by A.I.
|
||||
-- @param Unit#UNIT self
|
||||
-- @return #string Player Name
|
||||
@ -324,7 +348,7 @@ function UNIT:GetGroup()
|
||||
local DCSUnit = self:GetDCSUnit()
|
||||
|
||||
if DCSUnit then
|
||||
local UnitGroup = DCSUnit:getGroup()
|
||||
local UnitGroup = GROUP:Find( DCSUnit:getGroup() )
|
||||
return UnitGroup
|
||||
end
|
||||
|
||||
@ -609,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}.
|
||||
@ -622,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
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
|
||||
env.info( 'Moose Generation Timestamp: 20160615_0552' )
|
||||
env.info( 'Moose Generation Timestamp: 20160615_0641' )
|
||||
local base = _G
|
||||
|
||||
Include = {}
|
||||
@ -3138,24 +3138,24 @@ end
|
||||
|
||||
|
||||
|
||||
--- Models time events calling event handing functions.
|
||||
--- This module contains the SCHEDULER class.
|
||||
--
|
||||
-- @{SCHEDULER} class
|
||||
-- ===================
|
||||
-- The @{SCHEDULER} class models time events calling given event handling functions.
|
||||
-- 1) @{Scheduler#SCHEDULER} class, extends @{Base#BASE}
|
||||
-- =====================================================
|
||||
-- The @{Scheduler#SCHEDULER} class models time events calling given event handling functions.
|
||||
--
|
||||
-- SCHEDULER constructor
|
||||
-- =====================
|
||||
-- 1.1) SCHEDULER constructor
|
||||
-- --------------------------
|
||||
-- The SCHEDULER class is quite easy to use:
|
||||
--
|
||||
-- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters.
|
||||
-- * @{Scheduler#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters.
|
||||
--
|
||||
-- SCHEDULER timer methods
|
||||
-- =======================
|
||||
-- SCHEDULER timer stop and start
|
||||
-- ------------------------------
|
||||
-- The SCHEDULER can be stopped and restarted with the following methods:
|
||||
--
|
||||
-- * @{#SCHEDULER.Start}: (Re-)Start the scheduler.
|
||||
-- * @{#SCHEDULER.Start}: Stop the scheduler.
|
||||
-- * @{Scheduler#SCHEDULER.Start}: (Re-)Start the scheduler.
|
||||
-- * @{Scheduler#SCHEDULER.Stop}: Stop the scheduler.
|
||||
--
|
||||
-- @module Scheduler
|
||||
-- @author FlightControl
|
||||
@ -3233,7 +3233,9 @@ function SCHEDULER:Stop()
|
||||
self:F2( self.TimeEventObject )
|
||||
|
||||
self.Repeat = false
|
||||
timer.removeFunction( self.ScheduleID )
|
||||
if self.ScheduleID then
|
||||
timer.removeFunction( self.ScheduleID )
|
||||
end
|
||||
self.ScheduleID = nil
|
||||
|
||||
return self
|
||||
@ -7176,6 +7178,30 @@ function UNIT:IsActive()
|
||||
return nil
|
||||
end
|
||||
|
||||
--- Returns if the unit is located above a runway.
|
||||
-- @param Unit#UNIT self
|
||||
-- @return #boolean true if Unit is above a runway.
|
||||
-- @return #nil The DCS Unit is not existing or alive.
|
||||
function UNIT:IsAboveRunway()
|
||||
self:F2( self.UnitName )
|
||||
|
||||
local DCSUnit = self:GetDCSUnit()
|
||||
|
||||
if DCSUnit then
|
||||
|
||||
local PointVec2 = self:GetPointVec2()
|
||||
local SurfaceType = land.getSurfaceType( PointVec2 )
|
||||
local IsAboveRunway = SurfaceType == land.SurfaceType.RUNWAY
|
||||
|
||||
self:T2( IsAboveRunway )
|
||||
return IsAboveRunway
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
|
||||
--- Returns name of the player that control the unit or nil if the unit is controlled by A.I.
|
||||
-- @param Unit#UNIT self
|
||||
-- @return #string Player Name
|
||||
@ -7244,7 +7270,7 @@ function UNIT:GetGroup()
|
||||
local DCSUnit = self:GetDCSUnit()
|
||||
|
||||
if DCSUnit then
|
||||
local UnitGroup = DCSUnit:getGroup()
|
||||
local UnitGroup = GROUP:Find( DCSUnit:getGroup() )
|
||||
return UnitGroup
|
||||
end
|
||||
|
||||
@ -7529,10 +7555,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}.
|
||||
@ -7542,10 +7572,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.
|
||||
@ -7792,6 +7826,7 @@ end
|
||||
|
||||
--- The ZONE_BASE class
|
||||
-- @type ZONE_BASE
|
||||
-- @field #string ZoneName Name of the zone.
|
||||
-- @extends Base#BASE
|
||||
ZONE_BASE = {
|
||||
ClassName = "ZONE_BASE",
|
||||
@ -8101,43 +8136,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
|
||||
@ -8169,10 +8221,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
|
||||
@ -8198,6 +8250,32 @@ 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
|
||||
|
||||
--- This module contains the CLIENT class.
|
||||
--
|
||||
-- 1) @{Client#CLIENT} class, extends @{Unit#UNIT}
|
||||
@ -8367,7 +8445,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
|
||||
@ -8381,7 +8459,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
|
||||
@ -8615,7 +8693,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
|
||||
|
||||
@ -8630,11 +8708,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
|
||||
@ -8648,30 +8726,34 @@ 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
|
||||
--- This module contains the STATIC class.
|
||||
@ -10937,14 +11019,14 @@ end
|
||||
-- @param Zone#ZONE ZoneObject The Zone to be tested for.
|
||||
-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the SET_CLIENT. The function needs to accept a CLIENT parameter.
|
||||
-- @return #SET_CLIENT self
|
||||
function SET_CLIENT:ForEachClientCompletelyInZone( ZoneObject, IteratorFunction, ... )
|
||||
function SET_CLIENT:ForEachClientInZone( ZoneObject, IteratorFunction, ... )
|
||||
self:F2( arg )
|
||||
|
||||
self:ForEach( IteratorFunction, arg, self.Set,
|
||||
--- @param Zone#ZONE_BASE ZoneObject
|
||||
-- @param Client#CLIENT ClientObject
|
||||
function( ZoneObject, ClientObject )
|
||||
if ClientObject:IsCompletelyInZone( ZoneObject ) then
|
||||
if ClientObject:IsInZone( ZoneObject ) then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
@ -11285,6 +11367,7 @@ Include.File( "Sead" )
|
||||
Include.File( "Escort" )
|
||||
Include.File( "MissileTrainer" )
|
||||
Include.File( "AIBalancer" )
|
||||
Include.File( "AirbasePolice" )
|
||||
|
||||
|
||||
|
||||
@ -12258,7 +12341,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
|
||||
|
||||
@ -13585,9 +13668,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
|
||||
@ -13714,9 +13797,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
|
||||
|
||||
|
||||
@ -13779,9 +13862,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()
|
||||
@ -13835,7 +13918,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
|
||||
@ -13925,7 +14008,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
|
||||
@ -14004,10 +14087,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
|
||||
@ -14047,10 +14130,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
|
||||
@ -14061,19 +14144,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.
|
||||
@ -14111,7 +14194,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
|
||||
|
||||
@ -14146,14 +14229,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 )
|
||||
|
||||
@ -14169,7 +14252,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
|
||||
@ -14202,7 +14285,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
|
||||
@ -14220,7 +14303,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
|
||||
@ -14231,7 +14314,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
|
||||
@ -14239,7 +14322,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
|
||||
@ -14250,7 +14333,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
|
||||
@ -14314,9 +14397,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
|
||||
@ -14570,7 +14653,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
|
||||
|
||||
@ -15682,7 +15765,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
|
||||
@ -19446,11 +19529,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
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
env.info( '*** MOOSE STATIC INCLUDE START *** ' )
|
||||
env.info( 'Moose Generation Timestamp: 20160615_0552' )
|
||||
env.info( 'Moose Generation Timestamp: 20160615_0641' )
|
||||
local base = _G
|
||||
|
||||
Include = {}
|
||||
@ -3138,24 +3138,24 @@ end
|
||||
|
||||
|
||||
|
||||
--- Models time events calling event handing functions.
|
||||
--- This module contains the SCHEDULER class.
|
||||
--
|
||||
-- @{SCHEDULER} class
|
||||
-- ===================
|
||||
-- The @{SCHEDULER} class models time events calling given event handling functions.
|
||||
-- 1) @{Scheduler#SCHEDULER} class, extends @{Base#BASE}
|
||||
-- =====================================================
|
||||
-- The @{Scheduler#SCHEDULER} class models time events calling given event handling functions.
|
||||
--
|
||||
-- SCHEDULER constructor
|
||||
-- =====================
|
||||
-- 1.1) SCHEDULER constructor
|
||||
-- --------------------------
|
||||
-- The SCHEDULER class is quite easy to use:
|
||||
--
|
||||
-- * @{#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters.
|
||||
-- * @{Scheduler#SCHEDULER.New}: Setup a new scheduler and start it with the specified parameters.
|
||||
--
|
||||
-- SCHEDULER timer methods
|
||||
-- =======================
|
||||
-- SCHEDULER timer stop and start
|
||||
-- ------------------------------
|
||||
-- The SCHEDULER can be stopped and restarted with the following methods:
|
||||
--
|
||||
-- * @{#SCHEDULER.Start}: (Re-)Start the scheduler.
|
||||
-- * @{#SCHEDULER.Start}: Stop the scheduler.
|
||||
-- * @{Scheduler#SCHEDULER.Start}: (Re-)Start the scheduler.
|
||||
-- * @{Scheduler#SCHEDULER.Stop}: Stop the scheduler.
|
||||
--
|
||||
-- @module Scheduler
|
||||
-- @author FlightControl
|
||||
@ -3233,7 +3233,9 @@ function SCHEDULER:Stop()
|
||||
self:F2( self.TimeEventObject )
|
||||
|
||||
self.Repeat = false
|
||||
timer.removeFunction( self.ScheduleID )
|
||||
if self.ScheduleID then
|
||||
timer.removeFunction( self.ScheduleID )
|
||||
end
|
||||
self.ScheduleID = nil
|
||||
|
||||
return self
|
||||
@ -7176,6 +7178,30 @@ function UNIT:IsActive()
|
||||
return nil
|
||||
end
|
||||
|
||||
--- Returns if the unit is located above a runway.
|
||||
-- @param Unit#UNIT self
|
||||
-- @return #boolean true if Unit is above a runway.
|
||||
-- @return #nil The DCS Unit is not existing or alive.
|
||||
function UNIT:IsAboveRunway()
|
||||
self:F2( self.UnitName )
|
||||
|
||||
local DCSUnit = self:GetDCSUnit()
|
||||
|
||||
if DCSUnit then
|
||||
|
||||
local PointVec2 = self:GetPointVec2()
|
||||
local SurfaceType = land.getSurfaceType( PointVec2 )
|
||||
local IsAboveRunway = SurfaceType == land.SurfaceType.RUNWAY
|
||||
|
||||
self:T2( IsAboveRunway )
|
||||
return IsAboveRunway
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
|
||||
--- Returns name of the player that control the unit or nil if the unit is controlled by A.I.
|
||||
-- @param Unit#UNIT self
|
||||
-- @return #string Player Name
|
||||
@ -7244,7 +7270,7 @@ function UNIT:GetGroup()
|
||||
local DCSUnit = self:GetDCSUnit()
|
||||
|
||||
if DCSUnit then
|
||||
local UnitGroup = DCSUnit:getGroup()
|
||||
local UnitGroup = GROUP:Find( DCSUnit:getGroup() )
|
||||
return UnitGroup
|
||||
end
|
||||
|
||||
@ -7529,10 +7555,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}.
|
||||
@ -7542,10 +7572,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.
|
||||
@ -7792,6 +7826,7 @@ end
|
||||
|
||||
--- The ZONE_BASE class
|
||||
-- @type ZONE_BASE
|
||||
-- @field #string ZoneName Name of the zone.
|
||||
-- @extends Base#BASE
|
||||
ZONE_BASE = {
|
||||
ClassName = "ZONE_BASE",
|
||||
@ -8101,43 +8136,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
|
||||
@ -8169,10 +8221,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
|
||||
@ -8198,6 +8250,32 @@ 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
|
||||
|
||||
--- This module contains the CLIENT class.
|
||||
--
|
||||
-- 1) @{Client#CLIENT} class, extends @{Unit#UNIT}
|
||||
@ -8367,7 +8445,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
|
||||
@ -8381,7 +8459,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
|
||||
@ -8615,7 +8693,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
|
||||
|
||||
@ -8630,11 +8708,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
|
||||
@ -8648,30 +8726,34 @@ 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
|
||||
--- This module contains the STATIC class.
|
||||
@ -10937,14 +11019,14 @@ end
|
||||
-- @param Zone#ZONE ZoneObject The Zone to be tested for.
|
||||
-- @param #function IteratorFunction The function that will be called when there is an alive CLIENT in the SET_CLIENT. The function needs to accept a CLIENT parameter.
|
||||
-- @return #SET_CLIENT self
|
||||
function SET_CLIENT:ForEachClientCompletelyInZone( ZoneObject, IteratorFunction, ... )
|
||||
function SET_CLIENT:ForEachClientInZone( ZoneObject, IteratorFunction, ... )
|
||||
self:F2( arg )
|
||||
|
||||
self:ForEach( IteratorFunction, arg, self.Set,
|
||||
--- @param Zone#ZONE_BASE ZoneObject
|
||||
-- @param Client#CLIENT ClientObject
|
||||
function( ZoneObject, ClientObject )
|
||||
if ClientObject:IsCompletelyInZone( ZoneObject ) then
|
||||
if ClientObject:IsInZone( ZoneObject ) then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
@ -11285,6 +11367,7 @@ Include.File( "Sead" )
|
||||
Include.File( "Escort" )
|
||||
Include.File( "MissileTrainer" )
|
||||
Include.File( "AIBalancer" )
|
||||
Include.File( "AirbasePolice" )
|
||||
|
||||
|
||||
|
||||
@ -12258,7 +12341,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
|
||||
|
||||
@ -13585,9 +13668,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
|
||||
@ -13714,9 +13797,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
|
||||
|
||||
|
||||
@ -13779,9 +13862,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()
|
||||
@ -13835,7 +13918,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
|
||||
@ -13925,7 +14008,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
|
||||
@ -14004,10 +14087,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
|
||||
@ -14047,10 +14130,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
|
||||
@ -14061,19 +14144,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.
|
||||
@ -14111,7 +14194,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
|
||||
|
||||
@ -14146,14 +14229,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 )
|
||||
|
||||
@ -14169,7 +14252,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
|
||||
@ -14202,7 +14285,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
|
||||
@ -14220,7 +14303,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
|
||||
@ -14231,7 +14314,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
|
||||
@ -14239,7 +14322,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
|
||||
@ -14250,7 +14333,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
|
||||
@ -14314,9 +14397,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
|
||||
@ -14570,7 +14653,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
|
||||
|
||||
@ -15682,7 +15765,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
|
||||
@ -19446,11 +19529,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
|
||||
|
||||
|
||||
@ -32,8 +32,8 @@ GOTO End
|
||||
ECHO Static Moose.lua
|
||||
|
||||
REM Create a timestamp with is logged in the DCS.log file.
|
||||
ECHO env.info( '*** MOOSE STATIC INCLUDE START *** ' ) > Moose.lua
|
||||
ECHO env.info( 'Moose Generation Timestamp: %2' ) >> Moose.lua
|
||||
ECHO env.info( '*** MOOSE STATIC INCLUDE START *** ' ) > Moose.lua
|
||||
ECHO env.info( 'Moose Generation Timestamp: %2' ) >> Moose.lua
|
||||
|
||||
COPY /b Moose.lua + "Moose Create Static\Moose_Static_Loader.lua" Moose.lua
|
||||
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,3 @@
|
||||
|
||||
local PlanesClientSet = SET_CLIENT:New():FilterCategories( "plane" ):FilterStart()
|
||||
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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li>AIBalancer</li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li>Airbase</li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
246
Moose Training/Documentation/AirbasePolice.html
Normal file
246
Moose Training/Documentation/AirbasePolice.html
Normal file
@ -0,0 +1,246 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="stylesheet.css" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="product">
|
||||
<div id="product_logo"></div>
|
||||
<div id="product_name"><big><b></b></big></div>
|
||||
<div id="product_description"></div>
|
||||
</div>
|
||||
<div id="main">
|
||||
<div id="navigation">
|
||||
<h2>Modules</h2>
|
||||
<ul><li>
|
||||
<a href="index.html">index</a>
|
||||
</li></ul>
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li>AirbasePolice</li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
<li><a href="Client.html">Client</a></li>
|
||||
<li><a href="DCSAirbase.html">DCSAirbase</a></li>
|
||||
<li><a href="DCSCoalitionObject.html">DCSCoalitionObject</a></li>
|
||||
<li><a href="DCSCommand.html">DCSCommand</a></li>
|
||||
<li><a href="DCSController.html">DCSController</a></li>
|
||||
<li><a href="DCSGroup.html">DCSGroup</a></li>
|
||||
<li><a href="DCSObject.html">DCSObject</a></li>
|
||||
<li><a href="DCSTask.html">DCSTask</a></li>
|
||||
<li><a href="DCSTypes.html">DCSTypes</a></li>
|
||||
<li><a href="DCSUnit.html">DCSUnit</a></li>
|
||||
<li><a href="DCSWorld.html">DCSWorld</a></li>
|
||||
<li><a href="DCStimer.html">DCStimer</a></li>
|
||||
<li><a href="DEPLOYTASK.html">DEPLOYTASK</a></li>
|
||||
<li><a href="DESTROYBASETASK.html">DESTROYBASETASK</a></li>
|
||||
<li><a href="DESTROYGROUPSTASK.html">DESTROYGROUPSTASK</a></li>
|
||||
<li><a href="DESTROYRADARSTASK.html">DESTROYRADARSTASK</a></li>
|
||||
<li><a href="DESTROYUNITTYPESTASK.html">DESTROYUNITTYPESTASK</a></li>
|
||||
<li><a href="Database.html">Database</a></li>
|
||||
<li><a href="Escort.html">Escort</a></li>
|
||||
<li><a href="Event.html">Event</a></li>
|
||||
<li><a href="GOHOMETASK.html">GOHOMETASK</a></li>
|
||||
<li><a href="Group.html">Group</a></li>
|
||||
<li><a href="MOVEMENT.html">MOVEMENT</a></li>
|
||||
<li><a href="Menu.html">Menu</a></li>
|
||||
<li><a href="Message.html">Message</a></li>
|
||||
<li><a href="MissileTrainer.html">MissileTrainer</a></li>
|
||||
<li><a href="Mission.html">Mission</a></li>
|
||||
<li><a href="NOTASK.html">NOTASK</a></li>
|
||||
<li><a href="PICKUPTASK.html">PICKUPTASK</a></li>
|
||||
<li><a href="Point.html">Point</a></li>
|
||||
<li><a href="ROUTETASK.html">ROUTETASK</a></li>
|
||||
<li><a href="STAGE.html">STAGE</a></li>
|
||||
<li><a href="Scheduler.html">Scheduler</a></li>
|
||||
<li><a href="Scoring.html">Scoring</a></li>
|
||||
<li><a href="Sead.html">Sead</a></li>
|
||||
<li><a href="Set.html">Set</a></li>
|
||||
<li><a href="Spawn.html">Spawn</a></li>
|
||||
<li><a href="Static.html">Static</a></li>
|
||||
<li><a href="StaticObject.html">StaticObject</a></li>
|
||||
<li><a href="TASK.html">TASK</a></li>
|
||||
<li><a href="Unit.html">Unit</a></li>
|
||||
<li><a href="Zone.html">Zone</a></li>
|
||||
<li><a href="env.html">env</a></li>
|
||||
<li><a href="land.html">land</a></li>
|
||||
<li><a href="routines.html">routines</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="content">
|
||||
<h1>Module <code>AirbasePolice</code></h1>
|
||||
|
||||
<p>This module contains the AIRBASEPOLICE classes.</p>
|
||||
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
<h1>1) <a href="AirbasePolice.html##(AIRBASEPOLICE_BASE)">AirbasePolice#AIRBASEPOLICE_BASE</a> class, extends <a href="Base.html##(BASE)">Base#BASE</a></h1>
|
||||
<p>The <a href="AirbasePolice.html##(AIRBASEPOLICE_BASE)">AirbasePolice#AIRBASEPOLICE_BASE</a> class provides the main methods to monitor CLIENT behaviour at airbases.
|
||||
CLIENTS should not be allowed to:</p>
|
||||
|
||||
<ul>
|
||||
<li>Don't taxi faster than 40 km/h.</li>
|
||||
<li>Don't take-off on taxiways.</li>
|
||||
<li>Avoid to hit other planes on the airbase.</li>
|
||||
<li>Obey ground control orders.</li>
|
||||
</ul>
|
||||
|
||||
<h1>2) <a href="AirbasePolice.html##(AIRBASEPOLICE_CAUCASUS)">AirbasePolice#AIRBASEPOLICE_CAUCASUS</a> class, extends <a href="AirbasePolice.html##(AIRBASEPOLICE_BASE)">AirbasePolice#AIRBASEPOLICE_BASE</a></h1>
|
||||
<p>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 <a href="##(AIRBASEPOLICE_BASE).Monitor">AIRBASEPOLICE_BASE.Monitor</a>() 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
|
||||
</p>
|
||||
|
||||
<h2>Global(s)</h2>
|
||||
<table class="function_list">
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="#AIRBASEPOLICE_BASE">AIRBASEPOLICE_BASE</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="#AIRBASEPOLICE_CAUCASUS">AIRBASEPOLICE_CAUCASUS</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h2><a id="#(AIRBASEPOLICE_BASE)">Type <code>AIRBASEPOLICE_BASE</code></a></h2>
|
||||
<table class="function_list">
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AIRBASEPOLICE_BASE).AirbaseNames">AIRBASEPOLICE_BASE.AirbaseNames</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AIRBASEPOLICE_BASE).SetClient">AIRBASEPOLICE_BASE.SetClient</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2><a id="#(AIRBASEPOLICE_CAUCASUS)">Type <code>AIRBASEPOLICE_CAUCASUS</code></a></h2>
|
||||
<table class="function_list">
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AIRBASEPOLICE_CAUCASUS).SetClient">AIRBASEPOLICE_CAUCASUS.SetClient</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2>Global(s)</h2>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="AIRBASEPOLICE_BASE" >
|
||||
<strong>AIRBASEPOLICE_BASE</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="AIRBASEPOLICE_CAUCASUS" >
|
||||
<strong>AIRBASEPOLICE_CAUCASUS</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<h2><a id="#(AirbasePolice)" >Type <code>AirbasePolice</code></a></h2>
|
||||
|
||||
<h2><a id="#(AIRBASEPOLICE_BASE)" >Type <code>AIRBASEPOLICE_BASE</code></a></h2>
|
||||
<h3>Field(s)</h3>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(AIRBASEPOLICE_BASE).AirbaseNames" >
|
||||
<strong>AIRBASEPOLICE_BASE.AirbaseNames</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="Set.html##(SET_CLIENT)">Set#SET_CLIENT</a></em>
|
||||
<a id="#(AIRBASEPOLICE_BASE).SetClient" >
|
||||
<strong>AIRBASEPOLICE_BASE.SetClient</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="#(AIRBASEPOLICE_BASE.AirbaseNames)" >Type <code>AIRBASEPOLICE_BASE.AirbaseNames</code></a></h2>
|
||||
|
||||
<h2><a id="#(AIRBASEPOLICE_CAUCASUS)" >Type <code>AIRBASEPOLICE_CAUCASUS</code></a></h2>
|
||||
<h3>Field(s)</h3>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="Set.html##(SET_CLIENT)">Set#SET_CLIENT</a></em>
|
||||
<a id="#(AIRBASEPOLICE_CAUCASUS).SetClient" >
|
||||
<strong>AIRBASEPOLICE_CAUCASUS.SetClient</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li>Base</li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -72,37 +73,40 @@
|
||||
<div id="content">
|
||||
<h1>Module <code>Base</code></h1>
|
||||
|
||||
<p>BASE classes.</p>
|
||||
<p>This module contains the BASE class.</p>
|
||||
|
||||
|
||||
|
||||
<h1><a href="##(BASE)">#BASE</a> class</h1>
|
||||
<p>The <a href="##(BASE)">#BASE</a> class is the super class for most of the classes defined within MOOSE.</p>
|
||||
<h1>1) <a href="##(BASE)">#BASE</a> class</h1>
|
||||
<p>The <a href="##(BASE)">#BASE</a> class is the super class for all the classes defined within MOOSE.</p>
|
||||
|
||||
<p>It handles:</p>
|
||||
|
||||
<ul>
|
||||
<li>The construction and inheritance of child classes.</li>
|
||||
<li>The tracing of objects during mission execution within the DCS.log file (under saved games folder).</li>
|
||||
<li>The tracing of objects during mission execution within the <strong>DCS.log</strong> file, under the <strong>"Saved Games\DCS\Logs"</strong> folder.</li>
|
||||
</ul>
|
||||
|
||||
<p>Note: Normally you would not use the BASE class unless you are extending the MOOSE framework with new classes.</p>
|
||||
|
||||
<h1>BASE Trace functionality</h1>
|
||||
<h2>1.1) BASE constructor</h2>
|
||||
<p>Any class derived from BASE, must use the <a href="Base.html##(BASE).New">Base#BASE.New</a> method how this is done.</p>
|
||||
|
||||
<h2>1.2) BASE Trace functionality</h2>
|
||||
<p>The BASE class contains trace methods to trace progress within a mission execution of a certain object.
|
||||
Note that these trace methods are inherited by each MOOSE class interiting BASE.
|
||||
As such, each object created from derived class from BASE can use the tracing functions to trace its execution.</p>
|
||||
|
||||
<h2>Trace a function call</h2>
|
||||
<h2>1.2.1) Tracing functions</h2>
|
||||
<p>There are basically 3 types of tracing methods available within BASE:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="##(BASE).F">BASE.F</a>: Trace the beginning of a function and its given parameters.</li>
|
||||
<li><a href="##(BASE).T">BASE.T</a>: Trace further logic within a function giving optional variables or parameters.</li>
|
||||
<li><a href="##(BASE).E">BASE.E</a>: Trace an execption within a function giving optional variables or parameters. An exception will always be traced.</li>
|
||||
<li><a href="##(BASE).F">BASE.F</a>: Trace the beginning of a function and its given parameters. An F is indicated at column 44 in the DCS.log file.</li>
|
||||
<li><a href="##(BASE).T">BASE.T</a>: Trace further logic within a function giving optional variables or parameters. A T is indicated at column 44 in the DCS.log file.</li>
|
||||
<li><a href="##(BASE).E">BASE.E</a>: Trace an exception within a function giving optional variables or parameters. An E is indicated at column 44 in the DCS.log file. An exception will always be traced.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Tracing levels</h2>
|
||||
<h2>1.2.2) Tracing levels</h2>
|
||||
<p>There are 3 tracing levels within MOOSE. <br/>
|
||||
These tracing levels were defined to avoid bulks of tracing to be generated by lots of objects.</p>
|
||||
|
||||
@ -115,7 +119,7 @@ These tracing levels were defined to avoid bulks of tracing to be generated by l
|
||||
<li><a href="##(BASE).T3">BASE.T3</a>: Trace further logic within a function giving optional variables or parameters with tracing level 3.</li>
|
||||
</ul>
|
||||
|
||||
<h1>BASE Inheritance support</h1>
|
||||
<h1>1.3) BASE Inheritance support</h1>
|
||||
<p>The following methods are available to support inheritance:</p>
|
||||
|
||||
<ul>
|
||||
@ -162,6 +166,12 @@ These tracing levels were defined to avoid bulks of tracing to be generated by l
|
||||
<td class="name" nowrap="nowrap"><a href="##(BASE).ClassName">BASE.ClassName</a></td>
|
||||
<td class="summary">
|
||||
<p>The name of the class.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(BASE).ClassNameAndID">BASE.ClassNameAndID</a></td>
|
||||
<td class="summary">
|
||||
<p>The name of the class concatenated with the ID number of the class.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -213,7 +223,7 @@ These tracing levels were defined to avoid bulks of tracing to be generated by l
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(BASE).F">BASE:F(Arguments, DebugInfoCurrentParam, DebugInfoFromParam)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(BASE).F">BASE:F(Arguments)</a></td>
|
||||
<td class="summary">
|
||||
<p>Trace a function call.</p>
|
||||
</td>
|
||||
@ -324,6 +334,20 @@ These tracing levels were defined to avoid bulks of tracing to be generated by l
|
||||
<td class="name" nowrap="nowrap"><a href="##(BASE).TraceLevel">BASE:TraceLevel(Level)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set trace level</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(BASE).TraceOnOff">BASE.TraceOnOff(BASE, TraceOnOff, self)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set trace on or off
|
||||
Note that when trace is off, no debug statement is performed, increasing performance!
|
||||
When Moose is loaded statically, (as one file), tracing is switched off by default.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(BASE)._F">BASE:_F(Arguments, DebugInfoCurrentParam, DebugInfoFromParam)</a></td>
|
||||
<td class="summary">
|
||||
<p>Trace a function call.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -446,6 +470,19 @@ These tracing levels were defined to avoid bulks of tracing to be generated by l
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(BASE).ClassNameAndID" >
|
||||
<strong>BASE.ClassNameAndID</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>The name of the class concatenated with the ID number of the class.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(BASE).ClearState" >
|
||||
<strong>BASE:ClearState(Object, StateName)</strong>
|
||||
</a>
|
||||
@ -638,7 +675,7 @@ A #table or any field.</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(BASE).F" >
|
||||
<strong>BASE:F(Arguments, DebugInfoCurrentParam, DebugInfoFromParam)</strong>
|
||||
<strong>BASE:F(Arguments)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -648,23 +685,13 @@ A #table or any field.</p>
|
||||
|
||||
<p>Must be at the beginning of the function logic.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> Arguments </em></code>:
|
||||
A #table or any field.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> DebugInfoCurrentParam </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> DebugInfoFromParam </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
@ -883,14 +910,16 @@ Any new class needs to be derived from this class for proper inheritance.</p>
|
||||
The new instance of the BASE class.</p>
|
||||
|
||||
<h3>Usage:</h3>
|
||||
<pre class="example"><code>function TASK:New()
|
||||
<pre class="example"><code>-- This declares the constructor of the class TASK, inheriting from BASE.
|
||||
--- TASK constructor
|
||||
-- @param #TASK self
|
||||
-- @param Parameter The parameter of the New constructor.
|
||||
-- @return #TASK self
|
||||
function TASK:New( Parameter )
|
||||
|
||||
local self = BASE:Inherit( self, BASE:New() )
|
||||
|
||||
-- assign Task default values during construction
|
||||
self.TaskBriefing = "Task: No Task."
|
||||
self.Time = timer.getTime()
|
||||
self.ExecuteStage = _TransportExecuteStage.NONE
|
||||
|
||||
self.Variable = Parameter
|
||||
|
||||
return self
|
||||
end</code></pre>
|
||||
@ -1110,6 +1139,87 @@ true = trace all methods in MOOSE.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(BASE).TraceOnOff" >
|
||||
<strong>BASE.TraceOnOff(BASE, TraceOnOff, self)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Set trace on or off
|
||||
Note that when trace is off, no debug statement is performed, increasing performance!
|
||||
When Moose is loaded statically, (as one file), tracing is switched off by default.</p>
|
||||
|
||||
|
||||
<p>So tracing must be switched on manually in your mission if you are using Moose statically.
|
||||
When moose is loading dynamically (for moose class development), tracing is switched on by default.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> BASE </em></code>:
|
||||
self</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#boolean TraceOnOff </em></code>:
|
||||
Switch the tracing on or off.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> self </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Usage:</h3>
|
||||
<pre class="example"><code>-- Switch the tracing On
|
||||
BASE:TraceOn( true )
|
||||
|
||||
-- Switch the tracing Off
|
||||
BASE:TraceOn( false )</code></pre>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(BASE)._F" >
|
||||
<strong>BASE:_F(Arguments, DebugInfoCurrentParam, DebugInfoFromParam)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Trace a function call.</p>
|
||||
|
||||
|
||||
<p>This function is private.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> Arguments </em></code>:
|
||||
A #table or any field.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> DebugInfoCurrentParam </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> DebugInfoFromParam </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(BASE)._T" >
|
||||
<strong>BASE:_T(Arguments, DebugInfoCurrentParam, DebugInfoFromParam)</strong>
|
||||
</a>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li>CARGO</li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li>CleanUp</li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -281,7 +282,7 @@ If the DCS Unit object does not exist or is nil, the CLIENT methods will return
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(CLIENT).Message">CLIENT:Message(Message, MessageDuration, MessageId, MessageCategory, MessageInterval)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(CLIENT).Message">CLIENT:Message(Message, MessageDuration, MessageCategory, MessageInterval, MessageID)</a></td>
|
||||
<td class="summary">
|
||||
<p>The main message driver for the CLIENT.</p>
|
||||
</td>
|
||||
@ -341,7 +342,7 @@ If the DCS Unit object does not exist or is nil, the CLIENT methods will return
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(CLIENT)._AliveCheckScheduler">CLIENT:_AliveCheckScheduler()</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(CLIENT)._AliveCheckScheduler">CLIENT:_AliveCheckScheduler(SchedulerName)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
@ -882,7 +883,7 @@ true is a transport.</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(CLIENT).Message" >
|
||||
<strong>CLIENT:Message(Message, MessageDuration, MessageId, MessageCategory, MessageInterval)</strong>
|
||||
<strong>CLIENT:Message(Message, MessageDuration, MessageCategory, MessageInterval, MessageID)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -908,12 +909,6 @@ is the duration in seconds that the Message should be displayed.</p>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#string MessageId </em></code>:
|
||||
is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#string MessageCategory </em></code>:
|
||||
is the category of the message (the title).</p>
|
||||
|
||||
@ -923,6 +918,12 @@ is the category of the message (the title).</p>
|
||||
<p><code><em>#number MessageInterval </em></code>:
|
||||
is the interval in seconds between the display of the <a href="Message.html##(MESSAGE)">Message#MESSAGE</a> when the CLIENT is in the air.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#string MessageID </em></code>:
|
||||
is the identifier of the message when displayed with intervals.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
@ -1108,13 +1109,21 @@ self</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(CLIENT)._AliveCheckScheduler" >
|
||||
<strong>CLIENT:_AliveCheckScheduler()</strong>
|
||||
<strong>CLIENT:_AliveCheckScheduler(SchedulerName)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> SchedulerName </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -126,7 +127,7 @@ The following iterator methods are currently available within the DATABASE:</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).AddGroup">DATABASE:AddGroup(DCSGroup, GroupName)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).AddGroup">DATABASE:AddGroup(GroupName)</a></td>
|
||||
<td class="summary">
|
||||
<p>Adds a GROUP based on the GroupName in the DATABASE.</p>
|
||||
</td>
|
||||
@ -138,13 +139,13 @@ The following iterator methods are currently available within the DATABASE:</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).AddStatic">DATABASE:AddStatic(DCSStatic, DCSStaticName)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).AddStatic">DATABASE:AddStatic(DCSStaticName)</a></td>
|
||||
<td class="summary">
|
||||
<p>Adds a Static based on the Static Name in the DATABASE.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).AddUnit">DATABASE:AddUnit(DCSUnit, DCSUnitName)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).AddUnit">DATABASE:AddUnit(DCSUnitName)</a></td>
|
||||
<td class="summary">
|
||||
<p>Adds a Unit based on the Unit Name in the DATABASE.</p>
|
||||
</td>
|
||||
@ -165,24 +166,6 @@ The following iterator methods are currently available within the DATABASE:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ClassName">DATABASE.ClassName</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).DCSGroups">DATABASE.DCSGroups</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).DCSStatics">DATABASE.DCSStatics</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).DCSUnits">DATABASE.DCSUnits</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -243,12 +226,6 @@ The following iterator methods are currently available within the DATABASE:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ForEachClientAlive">DATABASE:ForEachClientAlive(IteratorFunction, ...)</a></td>
|
||||
<td class="summary">
|
||||
<p>Iterate the DATABASE and call an iterator function for each <strong>ALIVE</strong> CLIENT, providing the CLIENT to the function and optional parameters.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DATABASE).ForEachDCSUnit">DATABASE:ForEachDCSUnit(IteratorFunction, ...)</a></td>
|
||||
<td class="summary">
|
||||
<p>Iterate the DATABASE and call an iterator function for each <strong>alive</strong> unit, providing the DCSUnit and optional parameters.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -468,22 +445,17 @@ The following iterator methods are currently available within the DATABASE:</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(DATABASE).AddGroup" >
|
||||
<strong>DATABASE:AddGroup(DCSGroup, GroupName)</strong>
|
||||
<strong>DATABASE:AddGroup(GroupName)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Adds a GROUP based on the GroupName in the DATABASE.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> DCSGroup </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> GroupName </em></code>: </p>
|
||||
|
||||
</li>
|
||||
@ -520,22 +492,17 @@ The following iterator methods are currently available within the DATABASE:</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(DATABASE).AddStatic" >
|
||||
<strong>DATABASE:AddStatic(DCSStatic, DCSStaticName)</strong>
|
||||
<strong>DATABASE:AddStatic(DCSStaticName)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Adds a Static based on the Static Name in the DATABASE.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> DCSStatic </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> DCSStaticName </em></code>: </p>
|
||||
|
||||
</li>
|
||||
@ -546,22 +513,17 @@ The following iterator methods are currently available within the DATABASE:</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(DATABASE).AddUnit" >
|
||||
<strong>DATABASE:AddUnit(DCSUnit, DCSUnitName)</strong>
|
||||
<strong>DATABASE:AddUnit(DCSUnitName)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Adds a Unit based on the Unit Name in the DATABASE.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> DCSUnit </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> DCSUnitName </em></code>: </p>
|
||||
|
||||
</li>
|
||||
@ -608,48 +570,6 @@ The following iterator methods are currently available within the DATABASE:</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DATABASE).DCSGroups" >
|
||||
<strong>DATABASE.DCSGroups</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DATABASE).DCSStatics" >
|
||||
<strong>DATABASE.DCSStatics</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DATABASE).DCSUnits" >
|
||||
<strong>DATABASE.DCSUnits</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -923,38 +843,6 @@ self</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DATABASE).ForEachDCSUnit" >
|
||||
<strong>DATABASE:ForEachDCSUnit(IteratorFunction, ...)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Iterate the DATABASE and call an iterator function for each <strong>alive</strong> unit, providing the DCSUnit and optional parameters.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#function IteratorFunction </em></code>:
|
||||
The function that will be called when there is an alive unit in the database. The function needs to accept a DCSUnit parameter.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> ... </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DATABASE)">#DATABASE</a>:</em>
|
||||
self</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DATABASE).ForEachGroup" >
|
||||
<strong>DATABASE:ForEachGroup(IteratorFunction, ...)</strong>
|
||||
</a>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -577,6 +578,12 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the
|
||||
<td class="name" nowrap="nowrap"><a href="##(ESCORT).ReportTargetsScheduler">ESCORT.ReportTargetsScheduler</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ESCORT).SmokeDirectionVector">ESCORT.SmokeDirectionVector</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -589,6 +596,12 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the
|
||||
<td class="name" nowrap="nowrap"><a href="##(ESCORT).TaskPoints">ESCORT.TaskPoints</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ESCORT).TestSmokeDirectionVector">ESCORT:TestSmokeDirectionVector(SmokeDirection)</a></td>
|
||||
<td class="summary">
|
||||
<p>This function is for test, it will put on the frequency of the FollowScheduler a red smoke at the direction vector calculated for the escort to fly to.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -751,7 +764,7 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> EscortGroup </em></code>: </p>
|
||||
<p><code><em><a href="Group.html##(GROUP)">Group#GROUP</a> EscortGroup </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
@ -762,7 +775,10 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the
|
||||
<h2><a id="#(Distance)" >Type <code>Distance</code></a></h2>
|
||||
|
||||
<h2><a id="#(ESCORT)" >Type <code>ESCORT</code></a></h2>
|
||||
<h3>Field(s)</h3>
|
||||
|
||||
<p>ESCORT class</p>
|
||||
|
||||
<h3>Field(s)</h3>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
@ -1910,6 +1926,19 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the
|
||||
|
||||
<p>self.ReportTargetsScheduler = routines.scheduleFunction( self._ReportTargetsScheduler, { self }, timer.getTime() + 1, Seconds )</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ESCORT).SmokeDirectionVector" >
|
||||
<strong>ESCORT.SmokeDirectionVector</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1938,6 +1967,31 @@ EscortPlanes = ESCORT:New( EscortClient, EscortGroup, "Desert", "Welcome to the
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ESCORT).TestSmokeDirectionVector" >
|
||||
<strong>ESCORT:TestSmokeDirectionVector(SmokeDirection)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>This function is for test, it will put on the frequency of the FollowScheduler a red smoke at the direction vector calculated for the escort to fly to.</p>
|
||||
|
||||
|
||||
<p>This allows to visualize where the escort is flying to.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#boolean SmokeDirection </em></code>:
|
||||
If true, then the direction vector will be smoked.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -72,26 +73,26 @@
|
||||
<div id="content">
|
||||
<h1>Module <code>Scheduler</code></h1>
|
||||
|
||||
<p>Models time events calling event handing functions.</p>
|
||||
<p>This module contains the SCHEDULER class.</p>
|
||||
|
||||
|
||||
|
||||
<h1><a href="SCHEDULER.html">SCHEDULER</a> class</h1>
|
||||
<p>The <a href="SCHEDULER.html">SCHEDULER</a> class models time events calling given event handling functions.</p>
|
||||
<h1>1) <a href="Scheduler.html##(SCHEDULER)">Scheduler#SCHEDULER</a> class, extends <a href="Base.html##(BASE)">Base#BASE</a></h1>
|
||||
<p>The <a href="Scheduler.html##(SCHEDULER)">Scheduler#SCHEDULER</a> class models time events calling given event handling functions.</p>
|
||||
|
||||
<h1>SCHEDULER constructor</h1>
|
||||
<h2>1.1) SCHEDULER constructor</h2>
|
||||
<p>The SCHEDULER class is quite easy to use:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="##(SCHEDULER).New">SCHEDULER.New</a>: Setup a new scheduler and start it with the specified parameters.</li>
|
||||
<li><a href="Scheduler.html##(SCHEDULER).New">Scheduler#SCHEDULER.New</a>: Setup a new scheduler and start it with the specified parameters.</li>
|
||||
</ul>
|
||||
|
||||
<h1>SCHEDULER timer methods</h1>
|
||||
<h2>SCHEDULER timer stop and start</h2>
|
||||
<p>The SCHEDULER can be stopped and restarted with the following methods:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="##(SCHEDULER).Start">SCHEDULER.Start</a>: (Re-)Start the scheduler.</li>
|
||||
<li><a href="##(SCHEDULER).Start">SCHEDULER.Start</a>: Stop the scheduler.</li>
|
||||
<li><a href="Scheduler.html##(SCHEDULER).Start">Scheduler#SCHEDULER.Start</a>: (Re-)Start the scheduler.</li>
|
||||
<li><a href="Scheduler.html##(SCHEDULER).Stop">Scheduler#SCHEDULER.Stop</a>: Stop the scheduler.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
@ -115,13 +116,19 @@
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).New">SCHEDULER:New(TimeEventObject, TimeEventFunction, TimeEventFunctionArguments, StartSeconds, RepeatSecondsInterval, RandomizationFactor, StopSeconds)</a></td>
|
||||
<td class="summary">
|
||||
<p>Constructor.</p>
|
||||
<p>SCHEDULER constructor.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).Repeat">SCHEDULER.Repeat</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).ScheduleID">SCHEDULER.ScheduleID</a></td>
|
||||
<td class="summary">
|
||||
<p>the ID of the scheduler.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -189,7 +196,7 @@
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Constructor.</p>
|
||||
<p>SCHEDULER constructor.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
@ -255,6 +262,20 @@ self</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em>#number</em>
|
||||
<a id="#(SCHEDULER).ScheduleID" >
|
||||
<strong>SCHEDULER.ScheduleID</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>the ID of the scheduler.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -489,7 +490,7 @@ The following iterator methods are currently available within the SET</em>CLIENT
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SET_CLIENT).ForEachClientCompletelyInZone">SET_CLIENT:ForEachClientCompletelyInZone(ZoneObject, IteratorFunction, ...)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SET_CLIENT).ForEachClientInZone">SET_CLIENT:ForEachClientInZone(ZoneObject, IteratorFunction, ...)</a></td>
|
||||
<td class="summary">
|
||||
<p>Iterate the SET_CLIENT and call an iterator function for each <strong>alive</strong> CLIENT presence completely in a <a href="Zone.html">Zone</a>, providing the CLIENT and optional parameters to the called function.</p>
|
||||
</td>
|
||||
@ -1573,8 +1574,8 @@ self</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SET_CLIENT).ForEachClientCompletelyInZone" >
|
||||
<strong>SET_CLIENT:ForEachClientCompletelyInZone(ZoneObject, IteratorFunction, ...)</strong>
|
||||
<a id="#(SET_CLIENT).ForEachClientInZone" >
|
||||
<strong>SET_CLIENT:ForEachClientInZone(ZoneObject, IteratorFunction, ...)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -362,6 +363,12 @@ If you want to obtain the complete <strong>3D position</strong> including ori
|
||||
<td class="name" nowrap="nowrap"><a href="##(UNIT).InAir">UNIT:InAir()</a></td>
|
||||
<td class="summary">
|
||||
<p>Returns true if the DCS Unit is in the air.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(UNIT).IsAboveRunway">UNIT:IsAboveRunway()</a></td>
|
||||
<td class="summary">
|
||||
<p>Returns if the unit is located above a runway.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -1418,6 +1425,34 @@ The DCS Unit is not existing or alive. </p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(UNIT).IsAboveRunway" >
|
||||
<strong>UNIT:IsAboveRunway()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Returns if the unit is located above a runway.</p>
|
||||
|
||||
<h3>Return values</h3>
|
||||
<ol>
|
||||
<li>
|
||||
|
||||
<p><em>#boolean:</em>
|
||||
true if Unit is above a runway.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><em>#nil:</em>
|
||||
The DCS Unit is not existing or alive. </p>
|
||||
|
||||
</li>
|
||||
</ol>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(UNIT).IsActive" >
|
||||
<strong>UNIT:IsActive()</strong>
|
||||
</a>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -156,6 +157,12 @@
|
||||
<td class="name" nowrap="nowrap"><a href="#ZONE_POLYGON">ZONE_POLYGON</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="#ZONE_POLYGON_BASE">ZONE_POLYGON_BASE</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -217,6 +224,12 @@
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_BASE).SmokeZone">ZONE_BASE:SmokeZone(SmokeColor)</a></td>
|
||||
<td class="summary">
|
||||
<p>Smokes the zone boundaries in a color.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_BASE).ZoneName">ZONE_BASE.ZoneName</a></td>
|
||||
<td class="summary">
|
||||
<p>Name of the zone.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@ -227,12 +240,6 @@
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_POLYGON).ClassName">ZONE_POLYGON.ClassName</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_POLYGON).IsPointVec2InZone">ZONE_POLYGON:IsPointVec2InZone(PointVec2)</a></td>
|
||||
<td class="summary">
|
||||
<p>Returns if a location is within the zone.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -241,8 +248,42 @@
|
||||
<p>Constructor to create a ZONE_POLYGON instance, taking the zone name and the name of the <a href="Group.html##(GROUP)">Group#GROUP</a> defined within the Mission Editor.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2><a id="#(ZONE_POLYGON_BASE)">Type <code>ZONE_POLYGON_BASE</code></a></h2>
|
||||
<table class="function_list">
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_POLYGON).SmokeZone">ZONE_POLYGON:SmokeZone(SmokeColor)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_POLYGON_BASE).ClassName">ZONE_POLYGON_BASE.ClassName</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_POLYGON_BASE).Flush">ZONE_POLYGON_BASE:Flush()</a></td>
|
||||
<td class="summary">
|
||||
<p>Flush polygon coordinates as a table in DCS.log.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_POLYGON_BASE).IsPointVec2InZone">ZONE_POLYGON_BASE:IsPointVec2InZone(PointVec2)</a></td>
|
||||
<td class="summary">
|
||||
<p>Returns if a location is within the zone.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_POLYGON_BASE).New">ZONE_POLYGON_BASE:New(ZoneName, PointsArray)</a></td>
|
||||
<td class="summary">
|
||||
<p>Constructor to create a ZONE<em>POLYGON</em>BASE instance, taking the zone name and an array of <a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>, forming a polygon.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_POLYGON_BASE).Polygon">ZONE_POLYGON_BASE.Polygon</a></td>
|
||||
<td class="summary">
|
||||
<p>The polygon defined by an array of <a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_POLYGON_BASE).SmokeZone">ZONE_POLYGON_BASE:SmokeZone(SmokeColor)</a></td>
|
||||
<td class="summary">
|
||||
<p>Smokes the zone boundaries in a color.</p>
|
||||
</td>
|
||||
@ -406,6 +447,20 @@
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="##(ZONE_POLYGON_BASE)">#ZONE_POLYGON_BASE</a></em>
|
||||
<a id="ZONE_POLYGON_BASE" >
|
||||
<strong>ZONE_POLYGON_BASE</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -612,6 +667,20 @@ The smoke color.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em>#string</em>
|
||||
<a id="#(ZONE_BASE).ZoneName" >
|
||||
<strong>ZONE_BASE.ZoneName</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Name of the zone.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@ -632,33 +701,6 @@ The smoke color.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ZONE_POLYGON).IsPointVec2InZone" >
|
||||
<strong>ZONE_POLYGON:IsPointVec2InZone(PointVec2)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Returns if a location is within the zone.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a> PointVec2 </em></code>:
|
||||
The location to test.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#boolean:</em>
|
||||
true if the location is within the zone.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -697,11 +739,126 @@ self</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="#(ZONE_POLYGON_BASE)" >Type <code>ZONE_POLYGON_BASE</code></a></h2>
|
||||
|
||||
<p>The ZONE<em>POLYGON</em>BASE class defined by an array of <a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>, forming a polygon.</p>
|
||||
|
||||
<h3>Field(s)</h3>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ZONE_POLYGON).SmokeZone" >
|
||||
<strong>ZONE_POLYGON:SmokeZone(SmokeColor)</strong>
|
||||
<em>#string</em>
|
||||
<a id="#(ZONE_POLYGON_BASE).ClassName" >
|
||||
<strong>ZONE_POLYGON_BASE.ClassName</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ZONE_POLYGON_BASE).Flush" >
|
||||
<strong>ZONE_POLYGON_BASE:Flush()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Flush polygon coordinates as a table in DCS.log.</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(ZONE_POLYGON_BASE)">#ZONE<em>POLYGON</em>BASE</a>:</em>
|
||||
self</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ZONE_POLYGON_BASE).IsPointVec2InZone" >
|
||||
<strong>ZONE_POLYGON_BASE:IsPointVec2InZone(PointVec2)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Returns if a location is within the zone.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a> PointVec2 </em></code>:
|
||||
The location to test.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#boolean:</em>
|
||||
true if the location is within the zone.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ZONE_POLYGON_BASE).New" >
|
||||
<strong>ZONE_POLYGON_BASE:New(ZoneName, PointsArray)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Constructor to create a ZONE<em>POLYGON</em>BASE instance, taking the zone name and an array of <a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>, forming a polygon.</p>
|
||||
|
||||
|
||||
<p>The <a href="Group.html##(GROUP)">Group#GROUP</a> waypoints define the polygon corners. The first and the last point are automatically connected.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#string ZoneName </em></code>:
|
||||
Name of the zone.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="##(ZONE_POLYGON_BASE.ListVec2)">#ZONE<em>POLYGON</em>BASE.ListVec2</a> PointsArray </em></code>:
|
||||
An array of <a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>, forming a polygon..</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(ZONE_POLYGON_BASE)">#ZONE<em>POLYGON</em>BASE</a>:</em>
|
||||
self</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="##(ZONE_POLYGON_BASE.ListVec2)">#ZONE_POLYGON_BASE.ListVec2</a></em>
|
||||
<a id="#(ZONE_POLYGON_BASE).Polygon" >
|
||||
<strong>ZONE_POLYGON_BASE.Polygon</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>The polygon defined by an array of <a href="DCSTypes.html##(Vec2)">DCSTypes#Vec2</a>.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ZONE_POLYGON_BASE).SmokeZone" >
|
||||
<strong>ZONE_POLYGON_BASE:SmokeZone(SmokeColor)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -719,12 +876,17 @@ The smoke color.</p>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(ZONE_POLYGON)">#ZONE_POLYGON</a>:</em>
|
||||
<p><em><a href="##(ZONE_POLYGON_BASE)">#ZONE<em>POLYGON</em>BASE</a>:</em>
|
||||
self</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="#(ZONE_POLYGON_BASE.ListVec2)" >Type <code>ZONE_POLYGON_BASE.ListVec2</code></a></h2>
|
||||
|
||||
<p>A points array.</p>
|
||||
|
||||
|
||||
<h2><a id="#(ZONE_RADIUS)" >Type <code>ZONE_RADIUS</code></a></h2>
|
||||
|
||||
<p>The ZONE_RADIUS class, defined by a zone name, a location and a radius.</p>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -89,12 +90,18 @@
|
||||
<ul>
|
||||
<li>Support all DCS Airbase APIs.</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="AirbasePolice.html">AirbasePolice</a></td>
|
||||
<td class="summary">
|
||||
<p>This module contains the AIRBASEPOLICE classes.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="Base.html">Base</a></td>
|
||||
<td class="summary">
|
||||
<p>BASE classes.</p>
|
||||
<p>This module contains the BASE class.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -304,7 +311,7 @@
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="Scheduler.html">Scheduler</a></td>
|
||||
<td class="summary">
|
||||
<p>Models time events calling event handing functions.</p>
|
||||
<p>This module contains the SCHEDULER class.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
@ -95,6 +96,12 @@
|
||||
<td class="name" nowrap="nowrap"><a href="##(land).getHeight">land.getHeight(point)</a></td>
|
||||
<td class="summary">
|
||||
<p>Returns altitude MSL of the point.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(land).getSurfaceType">land.getSurfaceType(point)</a></td>
|
||||
<td class="summary">
|
||||
<p>returns surface type at the given point.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@ -189,6 +196,33 @@ point on the ground. </p>
|
||||
<p><em><a href="DCSTypes.html##(Distance)">DCSTypes#Distance</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(land).getSurfaceType" >
|
||||
<strong>land.getSurfaceType(point)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>returns surface type at the given point.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="##(Vec2)">#Vec2</a> point </em></code>:
|
||||
Point on the land. </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(land.SurfaceType)">#land.SurfaceType</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
<ul>
|
||||
<li><a href="AIBalancer.html">AIBalancer</a></li>
|
||||
<li><a href="Airbase.html">Airbase</a></li>
|
||||
<li><a href="AirbasePolice.html">AirbasePolice</a></li>
|
||||
<li><a href="Base.html">Base</a></li>
|
||||
<li><a href="CARGO.html">CARGO</a></li>
|
||||
<li><a href="CleanUp.html">CleanUp</a></li>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user