diff --git a/changelog.md b/changelog.md index cd883fb5..4390ece4 100644 --- a/changelog.md +++ b/changelog.md @@ -20,6 +20,7 @@ * **[Autoplanner]** Support for auto-planning Air Assaults * **[UI]** Improved frequency selector to support all modeled bands for every aircraft's intra-flight radio * **[Options]** New options in Settings: Helicopter waypoint altitude (feet AGL) for combat & cruise waypoints +* **[Options]** New options in Settings: Spawn ground power trucks at ground starts in airbases/roadbases ## Fixes * **[Mission Generation]** Anti-ship strikes should use "group attack" in their attack-task diff --git a/game/missiongenerator/aircraft/flightgroupspawner.py b/game/missiongenerator/aircraft/flightgroupspawner.py index c7831a0e..426d669e 100644 --- a/game/missiongenerator/aircraft/flightgroupspawner.py +++ b/game/missiongenerator/aircraft/flightgroupspawner.py @@ -6,7 +6,16 @@ from dcs import Mission from dcs.country import Country from dcs.mapping import Vector2, Point from dcs.mission import StartType as DcsStartType -from dcs.planes import F_14A, Su_33 +from dcs.planes import ( + F_14A, + F_14A_135_GR, + F_14B, + F_5E_3, + F_86F_Sabre, + C_101CC, + Su_33, + MiG_15bis, +) from dcs.point import PointAction from dcs.ships import KUZNECOW from dcs.terrain import NoParkingSlotError @@ -26,6 +35,7 @@ from game.missiongenerator.missiondata import MissionData from game.naming import namegen from game.theater import Airfield, ControlPoint, Fob, NavalControlPoint, OffMapSpawn from game.utils import feet, meters +from pydcs_extensions import A_4E_C WARM_START_HELI_ALT = meters(500) WARM_START_ALTITUDE = meters(3000) @@ -360,11 +370,16 @@ class FlightGroupSpawner: def _generate_at_cp_ground_spawn( self, name: str, cp: ControlPoint ) -> Optional[FlyingGroup[Any]]: + is_airbase = False + is_roadbase = False + try: if len(self.ground_spawns_roadbase[cp]) > 0: ground_spawn = self.ground_spawns_roadbase[cp].pop() + is_roadbase = True else: ground_spawn = self.ground_spawns[cp].pop() + is_airbase = True except IndexError as ex: logging.warning("Not enough STOL slots available at " + str(ex)) return None @@ -377,6 +392,24 @@ class FlightGroupSpawner: group.points[0].type = "TakeOffGround" group.units[0].heading = ground_spawn[0].units[0].heading + # Hot start aircraft which require ground power to start, when ground power + # trucks have been disabled for performance reasons + ground_power_available = ( + is_airbase + and self.flight.coalition.game.settings.ground_start_ground_power_trucks + ) or ( + is_roadbase + and self.flight.coalition.game.settings.ground_start_ground_power_trucks_roadbase + ) + + if self.start_type is not StartType.COLD or ( + not ground_power_available + and self.flight.unit_type.dcs_unit_type + in [A_4E_C, F_5E_3, F_86F_Sabre, MiG_15bis, F_14A_135_GR, F_14B, C_101CC] + ): + group.points[0].action = PointAction.FromGroundAreaHot + group.points[0].type = "TakeOffGroundHot" + try: cp.coalition.game.scenery_clear_zones except AttributeError: diff --git a/game/missiongenerator/tgogenerator.py b/game/missiongenerator/tgogenerator.py index 7d69d863..7de93bec 100644 --- a/game/missiongenerator/tgogenerator.py +++ b/game/missiongenerator/tgogenerator.py @@ -80,7 +80,7 @@ AA_CP_MIN_DISTANCE = 40000 def farp_truck_types_for_country( country_id: int, -) -> Tuple[Type[VehicleType], Type[VehicleType]]: +) -> Tuple[Type[VehicleType], Type[VehicleType], Type[VehicleType]]: soviet_tankers: List[Type[VehicleType]] = [ Unarmed.ATMZ_5, Unarmed.ATZ_10, @@ -107,6 +107,11 @@ def farp_truck_types_for_country( us_trucks: List[Type[VehicleType]] = [Unarmed.M_818] uk_trucks: List[Type[VehicleType]] = [Unarmed.Bedford_MWD] + ground_power_trucks: List[Type[VehicleType]] = [ + Unarmed.Ural_4320_APA_5D, + Unarmed.ZiL_131_APA_80, + ] + if country_id in [ Abkhazia.id, Algeria.id, @@ -230,7 +235,9 @@ def farp_truck_types_for_country( tanker_type = random.choice(tanker_types) ammo_truck_type = random.choice(truck_types) - return tanker_type, ammo_truck_type + power_truck_type = random.choice(ground_power_trucks) + + return tanker_type, ammo_truck_type, power_truck_type class GroundObjectGenerator: @@ -913,8 +920,9 @@ class GroundSpawnRoadbaseGenerator: self.ground_spawns_roadbase.append((sg, ground_spawn[1])) - tanker_type, ammo_truck_type = farp_truck_types_for_country(country.id) - power_truck_type = Unarmed.Ural_4320_APA_5D + tanker_type, ammo_truck_type, power_truck_type = farp_truck_types_for_country( + country.id + ) # Generate ammo truck/farp and fuel truck/stack for each pad if self.game.settings.ground_start_trucks_roadbase: @@ -1029,8 +1037,9 @@ class GroundSpawnGenerator: # tanker_type: Type[VehicleType] # ammo_truck_type: Type[VehicleType] - tanker_type, ammo_truck_type = farp_truck_types_for_country(country.id) - power_truck_type = Unarmed.Ural_4320_APA_5D + tanker_type, ammo_truck_type, power_truck_type = farp_truck_types_for_country( + country.id + ) # Generate a FARP Ammo and Fuel stack for each pad if self.game.settings.ground_start_trucks: