mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
parent
5c06e74659
commit
00ab0c4be2
@ -3,6 +3,7 @@
|
|||||||
## Features/Improvements
|
## Features/Improvements
|
||||||
* **[Mission Generation]** Given a CAS flight was planned, delay ground force attack until first CAS flight is on station
|
* **[Mission Generation]** Given a CAS flight was planned, delay ground force attack until first CAS flight is on station
|
||||||
* **[Mission Generation]** Add option to switch ATFLIR to LITENING automatically for ground based F-18C flights
|
* **[Mission Generation]** Add option to switch ATFLIR to LITENING automatically for ground based F-18C flights
|
||||||
|
* **[Cheat Menu]** Option to instantly transfer squadrons across bases.
|
||||||
|
|
||||||
## Fixes
|
## Fixes
|
||||||
* **[UI]** Removed deprecated options
|
* **[UI]** Removed deprecated options
|
||||||
|
|||||||
@ -264,4 +264,8 @@ class Flight(SidcDescribable):
|
|||||||
results.kill_pilot(self, pilot)
|
results.kill_pilot(self, pilot)
|
||||||
|
|
||||||
def recreate_flight_plan(self) -> None:
|
def recreate_flight_plan(self) -> None:
|
||||||
|
from game.sim.gameupdateevents import GameUpdateEvents
|
||||||
|
from game.server import EventStream
|
||||||
|
|
||||||
self._flight_plan_builder.regenerate()
|
self._flight_plan_builder.regenerate()
|
||||||
|
EventStream.put_nowait(GameUpdateEvents().update_flight(self))
|
||||||
|
|||||||
@ -4,7 +4,6 @@ from typing import TYPE_CHECKING
|
|||||||
|
|
||||||
from game.ato.packagewaypoints import PackageWaypoints
|
from game.ato.packagewaypoints import PackageWaypoints
|
||||||
from game.data.doctrine import MODERN_DOCTRINE, COLDWAR_DOCTRINE, WWII_DOCTRINE
|
from game.data.doctrine import MODERN_DOCTRINE, COLDWAR_DOCTRINE, WWII_DOCTRINE
|
||||||
from game.utils import knots, feet, nautical_miles
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from game import Game
|
from game import Game
|
||||||
|
|||||||
@ -509,6 +509,7 @@ class Settings:
|
|||||||
show_red_ato: bool = False
|
show_red_ato: bool = False
|
||||||
enable_frontline_cheats: bool = False
|
enable_frontline_cheats: bool = False
|
||||||
enable_base_capture_cheat: bool = False
|
enable_base_capture_cheat: bool = False
|
||||||
|
enable_transfer_cheat: bool = False
|
||||||
|
|
||||||
# LUA Plugins system
|
# LUA Plugins system
|
||||||
plugins: Dict[str, bool] = field(default_factory=dict)
|
plugins: Dict[str, bool] = field(default_factory=dict)
|
||||||
|
|||||||
@ -304,6 +304,7 @@ def create_game(
|
|||||||
automate_aircraft_reinforcements=auto_procurement,
|
automate_aircraft_reinforcements=auto_procurement,
|
||||||
enable_frontline_cheats=cheats,
|
enable_frontline_cheats=cheats,
|
||||||
enable_base_capture_cheat=cheats,
|
enable_base_capture_cheat=cheats,
|
||||||
|
enable_transfer_cheat=cheats,
|
||||||
restrict_weapons_by_date=restrict_weapons_by_date,
|
restrict_weapons_by_date=restrict_weapons_by_date,
|
||||||
),
|
),
|
||||||
GeneratorSettings(
|
GeneratorSettings(
|
||||||
|
|||||||
@ -14,7 +14,9 @@ from PySide2.QtWidgets import (
|
|||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from game.ato.flightplans.custom import CustomFlightPlan
|
||||||
from game.ato.flighttype import FlightType
|
from game.ato.flighttype import FlightType
|
||||||
|
from game.ato.flightwaypointtype import FlightWaypointType
|
||||||
from game.squadrons import Pilot, Squadron
|
from game.squadrons import Pilot, Squadron
|
||||||
from game.theater import ConflictTheater, ControlPoint
|
from game.theater import ConflictTheater, ControlPoint
|
||||||
from qt_ui.delegates import TwoColumnRowDelegate
|
from qt_ui.delegates import TwoColumnRowDelegate
|
||||||
@ -96,7 +98,8 @@ class SquadronDestinationComboBox(QComboBox):
|
|||||||
|
|
||||||
room = squadron.location.unclaimed_parking()
|
room = squadron.location.unclaimed_parking()
|
||||||
self.addItem(
|
self.addItem(
|
||||||
f"Remain at {squadron.location} (room for {room} more aircraft)", None
|
f"Remain at {squadron.location} (room for {room} more aircraft)",
|
||||||
|
squadron.location,
|
||||||
)
|
)
|
||||||
selected_index: Optional[int] = None
|
selected_index: Optional[int] = None
|
||||||
for idx, destination in enumerate(sorted(self.iter_destinations(), key=str), 1):
|
for idx, destination in enumerate(sorted(self.iter_destinations(), key=str), 1):
|
||||||
@ -117,7 +120,7 @@ class SquadronDestinationComboBox(QComboBox):
|
|||||||
def iter_destinations(self) -> Iterator[ControlPoint]:
|
def iter_destinations(self) -> Iterator[ControlPoint]:
|
||||||
size = self.squadron.expected_size_next_turn
|
size = self.squadron.expected_size_next_turn
|
||||||
for control_point in self.theater.control_points_for(self.squadron.player):
|
for control_point in self.theater.control_points_for(self.squadron.player):
|
||||||
if control_point == self:
|
if control_point == self.squadron.location:
|
||||||
continue
|
continue
|
||||||
if not control_point.can_operate(self.squadron.aircraft):
|
if not control_point.can_operate(self.squadron.aircraft):
|
||||||
continue
|
continue
|
||||||
@ -188,11 +191,25 @@ class SquadronDialog(QDialog):
|
|||||||
def squadron(self) -> Squadron:
|
def squadron(self) -> Squadron:
|
||||||
return self.squadron_model.squadron
|
return self.squadron_model.squadron
|
||||||
|
|
||||||
|
def _instant_relocate(self, destination: ControlPoint) -> None:
|
||||||
|
self.squadron.relocate_to(destination)
|
||||||
|
for _, f in self.squadron.flight_db.objects.items():
|
||||||
|
if f.squadron == self.squadron:
|
||||||
|
if isinstance(f.flight_plan, CustomFlightPlan):
|
||||||
|
for wpt in f.flight_plan.waypoints:
|
||||||
|
if wpt.waypoint_type == FlightWaypointType.LANDING_POINT:
|
||||||
|
wpt.control_point = destination
|
||||||
|
wpt.position = wpt.control_point.position
|
||||||
|
break
|
||||||
|
f.recreate_flight_plan()
|
||||||
|
|
||||||
def on_destination_changed(self, index: int) -> None:
|
def on_destination_changed(self, index: int) -> None:
|
||||||
with report_errors("Could not change squadron destination", self):
|
with report_errors("Could not change squadron destination", self):
|
||||||
destination = self.transfer_destination.itemData(index)
|
destination = self.transfer_destination.itemData(index)
|
||||||
if destination is None:
|
if destination is self.squadron.location:
|
||||||
self.squadron.cancel_relocation()
|
self.squadron.cancel_relocation()
|
||||||
|
elif self.ato_model.game.settings.enable_transfer_cheat:
|
||||||
|
self._instant_relocate(destination)
|
||||||
else:
|
else:
|
||||||
self.squadron.plan_relocation(destination)
|
self.squadron.plan_relocation(destination)
|
||||||
self.ato_model.replace_from_game(player=True)
|
self.ato_model.replace_from_game(player=True)
|
||||||
|
|||||||
@ -60,6 +60,10 @@ class CheatSettingsBox(QGroupBox):
|
|||||||
)
|
)
|
||||||
self.base_capture_cheat_checkbox.toggled.connect(apply_settings)
|
self.base_capture_cheat_checkbox.toggled.connect(apply_settings)
|
||||||
|
|
||||||
|
self.transfer_cheat_checkbox = QCheckBox()
|
||||||
|
self.transfer_cheat_checkbox.setChecked(game.settings.enable_transfer_cheat)
|
||||||
|
self.transfer_cheat_checkbox.toggled.connect(apply_settings)
|
||||||
|
|
||||||
self.red_ato = QLabeledWidget("Show Red ATO:", self.red_ato_checkbox)
|
self.red_ato = QLabeledWidget("Show Red ATO:", self.red_ato_checkbox)
|
||||||
self.main_layout.addLayout(self.red_ato)
|
self.main_layout.addLayout(self.red_ato)
|
||||||
self.frontline_cheat = QLabeledWidget(
|
self.frontline_cheat = QLabeledWidget(
|
||||||
@ -70,6 +74,10 @@ class CheatSettingsBox(QGroupBox):
|
|||||||
"Enable Base Capture Cheat:", self.base_capture_cheat_checkbox
|
"Enable Base Capture Cheat:", self.base_capture_cheat_checkbox
|
||||||
)
|
)
|
||||||
self.main_layout.addLayout(self.base_capture_cheat)
|
self.main_layout.addLayout(self.base_capture_cheat)
|
||||||
|
self.transfer_cheat = QLabeledWidget(
|
||||||
|
"Enable Instant Squadron Transfer Cheat:", self.transfer_cheat_checkbox
|
||||||
|
)
|
||||||
|
self.main_layout.addLayout(self.transfer_cheat)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def show_red_ato(self) -> bool:
|
def show_red_ato(self) -> bool:
|
||||||
@ -83,6 +91,10 @@ class CheatSettingsBox(QGroupBox):
|
|||||||
def show_base_capture_cheat(self) -> bool:
|
def show_base_capture_cheat(self) -> bool:
|
||||||
return self.base_capture_cheat_checkbox.isChecked()
|
return self.base_capture_cheat_checkbox.isChecked()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def show_transfer_cheat(self) -> bool:
|
||||||
|
return self.transfer_cheat_checkbox.isChecked()
|
||||||
|
|
||||||
|
|
||||||
class AutoSettingsLayout(QGridLayout):
|
class AutoSettingsLayout(QGridLayout):
|
||||||
def __init__(
|
def __init__(
|
||||||
@ -360,6 +372,9 @@ class QSettingsWindow(QDialog):
|
|||||||
self.game.settings.enable_base_capture_cheat = (
|
self.game.settings.enable_base_capture_cheat = (
|
||||||
self.cheat_options.show_base_capture_cheat
|
self.cheat_options.show_base_capture_cheat
|
||||||
)
|
)
|
||||||
|
self.game.settings.enable_transfer_cheat = (
|
||||||
|
self.cheat_options.show_transfer_cheat
|
||||||
|
)
|
||||||
|
|
||||||
events = GameUpdateEvents()
|
events = GameUpdateEvents()
|
||||||
self.game.compute_unculled_zones(events)
|
self.game.compute_unculled_zones(events)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user