From 225325cc29e2fbc7a2d678a04c23889724f5b66e Mon Sep 17 00:00:00 2001 From: Khopa Date: Sat, 30 Jan 2021 01:28:47 +0100 Subject: [PATCH] High Digit SAM mod support added with an example factions (Russia 2010 High Digit SAM) --- game/db.py | 107 +++++++++++++++++++++-- gen/sam/aaa_ks19.py | 34 ++++++++ gen/sam/sam_group_generator.py | 14 ++- gen/sam/sam_sa10.py | 108 ++++++++++++++++++++++-- gen/sam/sam_sa17.py | 30 +++++++ resources/factions/russia_2010_hds.json | 95 +++++++++++++++++++++ 6 files changed, 371 insertions(+), 17 deletions(-) create mode 100644 gen/sam/aaa_ks19.py create mode 100644 gen/sam/sam_sa17.py create mode 100644 resources/factions/russia_2010_hds.json diff --git a/game/db.py b/game/db.py index efd39ee5..08260e15 100644 --- a/game/db.py +++ b/game/db.py @@ -165,6 +165,7 @@ from dcs.vehicles import ( ) import pydcs_extensions.frenchpack.frenchpack as frenchpack +import pydcs_extensions.highdigitsams.highdigitsams as highdigitsams # PATCH pydcs data with MODS from game.factions.faction_loader import FactionLoader from pydcs_extensions.a4ec.a4ec import A_4E_C @@ -219,6 +220,49 @@ vehicle_map["Toyota_vert"] = frenchpack.DIM__TOYOTA_GREEN vehicle_map["Toyota_desert"] = frenchpack.DIM__TOYOTA_DESERT vehicle_map["Kamikaze"] = frenchpack.DIM__KAMIKAZE +vehicle_map[highdigitsams.AAA_SON_9_Fire_Can.id] = highdigitsams.AAA_SON_9_Fire_Can +vehicle_map[highdigitsams.AAA_100mm_KS_19.id] = highdigitsams.AAA_100mm_KS_19 +vehicle_map[highdigitsams.SAM_SA_10B_S_300PS_54K6_CP.id] = highdigitsams.SAM_SA_10B_S_300PS_54K6_CP +vehicle_map[highdigitsams.SAM_SA_10B_S_300PS_5P85SE_LN.id] = highdigitsams.SAM_SA_10B_S_300PS_5P85SE_LN +vehicle_map[highdigitsams.SAM_SA_10B_S_300PS_5P85SU_LN.id] = highdigitsams.SAM_SA_10B_S_300PS_5P85SU_LN +vehicle_map[highdigitsams.SAM_SA_10__5V55RUD__S_300PS_LN_5P85CE.id] = highdigitsams.SAM_SA_10__5V55RUD__S_300PS_LN_5P85CE +vehicle_map[highdigitsams.SAM_SA_10__5V55RUD__S_300PS_LN_5P85DE.id] = highdigitsams.SAM_SA_10__5V55RUD__S_300PS_LN_5P85DE +vehicle_map[highdigitsams.SAM_SA_10B_S_300PS_30N6_TR.id] = highdigitsams.SAM_SA_10B_S_300PS_30N6_TR +vehicle_map[highdigitsams.SAM_SA_10B_S_300PS_40B6M_TR.id] = highdigitsams.SAM_SA_10B_S_300PS_40B6M_TR +vehicle_map[highdigitsams.SAM_SA_10B_S_300PS_40B6MD_SR.id] = highdigitsams.SAM_SA_10B_S_300PS_40B6MD_SR +vehicle_map[highdigitsams.SAM_SA_10B_S_300PS_64H6E_SR.id] = highdigitsams.SAM_SA_10B_S_300PS_64H6E_SR +vehicle_map[highdigitsams.SAM_SA_20_S_300PMU1_CP_54K6.id] = highdigitsams.SAM_SA_20_S_300PMU1_CP_54K6 +vehicle_map[highdigitsams.SAM_SA_20_S_300PMU1_TR_30N6E.id] = highdigitsams.SAM_SA_20_S_300PMU1_TR_30N6E +vehicle_map[highdigitsams.SAM_SA_20_S_300PMU1_TR_30N6E_truck.id] = highdigitsams.SAM_SA_20_S_300PMU1_TR_30N6E_truck +vehicle_map[highdigitsams.SAM_SA_20_S_300PMU1_SR_5N66E.id] = highdigitsams.SAM_SA_20_S_300PMU1_SR_5N66E +vehicle_map[highdigitsams.SAM_SA_20_S_300PMU1_SR_64N6E.id] = highdigitsams.SAM_SA_20_S_300PMU1_SR_64N6E +vehicle_map[highdigitsams.SAM_SA_20_S_300PMU1_LN_5P85CE.id] = highdigitsams.SAM_SA_20_S_300PMU1_LN_5P85CE +vehicle_map[highdigitsams.SAM_SA_20_S_300PMU1_LN_5P85DE.id] = highdigitsams.SAM_SA_20_S_300PMU1_LN_5P85DE +vehicle_map[highdigitsams.SAM_SA_20B_S_300PMU2_CP_54K6E2.id] = highdigitsams.SAM_SA_20B_S_300PMU2_CP_54K6E2 +vehicle_map[highdigitsams.SAM_SA_20B_S_300PMU2_TR_92H6E_truck.id] = highdigitsams.SAM_SA_20B_S_300PMU2_TR_92H6E_truck +vehicle_map[highdigitsams.SAM_SA_20B_S_300PMU2_SR_64N6E2.id] = highdigitsams.SAM_SA_20B_S_300PMU2_SR_64N6E2 +vehicle_map[highdigitsams.SAM_SA_20B_S_300PMU2_LN_5P85SE2.id] = highdigitsams.SAM_SA_20B_S_300PMU2_LN_5P85SE2 +vehicle_map[highdigitsams.SAM_SA_12_S_300V_9S457_CP.id] = highdigitsams.SAM_SA_12_S_300V_9S457_CP +vehicle_map[highdigitsams.SAM_SA_12_S_300V_9A82_LN.id] = highdigitsams.SAM_SA_12_S_300V_9A82_LN +vehicle_map[highdigitsams.SAM_SA_12_S_300V_9A83_LN.id] = highdigitsams.SAM_SA_12_S_300V_9A83_LN +vehicle_map[highdigitsams.SAM_SA_12_S_300V_9S15_SR.id] = highdigitsams.SAM_SA_12_S_300V_9S15_SR +vehicle_map[highdigitsams.SAM_SA_12_S_300V_9S19_SR.id] = highdigitsams.SAM_SA_12_S_300V_9S19_SR +vehicle_map[highdigitsams.SAM_SA_12_S_300V_9S32_TR.id] = highdigitsams.SAM_SA_12_S_300V_9S32_TR +vehicle_map[highdigitsams.SAM_SA_23_S_300VM_9S457ME_CP.id] = highdigitsams.SAM_SA_23_S_300VM_9S457ME_CP +vehicle_map[highdigitsams.SAM_SA_23_S_300VM_9S15M2_SR.id] = highdigitsams.SAM_SA_23_S_300VM_9S15M2_SR +vehicle_map[highdigitsams.SAM_SA_23_S_300VM_9S19M2_SR.id] = highdigitsams.SAM_SA_23_S_300VM_9S19M2_SR +vehicle_map[highdigitsams.SAM_SA_23_S_300VM_9S32ME_TR.id] = highdigitsams.SAM_SA_23_S_300VM_9S32ME_TR +vehicle_map[highdigitsams.SAM_SA_23_S_300VM_9A83ME_LN.id] = highdigitsams.SAM_SA_23_S_300VM_9A83ME_LN +vehicle_map[highdigitsams.SAM_SA_23_S_300VM_9A82ME_LN.id] = highdigitsams.SAM_SA_23_S_300VM_9A82ME_LN +vehicle_map[highdigitsams.SAM_SA_17_Buk_M1_2_LN_9A310M1_2.id] = highdigitsams.SAM_SA_17_Buk_M1_2_LN_9A310M1_2 +vehicle_map[highdigitsams.SAM_SA_2__V759__LN_SM_90.id] = highdigitsams.SAM_SA_2__V759__LN_SM_90 +vehicle_map[highdigitsams.SAM_HQ_2_LN_SM_90.id] = highdigitsams.SAM_HQ_2_LN_SM_90 +vehicle_map[highdigitsams.SAM_SA_3__V_601P__LN_5P73.id] = highdigitsams.SAM_SA_3__V_601P__LN_5P73 +vehicle_map[highdigitsams.SAM_SA_24_Igla_S_manpad.id] = highdigitsams.SAM_SA_24_Igla_S_manpad +vehicle_map[highdigitsams.SAM_SA_14_Strela_3_manpad.id] = highdigitsams.SAM_SA_14_Strela_3_manpad +vehicle_map[highdigitsams.Polyana_D4M1_C2_node.id] = highdigitsams.Polyana_D4M1_C2_node +vehicle_map[highdigitsams._34Ya6E_Gazetchik_E_decoy.id] = highdigitsams._34Ya6E_Gazetchik_E_decoy + """ ---------- BEGINNING OF CONFIGURATION SECTION """ @@ -475,14 +519,14 @@ PRICES = { AirDefence.SAM_SA_19_Tunguska_2S6: 30, AirDefence.SAM_SA_6_Kub_LN_2P25: 20, AirDefence.SAM_SA_3_S_125_LN_5P73: 6, - AirDefence.SAM_SA_10_S_300PS_LN_5P85C: 22, - AirDefence.SAM_SA_10_S_300PS_LN_5P85D: 22, + AirDefence.SAM_SA_11_Buk_LN_9A310M1: 30, + AirDefence.SAM_SA_11_Buk_CC_9S470M1: 25, + AirDefence.SAM_SA_11_Buk_SR_9S18M1: 28, AirDefence.SAM_SA_8_Osa_9A33: 28, AirDefence.SAM_SA_15_Tor_9A331: 40, AirDefence.SAM_SA_13_Strela_10M3_9A35M3: 16, AirDefence.SAM_SA_9_Strela_1_9P31: 12, - AirDefence.SAM_SA_11_Buk_CC_9S470M1: 25, AirDefence.SAM_SA_8_Osa_LD_9T217: 22, AirDefence.SAM_Patriot_AMG_AN_MRC_137: 35, AirDefence.SAM_Patriot_ECS_AN_MSQ_104: 30, @@ -497,7 +541,6 @@ PRICES = { AirDefence.SAM_Patriot_EPP_III: 15, AirDefence.SAM_Patriot_ICC: 18, AirDefence.SAM_Roland_ADS: 12, - AirDefence.SAM_SA_10_S_300PS_CP_54K6: 18, AirDefence.Stinger_MANPADS: 6, AirDefence.SAM_Stinger_comm_dsr: 4, AirDefence.SAM_Stinger_comm: 4, @@ -515,11 +558,8 @@ PRICES = { AirDefence.SAM_SA_18_Igla_S_comm: 8, AirDefence.EWR_1L13: 30, AirDefence.SAM_SA_6_Kub_STR_9S91: 22, - AirDefence.SAM_SA_10_S_300PS_TR_30N6: 24, - AirDefence.SAM_SA_10_S_300PS_SR_5N66M: 30, + AirDefence.EWR_55G6: 30, - AirDefence.SAM_SA_10_S_300PS_SR_64H6E: 30, - AirDefence.SAM_SA_11_Buk_SR_9S18M1: 28, AirDefence.CP_9S80M1_Sborka: 10, AirDefence.SAM_Hawk_TR_AN_MPQ_46: 14, AirDefence.SAM_Hawk_SR_AN_MPQ_50: 18, @@ -580,6 +620,57 @@ PRICES = { frenchpack.DIM__TOYOTA_DESERT: 2, frenchpack.DIM__KAMIKAZE: 6, + # SA-10 + AirDefence.SAM_SA_10_S_300PS_CP_54K6: 18, + AirDefence.SAM_SA_10_S_300PS_TR_30N6: 24, + AirDefence.SAM_SA_10_S_300PS_SR_5N66M: 30, + AirDefence.SAM_SA_10_S_300PS_SR_64H6E: 30, + AirDefence.SAM_SA_10_S_300PS_LN_5P85C: 22, + AirDefence.SAM_SA_10_S_300PS_LN_5P85D: 22, + + # High digit sams mod + highdigitsams.AAA_SON_9_Fire_Can: 8, + highdigitsams.AAA_100mm_KS_19: 10, + + highdigitsams.SAM_SA_10B_S_300PS_54K6_CP: 20, + highdigitsams.SAM_SA_10B_S_300PS_5P85SE_LN: 24, + highdigitsams.SAM_SA_10B_S_300PS_5P85SU_LN: 24, + highdigitsams.SAM_SA_10__5V55RUD__S_300PS_LN_5P85CE: 24, + highdigitsams.SAM_SA_10__5V55RUD__S_300PS_LN_5P85DE: 24, + highdigitsams.SAM_SA_10B_S_300PS_30N6_TR: 26, + highdigitsams.SAM_SA_10B_S_300PS_40B6M_TR: 26, + highdigitsams.SAM_SA_10B_S_300PS_40B6MD_SR: 32, + highdigitsams.SAM_SA_10B_S_300PS_64H6E_SR: 32, + + highdigitsams.SAM_SA_12_S_300V_9S457_CP: 22, + highdigitsams.SAM_SA_12_S_300V_9A82_LN: 26, + highdigitsams.SAM_SA_12_S_300V_9A83_LN: 26, + highdigitsams.SAM_SA_12_S_300V_9S15_SR: 34, + highdigitsams.SAM_SA_12_S_300V_9S19_SR: 34, + highdigitsams.SAM_SA_12_S_300V_9S32_TR: 28, + + highdigitsams.SAM_SA_20_S_300PMU1_CP_54K6: 26, + highdigitsams.SAM_SA_20_S_300PMU1_TR_30N6E: 30, + highdigitsams.SAM_SA_20_S_300PMU1_TR_30N6E_truck: 32, + highdigitsams.SAM_SA_20_S_300PMU1_SR_5N66E: 38, + highdigitsams.SAM_SA_20_S_300PMU1_SR_64N6E: 38, + highdigitsams.SAM_SA_20_S_300PMU1_LN_5P85CE: 28, + highdigitsams.SAM_SA_20_S_300PMU1_LN_5P85DE: 28, + + highdigitsams.SAM_SA_20B_S_300PMU2_CP_54K6E2: 27, + highdigitsams.SAM_SA_20B_S_300PMU2_TR_92H6E_truck: 33, + highdigitsams.SAM_SA_20B_S_300PMU2_SR_64N6E2: 40, + highdigitsams.SAM_SA_20B_S_300PMU2_LN_5P85SE2: 30, + + highdigitsams.SAM_SA_23_S_300VM_9S457ME_CP: 30, + highdigitsams.SAM_SA_23_S_300VM_9S15M2_SR: 45, + highdigitsams.SAM_SA_23_S_300VM_9S19M2_SR: 45, + highdigitsams.SAM_SA_23_S_300VM_9S32ME_TR: 35, + highdigitsams.SAM_SA_23_S_300VM_9A83ME_LN: 32, + highdigitsams.SAM_SA_23_S_300VM_9A82ME_LN: 32, + + highdigitsams.SAM_SA_17_Buk_M1_2_LN_9A310M1_2: 40, + } """ diff --git a/gen/sam/aaa_ks19.py b/gen/sam/aaa_ks19.py new file mode 100644 index 00000000..c0eb50ab --- /dev/null +++ b/gen/sam/aaa_ks19.py @@ -0,0 +1,34 @@ +import random + +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) +from pydcs_extensions.highdigitsams import highdigitsams + + +class KS19Generator(AirDefenseGroupGenerator): + """ + This generate a KS 19 flak artillery group (KS-19 from the High Digit SAM mod) + """ + + name = "KS-19 AAA Site" + price = 98 + + def generate(self): + + spacing = random.randint(10, 40) + + self.add_unit(highdigitsams.AAA_SON_9_Fire_Can, "TR", self.position.x - 20, self.position.y - 20, self.heading) + + index = 0 + for i in range(3): + for j in range(3): + index = index + 1 + self.add_unit(highdigitsams.AAA_100mm_KS_19, "AAA#" + str(index), + self.position.x + spacing * i, + self.position.y + spacing * j, self.heading) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_group_generator.py b/gen/sam/sam_group_generator.py index be1f627d..dfda4048 100644 --- a/gen/sam/sam_group_generator.py +++ b/gen/sam/sam_group_generator.py @@ -11,6 +11,7 @@ from game.theater.theatergroundobject import SamGroundObject from gen.sam.aaa_bofors import BoforsGenerator from gen.sam.aaa_flak import FlakGenerator from gen.sam.aaa_flak18 import Flak18Generator +from gen.sam.aaa_ks19 import KS19Generator from gen.sam.aaa_ww2_ally_flak import AllyWW2FlakGenerator from gen.sam.aaa_zsu57 import ZSU57Generator from gen.sam.aaa_zu23_insurgent import ZU23InsurgentGenerator @@ -48,11 +49,12 @@ from gen.sam.sam_roland import RolandGenerator from gen.sam.sam_sa10 import ( SA10Generator, Tier2SA10Generator, - Tier3SA10Generator, + Tier3SA10Generator, SA10BGenerator, SA12Generator, SA20Generator, SA20BGenerator, SA23Generator, ) from gen.sam.sam_sa11 import SA11Generator from gen.sam.sam_sa13 import SA13Generator from gen.sam.sam_sa15 import SA15Generator +from gen.sam.sam_sa17 import SA17Generator from gen.sam.sam_sa19 import SA19Generator from gen.sam.sam_sa2 import SA2Generator from gen.sam.sam_sa3 import SA3Generator @@ -100,7 +102,15 @@ SAM_MAP: Dict[str, Type[AirDefenseGroupGenerator]] = { "EarlyColdWarFlakGenerator": EarlyColdWarFlakGenerator, "FreyaGenerator": FreyaGenerator, "AllyWW2FlakGenerator": AllyWW2FlakGenerator, - "ZSU57Generator": ZSU57Generator + "ZSU57Generator": ZSU57Generator, + + "KS19Generator": KS19Generator, + "SA10BGenerator": SA10BGenerator, + "SA12Generator": SA12Generator, + "SA17Generator": SA17Generator, + "SA20Generator": SA20Generator, + "SA20BGenerator": SA20BGenerator, + "SA23Generator": SA23Generator, } diff --git a/gen/sam/sam_sa10.py b/gen/sam/sam_sa10.py index 2a31816f..b1923785 100644 --- a/gen/sam/sam_sa10.py +++ b/gen/sam/sam_sa10.py @@ -1,12 +1,16 @@ import random from dcs.mapping import Point +from dcs.unittype import VehicleType from dcs.vehicles import AirDefence +from game import Game +from game.theater import SamGroundObject from gen.sam.airdefensegroupgenerator import ( AirDefenseRange, AirDefenseGroupGenerator, ) +from pydcs_extensions.highdigitsams import highdigitsams class SA10Generator(AirDefenseGroupGenerator): @@ -17,20 +21,30 @@ class SA10Generator(AirDefenseGroupGenerator): name = "SA-10/S-300PS Battery" price = 550 + def __init__(self, game: Game, ground_object: SamGroundObject): + super().__init__(game, ground_object) + self.sr1 = AirDefence.SAM_SA_10_S_300PS_SR_5N66M + self.sr2 = AirDefence.SAM_SA_10_S_300PS_SR_64H6E + self.cp = AirDefence.SAM_SA_10_S_300PS_CP_54K6 + self.tr1 = AirDefence.SAM_SA_10_S_300PS_TR_30N6 + self.tr2 = AirDefence.SAM_SA_10_S_300PS_TR_30N6 + self.ln1 = AirDefence.SAM_SA_10_S_300PS_LN_5P85C + self.ln2 = AirDefence.SAM_SA_10_S_300PS_LN_5P85D + def generate(self): # Search Radar - self.add_unit(AirDefence.SAM_SA_10_S_300PS_SR_5N66M, "SR1", self.position.x, self.position.y + 40, self.heading) + self.add_unit(self.sr1, "SR1", self.position.x, self.position.y + 40, self.heading) # Search radar for missiles (optionnal) - self.add_unit(AirDefence.SAM_SA_10_S_300PS_SR_64H6E, "SR2", self.position.x - 40, self.position.y, self.heading) + self.add_unit(self.sr2, "SR2", self.position.x - 40, self.position.y, self.heading) # Command Post - self.add_unit(AirDefence.SAM_SA_10_S_300PS_CP_54K6, "CP", self.position.x, self.position.y, self.heading) + self.add_unit(self.cp, "CP", self.position.x, self.position.y, self.heading) # 2 Tracking radars - self.add_unit(AirDefence.SAM_SA_10_S_300PS_TR_30N6, "TR1", self.position.x - 40, self.position.y - 40, self.heading) + self.add_unit(self.tr1, "TR1", self.position.x - 40, self.position.y - 40, self.heading) - self.add_unit(AirDefence.SAM_SA_10_S_300PS_TR_30N6, "TR2", self.position.x + 40, self.position.y - 40, + self.add_unit(self.tr2, "TR2", self.position.x + 40, self.position.y - 40, self.heading) # 2 different launcher type (C & D) @@ -38,9 +52,9 @@ class SA10Generator(AirDefenseGroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=100, coverage=360) for i, position in enumerate(positions): if i%2 == 0: - self.add_unit(AirDefence.SAM_SA_10_S_300PS_LN_5P85C, "LN#" + str(i), position[0], position[1], position[2]) + self.add_unit(self.ln1, "LN#" + str(i), position[0], position[1], position[2]) else: - self.add_unit(AirDefence.SAM_SA_10_S_300PS_LN_5P85D, "LN#" + str(i), position[0], position[1], position[2]) + self.add_unit(self.ln2, "LN#" + str(i), position[0], position[1], position[2]) self.generate_defensive_groups() @@ -93,3 +107,83 @@ class Tier3SA10Generator(SA10Generator): for i, (x, y, heading) in enumerate(positions): self.add_unit_to_group(pd_group, AirDefence.SAM_SA_15_Tor_9A331, f"PD#{i}", Point(x, y), heading) + + +class SA10BGenerator(Tier3SA10Generator): + + price = 700 + name = "SA-10B/S-300PS Battery" + + def __init__(self, game: Game, ground_object: SamGroundObject): + super().__init__(game, ground_object) + self.sr1 = highdigitsams.SAM_SA_10B_S_300PS_40B6MD_SR + self.sr2 = highdigitsams.SAM_SA_10B_S_300PS_64H6E_SR + self.cp = highdigitsams.SAM_SA_10B_S_300PS_54K6_CP + self.tr1 = highdigitsams.SAM_SA_10B_S_300PS_30N6_TR + self.tr2 = highdigitsams.SAM_SA_10B_S_300PS_40B6M_TR + self.ln1 = highdigitsams.SAM_SA_10B_S_300PS_5P85SE_LN + self.ln2 = highdigitsams.SAM_SA_10B_S_300PS_5P85SU_LN + + +class SA12Generator(Tier3SA10Generator): + + price = 750 + name = "SA-12/S-300V Battery" + + def __init__(self, game: Game, ground_object: SamGroundObject): + super().__init__(game, ground_object) + self.sr1 = highdigitsams.SAM_SA_12_S_300V_9S15_SR + self.sr2 = highdigitsams.SAM_SA_12_S_300V_9S19_SR + self.cp = highdigitsams.SAM_SA_12_S_300V_9S457_CP + self.tr1 = highdigitsams.SAM_SA_12_S_300V_9S32_TR + self.tr2 = highdigitsams.SAM_SA_12_S_300V_9S32_TR + self.ln1 = highdigitsams.SAM_SA_12_S_300V_9A82_LN + self.ln2 = highdigitsams.SAM_SA_12_S_300V_9A83_LN + + +class SA20Generator(Tier3SA10Generator): + + price = 800 + name = "SA-20/S-300PMU-1 Battery" + + def __init__(self, game: Game, ground_object: SamGroundObject): + super().__init__(game, ground_object) + self.sr1 = highdigitsams.SAM_SA_20_S_300PMU1_SR_5N66E + self.sr2 = highdigitsams.SAM_SA_20_S_300PMU1_SR_64N6E + self.cp = highdigitsams.SAM_SA_20_S_300PMU1_CP_54K6 + self.tr1 = highdigitsams.SAM_SA_20_S_300PMU1_TR_30N6E + self.tr2 = highdigitsams.SAM_SA_20_S_300PMU1_TR_30N6E_truck + self.ln1 = highdigitsams.SAM_SA_20_S_300PMU1_LN_5P85CE + self.ln2 = highdigitsams.SAM_SA_20_S_300PMU1_LN_5P85DE + + +class SA20BGenerator(Tier3SA10Generator): + + price = 850 + name = "SA-20B/S-300PMU-2 Battery" + + def __init__(self, game: Game, ground_object: SamGroundObject): + super().__init__(game, ground_object) + self.sr1 = highdigitsams.SAM_SA_20_S_300PMU1_SR_5N66E + self.sr2 = highdigitsams.SAM_SA_20_S_300PMU1_SR_64N6E + self.cp = highdigitsams.SAM_SA_20B_S_300PMU2_CP_54K6E2 + self.tr1 = highdigitsams.SAM_SA_20B_S_300PMU2_TR_92H6E_truck + self.tr2 = highdigitsams.SAM_SA_20B_S_300PMU2_TR_92H6E_truck + self.ln1 = highdigitsams.SAM_SA_20B_S_300PMU2_LN_5P85SE2 + self.ln2 = highdigitsams.SAM_SA_20B_S_300PMU2_LN_5P85SE2 + + +class SA23Generator(Tier3SA10Generator): + + price = 950 + name = "SA-23/S-300VM Battery" + + def __init__(self, game: Game, ground_object: SamGroundObject): + super().__init__(game, ground_object) + self.sr1 = highdigitsams.SAM_SA_23_S_300VM_9S15M2_SR + self.sr2 = highdigitsams.SAM_SA_23_S_300VM_9S19M2_SR + self.cp = highdigitsams.SAM_SA_23_S_300VM_9S457ME_CP + self.tr1 = highdigitsams.SAM_SA_23_S_300VM_9S32ME_TR + self.tr2 = highdigitsams.SAM_SA_23_S_300VM_9S32ME_TR + self.ln1 = highdigitsams.SAM_SA_23_S_300VM_9A82ME_LN + self.ln2 = highdigitsams.SAM_SA_23_S_300VM_9A83ME_LN \ No newline at end of file diff --git a/gen/sam/sam_sa17.py b/gen/sam/sam_sa17.py new file mode 100644 index 00000000..eced94bf --- /dev/null +++ b/gen/sam/sam_sa17.py @@ -0,0 +1,30 @@ +from dcs.vehicles import AirDefence + +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) +from pydcs_extensions.highdigitsams import highdigitsams + + +class SA17Generator(AirDefenseGroupGenerator): + """ + This generate a SA-17 group + """ + + name = "SA-17 Grizzly Battery" + price = 180 + + def generate(self): + self.add_unit(AirDefence.SAM_SA_11_Buk_SR_9S18M1, "SR", self.position.x + 20, self.position.y, self.heading) + self.add_unit(AirDefence.SAM_SA_11_Buk_CC_9S470M1, "CC", self.position.x, self.position.y, self.heading) + + positions = self.get_circular_position(3, launcher_distance=140, coverage=180) + + for i, position in enumerate(positions): + self.add_unit(highdigitsams.SAM_SA_17_Buk_M1_2_LN_9A310M1_2, "LN#" + str(i), position[0], position[1], + position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Medium diff --git a/resources/factions/russia_2010_hds.json b/resources/factions/russia_2010_hds.json new file mode 100644 index 00000000..7e632c5f --- /dev/null +++ b/resources/factions/russia_2010_hds.json @@ -0,0 +1,95 @@ +{ + "country": "Russia", + "name": "Russia 2010 (High Digit SAMs)", + "authors": "Khopa", + "description": "

Russian army in the early 2010s, featuring the High Digit SAMs mod units.

", + "aircrafts": [ + "MiG_29S", + "MiG_31", + "Su_24M", + "Su_25", + "Su_25T", + "Su_27", + "Su_30", + "Su_33", + "Su_34", + "L_39ZA", + "Mi_8MT", + "Mi_24V", + "Mi_28N", + "Ka_50", + "Tu_22M3", + "Tu_95MS", + "Tu_142", + "Tu_160" + ], + "awacs": [ + "A_50" + ], + "tankers": [ + "IL_78M" + ], + "frontline_units": [ + "IFV_BMP_1", + "IFV_BMP_2", + "IFV_BMP_3", + "APC_BTR_80", + "APC_BTR_82A", + "MBT_T_90", + "MBT_T_80U", + "MBT_T_72B3", + "SAM_SA_19_Tunguska_2S6" + ], + "artillery_units": [ + "MLRS_9K57_Uragan_BM_27", + "SPH_2S19_Msta" + ], + "logistics_units": [ + "Transport_Ural_375", + "Transport_UAZ_469" + ], + "infantry_units": [ + "Paratrooper_AKS", + "Infantry_Soldier_Rus", + "Paratrooper_RPG_16", + "_2B11_mortar", + "SAM_SA_18_Igla_MANPADS" + ], + "air_defenses": [ + "SA17Generator", + "SA13Generator", + "SA15Generator", + "SA19Generator", + "SA10BGenerator", + "SA12Generator", + "SA20Generator", + "SA20BGenerator", + "SA23Generator" + ], + "ewrs": [ + "BoxSpringGenerator", + "TallRackGenerator" + ], + "aircraft_carrier": [ + "CV_1143_5_Admiral_Kuznetsov" + ], + "helicopter_carrier": [ + ], + "helicopter_carrier_names": [ + ], + "destroyers": [ + "FF_1135M_Rezky" + ], + "cruisers": [ + "FSG_1241_1MP_Molniya" + ], + "requirements": { "High Digit SAMs": "https://github.com/Auranis/HighDigitSAMs/releases"}, + "carrier_names": [ + "Admiral Kuznetov" + ], + "navy_generators": [ + "RussianNavyGroupGenerator" + ], + "has_jtac": true, + "jtac_unit": "MQ_9_Reaper" +}