Merge pull request #83 from Khopa/develop

Version 2.1.0
This commit is contained in:
C. Perreau 2020-08-21 02:12:07 +02:00 committed by GitHub
commit 515d1d0dee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
52 changed files with 1587 additions and 175 deletions

View File

@ -1,3 +1,27 @@
# 2.1.0
## Features/Improvements :
* **[Campaign Generator]** Added Syria map
* **[Campaign Generator]** Added 5 campaigns for the Syria map
* **[Campaign Generator]** Added 2 small scale campaign for Persian Gulf map
* **[Units/Factions]** Added factions for Syria map : Syria 2011, Arab Armies 1982, 1973, 1968, 1948, Israel 1982, 1973, 1948
* **[Base Menu]** Budget is visible in recruitment menu. (Thanks to Github contributor root0fall)
* **[Misc]** Added error message in mission when the state file can not be written
* **[Units/Factions]** China, Pakistan, UAE will now use the new WingLoong drone as JTAC instead of the MQ-9 Reaper
* **[Units/Factions]** Minor changes to Syria 2011 and Turkey 2005 factions
* **[UI]** Version number is shown in about dialog
## Fixed issues :
* **[Mission Generator]** Caucasus terrain improvement on exclusions zone (added forests between Vaziani and Beslan to exclusion zones)
* **[Mission Generator]** The first unit of every base defenses group could not be controlled with Combined Arms.
* **[Mission Generator]** Reduced generated helicopter altitude for CAS missions
* **[Mission Generator]** F-16C default CAS payload was asymmetric, fixed.
* **[Mission Generator]** AH-1W couldn't be bought, and added default payloads.
* **[UI/UX]** Fixed Mi-28N missing thumbnail
* **[UI/UX]** Fixed list of flights not refreshing when changing the mission departure (T+).
# 2.0.11
## Features/Improvements :
@ -42,7 +66,7 @@
* **[Mission Generator]** The briefing will now contain the carrier ATC frequency
* **[Mission Generator]** The briefing contains a small situation update.
* **[Mission Generator]** Previously destroyed units are visible in the mission. (And added a performance settings to disable this behaviour)
* **[Mission Generator]** Basic JTAC on Frontlines
* **[Mission Generator]*c* Basic JTAC on Frontlines
* **[Campaign Generator]** Added Tarawa in caucasus campaigns
* **[Campaign Generator]** Tuned the various existing campaign parameters
* **[Campaign Generator]** Added small campaign : "Russia" on Caucasus Theater

View File

