Fix heli spawn/landing at FOB/FARP

Resolves #45
This commit is contained in:
Raffson 2023-02-05 18:10:07 +01:00
parent 5f1f2b34b7
commit f979a0c23d
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99
4 changed files with 16 additions and 5 deletions

View File

@ -30,6 +30,7 @@
* **[Mission Generation]** Avoid aircraft from being assigned to helicopter parking spots, resulting into air starts that usually crash. * **[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]** 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 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) # Retribution 1.0.1 (hotfix)
* **[Mission Generation]** Fix serialization issue when STRIKE flight has no escorts * **[Mission Generation]** Fix serialization issue when STRIKE flight has no escorts

View File

@ -29,7 +29,6 @@ from dcs.unitgroup import FlyingGroup
from game.ato import Flight, FlightType from game.ato import Flight, FlightType
from game.ato.flightplans.aewc import AewcFlightPlan from game.ato.flightplans.aewc import AewcFlightPlan
from game.ato.flightplans.theaterrefueling import TheaterRefuelingFlightPlan from game.ato.flightplans.theaterrefueling import TheaterRefuelingFlightPlan
from game.dcs.aircrafttype import AircraftType
class AircraftBehavior: class AircraftBehavior:

View File

@ -29,6 +29,7 @@ from game.settings import Settings
from game.theater.controlpoint import ( from game.theater.controlpoint import (
Airfield, Airfield,
ControlPoint, ControlPoint,
Fob,
) )
from game.unitmap import UnitMap from game.unitmap import UnitMap
from .aircraftpainter import AircraftPainter from .aircraftpainter import AircraftPainter
@ -201,6 +202,14 @@ class AircraftGenerator:
self.use_client, self.use_client,
).configure() ).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 return group
def _reserve_frequencies_and_tacan(self, ato: AirTaskingOrder) -> None: def _reserve_frequencies_and_tacan(self, ato: AirTaskingOrder) -> None:

View File

@ -247,16 +247,18 @@ class FlightGroupSpawner:
def _generate_at_cp_helipad(self, name: str, cp: ControlPoint) -> FlyingGroup[Any]: def _generate_at_cp_helipad(self, name: str, cp: ControlPoint) -> FlyingGroup[Any]:
try: try:
helipad = self.helipads[cp] helipad = self.helipads[cp]
except IndexError as ex: except IndexError:
raise NoParkingSlotError() raise NoParkingSlotError()
group = self._generate_at_group(name, helipad) 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" group.points[0].type = "TakeOffParkingHot"
hpad = helipad.units[0]
for i in range(self.flight.count): for i in range(self.flight.count):
group.units[i].position = helipad.units[i].position group.units[i].position = hpad.position
group.units[i].heading = helipad.units[i].heading group.units[i].heading = hpad.heading
group.units[i].parking_id = str(i + 1)
return group return group
def dcs_start_type(self) -> DcsStartType: def dcs_start_type(self) -> DcsStartType: