diff --git a/changelog.md b/changelog.md index 150abcdf..675913e3 100644 --- a/changelog.md +++ b/changelog.md @@ -30,6 +30,7 @@ * **[Mission Generation]** Avoid aircraft from being assigned to helicopter parking spots, resulting into air starts that usually crash. * **[Mission Generation]** Use stacking algorithm to create vertical separation between flights spawning mid-mission over their departure, usually resulting into mid-air collisions. * **[Mission Generation]** Fixed all callsigns being "Enfield 1-1" on dedicated servers. +* **[Mission Generation]** Fixed AI ferry flights for helicopters when transferring to a FOB/FARP. # Retribution 1.0.1 (hotfix) * **[Mission Generation]** Fix serialization issue when STRIKE flight has no escorts diff --git a/game/missiongenerator/aircraft/aircraftbehavior.py b/game/missiongenerator/aircraft/aircraftbehavior.py index 6faf7107..016e711a 100644 --- a/game/missiongenerator/aircraft/aircraftbehavior.py +++ b/game/missiongenerator/aircraft/aircraftbehavior.py @@ -29,7 +29,6 @@ from dcs.unitgroup import FlyingGroup from game.ato import Flight, FlightType from game.ato.flightplans.aewc import AewcFlightPlan from game.ato.flightplans.theaterrefueling import TheaterRefuelingFlightPlan -from game.dcs.aircrafttype import AircraftType class AircraftBehavior: diff --git a/game/missiongenerator/aircraft/aircraftgenerator.py b/game/missiongenerator/aircraft/aircraftgenerator.py index cf4fdcbc..f9f1ad4b 100644 --- a/game/missiongenerator/aircraft/aircraftgenerator.py +++ b/game/missiongenerator/aircraft/aircraftgenerator.py @@ -29,6 +29,7 @@ from game.settings import Settings from game.theater.controlpoint import ( Airfield, ControlPoint, + Fob, ) from game.unitmap import UnitMap from .aircraftpainter import AircraftPainter @@ -201,6 +202,14 @@ class AircraftGenerator: self.use_client, ).configure() ) + + wpt = group.waypoint("LANDING") + if flight.is_helo and isinstance(flight.arrival, Fob) and wpt: + hpad = self.helipads[flight.arrival].units.pop(0) + wpt.helipad_id = hpad.id + wpt.link_unit = hpad.id + self.helipads[flight.arrival].units.append(hpad) + return group def _reserve_frequencies_and_tacan(self, ato: AirTaskingOrder) -> None: diff --git a/game/missiongenerator/aircraft/flightgroupspawner.py b/game/missiongenerator/aircraft/flightgroupspawner.py index 0360f7ab..7ea0d3c0 100644 --- a/game/missiongenerator/aircraft/flightgroupspawner.py +++ b/game/missiongenerator/aircraft/flightgroupspawner.py @@ -247,16 +247,18 @@ class FlightGroupSpawner: def _generate_at_cp_helipad(self, name: str, cp: ControlPoint) -> FlyingGroup[Any]: try: helipad = self.helipads[cp] - except IndexError as ex: + except IndexError: raise NoParkingSlotError() group = self._generate_at_group(name, helipad) - if self.start_type is not StartType.COLD: + if self.start_type is StartType.WARM: group.points[0].type = "TakeOffParkingHot" + hpad = helipad.units[0] for i in range(self.flight.count): - group.units[i].position = helipad.units[i].position - group.units[i].heading = helipad.units[i].heading + group.units[i].position = hpad.position + group.units[i].heading = hpad.heading + group.units[i].parking_id = str(i + 1) return group def dcs_start_type(self) -> DcsStartType: