mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Added SAM HQ-7, tweaks in db
This commit is contained in:
parent
f5a5fb765b
commit
2d0c195e46
49
game/db.py
49
game/db.py
@ -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 = {
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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
25
gen/sam/sam_hq7.py
Normal 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])
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user