diff --git a/Moose Development/Moose/Core/Event.lua b/Moose Development/Moose/Core/Event.lua index f22185616..c5893325b 100644 --- a/Moose Development/Moose/Core/Event.lua +++ b/Moose Development/Moose/Core/Event.lua @@ -1372,11 +1372,12 @@ function EVENT:onEvent( Event ) -- Scenery --- 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.IniUnit = SCENERY:Register( Event.IniDCSUnitName, Event.initiator ) - Event.IniCategory = Event.IniDCSUnit.getDesc and Event.IniDCSUnit:getDesc().category - Event.IniTypeName = Event.initiator:isExist() and Event.IniDCSUnit:getTypeName() or "SCENERY" + Event.IniCategory = (Event.IniDCSUnit and Event.IniDCSUnit.getDesc ) and Event.IniDCSUnit:getDesc().category + 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 --- diff --git a/Moose Development/Moose/Core/Set.lua b/Moose Development/Moose/Core/Set.lua index c66b3cf57..6d41edf12 100644 --- a/Moose Development/Moose/Core/Set.lua +++ b/Moose Development/Moose/Core/Set.lua @@ -8755,7 +8755,6 @@ do -- SET_DYNAMICCARGO -- @field #SET_DYNAMICCARGO SET_DYNAMICCARGO SET_DYNAMICCARGO = { ClassName = "SET_DYNAMICCARGO", - Filter = {}, Set = {}, List = {}, Index = {}, diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index 70f4f0848..f53f953d0 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -501,6 +501,7 @@ ATIS.Alphabet = { -- @field #number Kola +15° (East). -- @field #number Afghanistan +3° (East). -- @field #number Iraq +4.4° (East). +-- @field #number GermanyCW +0.1° (East). ATIS.RunwayM2T = { Caucasus = 0, Nevada = 12, @@ -513,7 +514,8 @@ ATIS.RunwayM2T = { SinaiMap = 5, Kola = 15, Afghanistan = 3, - Iraq=4.4 + Iraq=4.4, + GermanyCW=0.1, } --- Whether ICAO phraseology is used for ATIS broadcasts. @@ -530,6 +532,7 @@ ATIS.RunwayM2T = { -- @field #boolean Kola true. -- @field #boolean Afghanistan true. -- @field #boolean Iraq true. +-- @field #boolean GermanyCW true. ATIS.ICAOPhraseology = { Caucasus = true, Nevada = false, @@ -543,6 +546,7 @@ ATIS.ICAOPhraseology = { Kola = true, Afghanistan = true, Iraq = true, + GermanyCW = true, } --- Nav point data. diff --git a/Moose Development/Moose/Ops/EasyGCICAP.lua b/Moose Development/Moose/Ops/EasyGCICAP.lua index c5f0ebb0b..4fcd7c2cb 100644 --- a/Moose Development/Moose/Ops/EasyGCICAP.lua +++ b/Moose Development/Moose/Ops/EasyGCICAP.lua @@ -62,6 +62,7 @@ -- @field #number repeatsonfailure -- @field Core.Set#SET_ZONE GoZoneSet -- @field Core.Set#SET_ZONE NoGoZoneSet +-- @field Core.Set#SET_ZONE ConflictZoneSet -- @field #boolean Monitor -- @field #boolean TankerInvisible -- @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. -- 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 -- -- -- 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") -- -- -- 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" ) )) --- -- We'll attack intruders also here --- mywing:AddAcceptZone(ZONE_POLYGON:New("Red Defense Zone", GROUP:FindByName( "Red Defense Zone" ))) +-- -- We'll attack intruders also here - conflictzones can overlap borders(!) - limited zone of engagement +-- mywing:AddConflictZone(ZONE_POLYGON:New("Red Defense Zone", GROUP:FindByName( "Red Defense Zone" ))) -- -- We'll leave the reds alone on their turf -- mywing:AddRejectZone(ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) )) -- @@ -125,10 +131,10 @@ -- -- Set up borders on map -- local BlueBorder = ZONE_POLYGON:New( "Blue Border", GROUP:FindByName( "Blue Border" ) ) -- BlueBorder:DrawZone(-1,{0,0,1},1,FillColor,FillAlpha,1,true) --- local BlueNoGoZone = ZONE_POLYGON:New("Red Defense Zone", GROUP:FindByName( "Red Defense Zone" )) --- BlueNoGoZone:DrawZone(-1,{1,1,0},1,FillColor,FillAlpha,2,true) --- local BlueNoGoZone2 = ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ) --- BlueNoGoZone2:DrawZone(-1,{1,0,0},1,FillColor,FillAlpha,4,true) +-- local ConflictZone = ZONE_POLYGON:New("Red Defense Zone", GROUP:FindByName( "Red Defense Zone" )) +-- ConflictZone:DrawZone(-1,{1,1,0},1,FillColor,FillAlpha,2,true) +-- local BlueNoGoZone = ZONE_POLYGON:New( "Red Border", GROUP:FindByName( "Red Border" ) ) +-- BlueNoGoZone:DrawZone(-1,{1,0,0},1,FillColor,FillAlpha,4,true) -- -- ### Add a second airwing with squads and own CAP point (optional) -- @@ -210,6 +216,7 @@ EASYGCICAP = { repeatsonfailure = 3, GoZoneSet = nil, NoGoZoneSet = nil, + ConflictZoneSet = nil, Monitor = false, TankerInvisible = true, CapFormation = nil, @@ -252,7 +259,7 @@ EASYGCICAP = { --- EASYGCICAP class version. -- @field #string version -EASYGCICAP.version="0.1.17" +EASYGCICAP.version="0.1.18" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list @@ -287,6 +294,7 @@ function EASYGCICAP:New(Alias, AirbaseName, Coalition, EWRName) self.airbase = AIRBASE:FindByName(self.airbasename) self.GoZoneSet = SET_ZONE:New() self.NoGoZoneSet = SET_ZONE:New() + self.ConflictZoneSet = SET_ZONE:New() self.resurrection = 900 self.capspeed = 300 self.capalt = 25000 @@ -1113,7 +1121,7 @@ end -- @param Core.Zone#ZONE_BASE Zone -- @return #EASYGCICAP self function EASYGCICAP:AddAcceptZone(Zone) - self:T(self.lid.."AddAcceptZone0") + self:T(self.lid.."AddAcceptZone") self.GoZoneSet:AddZone(Zone) return self end @@ -1128,6 +1136,18 @@ function EASYGCICAP:AddRejectZone(Zone) return self 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. -- @param #EASYGCICAP self -- @param #table ReadyFlightGroups ReadyFlightGroups @@ -1193,6 +1213,7 @@ function EASYGCICAP:_AssignIntercept(Cluster) local ctlpts = self.ManagedCP local MaxAliveMissions = self.MaxAliveMissions --* self.capgrouping local nogozoneset = self.NoGoZoneSet + local conflictzoneset = self.ConflictZoneSet local ReadyFlightGroups = self.ReadyFlightGroups -- Aircraft? @@ -1271,18 +1292,22 @@ function EASYGCICAP:_AssignIntercept(Cluster) if nogozoneset:Count() > 0 then InterceptAuftrag:AddConditionSuccess( - function(group,zoneset) + function(group,zoneset,conflictset) local success = false if group and group:IsAlive() then local coord = group:GetCoordinate() - if coord and zoneset:IsCoordinateInZone(coord) then + if coord and zoneset:Count() > 0 and zoneset:IsCoordinateInZone(coord) then success = true end + if coord and conflictset:Count() > 0 and conflictset:IsCoordinateInZone(coord) then + success = false + end end return success end, contact.group, - nogozoneset + nogozoneset, + conflictzoneset ) end @@ -1316,6 +1341,7 @@ function EASYGCICAP:_StartIntel() BlueIntel:SetForgetTime(300) BlueIntel:SetAcceptZones(self.GoZoneSet) BlueIntel:SetRejectZones(self.NoGoZoneSet) + BlueIntel:SetConflictZones(self.ConflictZoneSet) BlueIntel:SetVerbosity(0) BlueIntel:Start() diff --git a/Moose Development/Moose/Utilities/Enums.lua b/Moose Development/Moose/Utilities/Enums.lua index a269fb972..d4bbf158d 100644 --- a/Moose Development/Moose/Utilities/Enums.lua +++ b/Moose Development/Moose/Utilities/Enums.lua @@ -1331,6 +1331,12 @@ ENUMS.Storage.weapons.OH58.Smk_Grenade_Yellow = {4,5,9,491} -- Apache ENUMS.Storage.weapons.AH64D.AN_APG78 = {4,15,44,2114} 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 diff --git a/Moose Development/Moose/Utilities/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua index d824bbd4f..84fef4f6d 100644 --- a/Moose Development/Moose/Utilities/Utils.lua +++ b/Moose Development/Moose/Utilities/Utils.lua @@ -58,6 +58,7 @@ BIGSMOKEPRESET = { -- @field #string Kola Kola map. -- @field #string Afghanistan Afghanistan map -- @field #string Iraq Iraq map +-- @field #string GermanyCW Germany Cold War map DCSMAP = { Caucasus="Caucasus", NTTR="Nevada", @@ -70,7 +71,8 @@ DCSMAP = { Sinai="SinaiMap", Kola="Kola", Afghanistan="Afghanistan", - Iraq="Iraq" + Iraq="Iraq", + GermanyCW="GermanyCW", } @@ -1834,7 +1836,9 @@ end -- * 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 -- * 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. function UTILS.GetMagneticDeclination(map) @@ -1866,6 +1870,8 @@ function UTILS.GetMagneticDeclination(map) declination=3 elseif map==DCSMAP.Iraq then declination=4.4 + elseif map==DCSMAP.GermanyCW then + declination=0.1 else declination=0 end @@ -2099,6 +2105,10 @@ function UTILS.GMTToLocalTimeDifference() return 3 -- Currently map is +2 but should be +3 (DCS bug?) elseif theatre==DCSMAP.Afghanistan then 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 BASE:E(string.format("ERROR: Unknown Map %s in UTILS.GMTToLocal function. Returning 0", tostring(theatre))) return 0 diff --git a/Moose Development/Moose/Wrapper/Airbase.lua b/Moose Development/Moose/Wrapper/Airbase.lua index df6a95ee0..9c0928486 100644 --- a/Moose Development/Moose/Wrapper/Airbase.lua +++ b/Moose Development/Moose/Wrapper/Airbase.lua @@ -911,6 +911,413 @@ AIRBASE.Iraq = { ["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". -- @type AIRBASE.ParkingSpot -- @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". local name=self:GetRunwayName(runway) - + self:T("Check Runway Name: "..name) if name==Name:upper() then return runway end @@ -2342,7 +2749,7 @@ function AIRBASE:_InitRunways(IncludeInverse) --- Function to create a runway data table. local function _createRunway(name, course, width, length, center) - + self:T("Create Runway: name = "..name) -- Bearing in rad. local bearing=-1*course @@ -2358,6 +2765,7 @@ function AIRBASE:_InitRunways(IncludeInverse) runway.name=string.format("%02d", tonumber(namefromheading)) else runway.name=string.format("%02d", tonumber(name)) + self:I("RunwayName: "..runway.name) end --runway.name=string.format("%02d", tonumber(name)) @@ -2679,7 +3087,7 @@ function AIRBASE:GetRunwayData(magvar, mark) runway.endpoint=c2 -- 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 if mark then @@ -2806,8 +3214,8 @@ function AIRBASE:GetRunwayIntoWind(PreferLeft) -- Loop over runways. local dotmin=nil - for i,_runway in pairs(runways) do - local runway=_runway --#AIRBASE.Runway + for i ,_runway in pairs(runways) do + local runway=_runway --#AIRBASE.Runway if PreferLeft==nil or PreferLeft==runway.isLeft then diff --git a/Moose Development/Moose/Wrapper/Group.lua b/Moose Development/Moose/Wrapper/Group.lua index db102dc8f..fa597e461 100644 --- a/Moose Development/Moose/Wrapper/Group.lua +++ b/Moose Development/Moose/Wrapper/Group.lua @@ -1843,7 +1843,10 @@ end -- @return #table function GROUP:GetTemplateRoutePoints() 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