diff --git a/changelog.md b/changelog.md index 065d2e63..f9bc5740 100644 --- a/changelog.md +++ b/changelog.md @@ -57,6 +57,7 @@ * **[Modding]** Support for Cowboy's E-7A Wedgetail mod (Supports EW Script Offensive Jamming) * **[Modding]** Support for szcz's MiG-31BM (v2.0) * **[Plugins]** Added initial AI support for EW Script 2.0 +* **[Options]** Ability to configure certain forced-options via a file (WIP: https://github.com/dcs-retribution/dcs-retribution/issues/490). ## Fixes * **[UI/UX]** A-10A flights can be edited again diff --git a/game/missiongenerator/forcedoptionsgenerator.py b/game/missiongenerator/forcedoptionsgenerator.py index 073703f4..5588f6b8 100644 --- a/game/missiongenerator/forcedoptionsgenerator.py +++ b/game/missiongenerator/forcedoptionsgenerator.py @@ -1,10 +1,13 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Any +import dcs.lua from dcs.forcedoptions import ForcedOptions from dcs.mission import Mission +from game.persistency import forced_options_path + if TYPE_CHECKING: from game.game import Game @@ -53,7 +56,15 @@ class ForcedOptionsGenerator: value = self.game.settings.supercarrier_deck_crew self.mission.forced_options.supercarrier_deck_crew = value + @staticmethod + def load_forced_options() -> dict[str, Any]: + with open(forced_options_path(), "r+", encoding="utf-8") as f: + content = f.read() + result = dcs.lua.loads(content).get("forcedOptions", {}) + return result + def generate(self) -> None: + self.mission.forced_options.load_from_dict(self.load_forced_options()) self._set_options_view() self._set_external_views() self._set_easy_communication() diff --git a/game/persistency.py b/game/persistency.py index c43aec18..b0876574 100644 --- a/game/persistency.py +++ b/game/persistency.py @@ -195,6 +195,10 @@ def settings_dir() -> Path: return _create_dir_if_needed(base_path() / "Retribution" / "Settings") +def forced_options_path() -> Path: + return _create_dir_if_needed(base_path() / "Retribution" / "forced_options.lua") + + def airwing_dir() -> Path: return _create_dir_if_needed(base_path() / "Retribution" / "AirWing")