Added SAM HQ-7, tweaks in db

This commit is contained in:
Khopa 2019-10-08 22:35:08 +02:00
parent f5a5fb765b
commit 2d0c195e46
6 changed files with 155 additions and 14 deletions

View File

@ -66,7 +66,7 @@ PRICES = {
F_16C_50: 20,
F_14B: 22,
Tornado_IDS: 24,
# Tornado_GR4: 24,
Tornado_GR4: 24,
# bomber
Su_17M4: 10,
@ -83,6 +83,7 @@ PRICES = {
# heli
Ka_50: 13,
SA342M: 8,
SA342L: 5,
UH_1H: 4,
Mi_8MT: 5,
Mi_24V: 12,
@ -210,7 +211,8 @@ UNIT_BY_TASK = {
P_51D,
MiG_29G,
Su_30,
J_11A
J_11A,
F_4E,
],
CAS: [
F_86F_Sabre,
@ -225,8 +227,8 @@ UNIT_BY_TASK = {
Su_25T,
Su_34,
Ka_50,
F_4E,
SA342M,
SA342L,
Su_24M,
Su_24MR,
AH_64A,
@ -235,7 +237,7 @@ UNIT_BY_TASK = {
B_52H,
B_1B,
Tornado_IDS,
# Tornado_GR4,
Tornado_GR4,
],
Transport: [
IL_76MD,
@ -704,7 +706,7 @@ FACTIONS = {
AirDefence.Rapier_FSA_Launcher, # Standing as PL-9C Shorad
AirDefence.SAM_SA_10_S_300PS_LN_5P85C, # Standing as HQ-9+
AirDefence.SAM_SA_6_Kub_LN_2P25,
# TODO : ADD HQ-7 (need pydcs support)
AirDefence.HQ_7_Self_Propelled_LN,
Armor.MBT_T_55,
Armor.ZBD_04A,
@ -869,13 +871,17 @@ FACTIONS = {
E_3A,
SA342M,
SA342L,
Armor.MBT_Leclerc,
Armor.TPz_Fuchs, # Standing as VAB
Unarmed.Transport_M818,
Infantry.Infantry_M4,
AirDefence.SAM_Roland_ADS,
AirDefence.SAM_Hawk_PCP,
AirDefence.HQ_7_Self_Propelled_STR, # Standing as Crotale
CVN_74_John_C__Stennis,
LHA_1_Tarawa,
@ -898,10 +904,12 @@ FACTIONS = {
UH_1H,
SA342M,
SA342L,
Armor.TPz_Fuchs,
Armor.MBT_Leopard_1A3,
Armor.MBT_Leopard_2,
Unarmed.Transport_M818,
Infantry.Infantry_M4,
@ -914,6 +922,37 @@ FACTIONS = {
Armed_speedboat,
]
},
"United Kingdown 1990": {
"country": "UK",
"side": "blue",
"units":[
AV8BNA, # Standing as BAE Harrier 2
Tornado_GR4,
F_4E,
KC_135,
S_3B_Tanker,
C_130,
E_3A,
SA342L,
AH_64A,
Armor.MBT_Challenger_II,
Armor.IFV_M2A2_Bradley, # Standing as Warrior IFV
Unarmed.Transport_M818,
Infantry.Infantry_M4,
AirDefence.Rapier_FSA_Launcher,
AirDefence.SAM_Avenger_M1097, # Standing as Starstreak
CVN_74_John_C__Stennis,
LHA_1_Tarawa,
Armed_speedboat,
]
},
}
CARRIER_TYPE_BY_PLANE = {

View File

@ -299,9 +299,9 @@ class AircraftConflictGenerator:
def generate_patrol_group(self, cp: ControlPoint, country):
aircraft = dict({k:v for k,v in cp.base.aircraft.items() if k in [u for u in db.UNIT_BY_TASK[CAP]]})
delta = random.randint(10, 20)
delta = random.randint(1, 20)
for i in range(12):
for i in range(8):
if(len(aircraft.keys())) > 0:
print(aircraft.keys())
type = random.choice(list(aircraft.keys()))
@ -320,7 +320,7 @@ class AircraftConflictGenerator:
client_count=0,
airport=self.m.terrain.airport_by_id(cp.at.id),
start_type=StartType.Runway)
except RunwayOccupiedError:
except Exception:
group = self._generate_group(
name=namegen.next_unit_name(country, type),
side=country,
@ -329,11 +329,13 @@ class AircraftConflictGenerator:
client_count=0,
at=cp.position)
patrol_alt = random.randint(3600, 7000)
self._setup_group(group, CAP, 0)
patrol_alt = random.randint(3600, 7000)
group.points[0].alt = patrol_alt
group.points[0].ETA = delta*60 + i*10*60
patrolled = []
for ground_object in cp.ground_objects:
if not ground_object.group_id in patrolled:

View File

@ -12,6 +12,7 @@ from gen.sam.sam_avenger import AvengerGenerator
from gen.sam.sam_chaparral import ChaparralGenerator
from gen.sam.sam_gepard import GepardGenerator
from gen.sam.sam_hawk import HawkGenerator
from gen.sam.sam_hq7 import HQ7Generator
from gen.sam.sam_linebacker import LinebackerGenerator
from gen.sam.sam_patriot import PatriotGenerator
from gen.sam.sam_rapier import RapierGenerator
@ -68,6 +69,7 @@ def generate_anti_air_group(game, parent_cp, ground_object, faction:str):
AirDefence.SAM_SA_13_Strela_10M3_9A35M3: SA13Generator,
AirDefence.SAM_SA_15_Tor_9A331: SA15Generator,
AirDefence.SAM_SA_19_Tunguska_2S6: SA19Generator,
AirDefence.HQ_7_Self_Propelled_LN: HQ7Generator
}
possible_sams = [u for u in db.FACTIONS[faction]["units"] if u in AirDefence.__dict__.values()]

25
gen/sam/sam_hq7.py Normal file
View File

@ -0,0 +1,25 @@
import random
from dcs.vehicles import AirDefence
from gen.sam.group_generator import AntiAirGroupGenerator
class HQ7Generator(AntiAirGroupGenerator):
"""
This generate an HQ7 group
"""
def generate(self):
self.add_unit(AirDefence.HQ_7_Self_Propelled_STR, "STR", self.position.x, self.position.y, self.heading)
self.add_unit(AirDefence.HQ_7_Self_Propelled_LN, "LN", self.position.x + 20, self.position.y, self.heading)
# Triple A for close range defense
self.add_unit(AirDefence.AAA_ZU_23_on_Ural_375, "AAA", self.position.x + 20, self.position.y+30, self.heading)
self.add_unit(AirDefence.AAA_ZU_23_on_Ural_375, "AAA", self.position.x - 20, self.position.y-30, self.heading)
num_launchers = random.randint(0, 3)
positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=360)
for i, position in enumerate(positions):
self.add_unit(AirDefence.HQ_7_Self_Propelled_LN, "LN#" + str(i), position[0], position[1], position[2])

View File

@ -35,6 +35,7 @@ class NewGameWizard(QtWidgets.QWizard):
isTerrainPg = self.field("isTerrainPg")
isTerrainNttr = self.field("isTerrainNttr")
isTerrainCaucasusSmall = self.field("isTerrainCaucasusSmall")
isIranianCampaignTheater = self.field("isIranianCampaignTheater")
timePeriod = db.TIME_PERIODS[list(db.TIME_PERIODS.keys())[self.field("timePeriod")]]
sams = self.field("sams")
midGame = self.field("midGame")
@ -49,11 +50,15 @@ class NewGameWizard(QtWidgets.QWizard):
conflicttheater = nevada.NevadaTheater()
elif isTerrainCaucasusSmall:
conflicttheater = caucasus.WesternGeorgia()
elif isIranianCampaignTheater:
conflicttheater = persiangulf.IranianCampaign()
else:
conflicttheater = caucasus.CaucasusTheater()
print("player_name, enemy_name, conflicttheater, sams, midGame, multiplier, timePeriod")
print(player_name, enemy_name, conflicttheater, sams, midGame, multiplier, timePeriod)
print(isIranianCampaignTheater, isTerrainPg)
self.generatedGame = self.start_new_game(player_name, enemy_name, conflicttheater, sams, midGame, multiplier,
timePeriod)
@ -196,14 +201,16 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
# Terrain selection
terrainGroup = QtWidgets.QGroupBox("Terrain")
terrainCaucasus = QtWidgets.QRadioButton("Caucasus")
terrainCaucasus = QtWidgets.QRadioButton("Caucasus - Full map")
terrainCaucasus.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Caucasus"]))
terrainCaucasusSmall = QtWidgets.QRadioButton("Caucasus Western Georgia")
terrainCaucasusSmall = QtWidgets.QRadioButton("Caucasus - Western Georgia")
terrainCaucasusSmall.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Caucasus"]))
terrainPg = QtWidgets.QRadioButton("Persian Gulf")
terrainPg = QtWidgets.QRadioButton("Persian Gulf - Full Map")
terrainPg.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Persian_Gulf"]))
terrainNttr = QtWidgets.QRadioButton("Nevada")
terrainIran = QtWidgets.QRadioButton("Persian Gulf - Iranian Campaign")
terrainIran.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Persian_Gulf"]))
terrainNttr = QtWidgets.QRadioButton("Nevada - Full")
terrainNttr.setIcon(QtGui.QIcon(CONST.ICONS["Terrain_Nevada"]))
terrainCaucasus.setChecked(True)
@ -220,6 +227,7 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
self.registerField('isTerrainCaucasus', terrainCaucasus)
self.registerField('isTerrainCaucasusSmall', terrainCaucasusSmall)
self.registerField('isTerrainPg', terrainPg)
self.registerField('isIranianCampaignTheater', terrainIran)
self.registerField('isTerrainNttr', terrainNttr)
self.registerField('timePeriod', timePeriodSelect)
@ -228,6 +236,7 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
terrainGroupLayout.addWidget(terrainCaucasus)
terrainGroupLayout.addWidget(terrainCaucasusSmall)
terrainGroupLayout.addWidget(terrainPg)
terrainGroupLayout.addWidget(terrainIran)
terrainGroupLayout.addWidget(terrainNttr)
terrainGroup.setLayout(terrainGroupLayout)

View File

@ -73,7 +73,7 @@ class PersianGulfTheater(ConflictTheater):
self.add_controlpoint(self.bandar_lengeh, connected_to=[self.tunb_island, self.lar, self.qeshm])
self.add_controlpoint(self.qeshm, connected_to=[self.bandar_lengeh, self.havadarya, self.tunb_island])
self.add_controlpoint(self.havadarya, connected_to=[self.lar, self.qeshm, self.bandar_abbas])
self.add_controlpoint(self.bandar_abbas, connected_to=[self.havadarya])
self.add_controlpoint(self.bandar_abbas, connected_to=[self.havadarya, self.kerman])
self.add_controlpoint(self.shiraz, connected_to=[self.lar, self.kerman])
self.add_controlpoint(self.kerman, connected_to=[self.lar, self.shiraz, self.bandar_abbas])
@ -85,3 +85,67 @@ class PersianGulfTheater(ConflictTheater):
self.west_carrier.captured = True
self.east_carrier.captured = True
self.liwa.captured = True
class IranianCampaign(ConflictTheater):
terrain = dcs.terrain.PersianGulf()
overview_image = "persiangulf.gif"
reference_points = {(persiangulf.Sir_Abu_Nuayr.position.x, persiangulf.Sir_Abu_Nuayr.position.y): (321*4, 145*4),
(persiangulf.Sirri_Island.position.x, persiangulf.Sirri_Island.position.y): (347*4, 82*4), }
landmap = load_landmap("resources\\gulflandmap.p")
daytime_map = {
"dawn": (6, 8),
"day": (8, 16),
"dusk": (16, 18),
"night": (0, 5),
}
al_dhafra = ControlPoint.from_airport(persiangulf.Al_Dhafra_AB, LAND, SIZE_BIG, IMPORTANCE_LOW)
al_maktoum = ControlPoint.from_airport(persiangulf.Al_Maktoum_Intl, LAND, SIZE_BIG, IMPORTANCE_LOW)
al_minhad = ControlPoint.from_airport(persiangulf.Al_Minhad_AB, LAND, SIZE_REGULAR, 1.1)
sir_abu_nuayr = ControlPoint.from_airport(persiangulf.Sir_Abu_Nuayr, [0, 330], SIZE_SMALL, 1.1, has_frontline=False)
dubai = ControlPoint.from_airport(persiangulf.Dubai_Intl, COAST_DL_E, SIZE_LARGE, IMPORTANCE_MEDIUM)
sharjah = ControlPoint.from_airport(persiangulf.Sharjah_Intl, LAND, SIZE_BIG, 1.0)
fujairah = ControlPoint.from_airport(persiangulf.Fujairah_Intl, COAST_V_W, SIZE_REGULAR, 1.0)
khasab = ControlPoint.from_airport(persiangulf.Khasab, LAND, SIZE_SMALL, IMPORTANCE_MEDIUM)
sirri = ControlPoint.from_airport(persiangulf.Sirri_Island, COAST_DL_W, SIZE_REGULAR, IMPORTANCE_LOW, has_frontline=False)
abu_musa = ControlPoint.from_airport(persiangulf.Abu_Musa_Island_Airport, LAND, SIZE_SMALL, IMPORTANCE_MEDIUM, has_frontline=False)
tunb_island = ControlPoint.from_airport(persiangulf.Tunb_Island_AFB, [0, 270, 330], SIZE_SMALL, IMPORTANCE_MEDIUM, has_frontline=False)
tunb_kochak = ControlPoint.from_airport(persiangulf.Tunb_Kochak, [135, 180], SIZE_SMALL, 1.1, has_frontline=False)
bandar_lengeh = ControlPoint.from_airport(persiangulf.Bandar_Lengeh, [270, 315, 0, 45], SIZE_SMALL, IMPORTANCE_HIGH)
qeshm = ControlPoint.from_airport(persiangulf.Qeshm_Island, [270, 315, 0, 45, 90, 135, 180], SIZE_SMALL, 1.1, has_frontline=False)
havadarya = ControlPoint.from_airport(persiangulf.Havadarya, COAST_DL_W, SIZE_REGULAR, IMPORTANCE_HIGH)
bandar_abbas = ControlPoint.from_airport(persiangulf.Bandar_Abbas_Intl, LAND, SIZE_BIG, IMPORTANCE_HIGH)
lar = ControlPoint.from_airport(persiangulf.Lar_Airbase, LAND, SIZE_REGULAR, IMPORTANCE_HIGH)
shiraz = ControlPoint.from_airport(persiangulf.Shiraz_International_Airport, LAND, SIZE_BIG, IMPORTANCE_HIGH)
kerman = ControlPoint.from_airport(persiangulf.Kerman_Airport, LAND, SIZE_BIG, IMPORTANCE_HIGH)
ras_al_khaimah = ControlPoint.from_airport(persiangulf.Ras_Al_Khaimah, LAND, SIZE_REGULAR, IMPORTANCE_MEDIUM)
east_carrier = ControlPoint.carrier("East carrier", Point(59514.324335475, 28165.517980635))
def __init__(self):
super(IranianCampaign, self).__init__()
self.add_controlpoint(self.ras_al_khaimah, connected_to=[self.khasab])
self.add_controlpoint(self.khasab, connected_to=[self.ras_al_khaimah, self.qeshm])
self.add_controlpoint(self.bandar_lengeh, connected_to=[self.lar, self.qeshm])
self.add_controlpoint(self.qeshm, connected_to=[self.khasab, self.bandar_lengeh, self.havadarya])
self.add_controlpoint(self.havadarya, connected_to=[self.lar, self.qeshm, self.bandar_abbas])
self.add_controlpoint(self.bandar_abbas, connected_to=[self.havadarya, self.kerman])
self.add_controlpoint(self.shiraz, connected_to=[self.lar, self.kerman])
self.add_controlpoint(self.kerman, connected_to=[self.lar, self.shiraz, self.bandar_abbas])
self.add_controlpoint(self.lar, connected_to=[self.bandar_lengeh, self.havadarya, self.shiraz, self.kerman])
self.add_controlpoint(self.east_carrier)
self.east_carrier.captured = True
self.al_dhafra.captured = True
self.ras_al_khaimah.captured = True
self.khasab.captured = True