@ -27,6 +27,8 @@ from game.factions.germany_1990 import Germany_1990
from game.factions.insurgent import Insurgent
from game.factions.insurgent_modded import Insurgent_modded
from game.factions.iran_2015 import Iran_2015
from game.factions.israel_1948 import Israel_1948
from game.factions.israel_1973 import Israel_1973, Israel_1973_NO_WW2_UNITS, Israel_1982
from game.factions.israel_2000 import Israel_2000
from game.factions.italy_1990 import Italy_1990
from game.factions.italy_1990_mb339 import Italy_1990_MB339
@ -45,6 +47,7 @@ from game.factions.russia_1990 import Russia_1990
from game.factions.russia_2010 import Russia_2010
from game.factions.spain_1990 import Spain_1990
from game.factions.sweden_1990 import Sweden_1990
from game.factions.syria import Syria_2011, Syria_1967, Syria_1967_WW2_Weapons, Syria_1973, Arab_Armies_1948, Syria_1982
from game.factions.turkey_2005 import Turkey_2005
from game.factions.uae_2005 import UAE_2005
from game.factions.uk_1944 import UK_1944
@ -140,6 +143,7 @@ PRICES = {
MiG_29A: 18,
MiG_29S: 20,
MiG_29G: 18,
MiG_25PD: 20,
MiG_31: 30,
J_11A: 26,
JF_17: 20,
@ -171,6 +175,7 @@ PRICES = {
F_15C: 22,
F_15E: 24,
F_16C_50: 20,
F_16A: 14,
F_14B: 24,
Tornado_IDS: 20,
Tornado_GR4: 20,
@ -208,18 +213,18 @@ PRICES = {
B_1B: 50,
# special
IL_76MD: 13,
An_26B: 13,
An_30M: 13,
Yak_40: 13,
S_3B_Tanker: 13,
IL_78M: 13,
KC_135: 13,
KC130: 13,
IL_76MD: 30,
An_26B: 25,
An_30M: 25,
Yak_40: 25,
S_3B_Tanker: 20,
IL_78M: 25,
KC_135: 25,
KC130: 25,
A_50: 8,
E_3A: 8,
C_130: 8,
A_50: 50,
E_3A: 50,
C_130: 25,
# WW2
P_51D_30_NA: 18,
@ -227,6 +232,11 @@ PRICES = {
P_47D_30: 18,
B_17G: 30,
# Drones
MQ_9_Reaper: 12,
RQ_1A_Predator: 6,
WingLoong_I: 6,
# Modded
Rafale_M: 26,
Rafale_A_S: 26,
@ -390,17 +400,19 @@ Following tasks are present:
UNIT_BY_TASK = {
CAP: [
F_5E_3,
MiG_23MLD,
Su_27,
Su_33,
MiG_19P,
MiG_21Bis,
MiG_23MLD,
MiG_25PD,
MiG_29A,
MiG_29S,
MiG_31,
FA_18C_hornet,
F_15C,
F_14B,
F_16A,
F_16C_50,
M_2000C,
Mirage_2000_5,
@ -457,7 +469,11 @@ UNIT_BY_TASK = {
Ju_88A4,
B_17G,
MB_339PAN,
Rafale_A_S
Rafale_A_S,
WingLoong_I,
MQ_9_Reaper,
RQ_1A_Predator,
AH_1W
],
Transport: [
IL_76MD,
@ -767,6 +783,16 @@ FACTIONS = {
"Italy 1990 (With MB339)": Italy_1990_MB339,
"Israel 2000": Israel_2000,
"Israel 1982": Israel_1982,
"Israel 1973 (WW2 Pack)": Israel_1973,
"Israel 1973": Israel_1973_NO_WW2_UNITS,
"Israel 1948": Israel_1948,
"Arab Armies 1982": Syria_1982,
"Arab Armies 1973": Syria_1973,
"Arab Armies 1967 (WW2 Pack)": Syria_1967_WW2_Weapons,
"Arab Armies 1967": Syria_1967,
"Arab League 1948": Arab_Armies_1948,
"China 2010": China_2010,
@ -788,6 +814,9 @@ FACTIONS = {
"Libya 2011": Libya_2011,
"Syria 2011": Syria_2011,
"Pakistan 2015": Pakistan_2015,
"Iran 2015": Iran_2015,
@ -925,6 +954,11 @@ PLANE_PAYLOAD_OVERRIDES = {
Rafale_M: COMMON_OVERRIDE,
Rafale_A_S: COMMON_OVERRIDE,
OH_58D: COMMON_OVERRIDE,
F_16A: COMMON_OVERRIDE,
MQ_9_Reaper: COMMON_OVERRIDE,
RQ_1A_Predator: COMMON_OVERRIDE,
WingLoong_I: COMMON_OVERRIDE,
AH_1W: COMMON_OVERRIDE,
AH_64D:{
CAS: "AGM-114K*16"
@ -982,7 +1016,11 @@ TIME_PERIODS = {
"Modern - Summer [2010]": datetime(2010, 6, 1),
"Modern - Fall [2010]": datetime(2010, 10, 1),
"Georgian War [2008]": datetime(2008, 8, 7),
"Syrian War [2011]": datetime(2011, 8, 7),
"Syrian War [2011]": datetime(2011, 3, 15),
"6 days war [1967]": datetime(1967, 6, 5),
"Yom Kippour War [1973]": datetime(1973, 10, 6),
"Lebanon War [1982]": datetime(1982, 6, 6),
"Arab-Israeli War [1948]": datetime(1948, 5, 15),
}
REWARDS = {
@ -1030,6 +1068,7 @@ LHA_CAPABLE = [
SA342Mistral
]
"""
---------- END OF CONFIGURATION SECTION
"""

View File

@ -23,6 +23,7 @@ China_2010 = {
A_50,
Mi_8MT,
Mi_28N,
AirDefence.SAM_SA_10_S_300PS_LN_5P85C, # Standing as HQ-9+
AirDefence.SAM_SA_6_Kub_LN_2P25,
@ -73,5 +74,7 @@ China_2010 = {
"002 Shandong",
], "boat":[
"Type54GroupGenerator"
], "has_jtac": True
],
"has_jtac": True,
"jtac_unit": WingLoong_I
}

View File

@ -32,7 +32,9 @@ Germany_1944 = {
Infantry.Infantry_Mauser_98,
AirDefence.AAA_8_8cm_Flak_36,
],
],"requirements":{
"WW2 Asset Pack": "https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/",
},
"shorad": [
AirDefence.AAA_8_8cm_Flak_36,
],

View File

@ -25,7 +25,9 @@ Germany_1944_Easy = {
Infantry.Infantry_Mauser_98,
AirDefence.AAA_8_8cm_Flak_36,
],
],"requirements":{
"WW2 Asset Pack": "https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/",
},
"shorad":[
AirDefence.AAA_8_8cm_Flak_36,
],

View File

@ -12,11 +12,13 @@ Insurgent = {
AirDefence.AAA_ZU_23_Insurgent_on_Ural_375,
Armor.APC_Cobra,
Armor.APC_MTLB,
Armor.ARV_BRDM_2,
Unarmed.Transport_Ural_375,
Unarmed.Transport_UAZ_469,
Infantry.Soldier_AK,
Infantry.Infantry_Soldier_Insurgents,
Infantry.Soldier_RPG,
Bulk_cargo_ship_Yakushev,
Dry_cargo_ship_Ivanov,

View File

@ -0,0 +1,33 @@
from dcs.planes import *
from dcs.ships import *
from dcs.vehicles import *
Israel_1948 = {
"country": "Israel",
"side": "blue",
"units":[
SpitfireLFMkIXCW,
SpitfireLFMkIX,
P_51D,
P_51D_30_NA,
Bf_109K_4, # Standing as Avia S-199
B_17G,
Armor.MT_M4A4_Sherman_Firefly,
Armor.APC_M2A1,
Armor.MT_M4_Sherman,
Armor.LAC_M8_Greyhound,
Unarmed.Transport_M818,
Infantry.Infantry_SMLE_No_4_Mk_1,
AirDefence.AAA_Bofors_40mm,
Armed_speedboat,
],"requirements":{
"WW2 Asset Pack": "https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/",
},
"shorad": [
AirDefence.AAA_Bofors_40mm
], "boat": [
], "has_jtac": False
}

View File

@ -0,0 +1,112 @@
from dcs.helicopters import *
from dcs.planes import *
from dcs.ships import *
from dcs.vehicles import *
from pydcs_extensions.a4ec.a4ec import A_4E_C
Israel_1973 = {
"country": "Israel",
"side": "blue",
"units":[
F_4E,
A_4E_C,
KC_135,
KC130,
C_130,
E_3A,
UH_1H,
Armor.MT_M4A4_Sherman_Firefly,
Armor.APC_M2A1,
Armor.MBT_M60A3_Patton,
Armor.APC_M113,
Unarmed.Transport_M818,
Infantry.Infantry_M4,
AirDefence.SAM_Hawk_PCP,
AirDefence.AAA_Bofors_40mm,
AirDefence.SAM_Chaparral_M48,
Armed_speedboat,
], "requirements": {
"Community A-4E": "https://heclak.github.io/community-a4e-c/",
"WW2 Asset Pack": "https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/",
}, "shorad": [
AirDefence.SAM_Chaparral_M48,
AirDefence.AAA_Bofors_40mm
], "boat": [
], "has_jtac": True
}
Israel_1973_NO_WW2_UNITS = {
"country": "Israel",
"side": "blue",
"units":[
F_4E,
A_4E_C,
KC_135,
KC130,
C_130,
E_3A,
UH_1H,
Armor.MBT_M60A3_Patton,
Armor.APC_M113,
Unarmed.Transport_M818,
Infantry.Infantry_M4,
AirDefence.SAM_Hawk_PCP,
AirDefence.SAM_Chaparral_M48,
Armed_speedboat,
], "requirements": {
"Community A-4E": "https://heclak.github.io/community-a4e-c/",
}, "shorad": [
AirDefence.SAM_Chaparral_M48,
], "boat": [
], "has_jtac": True
}
Israel_1982 = {
"country": "Israel",
"side": "blue",
"units":[
F_4E,
A_4E_C,
F_15C,
F_16A,
F_16C_50,
KC_135,
KC130,
C_130,
E_3A,
UH_1H,
AH_1W,
Armor.APC_M113,
Armor.MBT_M60A3_Patton,
Armor.MBT_Merkava_Mk__4,
Unarmed.Transport_M818,
Infantry.Infantry_M4,
AirDefence.SAM_Hawk_PCP,
AirDefence.SAM_Chaparral_M48,
Armed_speedboat,
], "requirements": {
"Community A-4E": "https://heclak.github.io/community-a4e-c/",
}, "shorad": [
AirDefence.SAM_Chaparral_M48,
], "boat": [
], "has_jtac": True
}

View File

@ -9,6 +9,7 @@ Israel_2000 = {
"units":[
F_16C_50,
F_15C,
F_15E,
F_4E,
KC_135,
@ -21,6 +22,10 @@ Israel_2000 = {
Armor.MBT_Merkava_Mk__4,
Armor.APC_M113,
Armor.APC_M1043_HMMWV_Armament,
Armor.ATGM_M1045_HMMWV_TOW,
Artillery.SPH_M109_Paladin,
Artillery.MLRS_M270,
Unarmed.Transport_M818,
Infantry.Infantry_M4,

View File

@ -36,5 +36,7 @@ Pakistan_2015 = {
AirDefence.AAA_ZU_23_Closed
], "boat": [
"Type54GroupGenerator", "OliverHazardPerryGroupGenerator"
], "has_jtac": True
],
"has_jtac": True,
"jtac_unit": WingLoong_I
}

261
game/factions/syria.py Normal file
View File

@ -0,0 +1,261 @@
from dcs.helicopters import *
from dcs.planes import *
from dcs.vehicles import *
Syria_2011 = {
"country": "Syria",
"side": "red",
"units": [
MiG_29S,
MiG_25PD,
L_39ZA,
Su_24M,
Su_17M4,
Mi_24V,
SA342M,
Mi_8MT,
IL_76MD,
IL_78M,
An_26B,
An_30M,
Yak_40,
A_50,
AirDefence.SAM_SA_6_Kub_LN_2P25,
AirDefence.SAM_SA_3_S_125_LN_5P73,
AirDefence.SAM_SA_2_LN_SM_90,
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_11_Buk_LN_9A310M1,
AirDefence.SAM_SA_10_S_300PS_LN_5P85C,
Armor.IFV_BMP_1,
Armor.IFV_BMP_2,
Armor.APC_BTR_80,
Armor.ARV_BRDM_2,
Armor.APC_MTLB,
Armor.APC_Cobra,
Armor.MBT_T_55,
Armor.MBT_T_72B,
Armor.MBT_T_90,
Artillery.MLRS_BM_21_Grad,
Artillery.MLRS_9K57_Uragan_BM_27,
Artillery.SPH_2S1_Gvozdika,
Artillery.SPH_2S9_Nona,
Unarmed.Transport_Ural_375,
Unarmed.Transport_UAZ_469,
Infantry.Paratrooper_RPG_16,
Infantry.Soldier_AK
],
"shorad": [
AirDefence.SAM_SA_8_Osa_9A33,
AirDefence.SAM_SA_13_Strela_10M3_9A35M3,
AirDefence.SAM_SA_9_Strela_1_9P31,
AirDefence.SAM_SA_19_Tunguska_2S6,
AirDefence.AAA_ZU_23_on_Ural_375,
], "boat": [
"GrishaGroupGenerator", "MolniyaGroupGenerator"
]
}
Syria_1973 = {
"country": "Syria",
"side": "red",
"units": [
MiG_21Bis,
MiG_19P,
MiG_15bis, # Standing as Mig-17
Su_17M4, # Standing as Su-7
Mi_8MT,
IL_76MD,
IL_78M,
An_26B,
An_30M,
Yak_40,
AirDefence.SAM_SA_6_Kub_LN_2P25,
AirDefence.SAM_SA_3_S_125_LN_5P73,
AirDefence.SAM_SA_2_LN_SM_90,
Armor.IFV_BMP_1,
Armor.APC_MTLB,
Armor.MBT_T_55,
Artillery.MLRS_BM_21_Grad,
Unarmed.Transport_Ural_375,
Unarmed.Transport_UAZ_469,
Infantry.Paratrooper_RPG_16,
Infantry.Soldier_AK
],
"shorad": [
AirDefence.AAA_ZU_23_on_Ural_375,
], "boat": [
"GrishaGroupGenerator"
]
}
Syria_1982 = {
"country": "Syria",
"side": "red",
"units": [
MiG_21Bis,
MiG_23MLD,
MiG_25PD,
MiG_19P,
Su_17M4, # Standing as Su-7
Mi_8MT,
IL_76MD,
IL_78M,
An_26B,
An_30M,
Yak_40,
AirDefence.SAM_SA_6_Kub_LN_2P25,
AirDefence.SAM_SA_3_S_125_LN_5P73,
AirDefence.SAM_SA_2_LN_SM_90,
Armor.IFV_BMP_1,
Armor.APC_MTLB,
Armor.MBT_T_55,
Armor.MBT_T_72B,
Artillery.MLRS_BM_21_Grad,
Unarmed.Transport_Ural_375,
Unarmed.Transport_UAZ_469,
Infantry.Paratrooper_RPG_16,
Infantry.Soldier_AK
],
"shorad": [
AirDefence.AAA_ZU_23_on_Ural_375,
], "boat": [
"GrishaGroupGenerator"
]
}
Syria_1967 = {
"country": "Syria",
"side": "red",
"units": [
MiG_21Bis,
MiG_19P,
MiG_15bis, # Standing as Mig-17
Su_17M4, # Standing as Su-7
Mi_8MT,
IL_76MD,
IL_78M,
An_26B,
An_30M,
Yak_40,
AirDefence.SAM_SA_2_LN_SM_90,
Armor.ARV_BRDM_2,
Armor.MBT_T_55,
Artillery.MLRS_BM_21_Grad,
Unarmed.Transport_Ural_375,
Unarmed.Transport_UAZ_469,
Infantry.Paratrooper_RPG_16,
Infantry.Soldier_AK
],
"shorad": [
AirDefence.AAA_ZU_23_on_Ural_375,
], "boat": [
"GrishaGroupGenerator"
]
}
Syria_1967_WW2_Weapons = {
"country": "Syria",
"side": "red",
"units": [
MiG_21Bis,
MiG_19P,
MiG_15bis, # Standing as Mig-17
Su_17M4, # Standing as Su-7
Mi_8MT,
IL_76MD,
IL_78M,
An_26B,
An_30M,
Yak_40,
AirDefence.SAM_SA_2_LN_SM_90,
Armor.ARV_BRDM_2,
Armor.MBT_T_55,
Armor.MT_Pz_Kpfw_IV_Ausf_H,
Armor.StuG_III_Ausf__G,
Armor.TD_Jagdpanzer_IV,
Artillery.MLRS_BM_21_Grad,
Unarmed.Transport_Ural_375,
Unarmed.Transport_UAZ_469,
Infantry.Soldier_RPG,
Infantry.Soldier_AK
], "requirements": {
"WW2 Asset Pack": "https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/",
},
"shorad": [
AirDefence.AAA_ZU_23_on_Ural_375,
], "boat": [
"GrishaGroupGenerator"
]
}
Arab_Armies_1948 = {
"country": "Syria",
"side": "red",
"units": [
SpitfireLFMkIX,
SpitfireLFMkIXCW,
AirDefence.SAM_SA_2_LN_SM_90,
Armor.MT_M4_Sherman,
Armor.MT_Pz_Kpfw_IV_Ausf_H,
Armor.APC_Sd_Kfz_251,
Armor.IFV_Sd_Kfz_234_2_Puma,
Unarmed.Transport_Ural_375,
Unarmed.Transport_UAZ_469,
Infantry.Infantry_SMLE_No_4_Mk_1,
AirDefence.AAA_8_8cm_Flak_36,
], "requirements": {
"WW2 Asset Pack": "https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/",
},
"shorad": [
AirDefence.AAA_8_8cm_Flak_36,
], "boat": [
"GrishaGroupGenerator"
]
}

View File

@ -16,7 +16,6 @@ Turkey_2005 = {
E_3A,
UH_1H,
OH_58D,
AH_1W,
Armor.MBT_Leopard_2,

View File

@ -32,5 +32,7 @@ UAE_2005 = {
Armed_speedboat,
], "boat":[
"OliverHazardPerryGroupGenerator"
], "has_jtac": True
],
"has_jtac": True,
"jtac_unit": WingLoong_I
}

View File

@ -34,7 +34,9 @@ UK_1944 = {
AirDefence.AAA_Bofors_40mm,
], "shorad":[
AirDefence.AAA_Bofors_40mm,
],
],"requirements":{
"WW2 Asset Pack": "https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/",
},
"objects": WW2_ALLIES_BUILDINGS,
"doctrine": WWII_DOCTRINE,
"boat": ["WW2LSTGroupGenerator"],

View File

@ -32,7 +32,9 @@ USA_1944 = {
AirDefence.AAA_Bofors_40mm,
], "shorad":[
AirDefence.AAA_Bofors_40mm,
],
],"requirements":{
"WW2 Asset Pack": "https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/",
},
"objects": WW2_ALLIES_BUILDINGS,
"doctrine": WWII_DOCTRINE,
"boat": ["WW2LSTGroupGenerator"],
@ -74,7 +76,9 @@ ALLIES_1944 = {
AirDefence.AAA_Bofors_40mm,
], "shorad":[
AirDefence.AAA_Bofors_40mm,
],
],"requirements":{
"WW2 Asset Pack": "https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/",
},
"objects": WW2_ALLIES_BUILDINGS,
"doctrine": WWII_DOCTRINE,
"boat": ["WW2LSTGroupGenerator"],

View File

@ -101,9 +101,14 @@ class GroundConflictGenerator:
if "has_jtac" in self.game.player_faction and self.game.player_faction["has_jtac"] and self.game.settings.include_jtac_if_available:
n = "JTAC" + str(self.conflict.from_cp.id) + str(self.conflict.to_cp.id)
code = 1688 - len(self.game.jtacs)
utype = MQ_9_Reaper
if "jtac_unit" in self.game.player_faction:
utype = self.game.player_faction["jtac_unit"]
jtac = self.mission.flight_group(country=self.mission.country(self.game.player_country),
name=n,
aircraft_type=MQ_9_Reaper,
aircraft_type=utype,
position=position[0],
airport=None,
altitude=5000)

View File

@ -607,7 +607,8 @@ class FlightPlanner:
:param flight: Flight to setup
:param location: Location of the CAS targets
"""
is_helo = hasattr(flight.unit_type, "helicopter") and flight.unit_type.helicopter
cap_alt = 1000
flight.points = []
flight.flight_type = FlightType.CAS
@ -616,9 +617,12 @@ class FlightPlanner:
egress = ingress.point_from_heading(heading, distance)
ascend = self.generate_ascend_point(flight.from_cp)
if is_helo:
cap_alt = 500
ascend.alt = 500
flight.points.append(ascend)
ingress_point = FlightWaypoint(ingress.x, ingress.y, 1000)
ingress_point = FlightWaypoint(ingress.x, ingress.y, cap_alt)
ingress_point.alt_type = "RADIO"
ingress_point.name = "INGRESS"
ingress_point.pretty_name = "INGRESS"
@ -626,7 +630,7 @@ class FlightPlanner:
ingress_point.waypoint_type = FlightWaypointType.INGRESS_CAS
flight.points.append(ingress_point)
center_point = FlightWaypoint(center.x, center.y, 1000)
center_point = FlightWaypoint(center.x, center.y, cap_alt)
center_point.alt_type = "RADIO"
center_point.description = "Provide CAS"
center_point.name = "CAS"
@ -634,7 +638,7 @@ class FlightPlanner:
center_point.waypoint_type = FlightWaypointType.CAS
flight.points.append(center_point)
egress_point = FlightWaypoint(egress.x, egress.y, 1000)
egress_point = FlightWaypoint(egress.x, egress.y, cap_alt)
egress_point.alt_type = "RADIO"
egress_point.description = "Egress from CAS area"
egress_point.name = "EGRESS"
@ -643,6 +647,8 @@ class FlightPlanner:
flight.points.append(egress_point)
descend = self.generate_descend_point(flight.from_cp)
if is_helo:
descend.alt = 300
flight.points.append(descend)
rtb = self.generate_rtb_waypoint(flight.from_cp)

View File

@ -31,6 +31,7 @@ CAP_CAPABLE = [
MiG_19P,
MiG_21Bis,
MiG_23MLD,
MiG_25PD,
MiG_29A,
MiG_29G,
MiG_29S,
@ -51,6 +52,7 @@ CAP_CAPABLE = [
F_14B,
F_15C,
F_15E,
F_16A,
F_16C_50,
FA_18C_hornet,
@ -100,6 +102,7 @@ CAS_CAPABLE = [
F_5E_3,
F_14B,
F_15E,
F_16A,
F_16C_50,
FA_18C_hornet,
@ -135,7 +138,11 @@ CAS_CAPABLE = [
FW_190A8,
A_4E_C,
Rafale_A_S
Rafale_A_S,
WingLoong_I,
MQ_9_Reaper,
RQ_1A_Predator
]
# Aircraft used for SEAD / DEAD tasks
@ -184,6 +191,7 @@ STRIKE_CAPABLE = [
F_5E_3,
F_14B,
F_15E,
F_16A,
F_16C_50,
FA_18C_hornet,
@ -216,10 +224,17 @@ ANTISHIP_CAPABLE = [
F_15E,
AV8BNA,
JF_17,
F_16A,
F_16C_50,
A_10C,
A_10A,
Ju_88A4,
Rafale_A_S
]
]
DRONES = [
MQ_9_Reaper,
RQ_1A_Predator,
WingLoong_I
]

View File

@ -66,6 +66,7 @@ class GroundObjectsGenerator:
if not ground_object.sea_object:
vg = self.m.vehicle_group(side, g.name, utype, position=g.position, heading=g.units[0].heading)
vg.units[0].name = self.m.string(g.units[0].name)
vg.units[0].player_can_drive = True
for i, u in enumerate(g.units):
if i > 0:
vehicle = Vehicle(self.m.next_unit_id(), self.m.string(u.name), u.type)

View File

@ -1,9 +1,5 @@
from userdata import logging_config
# Logging setup
VERSION_STRING = "2.0.10"
logging_config.init_logging(VERSION_STRING)
import logging
import os
import sys
@ -19,6 +15,9 @@ from qt_ui.windows.QLiberationWindow import QLiberationWindow
from qt_ui.windows.preferences.QLiberationFirstStartWindow import QLiberationFirstStartWindow
from userdata import liberation_install, persistency, liberation_theme
# Logging setup
logging_config.init_logging(uiconstants.VERSION_STRING)
if __name__ == "__main__":
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1" # Potential fix for 4K screens

View File

@ -8,6 +8,8 @@ from game.event import UnitsDeliveryEvent, FrontlineAttackEvent
from theater.theatergroundobject import CATEGORY_MAP
from userdata.liberation_theme import get_theme_icons
VERSION_STRING = "2.1.0"
URLS : Dict[str, str] = {
"Manual": "https://github.com/khopa/dcs_liberation/wiki",
"Repository": "https://github.com/khopa/dcs_liberation",
@ -69,7 +71,7 @@ COLORS: Dict[str, QColor] = {
}
CP_SIZE = 24
CP_SIZE = 12
AIRCRAFT_ICONS: Dict[str, QPixmap] = {}
VEHICLES_ICONS: Dict[str, QPixmap] = {}
@ -86,6 +88,7 @@ def load_icons():
ICONS["Terrain_Nevada"] = QPixmap("./resources/ui/terrain_nevada.gif")
ICONS["Terrain_Normandy"] = QPixmap("./resources/ui/terrain_normandy.gif")
ICONS["Terrain_Channel"] = QPixmap("./resources/ui/terrain_channel.gif")
ICONS["Terrain_Syria"] = QPixmap("./resources/ui/terrain_syria.gif")
ICONS["Dawn"] = QPixmap("./resources/ui/daytime/dawn.png")
ICONS["Day"] = QPixmap("./resources/ui/daytime/day.png")

View File

@ -12,10 +12,9 @@ from game import Game
from qt_ui.uiconstants import URLS
from qt_ui.widgets.QTopPanel import QTopPanel
from qt_ui.widgets.map.QLiberationMap import QLiberationMap
from qt_ui.windows.preferences import QLiberationPreferences
from qt_ui.windows.GameUpdateSignal import GameUpdateSignal, DebriefingSignal
from qt_ui.windows.QDebriefingWindow import QDebriefingWindow
from qt_ui.windows.QNewGameWizard import NewGameWizard
from qt_ui.windows.newgame.QNewGameWizard import NewGameWizard
from qt_ui.windows.infos.QInfoPanel import QInfoPanel
from qt_ui.windows.preferences.QLiberationPreferencesWindow import QLiberationPreferencesWindow
from userdata import persistency
@ -212,17 +211,16 @@ class QLiberationWindow(QMainWindow):
self.info_panel.setGame(game)
def showAboutDialog(self):
text = "<h3>DCS Liberation</h3>" + \
text = "<h3>DCS Liberation " + CONST.VERSION_STRING + "</h3>" + \
"<b>Source code :</b> https://github.com/khopa/dcs_liberation" + \
"<h4>Authors</h4>" + \
"<p>DCS Liberation was originally developed by <b>shdwp</b>, DCS Liberation 2.0 is a partial rewrite based on this work by <b>Khopa</b>." \
"<h4>Contributors</h4>" + \
"shdwp, Khopa, Wrycu, calvinmorrow, JohanAberg, Deus" + \
"shdwp, Khopa, Wrycu, calvinmorrow, JohanAberg, Deus, root0fall, Captain Cody" + \
"<h4>Special Thanks :</h4>" \
"<b>rp-</b> <i>for the pydcs framework</i><br/>"\
"<b>Grimes (mrSkortch)</b> & <b>Speed</b> <i>for the MIST framework</i><br/>"\
"<b>Ciribob </b> <i>for the JTACAutoLase.lua script</i><br/>"
about = QMessageBox()
about.setWindowTitle("About DCS Liberation")
about.setIcon(QMessageBox.Icon.Information)

View File

@ -7,6 +7,7 @@ from game.event import ControlPointType
from qt_ui.uiconstants import EVENT_ICONS
from qt_ui.windows.GameUpdateSignal import GameUpdateSignal
from qt_ui.windows.basemenu.QBaseMenuTabs import QBaseMenuTabs
from qt_ui.windows.basemenu.QRecruitBehaviour import QRecruitBehaviour
from theater import ControlPoint
@ -19,6 +20,7 @@ class QBaseMenu2(QDialog):
self.cp = cp
self.game = game
self.is_carrier = self.cp.cptype in [ControlPointType.AIRCRAFT_CARRIER_GROUP, ControlPointType.LHA_GROUP]
self.objectName = "menuDialogue"
# Widgets
self.qbase_menu_tab = QBaseMenuTabs(cp, game)
@ -58,7 +60,6 @@ class QBaseMenu2(QDialog):
title.setProperty("style", "base-title")
unitsPower = QLabel("{} / {} / Runway : {}".format(self.cp.base.total_planes, self.cp.base.total_armor,
"Available" if self.cp.has_runway() else "Unavailable"))
self.topLayout.addWidget(title)
self.topLayout.addWidget(unitsPower)
self.topLayout.setAlignment(Qt.AlignTop)
@ -69,7 +70,11 @@ class QBaseMenu2(QDialog):
self.mainLayout.addWidget(header, 0, 0)
self.mainLayout.addWidget(self.topLayoutWidget, 1, 0)
self.mainLayout.addWidget(self.qbase_menu_tab, 2, 0)
totalBudget = QLabel(QRecruitBehaviour.BUDGET_FORMAT.format(self.game.budget))
totalBudget.setObjectName("budgetField")
totalBudget.setAlignment(Qt.AlignRight | Qt.AlignBottom)
totalBudget.setProperty("style", "budget-label")
self.mainLayout.addWidget(totalBudget)
self.setLayout(self.mainLayout)
def closeEvent(self, closeEvent:QCloseEvent):
@ -81,4 +86,4 @@ class QBaseMenu2(QDialog):
elif self.cp.cptype == ControlPointType.LHA_GROUP:
return "./resources/ui/lha.png"
else:
return "./resources/ui/airbase.png"
return "./resources/ui/airbase.png"

View File

@ -5,6 +5,7 @@ from dcs.unittype import UnitType
from theater import db
class QRecruitBehaviour:
game = None
@ -12,10 +13,12 @@ class QRecruitBehaviour:
deliveryEvent = None
existing_units_labels = None
bought_amount_labels = None
BUDGET_FORMAT = "Available Budget: <b>${}M</b>"
def __init__(self):
self.bought_amount_labels = {}
self.existing_units_labels = {}
self.update_available_budget()
def add_purchase_row(self, unit_type, layout, row):
@ -91,12 +94,22 @@ class QRecruitBehaviour:
self.cp.base.total_units_of_type(unit_type)
))
def update_available_budget(self):
parent = self.parent()
while parent.objectName != "menuDialogue":
parent = parent.parent()
for child in parent.children():
if child.objectName() == "budgetField":
child.setText(QRecruitBehaviour.BUDGET_FORMAT.format(self.game.budget))
def buy(self, unit_type):
price = db.PRICES[unit_type]
if self.game.budget >= price:
self.deliveryEvent.deliver({unit_type: 1})
self.game.budget -= price
self._update_count_label(unit_type)
self.update_available_budget()
def sell(self, unit_type):
if self.deliveryEvent.units.get(unit_type, 0) > 0:
@ -111,3 +124,4 @@ class QRecruitBehaviour:
self.cp.base.commit_losses({unit_type: 1})
self._update_count_label(unit_type)
self.update_available_budget()

View File

@ -98,6 +98,7 @@ class QMissionPlanning(QDialog):
self.planned_flight_view.repaint()
if self.flight_planner is not None:
self.flight_planner.on_planned_flight_changed.disconnect()
self.flight_planner.clearTabs()
try:

View File

@ -23,6 +23,7 @@ class QPlannedFlightsView(QListView):
self.flightitems[i].update(f)
def setup_content(self, row=0):
self.flightitems = []
for i, f in enumerate(self.flight_planner.flights):
item = QFlightItem(f)
self.model.appendRow(item)

View File

@ -0,0 +1,72 @@
from PySide2 import QtGui
from PySide2.QtCore import QSize, QItemSelectionModel
from PySide2.QtGui import QStandardItemModel, QStandardItem
from PySide2.QtWidgets import QListView, QAbstractItemView
from theater import caucasus, nevada, persiangulf, normandy, thechannel, syria
import qt_ui.uiconstants as CONST
CAMPAIGNS = [
("Caucasus - Western Georgia", caucasus.WesternGeorgia, "Terrain_Caucasus"),
("Caucasus - Russia Small", caucasus.RussiaSmall, "Terrain_Caucasus"),
("Caucasus - North Caucasus", caucasus.NorthCaucasus, "Terrain_Caucasus"),
("Caucasus - Full Map", caucasus.CaucasusTheater, "Terrain_Caucasus"),
("Nevada - North Nevada", nevada.NevadaTheater, "Terrain_Nevada"),
("Persian Gulf - Invasion of Iran", persiangulf.IranianCampaign, "Terrain_Persian_Gulf"),
("Persian Gulf - Invasion of Iran [Lite]", persiangulf.IranInvasionLite, "Terrain_Persian_Gulf"),
("Persian Gulf - Emirates", persiangulf.Emirates, "Terrain_Persian_Gulf"),
("Persian Gulf - Desert War", persiangulf.DesertWar, "Terrain_Persian_Gulf"),
("Persian Gulf - Full Map", persiangulf.PersianGulfTheater, "Terrain_Persian_Gulf"),
("Syria - Golan heights battle", syria.GolanHeights, "Terrain_Syria"),
("Syria - Invasion from Turkey", syria.TurkishInvasion, "Terrain_Syria"),
("Syria - Syrian Civil War", syria.SyrianCivilWar, "Terrain_Syria"),
("Syria - Inherent Resolve", syria.InherentResolve, "Terrain_Syria"),
("Syria - Full Map", syria.SyriaFullMap, "Terrain_Syria"),
("Normandy - Normandy", normandy.NormandyTheater, "Terrain_Normandy"),
("Normandy - Normandy Small", normandy.NormandySmall, "Terrain_Normandy"),
("The Channel - Battle of Britain", thechannel.BattleOfBritain, "Terrain_Channel"),
("The Channel - Dunkirk", thechannel.Dunkirk, "Terrain_Channel"),
]
class QCampaignItem(QStandardItem):
def __init__(self, text, theater, icon):
super(QCampaignItem, self).__init__()
self.theater = theater
self.setIcon(QtGui.QIcon(CONST.ICONS[icon]))
self.setEditable(False)
self.setText(text)
class QCampaignList(QListView):
def __init__(self):
super(QCampaignList, self).__init__()
self.model = QStandardItemModel(self)
self.setModel(self.model)
self.setMinimumWidth(250)
self.setMinimumHeight(350)
self.campaigns = []
self.setSelectionBehavior(QAbstractItemView.SelectItems)
self.setup_content()
def setup_content(self):
for i, campaign in enumerate(CAMPAIGNS):
self.campaigns.append(campaign)
item = QCampaignItem(*campaign)
self.model.appendRow(item)
self.setSelectedCampaign(0)
self.repaint()
def setSelectedCampaign(self, row):
self.selectionModel().clearSelection()
index = self.model.index(row, 0)
if not index.isValid():
index = self.model.index(0, 0)
self.selectionModel().setCurrentIndex(index, QItemSelectionModel.Select)
self.repaint()
def clear_layout(self):
self.model.removeRows(0, self.model.rowCount())

View File

@ -1,8 +1,10 @@
from __future__ import unicode_literals
import datetime
import logging
from PySide2 import QtGui, QtWidgets
from PySide2.QtCore import QPoint, QItemSelectionModel
from PySide2.QtWidgets import QHBoxLayout, QVBoxLayout
from dcs.task import CAP, CAS
@ -10,6 +12,7 @@ import qt_ui.uiconstants as CONST
from game import db, Game
from game.settings import Settings
from gen import namegen
from qt_ui.windows.newgame.QCampaignList import QCampaignList
from theater import start_generator, persiangulf, nevada, caucasus, ConflictTheater, normandy, thechannel
@ -32,19 +35,15 @@ class NewGameWizard(QtWidgets.QWizard):
def accept(self):
logging.info("New Game Wizard accept")
logging.info("======================")
blueFaction = [c for c in db.FACTIONS][self.field("blueFaction")]
redFaction = [c for c in db.FACTIONS][self.field("redFaction")]
isTerrainPg = self.field("isTerrainPg")
isTerrainNttr = self.field("isTerrainNttr")
isTerrainCaucasusSmall = self.field("isTerrainCaucasusSmall")
isTerrainRussia = self.field("isTerrainRussia")
isTerrainCaucasusNorth= self.field("isTerrainCaucasusNorth")
isIranianCampaignTheater = self.field("isIranianCampaignTheater")
isTerrainNormandy = self.field("isTerrainNormandy")
isTerrainNormandySmall = self.field("isTerrainNormandySmall")
isTerrainChannel = self.field("isTerrainChannel")
isTerrainChannelComplete = self.field("isTerrainChannelComplete")
isTerrainEmirates = self.field("isTerrainEmirates")
selectedCampaign = self.field("selectedCampaign")
conflictTheater = selectedCampaign[1]()
timePeriod = db.TIME_PERIODS[list(db.TIME_PERIODS.keys())[self.field("timePeriod")]]
midGame = self.field("midGame")
multiplier = self.field("multiplier")
@ -58,31 +57,6 @@ class NewGameWizard(QtWidgets.QWizard):
player_name = blueFaction
enemy_name = redFaction
if isTerrainPg:
conflicttheater = persiangulf.PersianGulfTheater()
elif isTerrainNttr:
conflicttheater = nevada.NevadaTheater()
elif isTerrainCaucasusSmall:
conflicttheater = caucasus.WesternGeorgia()
elif isTerrainRussia:
conflicttheater = caucasus.RussiaSmall()
elif isTerrainCaucasusNorth:
conflicttheater = caucasus.NorthCaucasus()
elif isIranianCampaignTheater:
conflicttheater = persiangulf.IranianCampaign()
elif isTerrainEmirates:
conflicttheater = persiangulf.Emirates()
elif isTerrainNormandy:
conflicttheater = normandy.NormandyTheater()
elif isTerrainNormandySmall:
conflicttheater = normandy.NormandySmall()
elif isTerrainChannel:
conflicttheater = thechannel.ChannelTheater()
elif isTerrainChannelComplete:
conflicttheater = thechannel.ChannelTheaterComplete()
else:
conflicttheater = caucasus.CaucasusTheater()
settings = Settings()
settings.inverted = invertMap
settings.supercarrier = supercarrier
@ -91,40 +65,40 @@ class NewGameWizard(QtWidgets.QWizard):
settings.do_not_generate_player_navy = no_player_navy
settings.do_not_generate_enemy_navy = no_enemy_navy
self.generatedGame = self.start_new_game(player_name, enemy_name, conflicttheater, midGame, multiplier,
self.generatedGame = self.start_new_game(player_name, enemy_name, conflictTheater, midGame, multiplier,
timePeriod, settings)
super(NewGameWizard, self).accept()
def start_new_game(self, player_name: str, enemy_name: str, conflicttheater: ConflictTheater,
def start_new_game(self, player_name: str, enemy_name: str, conflictTheater: ConflictTheater,
midgame: bool, multiplier: float, period: datetime, settings:Settings):
# Reset name generator
namegen.reset()
start_generator.prepare_theater(conflicttheater, settings, midgame)
start_generator.prepare_theater(conflictTheater, settings, midgame)
print("-- Starting New Game Generator")
print("Enemy name : " + enemy_name)
print("Player name : " + player_name)
print("Midgame : " + str(midgame))
start_generator.generate_inital_units(conflicttheater, enemy_name, True, multiplier)
start_generator.generate_inital_units(conflictTheater, enemy_name, True, multiplier)
print("-- Initial units generated")
game = Game(player_name=player_name,
enemy_name=enemy_name,
theater=conflicttheater,
theater=conflictTheater,
start_date=period,
settings=settings)
print("-- Game Object generated")
start_generator.generate_groundobjects(conflicttheater, game)
start_generator.generate_groundobjects(conflictTheater, game)
game.budget = int(game.budget * multiplier)
game.settings.multiplier = multiplier
game.settings.sams = True
game.settings.version = "2.0.10"
game.settings.version = CONST.VERSION_STRING
if midgame:
game.budget = game.budget * 4 * len(list(conflicttheater.conflicts()))
game.budget = game.budget * 4 * len(list(conflictTheater.conflicts()))
return game
@ -295,6 +269,21 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
terrainChannelComplete.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Channel"]))
terrainCaucasusSmall.setChecked(True)
# List of campaigns
campaignList = QCampaignList()
self.registerField("selectedCampaign", campaignList)
def on_campaign_selected():
index = campaignList.selectionModel().currentIndex().row()
campaign = campaignList.campaigns[index]
self.setField("selectedCampaign", campaign)
campaignList.selectionModel().setCurrentIndex(campaignList.indexAt(QPoint(1, 1)), QItemSelectionModel.Rows)
campaignList.selectionModel().selectionChanged.connect(on_campaign_selected)
on_campaign_selected()
# Campaign settings
mapSettingsGroup = QtWidgets.QGroupBox("Map Settings")
invertMap = QtWidgets.QCheckBox()
@ -314,35 +303,8 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
timePeriodSelect.setCurrentIndex(21)
# Register fields
self.registerField('isTerrainCaucasus', terrainCaucasus)
self.registerField('isTerrainCaucasusSmall', terrainCaucasusSmall)
self.registerField('isTerrainRussia', terrainRussia)
self.registerField('isTerrainCaucasusNorth', terrainCaucasusNorth)
self.registerField('isTerrainPg', terrainPg)
self.registerField('isIranianCampaignTheater', terrainIran)
self.registerField('isTerrainEmirates', terrainEmirates)
self.registerField('isTerrainNttr', terrainNttr)
self.registerField('isTerrainNormandy', terrainNormandy)
self.registerField('isTerrainNormandySmall', terrainNormandySmall)
self.registerField('isTerrainChannel', terrainChannel)
self.registerField('isTerrainChannelComplete', terrainChannelComplete)
self.registerField('timePeriod', timePeriodSelect)
# Build layout
terrainGroupLayout = QtWidgets.QVBoxLayout()
terrainGroupLayout.addWidget(terrainCaucasusSmall)
terrainGroupLayout.addWidget(terrainRussia)
terrainGroupLayout.addWidget(terrainCaucasusNorth)
terrainGroupLayout.addWidget(terrainCaucasus)
terrainGroupLayout.addWidget(terrainIran)
terrainGroupLayout.addWidget(terrainEmirates)
terrainGroupLayout.addWidget(terrainPg)
terrainGroupLayout.addWidget(terrainNttr)
terrainGroupLayout.addWidget(terrainNormandy)
terrainGroupLayout.addWidget(terrainNormandySmall)
terrainGroupLayout.addWidget(terrainChannelComplete)
terrainGroupLayout.addWidget(terrainChannel)
terrainGroup.setLayout(terrainGroupLayout)
self.registerField('timePeriod', timePeriodSelect)
timeGroupLayout = QtWidgets.QGridLayout()
timeGroupLayout.addWidget(timePeriod, 0, 0)
@ -351,7 +313,7 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
layout = QtWidgets.QGridLayout()
layout.setColumnMinimumWidth(0, 20)
layout.addWidget(terrainGroup, 0, 0, 3, 1)
layout.addWidget(campaignList, 0, 0, 3, 1)
layout.addWidget(mapSettingsGroup, 0, 1, 1, 1)
layout.addWidget(timeGroup, 1, 1, 1, 1)
self.setLayout(layout)

Binary file not shown.

View File

@ -0,0 +1,69 @@
local unitPayloads = {
["name"] = "AH-1W",
["payloads"] = {
[1] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[2] = {
["name"] = "STRIKE",
["pylons"] = {
[1] = {
["CLSID"] = "M260_HYDRA",
["num"] = 1,
},
[2] = {
["CLSID"] = "M260_HYDRA",
["num"] = 2,
},
[3] = {
["CLSID"] = "M260_HYDRA",
["num"] = 3,
},
[4] = {
["CLSID"] = "M260_HYDRA",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
[3] = {
["name"] = "ANTISHIP",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 18,
[2] = 31,
[3] = 32,
},
},
},
["unitType"] = "AH-1W",
}
return unitPayloads

View File

@ -0,0 +1,219 @@
local unitPayloads = {
["name"] = "F-16A",
["payloads"] = {
[1] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{8D399DDA-FF81-4F14-904D-099B34FE7918}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[6] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 10,
},
},
["tasks"] = {
[1] = 11,
},
},
[2] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{E6A6262A-CA08-4B3D-B030-E1A993B98453}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{E6A6262A-CA08-4B3D-B030-E1A993B98452}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[6] = {
["CLSID"] = "{AIS_ASQ_T50}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{AIS_ASQ_T50}",
["num"] = 10,
},
[8] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 7,
},
[9] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
},
},
[3] = {
["name"] = "STRIKE",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[6] = {
["CLSID"] = "{AIS_ASQ_T50}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{AIS_ASQ_T50}",
["num"] = 10,
},
[8] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 7,
},
[9] = {
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
},
},
[4] = {
["name"] = "ANTISHIP",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{7B8DCEB4-820B-4015-9B48-1028A4195692}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{7B8DCEB4-820B-4015-9B48-1028A4195692}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[6] = {
["CLSID"] = "{AIS_ASQ_T50}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{AIS_ASQ_T50}",
["num"] = 10,
},
[8] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 7,
},
[9] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
},
},
[5] = {
["name"] = "SEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{6D21ECEA-F85B-4E8D-9D51-31DC9B8AA4EF}",
["num"] = 6,
},
[2] = {
["CLSID"] = "{E6A6262A-CA08-4B3D-B030-E1A993B98453}",
["num"] = 8,
},
[3] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
["num"] = 9,
},
[6] = {
["CLSID"] = "{AIS_ASQ_T50}",
["num"] = 1,
},
[7] = {
["CLSID"] = "{AIS_ASQ_T50}",
["num"] = 10,
},
[8] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 7,
},
[9] = {
["CLSID"] = "{444BA8AE-82A7-4345-842E-76154EFCCA46}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
},
},
},
["unitType"] = "F-16A",
}
return unitPayloads

View File

@ -2,49 +2,6 @@ local unitPayloads = {
["name"] = "F-16C_50",
["payloads"] = {
[1] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{8A0BE8AE-58D4-4572-9263-3144C0D06364}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{5CE2FF2A-645A-4197-B48D-8720AC69394F}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{5CE2FF2A-645A-4197-B48D-8720AC69394F}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 9,
},
[8] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[9] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 6,
},
},
["tasks"] = {
},
},
[2] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
@ -52,11 +9,11 @@ local unitPayloads = {
["num"] = 5,
},
[2] = {
["CLSID"] = "{TER_9A_2R*MK-82}",
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{TER_9A_2L*CBU-97}",
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 3,
},
[4] = {
@ -76,11 +33,11 @@ local unitPayloads = {
["num"] = 9,
},
[8] = {
["CLSID"] = "{TER_9A_2L*CBU-97}",
["CLSID"] = "{5335D97A-35A5-4643-9D9B-026C75961E52}",
["num"] = 4,
},
[9] = {
["CLSID"] = "{TER_9A_2R*CBU-97}",
["CLSID"] = "{5335D97A-35A5-4643-9D9B-026C75961E52}",
["num"] = 6,
},
[10] = {
@ -91,7 +48,7 @@ local unitPayloads = {
["tasks"] = {
},
},
[3] = {
[2] = {
["name"] = "ANTISHIP",
["pylons"] = {
[1] = {
@ -134,6 +91,49 @@ local unitPayloads = {
["tasks"] = {
},
},
[3] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{8A0BE8AE-58D4-4572-9263-3144C0D06364}",
["num"] = 5,
},
[2] = {
["CLSID"] = "{5CE2FF2A-645A-4197-B48D-8720AC69394F}",
["num"] = 7,
},
[3] = {
["CLSID"] = "{5CE2FF2A-645A-4197-B48D-8720AC69394F}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 2,
},
[5] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 1,
},
[6] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 8,
},
[7] = {
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
["num"] = 9,
},
[8] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 4,
},
[9] = {
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
["num"] = 6,
},
},
["tasks"] = {
},
},
[4] = {
["name"] = "STRIKE",
["pylons"] = {
@ -181,7 +181,7 @@ local unitPayloads = {
["name"] = "SEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{51F9AAE5-964F-4D21-83FB-502E3BFE5F8A}",
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
["num"] = 6,
},
[2] = {

View File

@ -0,0 +1,33 @@
local unitPayloads = {
["name"] = "MQ-9 Reaper",
["payloads"] = {
[1] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 4,
},
[2] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 1,
},
[3] = {
["CLSID"] = "AGM114x2_OH_58",
["num"] = 2,
},
[4] = {
["CLSID"] = "AGM114x2_OH_58",
["num"] = 3,
},
},
["tasks"] = {
[1] = 17,
},
},
},
["tasks"] = {
},
["unitType"] = "MQ-9 Reaper",
}
return unitPayloads

View File

@ -0,0 +1,142 @@
local unitPayloads = {
["name"] = "MiG-25PD",
["payloads"] = {
[1] = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{5F26DBC2-FB43-4153-92DE-6BBCE26CB0FF}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{5F26DBC2-FB43-4153-92DE-6BBCE26CB0FF}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
[2] = 10,
[3] = 18,
[4] = 19,
},
},
[2] = {
["name"] = "STRIKE",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
[2] = 10,
[3] = 18,
[4] = 19,
},
},
[3] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
[2] = 10,
[3] = 18,
[4] = 19,
},
},
[4] = {
["name"] = "ANTISHIP",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
[2] = 10,
[3] = 18,
[4] = 19,
},
},
[5] = {
["name"] = "SEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{4EDBA993-2E34-444C-95FB-549300BF7CAF}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{682A481F-0CB5-4693-A382-D00DD4A156D7}",
["num"] = 4,
},
},
["tasks"] = {
[1] = 11,
[2] = 10,
[3] = 18,
[4] = 19,
},
},
},
["unitType"] = "MiG-25PD",
}
return unitPayloads

View File

@ -0,0 +1,23 @@
local unitPayloads = {
["name"] = "RQ-1A Predator",
["payloads"] = {
[1] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{ee368869-c35a-486a-afe7-284beb7c5d52}",
["num"] = 2,
},
[2] = {
["CLSID"] = "{ee368869-c35a-486a-afe7-284beb7c5d52}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 17,
},
},
},
["unitType"] = "RQ-1A Predator",
}
return unitPayloads

View File

@ -0,0 +1,25 @@
local unitPayloads = {
["name"] = "WingLoong-I",
["payloads"] = {
[1] = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "DIS_AKD-10",
["num"] = 2,
},
[2] = {
["CLSID"] = "DIS_AKD-10",
["num"] = 1,
},
},
["tasks"] = {
[1] = 17,
},
},
},
["tasks"] = {
},
["unitType"] = "WingLoong-I",
}
return unitPayloads

View File

@ -34,11 +34,24 @@ write_state = function()
}
fp:write(json:encode(game_state))
fp:close()
--logger.info("Done writing DCS Liberation state")
--messageAll("Done writing DCS Liberation state.")
-- logger.info("Done writing DCS Liberation state")
-- messageAll("Done writing DCS Liberation state.")
end
mist.scheduleFunction(write_state, {}, timer.getTime() + 10, 60, timer.getTime() + 3600)
write_state_error_handling = function()
if pcall(write_state) then
-- messageAll("Written DCS Liberation state to "..debriefing_file_location)
else
messageAll("Unable to write DCS Liberation state to "..debriefing_file_location..
"\nYou can abort the mission in DCS Liberation.\n"..
"\n\nPlease fix your setup in DCS Liberation, make sure you are pointing to the right installation directory from the File/Preferences menu. Then after fixing the path restart DCS Liberation, and then restart DCS."..
"\n\nYou can also try to fix the issue manually by replacing the file <dcs_installation_directory>/Scripts/MissionScripting.lua by the one provided there : <dcs_liberation_folder>/resources/scripts/MissionScripting.lua. And then restart DCS. (This will also have to be done again after each DCS update)"..
"\n\nIt's not worth playing, the state of the mission will not be recorded.")
end
end
mist.scheduleFunction(write_state_error_handling, {}, timer.getTime() + 10, 60, timer.getTime() + 3600)
activeWeapons = {}
local function onEvent(event)

View File

@ -184,6 +184,11 @@ QLabel[style="base-title"]{
font-size: 24px;
}
QLabel[style="budget-label"]{
font-size: 16px;
margin-right: 20px;
}
QLabel[style="icon-plane"]{
background-color:#48719D;
min-height:24px;

BIN
resources/syria.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1000 KiB

BIN
resources/syrialandmap.p Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -28,6 +28,7 @@ class ControlPoint:
base = None # type: theater.base.Base
at = None # type: db.StartPosition
icls = 1
allow_sea_units = True
connected_points = None # type: typing.List[ControlPoint]
ground_objects = None # type: typing.List[TheaterGroundObject]

View File

@ -209,3 +209,90 @@ class Emirates(ConflictTheater):
self.tarawa_carrier.captured_invert = True
self.east_carrier.captured_invert = True
self.fujairah.captured_invert = True
class DesertWar(ConflictTheater):
terrain = dcs.terrain.PersianGulf()
overview_image = "persiangulf.gif"
reference_points = {
(persiangulf.Shiraz_International_Airport.position.x, persiangulf.Shiraz_International_Airport.position.y): (
772, -1970),
(persiangulf.Liwa_Airbase.position.x, persiangulf.Liwa_Airbase.position.y): (1188, 78), }
landmap = load_landmap("resources\\gulflandmap.p")
daytime_map = {
"dawn": (6, 8),
"day": (8, 16),
"dusk": (16, 18),
"night": (0, 5),
}
def __init__(self):
super(DesertWar, self).__init__()
self.liwa = ControlPoint.from_airport(persiangulf.Liwa_Airbase, LAND, SIZE_BIG, IMPORTANCE_MEDIUM)
self.al_maktoum = ControlPoint.from_airport(persiangulf.Al_Maktoum_Intl, LAND, SIZE_BIG, IMPORTANCE_LOW)
self.al_minhad = ControlPoint.from_airport(persiangulf.Al_Minhad_AB, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.al_ain = ControlPoint.from_airport(persiangulf.Al_Ain_International_Airport, LAND, SIZE_BIG,IMPORTANCE_LOW)
self.carrier = ControlPoint.carrier("Carrier", Point(-124000, -303000), 1001)
self.tarawa_carrier = ControlPoint.lha("LHA Carrier", Point(-164000, -257000), 1002)
self.add_controlpoint(self.liwa, connected_to=[self.al_ain])
self.add_controlpoint(self.al_ain, connected_to=[self.al_maktoum, self.liwa])
self.add_controlpoint(self.al_maktoum, connected_to=[self.al_minhad, self.al_ain])
self.add_controlpoint(self.al_minhad, connected_to=[self.al_maktoum])
self.add_controlpoint(self.tarawa_carrier)
self.add_controlpoint(self.carrier)
self.tarawa_carrier.captured = True
self.carrier.captured = True
self.liwa.captured = True
self.tarawa_carrier.captured_invert = True
self.carrier.captured_invert = True
self.al_ain.captured_invert = True
class IranInvasionLite(ConflictTheater):
terrain = dcs.terrain.PersianGulf()
overview_image = "persiangulf.gif"
reference_points = {
(persiangulf.Shiraz_International_Airport.position.x, persiangulf.Shiraz_International_Airport.position.y): (
772, -1970),
(persiangulf.Liwa_Airbase.position.x, persiangulf.Liwa_Airbase.position.y): (1188, 78), }
landmap = load_landmap("resources\\gulflandmap.p")
daytime_map = {
"dawn": (6, 8),
"day": (8, 16),
"dusk": (16, 18),
"night": (0, 5),
}
def __init__(self):
super(IranInvasionLite, self).__init__()
self.bandar_lengeh = ControlPoint.from_airport(persiangulf.Bandar_Lengeh, [270, 315, 0, 45], SIZE_SMALL, IMPORTANCE_HIGH)
self.lar = ControlPoint.from_airport(persiangulf.Lar_Airbase, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.shiraz = ControlPoint.from_airport(persiangulf.Shiraz_International_Airport, LAND, SIZE_BIG, IMPORTANCE_HIGH)
self.kerman = ControlPoint.from_airport(persiangulf.Kerman_Airport, LAND, SIZE_BIG, IMPORTANCE_HIGH)
self.jiroft = ControlPoint.from_airport(persiangulf.Jiroft_Airport, LAND, SIZE_BIG, IMPORTANCE_HIGH)
self.carrier = ControlPoint.carrier("Carrier", Point(72000.324335475, -376000), 1001)
self.lha = ControlPoint.lha("LHA", Point(-27500.813952358, -147000.65947136), 1002)
self.add_controlpoint(self.bandar_lengeh, connected_to=[self.lar])
self.add_controlpoint(self.shiraz, connected_to=[self.lar, self.kerman])
self.add_controlpoint(self.jiroft, connected_to=[self.kerman])
self.add_controlpoint(self.kerman, connected_to=[self.shiraz, self.jiroft])
self.add_controlpoint(self.lar, connected_to=[self.bandar_lengeh, self.shiraz])
self.add_controlpoint(self.carrier)
self.add_controlpoint(self.lha)
self.carrier.captured = True
self.lha.captured = True
self.shiraz.captured_invert = True
self.bandar_lengeh.captured = True

View File

@ -155,7 +155,7 @@ def generate_groundobjects(theater: ConflictTheater, game):
logging.info(ground_object.groups)
# Generate navy groups
if "boat" in db.FACTIONS[faction_name].keys():
if "boat" in db.FACTIONS[faction_name].keys() and cp.allow_sea_units:
if cp.captured and game.settings.do_not_generate_player_navy:
continue

221
theater/syria.py Normal file
View File

@ -0,0 +1,221 @@
from dcs.terrain import syria
from .conflicttheater import *
from .landmap import *
class SyriaTheater(ConflictTheater):
terrain = dcs.terrain.Syria()
overview_image = "syria.gif"
reference_points = {(syria.Eyn_Shemer.position.x, syria.Eyn_Shemer.position.y): (1300, 1380),
(syria.Tabqa.position.x, syria.Tabqa.position.y): (2060, 570)}
landmap = load_landmap("resources\\syrialandmap.p")
daytime_map = {
"dawn": (6, 8),
"day": (8, 16),
"dusk": (16, 18),
"night": (0, 5),
}
def __init__(self):
super(SyriaTheater, self).__init__()
class GolanHeights(SyriaTheater):
def __init__(self):
super(GolanHeights, self).__init__()
self.ramatDavid = ControlPoint.from_airport(syria.Ramat_David, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.kinghussein = ControlPoint.from_airport(syria.King_Hussein_Air_College, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.khalkhala = ControlPoint.from_airport(syria.Khalkhalah, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.khalkhala.allow_sea_units = False
self.ramatDavid.allow_sea_units = False
self.kinghussein.allow_sea_units = False
self.marjruhayyil = ControlPoint.from_airport(syria.Marj_Ruhayyil, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.mezzeh = ControlPoint.from_airport(syria.Mezzeh, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.aldumayr = ControlPoint.from_airport(syria.Al_Dumayr, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.carrier = ControlPoint.carrier("Carrier", Point(-280000, -238000), 1001)
self.lha = ControlPoint.lha("LHA Carrier", Point(-237000, -89800), 1002)
self.add_controlpoint(self.ramatDavid, connected_to=[self.khalkhala])
self.add_controlpoint(self.khalkhala, connected_to=[self.ramatDavid, self.kinghussein, self.marjruhayyil])
self.add_controlpoint(self.kinghussein, connected_to=[self.khalkhala])
self.add_controlpoint(self.marjruhayyil, connected_to=[self.khalkhala, self.mezzeh, self.aldumayr])
self.add_controlpoint(self.mezzeh, connected_to=[self.marjruhayyil])
self.add_controlpoint(self.aldumayr, connected_to=[self.marjruhayyil])
self.add_controlpoint(self.carrier)
self.add_controlpoint(self.lha)
self.ramatDavid.captured = True
self.carrier.captured = True
self.lha.captured = True
self.aldumayr.captured_invert = True
self.carrier.captured_invert = True
self.lha.captured_invert = True
class TurkishInvasion(SyriaTheater):
def __init__(self):
super(TurkishInvasion, self).__init__()
self.hatay = ControlPoint.from_airport(syria.Hatay, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.incirlik = ControlPoint.from_airport(syria.Incirlik, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.minakh = ControlPoint.from_airport(syria.Minakh, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.aleppo = ControlPoint.from_airport(syria.Aleppo, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.kuweires = ControlPoint.from_airport(syria.Kuweires, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.jirah = ControlPoint.from_airport(syria.Jirah, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.tabqa = ControlPoint.from_airport(syria.Tabqa, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.carrier = ControlPoint.carrier("Carrier", Point(133000, -54000), 1001)
self.lha = ControlPoint.lha("LHA", Point(155000, -19000), 1002)
self.add_controlpoint(self.incirlik, connected_to=[])
self.add_controlpoint(self.hatay, connected_to=[self.minakh])
self.add_controlpoint(self.minakh, connected_to=[self.aleppo, self.hatay])
self.add_controlpoint(self.aleppo, connected_to=[self.kuweires, self.minakh])
self.add_controlpoint(self.kuweires, connected_to=[self.jirah, self.aleppo])
self.add_controlpoint(self.jirah, connected_to=[self.tabqa, self.kuweires])
self.add_controlpoint(self.tabqa, connected_to=[self.jirah])
self.add_controlpoint(self.carrier)
self.add_controlpoint(self.lha)
self.incirlik.captured = True
self.hatay.captured = True
self.carrier.captured = True
self.lha.captured = True
self.tabqa.captured_invert = True
class SyrianCivilWar(SyriaTheater):
def __init__(self):
super(SyrianCivilWar, self).__init__()
self.basselAlAssad = ControlPoint.from_airport(syria.Bassel_Al_Assad, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.marjruhayyil = ControlPoint.from_airport(syria.Marj_Ruhayyil, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.aldumayr = ControlPoint.from_airport(syria.Al_Dumayr, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.hama = ControlPoint.from_airport(syria.Hama, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.alqusair= ControlPoint.from_airport(syria.Al_Qusayr, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.aleppo = ControlPoint.from_airport(syria.Aleppo, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.palmyra = ControlPoint.from_airport(syria.Palmyra, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.carrier = ControlPoint.carrier("Carrier", Point(18537, -52000), 1001)
self.lha = ControlPoint.lha("LHA", Point(116000, 30000), 1002)
self.add_controlpoint(self.basselAlAssad, connected_to=[self.hama])
self.add_controlpoint(self.marjruhayyil, connected_to=[self.aldumayr])
self.add_controlpoint(self.hama, connected_to=[self.basselAlAssad, self.aleppo, self.alqusair])
self.add_controlpoint(self.aleppo, connected_to=[self.hama])
self.add_controlpoint(self.alqusair, connected_to=[self.hama, self.aldumayr, self.palmyra])
self.add_controlpoint(self.palmyra, connected_to=[self.alqusair])
self.add_controlpoint(self.aldumayr, connected_to=[self.alqusair, self.marjruhayyil])
self.add_controlpoint(self.carrier)
self.add_controlpoint(self.lha)
self.basselAlAssad.captured = True
self.marjruhayyil.captured = True
self.carrier.captured = True
self.lha.captured = True
self.aleppo.captured_invert = True
self.carrier.captured_invert = True
self.lha.captured_invert = True
class InherentResolve(SyriaTheater):
def __init__(self):
super(InherentResolve, self).__init__()
self.kinghussein = ControlPoint.from_airport(syria.King_Hussein_Air_College, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.khalkhala = ControlPoint.from_airport(syria.Khalkhalah, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.palmyra = ControlPoint.from_airport(syria.Palmyra, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.jirah = ControlPoint.from_airport(syria.Jirah, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.tabqa = ControlPoint.from_airport(syria.Tabqa, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.carrier = ControlPoint.carrier("Carrier", Point(-210000, -200000), 1001)
self.lha = ControlPoint.lha("LHA", Point(-131000, -161000), 1002)
self.add_controlpoint(self.kinghussein, connected_to=[self.khalkhala])
self.add_controlpoint(self.khalkhala, connected_to=[self.kinghussein, self.palmyra])
self.add_controlpoint(self.palmyra, connected_to=[self.khalkhala, self.tabqa])
self.add_controlpoint(self.tabqa, connected_to=[self.palmyra, self.jirah])
self.add_controlpoint(self.jirah, connected_to=[self.tabqa])
self.add_controlpoint(self.carrier)
self.add_controlpoint(self.lha)
self.kinghussein.captured = True
self.carrier.captured = True
self.lha.captured = True
self.jirah.captured_invert = True
self.carrier.captured_invert = True
self.lha.captured_invert = True
class SyriaFullMap(SyriaTheater):
def __init__(self):
super(SyriaFullMap, self).__init__()
self.ramatDavid = ControlPoint.from_airport(syria.Ramat_David, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.kinghussein = ControlPoint.from_airport(syria.King_Hussein_Air_College, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.khalkhala = ControlPoint.from_airport(syria.Khalkhalah, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.palmyra = ControlPoint.from_airport(syria.Palmyra, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.jirah = ControlPoint.from_airport(syria.Jirah, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.tabqa = ControlPoint.from_airport(syria.Tabqa, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.aldumayr = ControlPoint.from_airport(syria.Al_Dumayr, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.hama = ControlPoint.from_airport(syria.Hama, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.alqusair= ControlPoint.from_airport(syria.Al_Qusayr, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.aleppo = ControlPoint.from_airport(syria.Aleppo, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
self.basselAlAssad = ControlPoint.from_airport(syria.Bassel_Al_Assad, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.renemouawad = ControlPoint.from_airport(syria.Rene_Mouawad, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.minakh = ControlPoint.from_airport(syria.Minakh, LAND, SIZE_REGULAR, IMPORTANCE_LOW)
self.hatay = ControlPoint.from_airport(syria.Hatay, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.incirlik = ControlPoint.from_airport(syria.Incirlik, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
self.carrier = ControlPoint.carrier("Carrier", Point(-151000, -106000), 1001)
self.lha = ControlPoint.lha("LHA", Point(-131000, -161000), 1002)
self.add_controlpoint(self.ramatDavid, connected_to=[self.kinghussein])
self.add_controlpoint(self.kinghussein, connected_to=[self.khalkhala, self.ramatDavid])
self.add_controlpoint(self.khalkhala, connected_to=[self.kinghussein, self.aldumayr])
self.add_controlpoint(self.aldumayr, connected_to=[self.khalkhala, self.alqusair])
self.add_controlpoint(self.alqusair, connected_to=[self.hama, self.aldumayr, self.palmyra, self.renemouawad])
self.add_controlpoint(self.renemouawad, connected_to=[self.alqusair, self.basselAlAssad])
self.add_controlpoint(self.hama, connected_to=[self.aleppo, self.alqusair, self.basselAlAssad])
self.add_controlpoint(self.basselAlAssad, connected_to=[self.hama, self.hatay, self.renemouawad])
self.add_controlpoint(self.palmyra, connected_to=[self.tabqa, self.alqusair])
self.add_controlpoint(self.tabqa, connected_to=[self.palmyra, self.jirah])
self.add_controlpoint(self.jirah, connected_to=[self.tabqa, self.aleppo])
self.add_controlpoint(self.aleppo, connected_to=[self.hama, self.jirah, self.minakh])
self.add_controlpoint(self.minakh, connected_to=[self.hatay, self.aleppo, self.incirlik])
self.add_controlpoint(self.hatay, connected_to=[self.minakh, self.basselAlAssad])
self.add_controlpoint(self.incirlik, connected_to=[self.minakh])
self.add_controlpoint(self.carrier)
self.add_controlpoint(self.lha)
self.ramatDavid.captured = True
self.carrier.captured = True
self.lha.captured = True
self.hatay.captured_invert = True
self.carrier.captured_invert = True
self.lha.captured_invert = True

View File

@ -4,7 +4,7 @@ from .conflicttheater import *
from .landmap import *
class ChannelTheater(ConflictTheater):
class Dunkirk(ConflictTheater):
terrain = dcs.terrain.TheChannel()
overview_image = "thechannel.gif"
reference_points = {(thechannel.Abbeville_Drucat.position.x, thechannel.Abbeville_Drucat.position.y): (2400, 4100),
@ -18,7 +18,7 @@ class ChannelTheater(ConflictTheater):
}
def __init__(self):
super(ChannelTheater, self).__init__()
super(Dunkirk, self).__init__()
self.abeville = ControlPoint.from_airport(thechannel.Abbeville_Drucat, LAND, SIZE_SMALL, IMPORTANCE_LOW)
#self.detling = ControlPoint.from_airport(thechannel.Detling, LAND, SIZE_SMALL, IMPORTANCE_LOW)
@ -57,7 +57,7 @@ class ChannelTheater(ConflictTheater):
self.abeville.captured_invert = True
class ChannelTheaterComplete(ConflictTheater):
class BattleOfBritain(ConflictTheater):
terrain = dcs.terrain.TheChannel()
overview_image = "thechannel.gif"
reference_points = {(thechannel.Abbeville_Drucat.position.x, thechannel.Abbeville_Drucat.position.y): (2400, 4100),
@ -71,7 +71,7 @@ class ChannelTheaterComplete(ConflictTheater):
}
def __init__(self):
super(ChannelTheaterComplete, self).__init__()
super(BattleOfBritain, self).__init__()
self.abeville = ControlPoint.from_airport(thechannel.Abbeville_Drucat, LAND, SIZE_SMALL, IMPORTANCE_LOW)
#self.detling = ControlPoint.from_airport(thechannel.Detling, LAND, SIZE_SMALL, IMPORTANCE_LOW)