mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Merge branch 'develop' into FF/OpsDev
This commit is contained in:
@@ -451,7 +451,6 @@ AIRBASE.TheChannel = {
|
||||
-- * AIRBASE.Syria.Al_Dumayr
|
||||
-- * AIRBASE.Syria.Al_Qusayr
|
||||
-- * AIRBASE.Syria.Aleppo
|
||||
-- * AIRBASE.Syria.Amman
|
||||
-- * AIRBASE.Syria.An_Nasiriyah
|
||||
-- * AIRBASE.Syria.At_Tanf
|
||||
-- * AIRBASE.Syria.Bassel_Al_Assad
|
||||
@@ -513,8 +512,9 @@ AIRBASE.TheChannel = {
|
||||
-- * AIRBASE.Syria.Wujah_Al_Hajar
|
||||
-- * AIRBASE.Syria.Ben_Gurion
|
||||
-- * AIRBASE.Syria.Hatzor
|
||||
-- * AIRBASE.Syria.Palmashim
|
||||
-- * AIRBASE.Syria.Palmachim
|
||||
-- * AIRBASE.Syria.Tel_Nof
|
||||
-- * AIRBASE.Syria.Marka
|
||||
--
|
||||
--@field Syria
|
||||
AIRBASE.Syria={
|
||||
@@ -524,7 +524,6 @@ AIRBASE.Syria={
|
||||
["Al_Dumayr"] = "Al-Dumayr",
|
||||
["Al_Qusayr"] = "Al Qusayr",
|
||||
["Aleppo"] = "Aleppo",
|
||||
["Amman"] = "Amman",
|
||||
["An_Nasiriyah"] = "An Nasiriyah",
|
||||
["At_Tanf"] = "At Tanf",
|
||||
["Bassel_Al_Assad"] = "Bassel Al-Assad",
|
||||
@@ -556,6 +555,7 @@ AIRBASE.Syria={
|
||||
["Kuweires"] = "Kuweires",
|
||||
["Lakatamia"] = "Lakatamia",
|
||||
["Larnaca"] = "Larnaca",
|
||||
["Marka"] = "Marka",
|
||||
["Marj_Ruhayyil"] = "Marj Ruhayyil",
|
||||
["Marj_as_Sultan_North"] = "Marj as Sultan North",
|
||||
["Marj_as_Sultan_South"] = "Marj as Sultan South",
|
||||
@@ -586,7 +586,7 @@ AIRBASE.Syria={
|
||||
["Wujah_Al_Hajar"] = "Wujah Al Hajar",
|
||||
["Ben_Gurion"] = "Ben Gurion",
|
||||
["Hatzor"] = "Hatzor",
|
||||
["Palmashim"] = "Palmashim",
|
||||
["Palmachim"] = "Palmachim",
|
||||
["Tel_Nof"] = "Tel Nof",
|
||||
}
|
||||
|
||||
@@ -613,6 +613,35 @@ AIRBASE.MarianaIslands = {
|
||||
["Tinian_Intl"] = "Tinian Intl",
|
||||
}
|
||||
|
||||
--- Airbase of the Marianas WWII map
|
||||
--
|
||||
-- * AIRBASE.MarianaIslandsWWII.Agana
|
||||
-- * AIRBASE.MarianaIslandsWWII.Airfield_3
|
||||
-- * AIRBASE.MarianaIslandsWWII.Charon_Kanoa
|
||||
-- * AIRBASE.MarianaIslandsWWII.Gurguan_Point
|
||||
-- * AIRBASE.MarianaIslandsWWII.Isley
|
||||
-- * AIRBASE.MarianaIslandsWWII.Kagman
|
||||
-- * AIRBASE.MarianaIslandsWWII.Marpi
|
||||
-- * AIRBASE.MarianaIslandsWWII.Orote
|
||||
-- * AIRBASE.MarianaIslandsWWII.Pagan
|
||||
-- * AIRBASE.MarianaIslandsWWII.Rota
|
||||
-- * AIRBASE.MarianaIslandsWWII.Ushi
|
||||
-- @field AIRBASE.MarianaIslandsWWII
|
||||
AIRBASE.MarianaIslandsWWII =
|
||||
{
|
||||
["Agana"] = "Agana",
|
||||
["Airfield_3"] = "Airfield 3",
|
||||
["Charon_Kanoa"] = "Charon Kanoa",
|
||||
["Gurguan_Point"] = "Gurguan Point",
|
||||
["Isley"] = "Isley",
|
||||
["Kagman"] = "Kagman",
|
||||
["Marpi"] = "Marpi",
|
||||
["Orote"] = "Orote",
|
||||
["Pagan"] = "Pagan",
|
||||
["Rota"] = "Rota",
|
||||
["Ushi"] = "Ushi",
|
||||
}
|
||||
|
||||
--- Airbases of the South Atlantic map:
|
||||
--
|
||||
-- * AIRBASE.SouthAtlantic.Almirante_Schroeders
|
||||
@@ -676,51 +705,56 @@ AIRBASE.SouthAtlantic={
|
||||
|
||||
--- Airbases of the Sinai map:
|
||||
--
|
||||
-- * AIRBASE.Sinai.Abu_Rudeis
|
||||
-- * AIRBASE.Sinai.Abu_Suwayr
|
||||
-- * AIRBASE.Sinai.Al_Bahr_al_Ahmar
|
||||
-- * AIRBASE.Sinai.Al_Ismailiyah
|
||||
-- * AIRBASE.Sinai.Al_Khatatbah
|
||||
-- * AIRBASE.Sinai.Al_Mansurah
|
||||
-- * AIRBASE.Sinai.Al_Rahmaniyah_Air_Base
|
||||
-- * AIRBASE.Sinai.As_Salihiyah
|
||||
-- * AIRBASE.Sinai.AzZaqaziq
|
||||
-- * AIRBASE.Sinai.Baluza
|
||||
-- * AIRBASE.Sinai.Ben_Gurion
|
||||
-- * AIRBASE.Sinai.Beni_Suef
|
||||
-- * AIRBASE.Sinai.Bilbeis_Air_Base
|
||||
-- * AIRBASE.Sinai.Bir_Hasanah
|
||||
-- * AIRBASE.Sinai.Birma_Air_Base
|
||||
-- * AIRBASE.Sinai.Borj_El_Arab_International_Airport
|
||||
-- * AIRBASE.Sinai.Cairo_International_Airport
|
||||
-- * AIRBASE.Sinai.Cairo_West
|
||||
-- * AIRBASE.Sinai.Difarsuwar_Airfield
|
||||
-- * AIRBASE.Sinai.El_Arish
|
||||
-- * AIRBASE.Sinai.El_Gora
|
||||
-- * AIRBASE.Sinai.El_Minya
|
||||
-- * AIRBASE.Sinai.Fayed
|
||||
-- * AIRBASE.Sinai.Gebel_El_Basur_Air_Base
|
||||
-- * AIRBASE.Sinai.Hatzerim
|
||||
-- * AIRBASE.Sinai.Hatzor
|
||||
-- * AIRBASE.Sinai.Hurghada_International_Airport
|
||||
-- * AIRBASE.Sinai.Inshas_Airbase
|
||||
-- * AIRBASE.Sinai.Jiyanklis_Air_Base
|
||||
-- * AIRBASE.Sinai.Kedem
|
||||
-- * AIRBASE.Sinai.Kibrit_Air_Base
|
||||
-- * AIRBASE.Sinai.Kom_Awshim
|
||||
-- * AIRBASE.Sinai.Melez
|
||||
-- * AIRBASE.Sinai.Nevatim
|
||||
-- * AIRBASE.Sinai.Ovda
|
||||
-- * AIRBASE.Sinai.Palmachim
|
||||
-- * AIRBASE.Sinai.Quwaysina
|
||||
-- * AIRBASE.Sinai.Ramon_Airbase
|
||||
-- * AIRBASE.Sinai.Ramon_International_Airport
|
||||
-- * AIRBASE.Sinai.Sde_Dov
|
||||
-- * AIRBASE.Sinai.Sharm_El_Sheikh_International_Airport
|
||||
-- * AIRBASE.Sinai.St_Catherine
|
||||
-- * AIRBASE.Sinai.Tel_Nof
|
||||
-- * AIRBASE.Sinai.Wadi_Abu_Rish
|
||||
-- * AIRBASE.Sinai.Wadi_al_Jandali
|
||||
-- * AIRBASE.SinaiMap.Abu_Rudeis
|
||||
-- * AIRBASE.SinaiMap.Abu_Suwayr
|
||||
-- * AIRBASE.SinaiMap.Al_Bahr_al_Ahmar
|
||||
-- * AIRBASE.SinaiMap.Al_Ismailiyah
|
||||
-- * AIRBASE.SinaiMap.Al_Khatatbah
|
||||
-- * AIRBASE.SinaiMap.Al_Mansurah
|
||||
-- * AIRBASE.SinaiMap.Al_Rahmaniyah_Air_Base
|
||||
-- * AIRBASE.SinaiMap.As_Salihiyah
|
||||
-- * AIRBASE.SinaiMap.AzZaqaziq
|
||||
-- * AIRBASE.SinaiMap.Baluza
|
||||
-- * AIRBASE.SinaiMap.Ben_Gurion
|
||||
-- * AIRBASE.SinaiMap.Beni_Suef
|
||||
-- * AIRBASE.SinaiMap.Bilbeis_Air_Base
|
||||
-- * AIRBASE.SinaiMap.Bir_Hasanah
|
||||
-- * AIRBASE.SinaiMap.Birma_Air_Base
|
||||
-- * AIRBASE.SinaiMap.Borg_El_Arab_International_Airport
|
||||
-- * AIRBASE.SinaiMap.Cairo_International_Airport
|
||||
-- * AIRBASE.SinaiMap.Cairo_West
|
||||
-- * AIRBASE.SinaiMap.Damascus_Intl
|
||||
-- * AIRBASE.SinaiMap.Difarsuwar_Airfield
|
||||
-- * AIRBASE.SinaiMap.El_Arish
|
||||
-- * AIRBASE.SinaiMap.El_Gora
|
||||
-- * AIRBASE.SinaiMap.El_Minya
|
||||
-- * AIRBASE.SinaiMap.Fayed
|
||||
-- * AIRBASE.SinaiMap.Gebel_El_Basur_Air_Base
|
||||
-- * AIRBASE.SinaiMap.Hatzerim
|
||||
-- * AIRBASE.SinaiMap.Hatzor
|
||||
-- * AIRBASE.SinaiMap.Hurghada_International_Airport
|
||||
-- * AIRBASE.SinaiMap.Inshas_Airbase
|
||||
-- * AIRBASE.SinaiMap.Jiyanklis_Air_Base
|
||||
-- * AIRBASE.SinaiMap.Kedem
|
||||
-- * AIRBASE.SinaiMap.Kibrit_Air_Base
|
||||
-- * AIRBASE.SinaiMap.Kom_Awshim
|
||||
-- * AIRBASE.SinaiMap.Melez
|
||||
-- * AIRBASE.SinaiMap.Mezzeh_Air_Base
|
||||
-- * AIRBASE.SinaiMap.Nevatim
|
||||
-- * AIRBASE.SinaiMap.Ovda
|
||||
-- * AIRBASE.SinaiMap.Palmachim
|
||||
-- * AIRBASE.SinaiMap.Quwaysina
|
||||
-- * AIRBASE.SinaiMap.Rafic_Hariri_Intl
|
||||
-- * AIRBASE.SinaiMap.Ramat_David
|
||||
-- * AIRBASE.SinaiMap.Ramon_Airbase
|
||||
-- * AIRBASE.SinaiMap.Ramon_International_Airport
|
||||
-- * AIRBASE.SinaiMap.Sde_Dov
|
||||
-- * AIRBASE.SinaiMap.Sharm_El_Sheikh_International_Airport
|
||||
-- * AIRBASE.SinaiMap.St_Catherine
|
||||
-- * AIRBASE.SinaiMap.Tabuk
|
||||
-- * AIRBASE.SinaiMap.Tel_Nof
|
||||
-- * AIRBASE.SinaiMap.Wadi_Abu_Rish
|
||||
-- * AIRBASE.SinaiMap.Wadi_al_Jandali
|
||||
--
|
||||
-- @field Sinai
|
||||
AIRBASE.Sinai = {
|
||||
@@ -739,9 +773,10 @@ AIRBASE.Sinai = {
|
||||
["Bilbeis_Air_Base"] = "Bilbeis Air Base",
|
||||
["Bir_Hasanah"] = "Bir Hasanah",
|
||||
["Birma_Air_Base"] = "Birma Air Base",
|
||||
["Borj_El_Arab_International_Airport"] = "Borj El Arab International Airport",
|
||||
["Borg_El_Arab_International_Airport"] = "Borg El Arab International Airport",
|
||||
["Cairo_International_Airport"] = "Cairo International Airport",
|
||||
["Cairo_West"] = "Cairo West",
|
||||
["Damascus_Intl"] = "Damascus Intl",
|
||||
["Difarsuwar_Airfield"] = "Difarsuwar Airfield",
|
||||
["El_Arish"] = "El Arish",
|
||||
["El_Gora"] = "El Gora",
|
||||
@@ -757,15 +792,19 @@ AIRBASE.Sinai = {
|
||||
["Kibrit_Air_Base"] = "Kibrit Air Base",
|
||||
["Kom_Awshim"] = "Kom Awshim",
|
||||
["Melez"] = "Melez",
|
||||
["Mezzeh_Air_Base"] = "Mezzeh Air Base",
|
||||
["Nevatim"] = "Nevatim",
|
||||
["Ovda"] = "Ovda",
|
||||
["Palmachim"] = "Palmachim",
|
||||
["Quwaysina"] = "Quwaysina",
|
||||
["Rafic_Hariri_Intl"] = "Rafic Hariri Intl",
|
||||
["Ramat_David"] = "Ramat David",
|
||||
["Ramon_Airbase"] = "Ramon Airbase",
|
||||
["Ramon_International_Airport"] = "Ramon International Airport",
|
||||
["Sde_Dov"] = "Sde Dov",
|
||||
["Sharm_El_Sheikh_International_Airport"] = "Sharm El Sheikh International Airport",
|
||||
["St_Catherine"] = "St Catherine",
|
||||
["Tabuk"] = "Tabuk",
|
||||
["Tel_Nof"] = "Tel Nof",
|
||||
["Wadi_Abu_Rish"] = "Wadi Abu Rish",
|
||||
["Wadi_al_Jandali"] = "Wadi al Jandali",
|
||||
@@ -792,9 +831,14 @@ AIRBASE.Sinai = {
|
||||
-- * AIRBASE.Kola.Vidsel
|
||||
-- * AIRBASE.Kola.Vuojarvi
|
||||
-- * AIRBASE.Kola.Andoya
|
||||
-- * AIRBASE.Kola.Alakourtti
|
||||
-- * AIRBASE.Kola.Alakurtti
|
||||
-- * AIRBASE.Kola.Kittila
|
||||
-- * AIRBASE.Kola.Bardufoss
|
||||
-- * AIRBASE.Kola.Alta
|
||||
-- * AIRBASE.Kola.Sodankyla
|
||||
-- * AIRBASE.Kola.Enontekio
|
||||
-- * AIRBASE.Kola.Evenes
|
||||
-- * AIRBASE.Kola.Hosio
|
||||
--
|
||||
-- @field Kola
|
||||
AIRBASE.Kola = {
|
||||
@@ -817,9 +861,20 @@ AIRBASE.Kola = {
|
||||
["Vidsel"] = "Vidsel",
|
||||
["Vuojarvi"] = "Vuojarvi",
|
||||
["Andoya"] = "Andoya",
|
||||
["Alakourtti"] = "Alakourtti",
|
||||
["Alakurtti"] = "Alakurtti",
|
||||
["Kittila"] = "Kittila",
|
||||
["Bardufoss"] = "Bardufoss",
|
||||
["Alta"] = "Alta",
|
||||
["Sodankyla"] = "Sodankyla",
|
||||
["Enontekio"] = "Enontekio",
|
||||
["Evenes"] = "Evenes",
|
||||
["Hosio"] = "Hosio",
|
||||
["Kilpyavr"] = "Kilpyavr",
|
||||
["Afrikanda"] = "Afrikanda",
|
||||
["Kalevala"] = "Kalevala",
|
||||
["Koshka_Yavr"] = "Koshka Yavr",
|
||||
["Poduzhemye"] = "Poduzhemye",
|
||||
["Luostari_Pechenga"] = "Luostari Pechenga",
|
||||
}
|
||||
|
||||
--- Airbases of the Afghanistan map
|
||||
@@ -880,43 +935,57 @@ AIRBASE.Afghanistan = {
|
||||
|
||||
--- Airbases of the Iraq map
|
||||
--
|
||||
-- * AIRBASE.Iraq.Baghdad_International_Airport
|
||||
-- * AIRBASE.Iraq.Sulaimaniyah_International_Airport
|
||||
-- * AIRBASE.Iraq.Al_Sahra_Airport
|
||||
-- * AIRBASE.Iraq.Erbil_International_Airpor
|
||||
-- * AIRBASE.Iraq.Al_Taji_Airport
|
||||
-- * AIRBASE.Iraq.Al_Asad_Airbase
|
||||
-- * AIRBASE.Iraq.Al_Kut_Airbase
|
||||
-- * AIRBASE.Iraq.Al_Sahra_Airport
|
||||
-- * AIRBASE.Iraq.Al_Salam_Airbase
|
||||
-- * AIRBASE.Iraq.Balad_Airbase
|
||||
-- * AIRBASE.Iraq.Kirkuk_International_Airport
|
||||
-- * AIRBASE.Iraq.Bashur_Airport
|
||||
-- * AIRBASE.Iraq.Al_Taji_Airport
|
||||
-- * AIRBASE.Iraq.Al_Taquddum_Airport
|
||||
-- * AIRBASE.Iraq.Qayyarah_Airfield_West
|
||||
-- * AIRBASE.Iraq.Baghdad_International_Airport
|
||||
-- * AIRBASE.Iraq.Balad_Airbase
|
||||
-- * AIRBASE.Iraq.Bashur_Airport
|
||||
-- * AIRBASE.Iraq.Erbil_International_Airport
|
||||
-- * AIRBASE.Iraq.Sulaimaniyah_International_Airport
|
||||
-- * AIRBASE.Iraq.H2_Airbase
|
||||
-- * AIRBASE.Iraq.H3_Main_Airbase
|
||||
-- * AIRBASE.Iraq.H3_Northwest_Airbase
|
||||
-- * AIRBASE.Iraq.H3_Southwest_Airbase
|
||||
-- * AIRBASE.Iraq.K1_Base
|
||||
-- * AIRBASE.Iraq.Kirkuk_International_Airport
|
||||
-- * AIRBASE.Iraq.Mosul_International_Airport
|
||||
-- * AIRBASE.Iraq.Qayyarah_Airfield_West
|
||||
-- * AIRBASE.Iraq.Sulaimaniyah_International_Airport
|
||||
--
|
||||
-- @field Iraq
|
||||
AIRBASE.Iraq = {
|
||||
["Baghdad_International_Airport"] = "Baghdad International Airport",
|
||||
["Sulaimaniyah_International_Airport"] = "Sulaimaniyah International Airport",
|
||||
["Al_Sahra_Airport"] = "Al-Sahra Airport",
|
||||
["Erbil_International_Airport"] = "Erbil International Airport",
|
||||
["Al_Taji_Airport"] = "Al-Taji Airport",
|
||||
["Al_Asad_Airbase"] = "Al-Asad Airbase",
|
||||
["Al_Kut_Airport"] = "Al-Kut Airport",
|
||||
["Al_Sahra_Airport"] = "Al-Sahra Airport",
|
||||
["Al_Salam_Airbase"] = "Al-Salam Airbase",
|
||||
["Balad_Airbase"] = "Balad Airbase",
|
||||
["Kirkuk_International_Airport"] = "Kirkuk International Airport",
|
||||
["Bashur_Airport"] = "Bashur Airport",
|
||||
["Al_Taji_Airport"] = "Al-Taji Airport",
|
||||
["Al_Taquddum_Airport"] = "Al-Taquddum Airport",
|
||||
["Qayyarah_Airfield_West"] = "Qayyarah Airfield West",
|
||||
["Baghdad_International_Airport"] = "Baghdad International Airport",
|
||||
["Balad_Airbase"] = "Balad Airbase",
|
||||
["Bashur_Airport"] = "Bashur Airport",
|
||||
["Erbil_International_Airport"] = "Erbil International Airport",
|
||||
["H2_Airbase"] = "H-2 Airbase",
|
||||
["H3_Main_Airbase"] = "H-3 Main Airbase",
|
||||
["H3_Northwest_Airbase"] = "H-3 Northwest Airbase",
|
||||
["H3_Southwest_Airbase"] = "H-3 Southwest Airbase",
|
||||
["K1_Base"] = "K1 Base",
|
||||
["Kirkuk_International_Airport"] = "Kirkuk International Airport",
|
||||
["Mosul_International_Airport"] = "Mosul International Airport",
|
||||
["Qayyarah_Airfield_West"] = "Qayyarah Airfield West",
|
||||
["Sulaimaniyah_International_Airport"] = "Sulaimaniyah International Airport",
|
||||
}
|
||||
|
||||
|
||||
--- Airbases of the Germany Cold War map
|
||||
-- * AIRBASE.GermanyCW.Airracing_Frankfurt
|
||||
-- * 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
|
||||
@@ -939,14 +1008,13 @@ AIRBASE.Iraq = {
|
||||
-- * AIRBASE.GermanyCW.Fritzlar
|
||||
-- * AIRBASE.GermanyCW.Fulda
|
||||
-- * AIRBASE.GermanyCW.Gardelegen
|
||||
-- * AIRBASE.GermanyCW.Garz
|
||||
-- * AIRBASE.GermanyCW.Gatow
|
||||
-- * AIRBASE.GermanyCW.Gelnhausen
|
||||
-- * AIRBASE.GermanyCW.Giebelstadt
|
||||
-- * AIRBASE.GermanyCW.Glindbruchkippe
|
||||
-- * AIRBASE.GermanyCW.Gross_Doelln
|
||||
-- * AIRBASE.GermanyCW.Glindbruchkippe
|
||||
-- * AIRBASE.GermanyCW.Gross_Mohrdorf
|
||||
-- * AIRBASE.GermanyCW.Grosse_Wiese
|
||||
-- * AIRBASE.GermanyCW.Gaerz
|
||||
-- * AIRBASE.GermanyCW.Guetersloh
|
||||
-- * AIRBASE.GermanyCW.H_FRG_01
|
||||
-- * AIRBASE.GermanyCW.H_FRG_02
|
||||
@@ -996,7 +1064,7 @@ AIRBASE.Iraq = {
|
||||
-- * AIRBASE.GermanyCW.H_GDR_04
|
||||
-- * AIRBASE.GermanyCW.H_GDR_05
|
||||
-- * AIRBASE.GermanyCW.H_GDR_06
|
||||
-- * AIRBASE.GermanyCW.H_GDR_07
|
||||
-- * AIRBASE.GermanyCW.H_GDR_07
|
||||
-- * AIRBASE.GermanyCW.H_GDR_08
|
||||
-- * AIRBASE.GermanyCW.H_GDR_09
|
||||
-- * AIRBASE.GermanyCW.H_GDR_10
|
||||
@@ -1018,10 +1086,11 @@ AIRBASE.Iraq = {
|
||||
-- * AIRBASE.GermanyCW.H_GDR_31
|
||||
-- * AIRBASE.GermanyCW.H_GDR_32
|
||||
-- * AIRBASE.GermanyCW.H_GDR_33
|
||||
-- * AIRBASE.GermanyCW.H_GDR_34
|
||||
-- * AIRBASE.GermanyCW.H_Med_FRG_01
|
||||
-- * 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
|
||||
@@ -1069,9 +1138,9 @@ AIRBASE.Iraq = {
|
||||
-- * AIRBASE.GermanyCW.Koethen
|
||||
-- * AIRBASE.GermanyCW.Laage
|
||||
-- * AIRBASE.GermanyCW.Langenselbold
|
||||
-- * AIRBASE.GermanyCW.Laerz
|
||||
-- * AIRBASE.GermanyCW.Leipzig_Halle
|
||||
-- * AIRBASE.GermanyCW.Leipzig_Mockau
|
||||
-- * AIRBASE.GermanyCW.Laerz
|
||||
-- * AIRBASE.GermanyCW.Luebeck
|
||||
-- * AIRBASE.GermanyCW.Lueneburg
|
||||
-- * AIRBASE.GermanyCW.Mahlwinkel
|
||||
@@ -1089,14 +1158,15 @@ AIRBASE.Iraq = {
|
||||
-- * AIRBASE.GermanyCW.Pottschutthoehe
|
||||
-- * AIRBASE.GermanyCW.Ramstein
|
||||
-- * AIRBASE.GermanyCW.Rinteln
|
||||
-- * AIRBASE.GermanyCW.Schweinfurt
|
||||
-- * AIRBASE.GermanyCW.Schoenefeld
|
||||
-- * AIRBASE.GermanyCW.Schweinfurt
|
||||
-- * AIRBASE.GermanyCW.Sembach
|
||||
-- * AIRBASE.GermanyCW.Spangdahlem
|
||||
-- * AIRBASE.GermanyCW.Sperenberg
|
||||
-- * AIRBASE.GermanyCW.Stendal
|
||||
-- * AIRBASE.GermanyCW.Tegel
|
||||
-- * AIRBASE.GermanyCW.Tempelhof
|
||||
-- * AIRBASE.GermanyCW.Templin
|
||||
-- * AIRBASE.GermanyCW.Tutow
|
||||
-- * AIRBASE.GermanyCW.Uelzen
|
||||
-- * AIRBASE.GermanyCW.Uetersen
|
||||
@@ -1108,6 +1178,7 @@ AIRBASE.Iraq = {
|
||||
-- * AIRBASE.GermanyCW.Weser_Wuemme
|
||||
-- * AIRBASE.GermanyCW.Wiesbaden
|
||||
-- * AIRBASE.GermanyCW.Wismar
|
||||
-- * AIRBASE.GermanyCW.Wittstock
|
||||
-- * AIRBASE.GermanyCW.Worms
|
||||
-- * AIRBASE.GermanyCW.Wunstorf
|
||||
-- * AIRBASE.GermanyCW.Zerbst
|
||||
@@ -1119,7 +1190,6 @@ AIRBASE.GermanyCW = {
|
||||
["Airracing_Koblenz"] = "Airracing Koblenz",
|
||||
["Airracing_Luebeck"] = "Airracing Lubeck",
|
||||
["Allstedt"] = "Allstedt",
|
||||
["Alt_Daber"] = "Alt Daber",
|
||||
["Altes_Lager"] = "Altes Lager",
|
||||
["Bad_Duerkheim"] = "Bad Durkheim",
|
||||
["Barth"] = "Barth",
|
||||
@@ -1142,14 +1212,13 @@ AIRBASE.GermanyCW = {
|
||||
["Fritzlar"] = "Fritzlar",
|
||||
["Fulda"] = "Fulda",
|
||||
["Gardelegen"] = "Gardelegen",
|
||||
["Garz"] = "Garz",
|
||||
["Gatow"] = "Gatow",
|
||||
["Gelnhausen"] = "Gelnhausen",
|
||||
["Giebelstadt"] = "Giebelstadt",
|
||||
["Glindbruchkippe_"] = "Glindbruchkippe ",
|
||||
["Gross_Doelln"] = "Gross Dolln",
|
||||
["Glindbruchkippe"] = "Glindbruchkippe ",
|
||||
["Gross_Mohrdorf"] = "Gross Mohrdorf",
|
||||
["Grosse_Wiese"] = "Grosse Wiese",
|
||||
["Gaerz"] = "Garz",
|
||||
["Guetersloh"] = "Gutersloh",
|
||||
["H_FRG_01"] = "H FRG 01",
|
||||
["H_FRG_02"] = "H FRG 02",
|
||||
@@ -1221,10 +1290,11 @@ AIRBASE.GermanyCW = {
|
||||
["H_GDR_31"] = "H GDR 31",
|
||||
["H_GDR_32"] = "H GDR 32",
|
||||
["H_GDR_33"] = "H GDR 33",
|
||||
["H_GDR_34"] = "H GDR 34",
|
||||
["H_Med_FRG_01"] = "H Med FRG 01",
|
||||
["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",
|
||||
@@ -1272,9 +1342,9 @@ AIRBASE.GermanyCW = {
|
||||
["Koethen"] = "Kothen",
|
||||
["Laage"] = "Laage",
|
||||
["Langenselbold"] = "Langenselbold",
|
||||
["Laerz"] = "Larz",
|
||||
["Leipzig_Halle"] = "Leipzig Halle",
|
||||
["Leipzig_Mockau"] = "Leipzig Mockau",
|
||||
["Laerz"] = "Larz",
|
||||
["Luebeck"] = "Lubeck",
|
||||
["Lueneburg"] = "Luneburg",
|
||||
["Mahlwinkel"] = "Mahlwinkel",
|
||||
@@ -1292,14 +1362,15 @@ AIRBASE.GermanyCW = {
|
||||
["Pottschutthoehe"] = "Pottschutthohe",
|
||||
["Ramstein"] = "Ramstein",
|
||||
["Rinteln"] = "Rinteln",
|
||||
["Schweinfurt"] = "Schweinfurt",
|
||||
["Schoenefeld"] = "Schonefeld",
|
||||
["Schweinfurt"] = "Schweinfurt",
|
||||
["Sembach"] = "Sembach",
|
||||
["Spangdahlem"] = "Spangdahlem",
|
||||
["Sperenberg"] = "Sperenberg",
|
||||
["Stendal"] = "Stendal",
|
||||
["Tegel"] = "Tegel",
|
||||
["Tempelhof"] = "Tempelhof",
|
||||
["Templin"] = "Templin",
|
||||
["Tutow"] = "Tutow",
|
||||
["Uelzen"] = "Uelzen",
|
||||
["Uetersen"] = "Uetersen",
|
||||
@@ -1311,6 +1382,7 @@ AIRBASE.GermanyCW = {
|
||||
["Weser_Wuemme"] = "Weser Wumme",
|
||||
["Wiesbaden"] = "Wiesbaden",
|
||||
["Wismar"] = "Wismar",
|
||||
["Wittstock"] = "Wittstock",
|
||||
["Worms"] = "Worms",
|
||||
["Wunstorf"] = "Wunstorf",
|
||||
["Zerbst"] = "Zerbst",
|
||||
@@ -1447,7 +1519,7 @@ function AIRBASE:Register(AirbaseName)
|
||||
self.descriptors=self:GetDesc()
|
||||
|
||||
-- Debug info.
|
||||
--self:I({airbase=AirbaseName, descriptors=self.descriptors})
|
||||
--self:T({airbase=AirbaseName, descriptors=self.descriptors})
|
||||
|
||||
-- Category.
|
||||
self.category=self.descriptors and self.descriptors.category or Airbase.Category.AIRDROME
|
||||
@@ -1530,6 +1602,17 @@ end
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
--- Get the true airbase center as seen in the ME. The position returned by the dcs object is is wrong and often at the start of the runway.
|
||||
-- @return DCS#Vec2 The center of the true center of the airbase if it contains runways, otherwise the default DCS object position.
|
||||
function AIRBASE:GetVec2()
|
||||
local runways = self:GetRunways()
|
||||
if runways and #runways > 0 then
|
||||
return runways[1].center:GetVec2()
|
||||
end
|
||||
return self:GetCoordinate():GetVec2()
|
||||
end
|
||||
|
||||
--- Get the category of this airbase. This is only a debug function because DCS 2.9 incorrectly returns heliports as airdromes.
|
||||
-- @param #AIRBASE self
|
||||
function AIRBASE:_GetCategory()
|
||||
@@ -2765,11 +2848,12 @@ function AIRBASE:_InitRunways(IncludeInverse)
|
||||
runway.name=string.format("%02d", tonumber(namefromheading))
|
||||
else
|
||||
runway.name=string.format("%02d", tonumber(name))
|
||||
self:I("RunwayName: "..runway.name)
|
||||
--self:I("RunwayName: "..runway.name)
|
||||
end
|
||||
|
||||
--runway.name=string.format("%02d", tonumber(name))
|
||||
runway.magheading=tonumber(runway.name)*10
|
||||
runway.idx=runway.magheading
|
||||
runway.heading=heading
|
||||
runway.width=width or 0
|
||||
runway.length=length or 0
|
||||
@@ -3082,6 +3166,7 @@ function AIRBASE:GetRunwayData(magvar, mark)
|
||||
local runway={} --#AIRBASE.Runway
|
||||
runway.heading=hdg
|
||||
runway.idx=idx
|
||||
runway.magheading=idx
|
||||
runway.length=c1:Get2DDistance(c2)
|
||||
runway.position=c1
|
||||
runway.endpoint=c2
|
||||
@@ -3097,6 +3182,57 @@ function AIRBASE:GetRunwayData(magvar, mark)
|
||||
-- Add runway.
|
||||
table.insert(runways, runway)
|
||||
|
||||
end
|
||||
|
||||
-- Look for identical (parallel) runways, e.g. 03L and 03R at Nellis.
|
||||
local rpairs={}
|
||||
for i,_ri in pairs(runways) do
|
||||
local ri=_ri --#AIRBASE.Runway
|
||||
for j,_rj in pairs(runways) do
|
||||
local rj=_rj --#AIRBASE.Runway
|
||||
if i<j then
|
||||
if ri.name==rj.name then
|
||||
rpairs[i]=j
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function isLeft(a, b, c)
|
||||
--return ((b.x - a.x)*(c.z - a.z) - (b.z - a.z)*(c.x - a.x)) > 0
|
||||
return ((b.z - a.z)*(c.x - a.x) - (b.x - a.x)*(c.z - a.z)) > 0
|
||||
end
|
||||
|
||||
for i,j in pairs(rpairs) do
|
||||
local ri=runways[i] --#AIRBASE.Runway
|
||||
local rj=runways[j] --#AIRBASE.Runway
|
||||
|
||||
-- Draw arrow.
|
||||
--ri.center:ArrowToAll(rj.center)
|
||||
|
||||
local c0=ri.position
|
||||
|
||||
-- Vector in the direction of the runway.
|
||||
local a=UTILS.VecTranslate(c0, 1000, ri.heading)
|
||||
|
||||
-- Vector from runway i to runway j.
|
||||
local b=UTILS.VecSubstract(rj.position, ri.position)
|
||||
b=UTILS.VecAdd(ri.position, b)
|
||||
|
||||
-- Check if rj is left of ri.
|
||||
local left=isLeft(c0, a, b)
|
||||
|
||||
--env.info(string.format("Found pair %s: i=%d, j=%d, left==%s", ri.name, i, j, tostring(left)))
|
||||
|
||||
if left then
|
||||
ri.isLeft=false
|
||||
rj.isLeft=true
|
||||
else
|
||||
ri.isLeft=true
|
||||
rj.isLeft=false
|
||||
end
|
||||
|
||||
--break
|
||||
end
|
||||
|
||||
return runways
|
||||
|
||||
@@ -168,16 +168,25 @@
|
||||
-- * @{#CONTROLLABLE.OptionAlarmStateGreen}
|
||||
-- * @{#CONTROLLABLE.OptionAlarmStateRed}
|
||||
--
|
||||
-- ## 5.4) Jettison weapons:
|
||||
-- ## 5.4) [AIR] Jettison weapons:
|
||||
--
|
||||
-- * @{#CONTROLLABLE.OptionAllowJettisonWeaponsOnThreat}
|
||||
-- * @{#CONTROLLABLE.OptionKeepWeaponsOnThreat}
|
||||
--
|
||||
-- ## 5.5) Air-2-Air missile attack range:
|
||||
-- ## 5.5) [AIR] Air-2-Air missile attack range:
|
||||
-- * @{#CONTROLLABLE.OptionAAAttackRange}(): Defines the usage of A2A missiles against possible targets.
|
||||
--
|
||||
-- # 6) [GROUND] IR Maker Beacons for GROUPs and UNITs
|
||||
-- * @{#CONTROLLABLE:NewIRMarker}(): Create a blinking IR Marker on a GROUP or UNIT.
|
||||
--
|
||||
-- # 7) [HELICOPTER] Units prefer vertical landing and takeoffs:
|
||||
-- * @{#CONTROLLABLE.OptionPreferVerticalLanding}(): Set aircraft to prefer vertical landing and takeoff.
|
||||
--
|
||||
-- # 8) [AIRCRAFT] Landing approach options
|
||||
-- * @{#CONTROLLABLE.SetOptionLandingStraightIn}(): Landing approach straight in.
|
||||
-- * @{#CONTROLLABLE.SetOptionLandingForcePair}(): Landing approach in pairs for groups > 1 unit.
|
||||
-- * @{#CONTROLLABLE.SetOptionLandingRestrictPair}(): Landing approach single.
|
||||
-- * @{#CONTROLLABLE.SetOptionLandingOverheadBreak}(): Landing approach overhead break.
|
||||
--
|
||||
-- @field #CONTROLLABLE
|
||||
CONTROLLABLE = {
|
||||
@@ -1432,7 +1441,7 @@ end
|
||||
-- @param #number Speed The speed [m/s] flying when holding the position.
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:TaskOrbitCircleAtVec2( Point, Altitude, Speed )
|
||||
self:F2( { self.ControllableName, Point, Altitude, Speed } )
|
||||
--self:F2( { self.ControllableName, Point, Altitude, Speed } )
|
||||
|
||||
local DCSTask = {
|
||||
id = 'Orbit',
|
||||
@@ -3629,6 +3638,26 @@ function CONTROLLABLE:OptionROTPassiveDefense()
|
||||
return nil
|
||||
end
|
||||
|
||||
--- Helicopter - prefer vertical landing.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:OptionPreferVerticalLanding()
|
||||
self:F2( { self.ControllableName } )
|
||||
|
||||
local DCSControllable = self:GetDCSObject()
|
||||
if DCSControllable then
|
||||
local Controller = self:_GetController()
|
||||
|
||||
if self:IsAir() then
|
||||
Controller:setOption( AI.Option.Air.id.PREFER_VERTICAL, true )
|
||||
end
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
--- Can the CONTROLLABLE evade on enemy fire?
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @return #boolean
|
||||
@@ -4134,7 +4163,7 @@ function CONTROLLABLE:OptionRestrictBurner( RestrictBurner )
|
||||
|
||||
end
|
||||
|
||||
--- Sets Controllable Option for A2A attack range for AIR FIGHTER units.
|
||||
--- [AIR] Sets Controllable Option for A2A attack range for AIR FIGHTER units.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @param #number range Defines the range
|
||||
-- @return #CONTROLLABLE self
|
||||
@@ -4159,6 +4188,66 @@ function CONTROLLABLE:OptionAAAttackRange( range )
|
||||
return nil
|
||||
end
|
||||
|
||||
--- [GROUND/AAA] Sets Controllable Option for Ground AAA minimum firing height.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @param #number meters The minimum height in meters.
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:OptionAAAMinFiringHeightMeters(meters)
|
||||
self:F2( { self.ControllableName } )
|
||||
local meters = meters or 20
|
||||
local DCSControllable = self:GetDCSObject()
|
||||
if DCSControllable then
|
||||
local Controller = self:_GetController()
|
||||
if Controller then
|
||||
if self:IsGround() then
|
||||
self:SetOption(27, meters)
|
||||
end
|
||||
end
|
||||
return self
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
--- [GROUND/AAA] Sets Controllable Option for Ground AAA maximum firing height.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @param #number meters The maximum height in meters.
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:OptionAAAMaxFiringHeightMeters(meters)
|
||||
self:F2( { self.ControllableName } )
|
||||
local meters = meters or 1000
|
||||
local DCSControllable = self:GetDCSObject()
|
||||
if DCSControllable then
|
||||
local Controller = self:_GetController()
|
||||
if Controller then
|
||||
if self:IsGround() then
|
||||
self:SetOption(29, meters)
|
||||
end
|
||||
end
|
||||
return self
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
--- [GROUND/AAA] Sets Controllable Option for Ground AAA minimum firing height.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @param #number feet The minimum height in feet.
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:OptionAAAMinFiringHeightFeet(feet)
|
||||
self:F2( { self.ControllableName } )
|
||||
local feet = feet or 60
|
||||
return self:OptionAAAMinFiringHeightMeters(UTILS.FeetToMeters(feet))
|
||||
end
|
||||
|
||||
--- [GROUND/AAA] Sets Controllable Option for Ground AAA maximum firing height.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @param #number feet The maximum height in feet.
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:OptionAAAMaxFiringHeightfeet(feet)
|
||||
self:F2( { self.ControllableName } )
|
||||
local feet = feet or 3000
|
||||
return self:OptionAAAMaxFiringHeightMeters(UTILS.FeetToMeters(feet))
|
||||
end
|
||||
|
||||
--- Defines the range at which a GROUND unit/group is allowed to use its weapons automatically.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @param #number EngageRange Engage range limit in percent (a number between 0 and 100). Default 100.
|
||||
@@ -4183,6 +4272,50 @@ function CONTROLLABLE:OptionEngageRange( EngageRange )
|
||||
return nil
|
||||
end
|
||||
|
||||
--- [AIR] Set how the AI lands on an airfield. Here: Straight in.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:SetOptionLandingStraightIn()
|
||||
self:F2( { self.ControllableName } )
|
||||
if self:IsAir() then
|
||||
self:SetOption("36","0")
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [AIR] Set how the AI lands on an airfield. Here: In pairs (if > 1 aircraft in group)
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:SetOptionLandingForcePair()
|
||||
self:F2( { self.ControllableName } )
|
||||
if self:IsAir() then
|
||||
self:SetOption("36","1")
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [AIR] Set how the AI lands on an airfield. Here: No landing in pairs.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:SetOptionLandingRestrictPair()
|
||||
self:F2( { self.ControllableName } )
|
||||
if self:IsAir() then
|
||||
self:SetOption("36","2")
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [AIR] Set how the AI lands on an airfield. Here: Overhead break.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @return #CONTROLLABLE self
|
||||
function CONTROLLABLE:SetOptionLandingOverheadBreak()
|
||||
self:F2( { self.ControllableName } )
|
||||
if self:IsAir() then
|
||||
self:SetOption("36","3")
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- [AIR] Set how the AI uses the onboard radar.
|
||||
-- @param #CONTROLLABLE self
|
||||
-- @param #number Option Options are: `NEVER = 0, FOR_ATTACK_ONLY = 1,FOR_SEARCH_IF_REQUIRED = 2, FOR_CONTINUOUS_SEARCH = 3`
|
||||
|
||||
@@ -108,6 +108,8 @@ DYNAMICCARGO.State = {
|
||||
-- @type DYNAMICCARGO.AircraftTypes
|
||||
DYNAMICCARGO.AircraftTypes = {
|
||||
["CH-47Fbl1"] = "CH-47Fbl1",
|
||||
["Mi-8MTV2"] = "CH-47Fbl1",
|
||||
["Mi-8MT"] = "CH-47Fbl1",
|
||||
}
|
||||
|
||||
--- Helo types possible.
|
||||
@@ -120,17 +122,30 @@ DYNAMICCARGO.AircraftDimensions = {
|
||||
["length"] = 11,
|
||||
["ropelength"] = 30,
|
||||
},
|
||||
["Mi-8MTV2"] = {
|
||||
["width"] = 6,
|
||||
["height"] = 6,
|
||||
["length"] = 15,
|
||||
["ropelength"] = 30,
|
||||
},
|
||||
["Mi-8MT"] = {
|
||||
["width"] = 6,
|
||||
["height"] = 6,
|
||||
["length"] = 15,
|
||||
["ropelength"] = 30,
|
||||
},
|
||||
}
|
||||
|
||||
--- DYNAMICCARGO class version.
|
||||
-- @field #string version
|
||||
DYNAMICCARGO.version="0.0.7"
|
||||
DYNAMICCARGO.version="0.0.9"
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- TODO list
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- TODO: A lot...
|
||||
-- DONE: Added Mi-8 type and dimensions
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- Constructor
|
||||
|
||||
@@ -230,6 +230,8 @@ GROUP.Attribute = {
|
||||
GROUND_EWR="Ground_EWR",
|
||||
GROUND_AAA="Ground_AAA",
|
||||
GROUND_SAM="Ground_SAM",
|
||||
GROUND_SHORAD="Ground_SHORAD",
|
||||
GROUND_BALLISTICMISSILE="Ground_BallisticMissile",
|
||||
GROUND_OTHER="Ground_OtherGround",
|
||||
NAVAL_AIRCRAFTCARRIER="Naval_AircraftCarrier",
|
||||
NAVAL_WARSHIP="Naval_WarShip",
|
||||
@@ -912,15 +914,18 @@ function GROUP:GetVelocityVec3()
|
||||
|
||||
if DCSGroup and DCSGroup:isExist() then
|
||||
local GroupUnits = DCSGroup:getUnits()
|
||||
local GroupCount = #GroupUnits
|
||||
local GroupCount = 0
|
||||
|
||||
local VelocityVec3 = { x = 0, y = 0, z = 0 }
|
||||
|
||||
for _, DCSUnit in pairs( GroupUnits ) do
|
||||
local UnitVelocityVec3 = DCSUnit:getVelocity()
|
||||
VelocityVec3.x = VelocityVec3.x + UnitVelocityVec3.x
|
||||
VelocityVec3.y = VelocityVec3.y + UnitVelocityVec3.y
|
||||
VelocityVec3.z = VelocityVec3.z + UnitVelocityVec3.z
|
||||
if DCSUnit:isExist() and DCSUnit:isActive() then
|
||||
local UnitVelocityVec3 = DCSUnit:getVelocity()
|
||||
VelocityVec3.x = VelocityVec3.x + UnitVelocityVec3.x
|
||||
VelocityVec3.y = VelocityVec3.y + UnitVelocityVec3.y
|
||||
VelocityVec3.z = VelocityVec3.z + UnitVelocityVec3.z
|
||||
GroupCount = GroupCount + 1
|
||||
end
|
||||
end
|
||||
|
||||
VelocityVec3.x = VelocityVec3.x / GroupCount
|
||||
@@ -1754,11 +1759,13 @@ function GROUP:GetMaxVelocity()
|
||||
|
||||
for Index, UnitData in pairs( DCSGroup:getUnits() ) do
|
||||
|
||||
local UnitVelocityVec3 = UnitData:getVelocity()
|
||||
local UnitVelocity = math.abs( UnitVelocityVec3.x ) + math.abs( UnitVelocityVec3.y ) + math.abs( UnitVelocityVec3.z )
|
||||
if UnitData:isExist() and UnitData:isActive() then
|
||||
local UnitVelocityVec3 = UnitData:getVelocity()
|
||||
local UnitVelocity = math.abs( UnitVelocityVec3.x ) + math.abs( UnitVelocityVec3.y ) + math.abs( UnitVelocityVec3.z )
|
||||
|
||||
if UnitVelocity > GroupVelocityMax then
|
||||
GroupVelocityMax = UnitVelocity
|
||||
if UnitVelocity > GroupVelocityMax then
|
||||
GroupVelocityMax = UnitVelocity
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2225,6 +2232,10 @@ function GROUP:Respawn( Template, Reset )
|
||||
|
||||
--UTILS.PrintTableToLog(Template)
|
||||
|
||||
if self.ValidateAndRepositionGroundUnits then
|
||||
UTILS.ValidateAndRepositionGroundUnits(Template.units)
|
||||
end
|
||||
|
||||
-- Spawn new group.
|
||||
self:ScheduleOnce(0.1,_DATABASE.Spawn,_DATABASE,Template)
|
||||
--_DATABASE:Spawn(Template)
|
||||
@@ -2633,6 +2644,8 @@ function GROUP:GetAttribute()
|
||||
local artillery=self:HasAttribute("Artillery")
|
||||
local tank=self:HasAttribute("Old Tanks") or self:HasAttribute("Modern Tanks") or self:HasAttribute("Tanks")
|
||||
local aaa=self:HasAttribute("AAA") and (not self:HasAttribute("SAM elements"))
|
||||
local ballisticMissile=artillery and self:HasAttribute("SS_missile")
|
||||
local shorad=self:HasAttribute("SR SAM")
|
||||
local ewr=self:HasAttribute("EWR")
|
||||
local ifv=self:HasAttribute("IFV")
|
||||
local sam=self:HasAttribute("SAM elements") or self:HasAttribute("Optical Tracker")
|
||||
@@ -2674,6 +2687,8 @@ function GROUP:GetAttribute()
|
||||
attribute=GROUP.Attribute.GROUND_SAM
|
||||
elseif aaa then
|
||||
attribute=GROUP.Attribute.GROUND_AAA
|
||||
elseif artillery and ballisticMissile then
|
||||
attribute=GROUP.Attribute.GROUND_BALLISTICMISSILE
|
||||
elseif artillery then
|
||||
attribute=GROUP.Attribute.GROUND_ARTILLERY
|
||||
elseif tank then
|
||||
@@ -3186,3 +3201,60 @@ function GROUP:IsAAA()
|
||||
end
|
||||
return isAAA
|
||||
end
|
||||
|
||||
--- This function uses Disposition and other fallback logic to find better ground positions for ground units.
|
||||
--- NOTE: This is not a spawn randomizer.
|
||||
--- It will try to find clear ground locations avoiding trees, water, roads, runways, map scenery, statics and other units in the area and modifies the provided positions table.
|
||||
--- Maintains the original layout and unit positions as close as possible by searching for the next closest valid position to each unit.
|
||||
--- Uses UTILS.ValidateAndRepositionGroundUnits.
|
||||
-- @param #GROUP self
|
||||
-- @param #boolean Enabled Enable/disable the feature.
|
||||
function GROUP:SetValidateAndRepositionGroundUnits(Enabled)
|
||||
self.ValidateAndRepositionGroundUnits = Enabled
|
||||
end
|
||||
|
||||
|
||||
--- Get the bounding box of the group combining UNIT:GetBoundingBox() units.
|
||||
-- @param #GROUP self
|
||||
-- @return DCS#Box3 The bounding box of the GROUP.
|
||||
-- @return #nil The GROUP does not have any alive units.
|
||||
function GROUP:GetBoundingBox()
|
||||
local bbox = { min = { x = math.huge, y = math.huge, z = math.huge },
|
||||
max = { x = -math.huge, y = -math.huge, z = -math.huge }
|
||||
}
|
||||
|
||||
local Units = self:GetUnits() or {}
|
||||
if #Units == 0 then
|
||||
return nil
|
||||
end
|
||||
|
||||
for _, unit in pairs(Units) do
|
||||
if unit and unit:IsAlive() then
|
||||
local ubox = unit:GetBoundingBox()
|
||||
|
||||
if ubox then
|
||||
if ubox.min.x < bbox.min.x then
|
||||
bbox.min.x = ubox.min.x
|
||||
end
|
||||
if ubox.min.y < bbox.min.y then
|
||||
bbox.min.y = ubox.min.y
|
||||
end
|
||||
if ubox.min.z < bbox.min.z then
|
||||
bbox.min.z = ubox.min.z
|
||||
end
|
||||
|
||||
if ubox.max.x > bbox.max.x then
|
||||
bbox.max.x = ubox.max.x
|
||||
end
|
||||
if ubox.max.y > bbox.max.y then
|
||||
bbox.max.y = ubox.max.y
|
||||
end
|
||||
if ubox.max.z > bbox.max.z then
|
||||
bbox.max.z = ubox.max.z
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return bbox
|
||||
end
|
||||
|
||||
@@ -246,18 +246,20 @@ end
|
||||
function POSITIONABLE:GetVec3()
|
||||
local DCSPositionable = self:GetDCSObject()
|
||||
if DCSPositionable then
|
||||
--local status, vec3 = pcall(
|
||||
-- function()
|
||||
-- local vec3 = DCSPositionable:getPoint()
|
||||
-- return vec3
|
||||
--end
|
||||
--)
|
||||
|
||||
local vec3 = DCSPositionable:getPoint()
|
||||
--if status then
|
||||
return vec3
|
||||
--else
|
||||
--self:E( { "Cannot get Vec3 from DCS Object", Positionable = self, Alive = self:IsAlive() } )
|
||||
--end
|
||||
|
||||
if not vec3 then
|
||||
local pos = DCSPositionable:getPosition()
|
||||
if pos and pos.p then
|
||||
vec3 = pos.p
|
||||
else
|
||||
self:E( { "Cannot get the position from DCS Object for GetVec3", Positionable = self, Alive = self:IsAlive() } )
|
||||
end
|
||||
end
|
||||
|
||||
return vec3
|
||||
|
||||
end
|
||||
-- ERROR!
|
||||
self:E( { "Cannot get the Positionable DCS Object for GetVec3", Positionable = self, Alive = self:IsAlive() } )
|
||||
@@ -359,15 +361,17 @@ function POSITIONABLE:GetCoord()
|
||||
-- Get the current position.
|
||||
local PositionableVec3 = self:GetVec3()
|
||||
|
||||
if self.coordinate then
|
||||
-- Update COORDINATE from 3D vector.
|
||||
self.coordinate:UpdateFromVec3( PositionableVec3 )
|
||||
else
|
||||
-- New COORDINATE.
|
||||
self.coordinate = COORDINATE:NewFromVec3( PositionableVec3 )
|
||||
end
|
||||
if PositionableVec3 then
|
||||
if self.coordinate then
|
||||
-- Update COORDINATE from 3D vector.
|
||||
self.coordinate:UpdateFromVec3( PositionableVec3 )
|
||||
else
|
||||
-- New COORDINATE.
|
||||
self.coordinate = COORDINATE:NewFromVec3( PositionableVec3 )
|
||||
end
|
||||
|
||||
return self.coordinate
|
||||
return self.coordinate
|
||||
end
|
||||
end
|
||||
|
||||
-- Error message.
|
||||
@@ -388,13 +392,13 @@ function POSITIONABLE:GetCoordinate()
|
||||
|
||||
-- Get the current position.
|
||||
local PositionableVec3 = self:GetVec3()
|
||||
|
||||
local coord=COORDINATE:NewFromVec3(PositionableVec3)
|
||||
local heading = self:GetHeading()
|
||||
coord.Heading = heading
|
||||
-- Return a new coordiante object.
|
||||
return coord
|
||||
|
||||
if PositionableVec3 then
|
||||
local coord=COORDINATE:NewFromVec3(PositionableVec3)
|
||||
local heading = self:GetHeading()
|
||||
coord.Heading = heading
|
||||
-- Return a new coordiante object.
|
||||
return coord
|
||||
end
|
||||
end
|
||||
|
||||
-- Error message.
|
||||
|
||||
@@ -753,7 +753,7 @@ function STORAGE:LoadFromFile(Path,Filename)
|
||||
end
|
||||
end
|
||||
else
|
||||
self:E("File for Liquids could not be found: "..tostring(Path).."\\"..tostring(Filename"_Liquids.csv"))
|
||||
self:E("File for Liquids could not be found: "..tostring(Path).."\\"..tostring(Filename).."_Liquids.csv")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -773,7 +773,7 @@ function STORAGE:LoadFromFile(Path,Filename)
|
||||
end
|
||||
end
|
||||
else
|
||||
self:E("File for Aircraft could not be found: "..tostring(Path).."\\"..tostring(Filename"_Aircraft.csv"))
|
||||
self:E("File for Aircraft could not be found: "..tostring(Path).."\\"..tostring(Filename).."_Aircraft.csv")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -805,7 +805,7 @@ function STORAGE:LoadFromFile(Path,Filename)
|
||||
end
|
||||
end
|
||||
else
|
||||
self:E("File for Weapons could not be found: "..tostring(Path).."\\"..tostring(Filename"_Weapons.csv"))
|
||||
self:E("File for Weapons could not be found: "..tostring(Path).."\\"..tostring(Filename).."_Weapons.csv")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -377,6 +377,10 @@ function UNIT:ReSpawnAt(Coordinate, Heading)
|
||||
|
||||
--self:T( SpawnGroupTemplate )
|
||||
|
||||
if self.ValidateAndRepositionGroundUnits then
|
||||
UTILS.ValidateAndRepositionGroundUnits(SpawnGroupTemplate.units)
|
||||
end
|
||||
|
||||
_DATABASE:Spawn(SpawnGroupTemplate)
|
||||
end
|
||||
|
||||
@@ -897,7 +901,7 @@ function UNIT:GetAmmunition()
|
||||
nAPshells = nAPshells + Nammo
|
||||
end
|
||||
|
||||
if ammotable[w].desc.typeName and string.find(ammotable[w].desc.typeName, "_HE", 1, true) then
|
||||
if ammotable[w].desc.typeName and (string.find(ammotable[w].desc.typeName, "_HE", 1, true) or string.find(ammotable[w].desc.typeName, "HESH", 1, true)) then
|
||||
nHEshells = nHEshells + Nammo
|
||||
end
|
||||
|
||||
@@ -1107,7 +1111,6 @@ function UNIT:GetUnits()
|
||||
|
||||
if DCSUnit then
|
||||
Units[1] = UNIT:Find(DCSUnit)
|
||||
- self:T3(Units)
|
||||
return Units
|
||||
end
|
||||
|
||||
@@ -1925,3 +1928,28 @@ function UNIT:IsAAA()
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
--- Set the relative life points of a UNIT object
|
||||
-- @param #UNIT self
|
||||
-- @param #number Percent Percent to set, can be 0..100.
|
||||
function UNIT:SetLife(Percent)
|
||||
net.dostring_in("mission",string.format("a_unit_set_life_percentage(%d, %f)", self:GetID(), Percent))
|
||||
end
|
||||
|
||||
--- Set the carrier illumination mode. -2: OFF, -1: AUTO, 0: NAVIGATION, 1: AC LAUNCH, 2: AC RECOVERY
|
||||
-- @param #UNIT self
|
||||
-- @param #number Mode Illumination mode, can be -2: OFF, -1: AUTO, 0: NAVIGATION, 1: AC LAUNCH, 2: AC RECOVERY
|
||||
function UNIT:SetCarrierIlluminationMode(Mode)
|
||||
UTILS.SetCarrierIlluminationMode(self:GetID(), Mode)
|
||||
end
|
||||
|
||||
--- This function uses Disposition and other fallback logic to find better ground positions for ground units.
|
||||
--- NOTE: This is not a spawn randomizer.
|
||||
--- It will try to find clear ground locations avoiding trees, water, roads, runways, map scenery, statics and other units in the area and modifies the provided positions table.
|
||||
--- Maintains the original layout and unit positions as close as possible by searching for the next closest valid position to each unit.
|
||||
--- Uses UTILS.ValidateAndRepositionGroundUnits.
|
||||
-- @param #UNIT self
|
||||
-- @param #boolean Enabled Enable/disable the feature.
|
||||
function UNIT:SetValidateAndRepositionGroundUnits(Enabled)
|
||||
self.ValidateAndRepositionGroundUnits = Enabled
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user