mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Merge branch 'develop' of https://github.com/dcs-liberation/dcs_liberation into develop
This commit is contained in:
commit
ab51f5e69a
@ -33,6 +33,7 @@ Saves from 3.x are not compatible with 4.0.
|
|||||||
## Fixes
|
## Fixes
|
||||||
|
|
||||||
* **[Campaign AI]** Fix procurement for factions that lack some unit types.
|
* **[Campaign AI]** Fix procurement for factions that lack some unit types.
|
||||||
|
* **[Campaign AI]** Fix auto purchase of aircraft for factions that have no transport aircraft.
|
||||||
* **[Mission Generation]** Fixed problem with mission load when control point name contained an apostrophe.
|
* **[Mission Generation]** Fixed problem with mission load when control point name contained an apostrophe.
|
||||||
* **[Mission Generation]** Fixed EWR group names so they contribute to Skynet again.
|
* **[Mission Generation]** Fixed EWR group names so they contribute to Skynet again.
|
||||||
* **[Mission Generation]** Fixed duplicate name error when generating convoys and cargo ships when creating manual transfers after loading a game.
|
* **[Mission Generation]** Fixed duplicate name error when generating convoys and cargo ships when creating manual transfers after loading a game.
|
||||||
|
|||||||
@ -368,6 +368,13 @@ class AirWing:
|
|||||||
def squadrons_for(self, aircraft: AircraftType) -> Sequence[Squadron]:
|
def squadrons_for(self, aircraft: AircraftType) -> Sequence[Squadron]:
|
||||||
return self.squadrons[aircraft]
|
return self.squadrons[aircraft]
|
||||||
|
|
||||||
|
def can_auto_plan(self, task: FlightType) -> bool:
|
||||||
|
try:
|
||||||
|
next(self.auto_assignable_for_task(task))
|
||||||
|
return True
|
||||||
|
except StopIteration:
|
||||||
|
return False
|
||||||
|
|
||||||
def auto_assignable_for_task(self, task: FlightType) -> Iterator[Squadron]:
|
def auto_assignable_for_task(self, task: FlightType) -> Iterator[Squadron]:
|
||||||
for squadron in self.iter_squadrons():
|
for squadron in self.iter_squadrons():
|
||||||
if squadron.can_auto_assign(task):
|
if squadron.can_auto_assign(task):
|
||||||
|
|||||||
@ -592,7 +592,10 @@ class PendingTransfers:
|
|||||||
|
|
||||||
def order_airlift_assets(self) -> None:
|
def order_airlift_assets(self) -> None:
|
||||||
for control_point in self.game.theater.controlpoints:
|
for control_point in self.game.theater.controlpoints:
|
||||||
self.order_airlift_assets_at(control_point)
|
if self.game.air_wing_for(control_point.captured).can_auto_plan(
|
||||||
|
FlightType.TRANSPORT
|
||||||
|
):
|
||||||
|
self.order_airlift_assets_at(control_point)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def desired_airlift_capacity(control_point: ControlPoint) -> int:
|
def desired_airlift_capacity(control_point: ControlPoint) -> int:
|
||||||
|
|||||||
@ -604,14 +604,7 @@ class CoalitionMissionPlanner:
|
|||||||
also possible for the player to exclude mission types from their squadron
|
also possible for the player to exclude mission types from their squadron
|
||||||
designs.
|
designs.
|
||||||
"""
|
"""
|
||||||
all_compatible = aircraft_for_task(mission_type)
|
return self.game.air_wing_for(self.is_player).can_auto_plan(mission_type)
|
||||||
for squadron in self.game.air_wing_for(self.is_player).iter_squadrons():
|
|
||||||
if (
|
|
||||||
squadron.aircraft in all_compatible
|
|
||||||
and mission_type in squadron.auto_assignable_mission_types
|
|
||||||
):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def critical_missions(self) -> Iterator[ProposedMission]:
|
def critical_missions(self) -> Iterator[ProposedMission]:
|
||||||
"""Identifies the most important missions to plan this turn.
|
"""Identifies the most important missions to plan this turn.
|
||||||
|
|||||||
@ -18,6 +18,7 @@ from game.data.weapons import (
|
|||||||
WEAPON_INTRODUCTION_YEARS,
|
WEAPON_INTRODUCTION_YEARS,
|
||||||
Weapon,
|
Weapon,
|
||||||
)
|
)
|
||||||
|
from game.db import FACTIONS
|
||||||
from game.profiling import logged_duration
|
from game.profiling import logged_duration
|
||||||
from game.settings import Settings
|
from game.settings import Settings
|
||||||
from game.theater.start_generator import GameGenerator, GeneratorSettings, ModSettings
|
from game.theater.start_generator import GameGenerator, GeneratorSettings, ModSettings
|
||||||
@ -199,8 +200,8 @@ def create_game(
|
|||||||
inject_custom_payloads(Path(persistency.base_path()))
|
inject_custom_payloads(Path(persistency.base_path()))
|
||||||
campaign = Campaign.from_json(campaign_path)
|
campaign = Campaign.from_json(campaign_path)
|
||||||
generator = GameGenerator(
|
generator = GameGenerator(
|
||||||
blue,
|
FACTIONS[blue],
|
||||||
red,
|
FACTIONS[red],
|
||||||
campaign.load_theater(),
|
campaign.load_theater(),
|
||||||
Settings(
|
Settings(
|
||||||
supercarrier=supercarrier,
|
supercarrier=supercarrier,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user