diff --git a/changelog.md b/changelog.md index 1d0c00b7..869426f4 100644 --- a/changelog.md +++ b/changelog.md @@ -33,6 +33,7 @@ * **[Options]** Option to enable unlimited fuel for AI (player and non-player flights) * **[Mission Generator]** F-15E Strike targets are automatically added as Mission Set 1 * **[Mission Generator]** Set F-14's IP waypoint according to the flight-plan's ingress point +* **[Mission Generator]** Automatically de-spawn aircraft when arrival/divert is an off-map spawn ## Fixes * **[Mission Generation]** Anti-ship strikes should use "group attack" in their attack-task diff --git a/game/missiongenerator/aircraft/waypoints/pydcswaypointbuilder.py b/game/missiongenerator/aircraft/waypoints/pydcswaypointbuilder.py index bafb70c9..d0eebc16 100644 --- a/game/missiongenerator/aircraft/waypoints/pydcswaypointbuilder.py +++ b/game/missiongenerator/aircraft/waypoints/pydcswaypointbuilder.py @@ -6,13 +6,14 @@ from typing import Any, Iterable, Union from dcs import Mission from dcs.planes import AJS37, F_14A_135_GR, F_14B, JF_17, F_15ESE from dcs.point import MovingPoint, PointAction +from dcs.task import RunScript from dcs.unitgroup import FlyingGroup from game.ato import Flight, FlightWaypoint from game.ato.flightwaypointtype import FlightWaypointType from game.ato.traveltime import GroundSpeed from game.missiongenerator.missiondata import MissionData -from game.theater import MissionTarget, TheaterUnit +from game.theater import MissionTarget, TheaterUnit, OffMapSpawn TARGET_WAYPOINTS = ( FlightWaypointType.TARGET_GROUP_LOC, @@ -81,7 +82,17 @@ class PydcsWaypointBuilder: return waypoint def add_tasks(self, waypoint: MovingPoint) -> None: - pass + arrival = self.flight.arrival + divert = self.flight.divert + offmap = isinstance(arrival, OffMapSpawn) or isinstance(divert, OffMapSpawn) + pos = waypoint.position + if offmap and (arrival.position == pos or divert and divert.position == pos): + waypoint.tasks.append( + RunScript( + f"local g = Group.getByName('{self.group.name}')\n" + f"Group.destroy(g)" + ) + ) def set_waypoint_tot(self, waypoint: MovingPoint, tot: datetime) -> None: self.waypoint.tot = tot diff --git a/game/missiongenerator/aircraft/waypoints/refuel.py b/game/missiongenerator/aircraft/waypoints/refuel.py index ba03b4d2..253c0777 100644 --- a/game/missiongenerator/aircraft/waypoints/refuel.py +++ b/game/missiongenerator/aircraft/waypoints/refuel.py @@ -1,12 +1,17 @@ from dcs.point import MovingPoint from dcs.task import RefuelingTaskAction, ControlledTask +from game.theater import OffMapSpawn from .pydcswaypointbuilder import PydcsWaypointBuilder class RefuelPointBuilder(PydcsWaypointBuilder): def add_tasks(self, waypoint: MovingPoint) -> None: - refuel = ControlledTask(RefuelingTaskAction()) - refuel.start_probability(10) - waypoint.add_task(refuel) + offmap = isinstance(self.flight.arrival, OffMapSpawn) + if self.flight.divert: + offmap |= isinstance(self.flight.divert, OffMapSpawn) + if not offmap: + refuel = ControlledTask(RefuelingTaskAction()) + refuel.start_probability(10) + waypoint.add_task(refuel) return super().add_tasks(waypoint)