From 95c4dfa52fc6933a2ebede62bb0337d609420bba Mon Sep 17 00:00:00 2001 From: Khopa Date: Wed, 4 Nov 2020 21:50:25 +0100 Subject: [PATCH] Added new Flak site configuration (now that flak 18 and bofors guns do not require WW2 asset pack) --- gen/sam/aaa_flak18.py | 29 ++++++++++++++ gen/sam/cold_war_flak.py | 72 ++++++++++++++++++++++++++++++++++ gen/sam/sam_group_generator.py | 16 ++++---- 3 files changed, 109 insertions(+), 8 deletions(-) create mode 100644 gen/sam/aaa_flak18.py create mode 100644 gen/sam/cold_war_flak.py diff --git a/gen/sam/aaa_flak18.py b/gen/sam/aaa_flak18.py new file mode 100644 index 00000000..fea85f70 --- /dev/null +++ b/gen/sam/aaa_flak18.py @@ -0,0 +1,29 @@ +import random + +from dcs.vehicles import AirDefence, Unarmed + +from gen.sam.group_generator import GroupGenerator + + +class Flak18Generator(GroupGenerator): + """ + This generate a German flak artillery group using only free units, thus not requiring the WW2 asset pack + """ + + name = "WW2 Flak Site" + price = 40 + + def generate(self): + + spacing = random.randint(30, 60) + index = 0 + + for i in range(3): + for j in range(2): + index = index + 1 + self.add_unit(AirDefence.AAA_8_8cm_Flak_18, "AAA#" + str(index), + self.position.x + spacing * i + random.randint(1, 5), + self.position.y + spacing * j + random.randint(1, 5), self.heading) + + # Add a commander truck + self.add_unit(Unarmed.Blitz_3_6_6700A, "Blitz#", self.position.x - 35, self.position.y - 20, self.heading) diff --git a/gen/sam/cold_war_flak.py b/gen/sam/cold_war_flak.py new file mode 100644 index 00000000..e35bd01a --- /dev/null +++ b/gen/sam/cold_war_flak.py @@ -0,0 +1,72 @@ +import random + +from dcs.vehicles import AirDefence, Unarmed + +from gen.sam.group_generator import GroupGenerator + + +class EarlyColdWarFlakGenerator(GroupGenerator): + """ + This generator attempt to mimic an early cold-war era flak AAA site. + The Flak 18 88mm is used as the main long range gun and 2 Bofors 40mm guns provide short range protection. + + This does not include search lights and telemeter computer (Kdo.G 40) because these are paid units only available in WW2 asset pack + """ + + name = "Early Cold War Flak Site" + price = 58 + + def generate(self): + + spacing = random.randint(30, 60) + index = 0 + + # Long range guns + for i in range(3): + for j in range(2): + index = index + 1 + self.add_unit(AirDefence.AAA_8_8cm_Flak_18, "AAA#" + str(index), + self.position.x + spacing * i + random.randint(1, 5), + self.position.y + spacing * j + random.randint(1, 5), self.heading) + + # Short range guns + self.add_unit(AirDefence.AAA_Bofors_40mm, "SHO#1", + self.position.x - 40, self.position.y - 40, self.heading + 180), + self.add_unit(AirDefence.AAA_Bofors_40mm, "SHO#1", + self.position.x + spacing * 2 + 40, self.position.y + spacing + 40, self.heading), + + # Add a Kamaz truck + self.add_unit(Unarmed.Transport_KAMAZ_43101, "Kamaz#", self.position.x - 60, self.position.y - 20, self.heading) + + +class ColdWarFlakGenerator(GroupGenerator): + """ + This generator attempt to mimic a cold-war era flak AAA site. + The Flak 18 88mm is used as the main long range gun while 2 Zu-23 guns provide short range protection. + The site is also fitted with a P-19 radar for early detection. + """ + + name = "Early Cold War Flak Site" + price = 72 + + def generate(self): + + spacing = random.randint(30, 60) + index = 0 + + # Long range guns + for i in range(3): + for j in range(2): + index = index + 1 + self.add_unit(AirDefence.AAA_8_8cm_Flak_18, "AAA#" + str(index), + self.position.x + spacing * i + random.randint(1, 5), + self.position.y + spacing * j + random.randint(1, 5), self.heading) + + # Short range guns + self.add_unit(AirDefence.AAA_ZU_23_Closed, "SHO#1", + self.position.x - 40, self.position.y - 40, self.heading + 180), + self.add_unit(AirDefence.AAA_ZU_23_Closed, "SHO#1", + self.position.x + spacing * 2 + 40, self.position.y + spacing + 40, self.heading), + + # Add a P19 Radar for EWR + self.add_unit(AirDefence.SAM_SR_P_19, "SR#0", self.position.x - 60, self.position.y - 20, self.heading) diff --git a/gen/sam/sam_group_generator.py b/gen/sam/sam_group_generator.py index 7a127830..a2a20a1c 100644 --- a/gen/sam/sam_group_generator.py +++ b/gen/sam/sam_group_generator.py @@ -1,13 +1,14 @@ import random from typing import List, Type -from dcs.unittype import UnitType from dcs.vehicles import AirDefence from game import db 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_zu23_insurgent import ZU23InsurgentGenerator +from gen.sam.cold_war_flak import EarlyColdWarFlakGenerator, ColdWarFlakGenerator from gen.sam.group_generator import GroupGenerator from gen.sam.sam_avenger import AvengerGenerator from gen.sam.sam_chaparral import ChaparralGenerator @@ -61,7 +62,10 @@ SAM_MAP = { "SA13Generator": SA13Generator, "SA15Generator": SA15Generator, "SA19Generator": SA19Generator, - "HQ7Generator": HQ7Generator + "HQ7Generator": HQ7Generator, + "Flak18Generator": Flak18Generator, + "ColdWarFlakGenerator": ColdWarFlakGenerator, + "EarlyColdWarFlakGenerator": EarlyColdWarFlakGenerator } SAM_PRICES = { @@ -106,7 +110,8 @@ def get_faction_possible_sams_generator(faction: str) -> List[Type[GroupGenerato """ return [SAM_MAP[s] for s in db.FACTIONS[faction].sams if s in SAM_MAP.keys()] -def generate_anti_air_group(game, parent_cp, ground_object, faction:str): + +def generate_anti_air_group(game, parent_cp, ground_object, faction: str): """ This generate a SAM group :param parentCp: The parent control point @@ -133,8 +138,3 @@ def generate_shorad_group(game, parent_cp, ground_object, faction_name: str): return generator.get_generated_group() else: return generate_anti_air_group(game, parent_cp, ground_object, faction_name) - - - - -