Merge branch 'develop' into FF/OpsDev

This commit is contained in:
Frank 2025-04-17 21:40:41 +02:00
commit 1f20b830b7
8 changed files with 482 additions and 25 deletions

View File

@ -1372,11 +1372,12 @@ function EVENT:onEvent( Event )
-- Scenery -- Scenery
--- ---
Event.IniDCSUnit = Event.initiator Event.IniDCSUnit = Event.initiator
Event.IniDCSUnitName = Event.IniDCSUnit.getName and Event.IniDCSUnit:getName() or "Scenery no name "..math.random(1,20000) Event.IniDCSUnitName = ( Event.IniDCSUnit and Event.IniDCSUnit.getName ) and Event.IniDCSUnit:getName() or "Scenery no name "..math.random(1,20000)
Event.IniUnitName = Event.IniDCSUnitName Event.IniUnitName = Event.IniDCSUnitName
Event.IniUnit = SCENERY:Register( Event.IniDCSUnitName, Event.initiator ) Event.IniUnit = SCENERY:Register( Event.IniDCSUnitName, Event.initiator )
Event.IniCategory = Event.IniDCSUnit.getDesc and Event.IniDCSUnit:getDesc().category Event.IniCategory = (Event.IniDCSUnit and Event.IniDCSUnit.getDesc ) and Event.IniDCSUnit:getDesc().category
Event.IniTypeName = Event.initiator:isExist() and Event.IniDCSUnit:getTypeName() or "SCENERY" Event.IniTypeName = (Event.initiator and Event.initiator.isExist
and Event.initiator:isExist() and Event.IniDCSUnit and Event.IniDCSUnit.getTypeName) and Event.IniDCSUnit:getTypeName() or "SCENERY"
elseif Event.IniObjectCategory == Object.Category.BASE then elseif Event.IniObjectCategory == Object.Category.BASE then
--- ---

View File

@ -8755,7 +8755,6 @@ do -- SET_DYNAMICCARGO
-- @field #SET_DYNAMICCARGO SET_DYNAMICCARGO -- @field #SET_DYNAMICCARGO SET_DYNAMICCARGO
SET_DYNAMICCARGO = { SET_DYNAMICCARGO = {
ClassName = "SET_DYNAMICCARGO", ClassName = "SET_DYNAMICCARGO",
Filter = {},
Set = {}, Set = {},
List = {}, List = {},
Index = {}, Index = {},

View File

@ -501,6 +501,7 @@ ATIS.Alphabet = {
-- @field #number Kola +15° (East). -- @field #number Kola +15° (East).
-- @field #number Afghanistan +3° (East). -- @field #number Afghanistan +3° (East).
-- @field #number Iraq +4.4° (East). -- @field #number Iraq +4.4° (East).
-- @field #number GermanyCW +0.1° (East).
ATIS.RunwayM2T = { ATIS.RunwayM2T = {
Caucasus = 0, Caucasus = 0,
Nevada = 12, Nevada = 12,
@ -513,7 +514,8 @@ ATIS.RunwayM2T = {
SinaiMap = 5, SinaiMap = 5,
Kola = 15, Kola = 15,
Afghanistan = 3, Afghanistan = 3,
Iraq=4.4 Iraq=4.4,
GermanyCW=0.1,
} }
--- Whether ICAO phraseology is used for ATIS broadcasts. --- Whether ICAO phraseology is used for ATIS broadcasts.
@ -530,6 +532,7 @@ ATIS.RunwayM2T = {
-- @field #boolean Kola true. -- @field #boolean Kola true.
-- @field #boolean Afghanistan true. -- @field #boolean Afghanistan true.
-- @field #boolean Iraq true. -- @field #boolean Iraq true.
-- @field #boolean GermanyCW true.
ATIS.ICAOPhraseology = { ATIS.ICAOPhraseology = {
Caucasus = true, Caucasus = true,
Nevada = false, Nevada = false,
@ -543,6 +546,7 @@ ATIS.ICAOPhraseology = {
Kola = true, Kola = true,
Afghanistan = true, Afghanistan = true,
Iraq = true, Iraq = true,
GermanyCW = true,
} }
--- Nav point data. --- Nav point data.

View File

@ -62,6 +62,7 @@
-- @field #number repeatsonfailure -- @field #number repeatsonfailure
-- @field Core.Set#SET_ZONE GoZoneSet -- @field Core.Set#SET_ZONE GoZoneSet
-- @field Core.Set#SET_ZONE NoGoZoneSet -- @field Core.Set#SET_ZONE NoGoZoneSet
-- @field Core.Set#SET_ZONE ConflictZoneSet
-- @field #boolean Monitor -- @field #boolean Monitor
-- @field #boolean TankerInvisible -- @field #boolean TankerInvisible
-- @field #number CapFormation -- @field #number CapFormation
@ -102,6 +103,11 @@
-- Next put a late activated template group for your CAP/GCI Squadron on the map. Last, put a zone on the map for the CAP operations, let's name it "Blue Zone 1". Size of the zone plays no role. -- Next put a late activated template group for your CAP/GCI Squadron on the map. Last, put a zone on the map for the CAP operations, let's name it "Blue Zone 1". Size of the zone plays no role.
-- Put an EW radar system on the map and name it aptly, like "Blue EWR". -- Put an EW radar system on the map and name it aptly, like "Blue EWR".
-- --
-- ### Zones
--
-- For our example, you create a RED and a BLUE border, as a closed polygonal zone representing the borderlines. You can also have conflict zone, where - for our example - BLUE will attack
-- RED planes, despite being on RED territory. Think of a no-fly zone or an limited area of engagement. Conflict zones take precedence over borders, i.e. they can overlap all borders.
--
-- ### Code it -- ### Code it
-- --
-- -- Set up a basic system for the blue side, we'll reside on Kutaisi, and use GROUP objects with "Blue EWR" in the name as EW Radar Systems. -- -- Set up a basic system for the blue side, we'll reside on Kutaisi, and use GROUP objects with "Blue EWR" in the name as EW Radar Systems.
@ -114,10 +120,10 @@
-- mywing:AddSquadron("Blue Sq1 M2000c","CAP Kutaisi",AIRBASE.Caucasus.Kutaisi,20,AI.Skill.GOOD,102,"ec1.5_Vendee_Jeanne_clean") -- mywing:AddSquadron("Blue Sq1 M2000c","CAP Kutaisi",AIRBASE.Caucasus.Kutaisi,20,AI.Skill.GOOD,102,"ec1.5_Vendee_Jeanne_clean")
-- --
-- -- Add a couple of zones -- -- Add a couple of zones
-- -- We'll defend our border -- -- We'll defend our own border
-- mywing:AddAcceptZone(ZONE_POLYGON:New( "Blue Border", GROUP:FindByName( "Blue Border" ) )) -- mywing:AddAcceptZone(ZONE_POLYGON:New( "Blue Border", GROUP:FindByName( "Blue Border" ) ))
-- -- We'll attack intruders also here -- -- We'll attack intruders also here - conflictzones can overlap borders(!) - limited zone of engagement
-- mywing:AddAcceptZone(ZONE_POLYGON:New("Red Defense Zone", GROUP:FindByName( "Red Defense Zone" ))) -- mywing:AddConflictZone(ZONE_POLYGON:New("Red Defense Zone", GROUP:FindByName( "Red Defense Zone" )))
-- -- We'll leave the reds alone on their turf -- -- We'll leave the reds alone on their turf
-- mywing:AddRejectZone(ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) )) -- mywing:AddRejectZone(ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ))
-- --
@ -125,10 +131,10 @@
-- -- Set up borders on map -- -- Set up borders on map
-- local BlueBorder = ZONE_POLYGON:New( "Blue Border", GROUP:FindByName( "Blue Border" ) ) -- local BlueBorder = ZONE_POLYGON:New( "Blue Border", GROUP:FindByName( "Blue Border" ) )
-- BlueBorder:DrawZone(-1,{0,0,1},1,FillColor,FillAlpha,1,true) -- BlueBorder:DrawZone(-1,{0,0,1},1,FillColor,FillAlpha,1,true)
-- local BlueNoGoZone = ZONE_POLYGON:New("Red Defense Zone", GROUP:FindByName( "Red Defense Zone" )) -- local ConflictZone = ZONE_POLYGON:New("Red Defense Zone", GROUP:FindByName( "Red Defense Zone" ))
-- BlueNoGoZone:DrawZone(-1,{1,1,0},1,FillColor,FillAlpha,2,true) -- ConflictZone:DrawZone(-1,{1,1,0},1,FillColor,FillAlpha,2,true)
-- local BlueNoGoZone2 = ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ) -- local BlueNoGoZone = ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) )
-- BlueNoGoZone2:DrawZone(-1,{1,0,0},1,FillColor,FillAlpha,4,true) -- BlueNoGoZone:DrawZone(-1,{1,0,0},1,FillColor,FillAlpha,4,true)
-- --
-- ### Add a second airwing with squads and own CAP point (optional) -- ### Add a second airwing with squads and own CAP point (optional)
-- --
@ -210,6 +216,7 @@ EASYGCICAP = {
repeatsonfailure = 3, repeatsonfailure = 3,
GoZoneSet = nil, GoZoneSet = nil,
NoGoZoneSet = nil, NoGoZoneSet = nil,
ConflictZoneSet = nil,
Monitor = false, Monitor = false,
TankerInvisible = true, TankerInvisible = true,
CapFormation = nil, CapFormation = nil,
@ -252,7 +259,7 @@ EASYGCICAP = {
--- EASYGCICAP class version. --- EASYGCICAP class version.
-- @field #string version -- @field #string version
EASYGCICAP.version="0.1.17" EASYGCICAP.version="0.1.18"
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- TODO list -- TODO list
@ -287,6 +294,7 @@ function EASYGCICAP:New(Alias, AirbaseName, Coalition, EWRName)
self.airbase = AIRBASE:FindByName(self.airbasename) self.airbase = AIRBASE:FindByName(self.airbasename)
self.GoZoneSet = SET_ZONE:New() self.GoZoneSet = SET_ZONE:New()
self.NoGoZoneSet = SET_ZONE:New() self.NoGoZoneSet = SET_ZONE:New()
self.ConflictZoneSet = SET_ZONE:New()
self.resurrection = 900 self.resurrection = 900
self.capspeed = 300 self.capspeed = 300
self.capalt = 25000 self.capalt = 25000
@ -1113,7 +1121,7 @@ end
-- @param Core.Zone#ZONE_BASE Zone -- @param Core.Zone#ZONE_BASE Zone
-- @return #EASYGCICAP self -- @return #EASYGCICAP self
function EASYGCICAP:AddAcceptZone(Zone) function EASYGCICAP:AddAcceptZone(Zone)
self:T(self.lid.."AddAcceptZone0") self:T(self.lid.."AddAcceptZone")
self.GoZoneSet:AddZone(Zone) self.GoZoneSet:AddZone(Zone)
return self return self
end end
@ -1128,6 +1136,18 @@ function EASYGCICAP:AddRejectZone(Zone)
return self return self
end end
--- Add a zone to the conflict zones set.
-- @param #EASYGCICAP self
-- @param Core.Zone#ZONE_BASE Zone
-- @return #EASYGCICAP self
function EASYGCICAP:AddConflictZone(Zone)
self:T(self.lid.."AddConflictZone")
self.ConflictZoneSet:AddZone(Zone)
self.GoZoneSet:AddZone(Zone)
return self
end
--- (Internal) Try to assign the intercept to a FlightGroup already in air and ready. --- (Internal) Try to assign the intercept to a FlightGroup already in air and ready.
-- @param #EASYGCICAP self -- @param #EASYGCICAP self
-- @param #table ReadyFlightGroups ReadyFlightGroups -- @param #table ReadyFlightGroups ReadyFlightGroups
@ -1193,6 +1213,7 @@ function EASYGCICAP:_AssignIntercept(Cluster)
local ctlpts = self.ManagedCP local ctlpts = self.ManagedCP
local MaxAliveMissions = self.MaxAliveMissions --* self.capgrouping local MaxAliveMissions = self.MaxAliveMissions --* self.capgrouping
local nogozoneset = self.NoGoZoneSet local nogozoneset = self.NoGoZoneSet
local conflictzoneset = self.ConflictZoneSet
local ReadyFlightGroups = self.ReadyFlightGroups local ReadyFlightGroups = self.ReadyFlightGroups
-- Aircraft? -- Aircraft?
@ -1271,18 +1292,22 @@ function EASYGCICAP:_AssignIntercept(Cluster)
if nogozoneset:Count() > 0 then if nogozoneset:Count() > 0 then
InterceptAuftrag:AddConditionSuccess( InterceptAuftrag:AddConditionSuccess(
function(group,zoneset) function(group,zoneset,conflictset)
local success = false local success = false
if group and group:IsAlive() then if group and group:IsAlive() then
local coord = group:GetCoordinate() local coord = group:GetCoordinate()
if coord and zoneset:IsCoordinateInZone(coord) then if coord and zoneset:Count() > 0 and zoneset:IsCoordinateInZone(coord) then
success = true success = true
end end
if coord and conflictset:Count() > 0 and conflictset:IsCoordinateInZone(coord) then
success = false
end
end end
return success return success
end, end,
contact.group, contact.group,
nogozoneset nogozoneset,
conflictzoneset
) )
end end
@ -1316,6 +1341,7 @@ function EASYGCICAP:_StartIntel()
BlueIntel:SetForgetTime(300) BlueIntel:SetForgetTime(300)
BlueIntel:SetAcceptZones(self.GoZoneSet) BlueIntel:SetAcceptZones(self.GoZoneSet)
BlueIntel:SetRejectZones(self.NoGoZoneSet) BlueIntel:SetRejectZones(self.NoGoZoneSet)
BlueIntel:SetConflictZones(self.ConflictZoneSet)
BlueIntel:SetVerbosity(0) BlueIntel:SetVerbosity(0)
BlueIntel:Start() BlueIntel:Start()

View File

@ -1331,6 +1331,12 @@ ENUMS.Storage.weapons.OH58.Smk_Grenade_Yellow = {4,5,9,491}
-- Apache -- Apache
ENUMS.Storage.weapons.AH64D.AN_APG78 = {4,15,44,2114} ENUMS.Storage.weapons.AH64D.AN_APG78 = {4,15,44,2114}
ENUMS.Storage.weapons.AH64D.Internal_Aux_FuelTank = {1,3,43,1700} ENUMS.Storage.weapons.AH64D.Internal_Aux_FuelTank = {1,3,43,1700}
-- Other - but cannot set or track those. Harrier stuff?
ENUMS.Storage.weapons.droptanks.FuelTank_610gal = {1,3,43,10}
ENUMS.Storage.weapons.droptanks.FuelTank_370gal = {1,3,43,11}
ENUMS.Storage.weapons.containers.AV8BNA_GAU_12_AP_M79 = {4,15,46,824}
ENUMS.Storage.weapons.containers.AV8BNA_GAU_12_HE_M792 = {4,15,46,825}
ENUMS.Storage.weapons.containers.AV8BNA_GAU_12_SAPHEI_T = {4,15,46,300}
--- ---
-- @type ENUMS.FARPType -- @type ENUMS.FARPType

View File

@ -58,6 +58,7 @@ BIGSMOKEPRESET = {
-- @field #string Kola Kola map. -- @field #string Kola Kola map.
-- @field #string Afghanistan Afghanistan map -- @field #string Afghanistan Afghanistan map
-- @field #string Iraq Iraq map -- @field #string Iraq Iraq map
-- @field #string GermanyCW Germany Cold War map
DCSMAP = { DCSMAP = {
Caucasus="Caucasus", Caucasus="Caucasus",
NTTR="Nevada", NTTR="Nevada",
@ -70,7 +71,8 @@ DCSMAP = {
Sinai="SinaiMap", Sinai="SinaiMap",
Kola="Kola", Kola="Kola",
Afghanistan="Afghanistan", Afghanistan="Afghanistan",
Iraq="Iraq" Iraq="Iraq",
GermanyCW="GermanyCW",
} }
@ -1834,7 +1836,9 @@ end
-- * Sinai +4.8 (East) -- * Sinai +4.8 (East)
-- * Kola +15 (East) - note there is a lot of deviation across the map (-1° to +24°), as we are close to the North pole -- * Kola +15 (East) - note there is a lot of deviation across the map (-1° to +24°), as we are close to the North pole
-- * Afghanistan +3 (East) - actually +3.6 (NW) to +2.3 (SE) -- * Afghanistan +3 (East) - actually +3.6 (NW) to +2.3 (SE)
-- @param #string map (Optional) Map for which the declination is returned. Default is from env.mission.theatre -- * Iraq +4.4 (East)
-- * Germany Cold War +0.1 (East) - near Fulda
-- @param #string map (Optional) Map for which the declination is returned. Default is from `env.mission.theatre`.
-- @return #number Declination in degrees. -- @return #number Declination in degrees.
function UTILS.GetMagneticDeclination(map) function UTILS.GetMagneticDeclination(map)
@ -1866,6 +1870,8 @@ function UTILS.GetMagneticDeclination(map)
declination=3 declination=3
elseif map==DCSMAP.Iraq then elseif map==DCSMAP.Iraq then
declination=4.4 declination=4.4
elseif map==DCSMAP.GermanyCW then
declination=0.1
else else
declination=0 declination=0
end end
@ -2099,6 +2105,10 @@ function UTILS.GMTToLocalTimeDifference()
return 3 -- Currently map is +2 but should be +3 (DCS bug?) return 3 -- Currently map is +2 but should be +3 (DCS bug?)
elseif theatre==DCSMAP.Afghanistan then elseif theatre==DCSMAP.Afghanistan then
return 4.5 -- UTC +4:30 return 4.5 -- UTC +4:30
elseif theatre==DCSMAP.Iraq then
return 3.0 -- UTC +3
elseif theatre==DCSMAP.GermanyCW then
return 1.0 -- UTC +1 Central European Time (not summer time)
else else
BASE:E(string.format("ERROR: Unknown Map %s in UTILS.GMTToLocal function. Returning 0", tostring(theatre))) BASE:E(string.format("ERROR: Unknown Map %s in UTILS.GMTToLocal function. Returning 0", tostring(theatre)))
return 0 return 0

View File

@ -911,6 +911,413 @@ AIRBASE.Iraq = {
["K1_Base"] = "K1 Base", ["K1_Base"] = "K1 Base",
} }
--- Airbases of the Germany Cold War map
-- * AIRBASE.GermanyCW.Airracing_Frankfurt
-- * AIRBASE.GermanyCW.Airracing_Koblenz
-- * AIRBASE.GermanyCW.Airracing_Luebeck
-- * AIRBASE.GermanyCW.Allstedt
-- * AIRBASE.GermanyCW.Alt_Daber
-- * AIRBASE.GermanyCW.Altes_Lager
-- * AIRBASE.GermanyCW.Bad_Duerkheim
-- * AIRBASE.GermanyCW.Barth
-- * AIRBASE.GermanyCW.Bienenfarm
-- * AIRBASE.GermanyCW.Bindersleben
-- * AIRBASE.GermanyCW.Bitburg
-- * AIRBASE.GermanyCW.Braunschweig
-- * AIRBASE.GermanyCW.Bremen
-- * AIRBASE.GermanyCW.Briest
-- * AIRBASE.GermanyCW.Buechel
-- * AIRBASE.GermanyCW.Bueckeburg
-- * AIRBASE.GermanyCW.Celle
-- * AIRBASE.GermanyCW.Cochstedt
-- * AIRBASE.GermanyCW.Damgarten
-- * AIRBASE.GermanyCW.Dedelow
-- * AIRBASE.GermanyCW.Dessau
-- * AIRBASE.GermanyCW.Fassberg
-- * AIRBASE.GermanyCW.Finow
-- * AIRBASE.GermanyCW.Frankfurt
-- * AIRBASE.GermanyCW.Fritzlar
-- * AIRBASE.GermanyCW.Fulda
-- * AIRBASE.GermanyCW.Gardelegen
-- * AIRBASE.GermanyCW.Gatow
-- * AIRBASE.GermanyCW.Gelnhausen
-- * AIRBASE.GermanyCW.Giebelstadt
-- * AIRBASE.GermanyCW.Glindbruchkippe
-- * AIRBASE.GermanyCW.Gross_Doelln
-- * AIRBASE.GermanyCW.Gross_Mohrdorf
-- * AIRBASE.GermanyCW.Grosse_Wiese
-- * AIRBASE.GermanyCW.Gaerz
-- * AIRBASE.GermanyCW.Guetersloh
-- * AIRBASE.GermanyCW.H_FRG_01
-- * AIRBASE.GermanyCW.H_FRG_02
-- * AIRBASE.GermanyCW.H_FRG_03
-- * AIRBASE.GermanyCW.H_FRG_04
-- * AIRBASE.GermanyCW.H_FRG_05
-- * AIRBASE.GermanyCW.H_FRG_06
-- * AIRBASE.GermanyCW.H_FRG_07
-- * AIRBASE.GermanyCW.H_FRG_08
-- * AIRBASE.GermanyCW.H_FRG_09
-- * AIRBASE.GermanyCW.H_FRG_10
-- * AIRBASE.GermanyCW.H_FRG_11
-- * AIRBASE.GermanyCW.H_FRG_12
-- * AIRBASE.GermanyCW.H_FRG_13
-- * AIRBASE.GermanyCW.H_FRG_14
-- * AIRBASE.GermanyCW.H_FRG_15
-- * AIRBASE.GermanyCW.H_FRG_16
-- * AIRBASE.GermanyCW.H_FRG_17
-- * AIRBASE.GermanyCW.H_FRG_18
-- * AIRBASE.GermanyCW.H_FRG_19
-- * AIRBASE.GermanyCW.H_FRG_20
-- * AIRBASE.GermanyCW.H_FRG_21
-- * AIRBASE.GermanyCW.H_FRG_23
-- * AIRBASE.GermanyCW.H_FRG_25
-- * AIRBASE.GermanyCW.H_FRG_27
-- * AIRBASE.GermanyCW.H_FRG_30
-- * AIRBASE.GermanyCW.H_FRG_31
-- * AIRBASE.GermanyCW.H_FRG_32
-- * AIRBASE.GermanyCW.H_FRG_34
-- * AIRBASE.GermanyCW.H_FRG_38
-- * AIRBASE.GermanyCW.H_FRG_39
-- * AIRBASE.GermanyCW.H_FRG_40
-- * AIRBASE.GermanyCW.H_FRG_41
-- * AIRBASE.GermanyCW.H_FRG_42
-- * AIRBASE.GermanyCW.H_FRG_43
-- * AIRBASE.GermanyCW.H_FRG_44
-- * AIRBASE.GermanyCW.H_FRG_45
-- * AIRBASE.GermanyCW.H_FRG_46
-- * AIRBASE.GermanyCW.H_FRG_47
-- * AIRBASE.GermanyCW.H_FRG_48
-- * AIRBASE.GermanyCW.H_FRG_49
-- * AIRBASE.GermanyCW.H_FRG_50
-- * AIRBASE.GermanyCW.H_FRG_51
-- * AIRBASE.GermanyCW.H_GDR_01
-- * AIRBASE.GermanyCW.H_GDR_02
-- * AIRBASE.GermanyCW.H_GDR_03
-- * AIRBASE.GermanyCW.H_GDR_04
-- * AIRBASE.GermanyCW.H_GDR_05
-- * AIRBASE.GermanyCW.H_GDR_06
-- * AIRBASE.GermanyCW.H_GDR_07
-- * AIRBASE.GermanyCW.H_GDR_08
-- * AIRBASE.GermanyCW.H_GDR_09
-- * AIRBASE.GermanyCW.H_GDR_10
-- * AIRBASE.GermanyCW.H_GDR_11
-- * AIRBASE.GermanyCW.H_GDR_12
-- * AIRBASE.GermanyCW.H_GDR_13
-- * AIRBASE.GermanyCW.H_GDR_14
-- * AIRBASE.GermanyCW.H_GDR_15
-- * AIRBASE.GermanyCW.H_GDR_16
-- * AIRBASE.GermanyCW.H_GDR_17
-- * AIRBASE.GermanyCW.H_GDR_18
-- * AIRBASE.GermanyCW.H_GDR_19
-- * AIRBASE.GermanyCW.H_GDR_21
-- * AIRBASE.GermanyCW.H_GDR_22
-- * AIRBASE.GermanyCW.H_GDR_24
-- * AIRBASE.GermanyCW.H_GDR_25
-- * AIRBASE.GermanyCW.H_GDR_26
-- * AIRBASE.GermanyCW.H_GDR_30
-- * AIRBASE.GermanyCW.H_GDR_31
-- * AIRBASE.GermanyCW.H_GDR_32
-- * AIRBASE.GermanyCW.H_GDR_33
-- * AIRBASE.GermanyCW.H_Med_FRG_02
-- * AIRBASE.GermanyCW.H_Med_FRG_04
-- * AIRBASE.GermanyCW.H_Med_FRG_06
-- * AIRBASE.GermanyCW.H_Med_FRG_09
-- * AIRBASE.GermanyCW.H_Med_FRG_11
-- * AIRBASE.GermanyCW.H_Med_FRG_12
-- * AIRBASE.GermanyCW.H_Med_FRG_13
-- * AIRBASE.GermanyCW.H_Med_FRG_14
-- * AIRBASE.GermanyCW.H_Med_FRG_15
-- * AIRBASE.GermanyCW.H_Med_FRG_16
-- * AIRBASE.GermanyCW.H_Med_FRG_17
-- * AIRBASE.GermanyCW.H_Med_FRG_21
-- * AIRBASE.GermanyCW.H_Med_FRG_24
-- * AIRBASE.GermanyCW.H_Med_FRG_26
-- * AIRBASE.GermanyCW.H_Med_FRG_27
-- * AIRBASE.GermanyCW.H_Med_FRG_29
-- * AIRBASE.GermanyCW.H_Med_GDR_01
-- * AIRBASE.GermanyCW.H_Med_GDR_02
-- * AIRBASE.GermanyCW.H_Med_GDR_03
-- * AIRBASE.GermanyCW.H_Med_GDR_08
-- * AIRBASE.GermanyCW.H_Med_GDR_09
-- * AIRBASE.GermanyCW.H_Med_GDR_10
-- * AIRBASE.GermanyCW.H_Med_GDR_11
-- * AIRBASE.GermanyCW.H_Med_GDR_12
-- * AIRBASE.GermanyCW.H_Med_GDR_13
-- * AIRBASE.GermanyCW.H_Med_GDR_14
-- * AIRBASE.GermanyCW.H_Med_GDR_16
-- * AIRBASE.GermanyCW.H_Radar_FRG_02
-- * AIRBASE.GermanyCW.H_Radar_GDR_01
-- * AIRBASE.GermanyCW.H_Radar_GDR_02
-- * AIRBASE.GermanyCW.H_Radar_GDR_03
-- * AIRBASE.GermanyCW.H_Radar_GDR_04
-- * AIRBASE.GermanyCW.H_Radar_GDR_05
-- * AIRBASE.GermanyCW.H_Radar_GDR_06
-- * AIRBASE.GermanyCW.H_Radar_GDR_07
-- * AIRBASE.GermanyCW.H_Radar_GDR_08
-- * AIRBASE.GermanyCW.H_Radar_GDR_09
-- * AIRBASE.GermanyCW.Hahn
-- * AIRBASE.GermanyCW.Haina
-- * AIRBASE.GermanyCW.Hamburg
-- * AIRBASE.GermanyCW.Hamburg_Finkenwerder
-- * AIRBASE.GermanyCW.Hannover
-- * AIRBASE.GermanyCW.Hasselfelde
-- * AIRBASE.GermanyCW.Herrenteich
-- * AIRBASE.GermanyCW.Hildesheim
-- * AIRBASE.GermanyCW.Hockenheim
-- * AIRBASE.GermanyCW.Holzdorf
-- * AIRBASE.GermanyCW.Kammermark
-- * AIRBASE.GermanyCW.Koethen
-- * AIRBASE.GermanyCW.Laage
-- * AIRBASE.GermanyCW.Langenselbold
-- * AIRBASE.GermanyCW.Leipzig_Halle
-- * AIRBASE.GermanyCW.Leipzig_Mockau
-- * AIRBASE.GermanyCW.Laerz
-- * AIRBASE.GermanyCW.Luebeck
-- * AIRBASE.GermanyCW.Lueneburg
-- * AIRBASE.GermanyCW.Mahlwinkel
-- * AIRBASE.GermanyCW.Mendig
-- * AIRBASE.GermanyCW.Merseburg
-- * AIRBASE.GermanyCW.Neubrandenburg
-- * AIRBASE.GermanyCW.Neuruppin
-- * AIRBASE.GermanyCW.Northeim
-- * AIRBASE.GermanyCW.Ober_Moerlen
-- * AIRBASE.GermanyCW.Obermehler_Schlotheim
-- * AIRBASE.GermanyCW.Parchim
-- * AIRBASE.GermanyCW.Peenemuende
-- * AIRBASE.GermanyCW.Pferdsfeld
-- * AIRBASE.GermanyCW.Pinnow
-- * AIRBASE.GermanyCW.Pottschutthoehe
-- * AIRBASE.GermanyCW.Ramstein
-- * AIRBASE.GermanyCW.Rinteln
-- * AIRBASE.GermanyCW.Schweinfurt
-- * AIRBASE.GermanyCW.Schoenefeld
-- * AIRBASE.GermanyCW.Sembach
-- * AIRBASE.GermanyCW.Spangdahlem
-- * AIRBASE.GermanyCW.Sperenberg
-- * AIRBASE.GermanyCW.Stendal
-- * AIRBASE.GermanyCW.Tegel
-- * AIRBASE.GermanyCW.Tempelhof
-- * AIRBASE.GermanyCW.Tutow
-- * AIRBASE.GermanyCW.Uelzen
-- * AIRBASE.GermanyCW.Uetersen
-- * AIRBASE.GermanyCW.Ummern
-- * AIRBASE.GermanyCW.Verden_Scharnhorst
-- * AIRBASE.GermanyCW.Walldorf
-- * AIRBASE.GermanyCW.Waren_Vielist
-- * AIRBASE.GermanyCW.Werneuchen
-- * AIRBASE.GermanyCW.Weser_Wuemme
-- * AIRBASE.GermanyCW.Wiesbaden
-- * AIRBASE.GermanyCW.Wismar
-- * AIRBASE.GermanyCW.Worms
-- * AIRBASE.GermanyCW.Wunstorf
-- * AIRBASE.GermanyCW.Zerbst
-- * AIRBASE.GermanyCW.Zweibruecken
--
-- @field GermanyCW
AIRBASE.GermanyCW = {
["Airracing_Frankfurt"] = "Airracing Frankfurt",
["Airracing_Koblenz"] = "Airracing Koblenz",
["Airracing_Luebeck"] = "Airracing Lubeck",
["Allstedt"] = "Allstedt",
["Alt_Daber"] = "Alt Daber",
["Altes_Lager"] = "Altes Lager",
["Bad_Duerkheim"] = "Bad Durkheim",
["Barth"] = "Barth",
["Bienenfarm"] = "Bienenfarm",
["Bindersleben"] = "Bindersleben",
["Bitburg"] = "Bitburg",
["Braunschweig"] = "Braunschweig",
["Bremen"] = "Bremen",
["Briest"] = "Briest",
["Buechel"] = "Buchel",
["Bueckeburg"] = "Buckeburg",
["Celle"] = "Celle",
["Cochstedt"] = "Cochstedt",
["Damgarten"] = "Damgarten",
["Dedelow"] = "Dedelow",
["Dessau"] = "Dessau",
["Fassberg"] = "Fassberg",
["Finow"] = "Finow",
["Frankfurt"] = "Frankfurt",
["Fritzlar"] = "Fritzlar",
["Fulda"] = "Fulda",
["Gardelegen"] = "Gardelegen",
["Gatow"] = "Gatow",
["Gelnhausen"] = "Gelnhausen",
["Giebelstadt"] = "Giebelstadt",
["Glindbruchkippe_"] = "Glindbruchkippe ",
["Gross_Doelln"] = "Gross Dolln",
["Gross_Mohrdorf"] = "Gross Mohrdorf",
["Grosse_Wiese"] = "Grosse Wiese",
["Gaerz"] = "Garz",
["Guetersloh"] = "Gutersloh",
["H_FRG_01"] = "H FRG 01",
["H_FRG_02"] = "H FRG 02",
["H_FRG_03"] = "H FRG 03",
["H_FRG_04"] = "H FRG 04",
["H_FRG_05"] = "H FRG 05",
["H_FRG_06"] = "H FRG 06",
["H_FRG_07"] = "H FRG 07",
["H_FRG_08"] = "H FRG 08",
["H_FRG_09"] = "H FRG 09",
["H_FRG_10"] = "H FRG 10",
["H_FRG_11"] = "H FRG 11",
["H_FRG_12"] = "H FRG 12",
["H_FRG_13"] = "H FRG 13",
["H_FRG_14"] = "H FRG 14",
["H_FRG_15"] = "H FRG 15",
["H_FRG_16"] = "H FRG 16",
["H_FRG_17"] = "H FRG 17",
["H_FRG_18"] = "H FRG 18",
["H_FRG_19"] = "H FRG 19",
["H_FRG_20"] = "H FRG 20",
["H_FRG_21"] = "H FRG 21",
["H_FRG_23"] = "H FRG 23",
["H_FRG_25"] = "H FRG 25",
["H_FRG_27"] = "H FRG 27",
["H_FRG_30"] = "H FRG 30",
["H_FRG_31"] = "H FRG 31",
["H_FRG_32"] = "H FRG 32",
["H_FRG_34"] = "H FRG 34",
["H_FRG_38"] = "H FRG 38",
["H_FRG_39"] = "H FRG 39",
["H_FRG_40"] = "H FRG 40",
["H_FRG_41"] = "H FRG 41",
["H_FRG_42"] = "H FRG 42",
["H_FRG_43"] = "H FRG 43",
["H_FRG_44"] = "H FRG 44",
["H_FRG_45"] = "H FRG 45",
["H_FRG_46"] = "H FRG 46",
["H_FRG_47"] = "H FRG 47",
["H_FRG_48"] = "H FRG 48",
["H_FRG_49"] = "H FRG 49",
["H_FRG_50"] = "H FRG 50",
["H_FRG_51"] = "H FRG 51",
["H_GDR_01"] = "H GDR 01",
["H_GDR_02"] = "H GDR 02",
["H_GDR_03"] = "H GDR 03",
["H_GDR_04"] = "H GDR 04",
["H_GDR_05"] = "H GDR 05",
["H_GDR_06"] = "H GDR 06",
["H_GDR_07"] = "H GDR 07",
["H_GDR_08"] = "H GDR 08",
["H_GDR_09"] = "H GDR 09",
["H_GDR_10"] = "H GDR 10",
["H_GDR_11"] = "H GDR 11",
["H_GDR_12"] = "H GDR 12",
["H_GDR_13"] = "H GDR 13",
["H_GDR_14"] = "H GDR 14",
["H_GDR_15"] = "H GDR 15",
["H_GDR_16"] = "H GDR 16",
["H_GDR_17"] = "H GDR 17",
["H_GDR_18"] = "H GDR 18",
["H_GDR_19"] = "H GDR 19",
["H_GDR_21"] = "H GDR 21",
["H_GDR_22"] = "H GDR 22",
["H_GDR_24"] = "H GDR 24",
["H_GDR_25"] = "H GDR 25",
["H_GDR_26"] = "H GDR 26",
["H_GDR_30"] = "H GDR 30",
["H_GDR_31"] = "H GDR 31",
["H_GDR_32"] = "H GDR 32",
["H_GDR_33"] = "H GDR 33",
["H_Med_FRG_02"] = "H Med FRG 02",
["H_Med_FRG_04"] = "H Med FRG 04",
["H_Med_FRG_06"] = "H Med FRG 06",
["H_Med_FRG_09"] = "H Med FRG 09",
["H_Med_FRG_11"] = "H Med FRG 11",
["H_Med_FRG_12"] = "H Med FRG 12",
["H_Med_FRG_13"] = "H Med FRG 13",
["H_Med_FRG_14"] = "H Med FRG 14",
["H_Med_FRG_15"] = "H Med FRG 15",
["H_Med_FRG_16"] = "H Med FRG 16",
["H_Med_FRG_17"] = "H Med FRG 17",
["H_Med_FRG_21"] = "H Med FRG 21",
["H_Med_FRG_24"] = "H Med FRG 24",
["H_Med_FRG_26"] = "H Med FRG 26",
["H_Med_FRG_27"] = "H Med FRG 27",
["H_Med_FRG_29"] = "H Med FRG 29",
["H_Med_GDR_01"] = "H Med GDR 01",
["H_Med_GDR_02"] = "H Med GDR 02",
["H_Med_GDR_03"] = "H Med GDR 03",
["H_Med_GDR_08"] = "H Med GDR 08",
["H_Med_GDR_09"] = "H Med GDR 09",
["H_Med_GDR_10"] = "H Med GDR 10",
["H_Med_GDR_11"] = "H Med GDR 11",
["H_Med_GDR_12"] = "H Med GDR 12",
["H_Med_GDR_13"] = "H Med GDR 13",
["H_Med_GDR_14"] = "H Med GDR 14",
["H_Med_GDR_16"] = "H Med GDR 16",
["H_Radar_FRG_02"] = "H Radar FRG 02",
["H_Radar_GDR_01"] = "H Radar GDR 01",
["H_Radar_GDR_02"] = "H Radar GDR 02",
["H_Radar_GDR_03"] = "H Radar GDR 03",
["H_Radar_GDR_04"] = "H Radar GDR 04",
["H_Radar_GDR_05"] = "H Radar GDR 05",
["H_Radar_GDR_06"] = "H Radar GDR 06",
["H_Radar_GDR_07"] = "H Radar GDR 07",
["H_Radar_GDR_08"] = "H Radar GDR 08",
["H_Radar_GDR_09"] = "H Radar GDR 09",
["Hahn"] = "Hahn",
["Haina"] = "Haina",
["Hamburg"] = "Hamburg",
["Hamburg_Finkenwerder"] = "Hamburg Finkenwerder",
["Hannover"] = "Hannover",
["Hasselfelde"] = "Hasselfelde",
["Herrenteich"] = "Herrenteich",
["Hildesheim"] = "Hildesheim",
["Hockenheim"] = "Hockenheim",
["Holzdorf"] = "Holzdorf",
["Kammermark"] = "Kammermark",
["Koethen"] = "Kothen",
["Laage"] = "Laage",
["Langenselbold"] = "Langenselbold",
["Leipzig_Halle"] = "Leipzig Halle",
["Leipzig_Mockau"] = "Leipzig Mockau",
["Laerz"] = "Larz",
["Luebeck"] = "Lubeck",
["Lueneburg"] = "Luneburg",
["Mahlwinkel"] = "Mahlwinkel",
["Mendig"] = "Mendig",
["Merseburg"] = "Merseburg",
["Neubrandenburg"] = "Neubrandenburg",
["Neuruppin"] = "Neuruppin",
["Northeim"] = "Northeim",
["Ober_Moerlen"] = "Ober-Morlen",
["Obermehler_Schlotheim"] = "Obermehler Schlotheim",
["Parchim"] = "Parchim",
["Peenemuende"] = "Peenemunde",
["Pferdsfeld"] = "Pferdsfeld",
["Pinnow"] = "Pinnow",
["Pottschutthoehe"] = "Pottschutthohe",
["Ramstein"] = "Ramstein",
["Rinteln"] = "Rinteln",
["Schweinfurt"] = "Schweinfurt",
["Schoenefeld"] = "Schonefeld",
["Sembach"] = "Sembach",
["Spangdahlem"] = "Spangdahlem",
["Sperenberg"] = "Sperenberg",
["Stendal"] = "Stendal",
["Tegel"] = "Tegel",
["Tempelhof"] = "Tempelhof",
["Tutow"] = "Tutow",
["Uelzen"] = "Uelzen",
["Uetersen"] = "Uetersen",
["Ummern"] = "Ummern",
["Verden_Scharnhorst"] = "Verden-Scharnhorst",
["Walldorf"] = "Walldorf",
["Waren_Vielist"] = "Waren Vielist",
["Werneuchen"] = "Werneuchen",
["Weser_Wuemme"] = "Weser Wumme",
["Wiesbaden"] = "Wiesbaden",
["Wismar"] = "Wismar",
["Worms"] = "Worms",
["Wunstorf"] = "Wunstorf",
["Zerbst"] = "Zerbst",
["Zweibruecken"] = "Zweibrucken",
}
--- AIRBASE.ParkingSpot ".Coordinate, ".TerminalID", ".TerminalType", ".TOAC", ".Free", ".TerminalID0", ".DistToRwy". --- AIRBASE.ParkingSpot ".Coordinate, ".TerminalID", ".TerminalType", ".TOAC", ".Free", ".TerminalID0", ".DistToRwy".
-- @type AIRBASE.ParkingSpot -- @type AIRBASE.ParkingSpot
-- @field Core.Point#COORDINATE Coordinate Coordinate of the parking spot. -- @field Core.Point#COORDINATE Coordinate Coordinate of the parking spot.
@ -2315,7 +2722,7 @@ function AIRBASE:GetRunwayByName(Name)
-- Name including L or R, e.g. "31L". -- Name including L or R, e.g. "31L".
local name=self:GetRunwayName(runway) local name=self:GetRunwayName(runway)
self:T("Check Runway Name: "..name)
if name==Name:upper() then if name==Name:upper() then
return runway return runway
end end
@ -2342,7 +2749,7 @@ function AIRBASE:_InitRunways(IncludeInverse)
--- Function to create a runway data table. --- Function to create a runway data table.
local function _createRunway(name, course, width, length, center) local function _createRunway(name, course, width, length, center)
self:T("Create Runway: name = "..name)
-- Bearing in rad. -- Bearing in rad.
local bearing=-1*course local bearing=-1*course
@ -2358,6 +2765,7 @@ function AIRBASE:_InitRunways(IncludeInverse)
runway.name=string.format("%02d", tonumber(namefromheading)) runway.name=string.format("%02d", tonumber(namefromheading))
else else
runway.name=string.format("%02d", tonumber(name)) runway.name=string.format("%02d", tonumber(name))
self:I("RunwayName: "..runway.name)
end end
--runway.name=string.format("%02d", tonumber(name)) --runway.name=string.format("%02d", tonumber(name))
@ -2679,7 +3087,7 @@ function AIRBASE:GetRunwayData(magvar, mark)
runway.endpoint=c2 runway.endpoint=c2
-- Debug info. -- Debug info.
--self:I(string.format("Airbase %s: Adding runway id=%s, heading=%03d, length=%d m i=%d j=%d", self:GetName(), runway.idx, runway.heading, runway.length, i, j)) self:T(string.format("Airbase %s: Adding runway id=%s, heading=%03d, length=%d m i=%d j=%d", self:GetName(), runway.idx, runway.heading, runway.length, i, j))
-- Debug mark -- Debug mark
if mark then if mark then

View File

@ -1843,7 +1843,10 @@ end
-- @return #table -- @return #table
function GROUP:GetTemplateRoutePoints() function GROUP:GetTemplateRoutePoints()
local GroupName = self:GetName() local GroupName = self:GetName()
return UTILS.DeepCopy( _DATABASE:GetGroupTemplate( GroupName ).route.points ) local template = _DATABASE:GetGroupTemplate(GroupName)
if template and template.route and template.route.points then
return UTILS.DeepCopy(template.route.points)
end
end end