From 76b3ff5f6e328e8987fa7640ff96e8b512dbe63f Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Thu, 14 Oct 2021 20:49:18 -0700 Subject: [PATCH] Override squadron base preferences when named. This allows campaign designers to forcibly place specific squadrons at bases that they would not normally be assigned to, such as assigning CV-only squadrons to the shore. The airframe itself must be compatible with the location type, so A-10s still may not be assigned to carriers. This change only applies to squadrons that are named explicitly. There's no need for squadrons defined by type because a squadron will always be generated to fit the need if no pre-defined squadron is found. Fixes https://github.com/dcs-liberation/dcs_liberation/issues/1621 --- game/campaignloader/defaultsquadronassigner.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/game/campaignloader/defaultsquadronassigner.py b/game/campaignloader/defaultsquadronassigner.py index e08b7fc4..91d6df30 100644 --- a/game/campaignloader/defaultsquadronassigner.py +++ b/game/campaignloader/defaultsquadronassigner.py @@ -109,8 +109,13 @@ class DefaultSquadronAssigner: @staticmethod def squadron_compatible_with( - squadron: SquadronDef, task: FlightType, control_point: ControlPoint + squadron: SquadronDef, + task: FlightType, + control_point: ControlPoint, + ignore_base_preference: bool = False, ) -> bool: + if ignore_base_preference: + return control_point.can_operate(squadron.aircraft) return squadron.operates_from(control_point) and task in squadron.mission_types def find_squadron_for_airframe( @@ -127,7 +132,7 @@ class DefaultSquadronAssigner: for squadrons in self.squadron_defs.values(): for squadron in squadrons: if squadron.name == name and self.squadron_compatible_with( - squadron, task, control_point + squadron, task, control_point, ignore_base_preference=True ): return squadron return None