mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
This seems like it works better for the number of missions we usually frag, plus the fact that players will almost always choose an ASAP package.
89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
from dataclasses import dataclass, field
|
|
from datetime import timedelta
|
|
from typing import Dict, Optional
|
|
|
|
from dcs.forcedoptions import ForcedOptions
|
|
|
|
|
|
@dataclass
|
|
class Settings:
|
|
|
|
# Difficulty settings
|
|
player_skill: str = "Good"
|
|
enemy_skill: str = "Average"
|
|
enemy_vehicle_skill: str = "Average"
|
|
map_coalition_visibility: ForcedOptions.Views = ForcedOptions.Views.All
|
|
labels: str = "Full"
|
|
only_player_takeoff: bool = True # Legacy parameter do not use
|
|
night_disabled: bool = False
|
|
external_views_allowed: bool = True
|
|
supercarrier: bool = False
|
|
generate_marks: bool = True
|
|
manpads: bool = True
|
|
version: Optional[str] = None
|
|
player_income_multiplier: float = 1.0
|
|
enemy_income_multiplier: float = 1.0
|
|
|
|
default_start_type: str = "Cold"
|
|
|
|
# Mission specific
|
|
desired_player_mission_duration: timedelta = timedelta(minutes=60)
|
|
|
|
# Campaign management
|
|
automate_runway_repair: bool = False
|
|
automate_front_line_reinforcements: bool = False
|
|
automate_aircraft_reinforcements: bool = False
|
|
restrict_weapons_by_date: bool = False
|
|
disable_legacy_aewc: bool = False
|
|
generate_dark_kneeboard: bool = False
|
|
|
|
# Performance oriented
|
|
perf_red_alert_state: bool = True
|
|
perf_smoke_gen: bool = True
|
|
perf_smoke_spacing = 1600
|
|
perf_artillery: bool = True
|
|
perf_moving_units: bool = True
|
|
perf_infantry: bool = True
|
|
perf_destroyed_units: bool = True
|
|
|
|
# Performance culling
|
|
perf_culling: bool = False
|
|
perf_culling_distance: int = 100
|
|
perf_do_not_cull_carrier = True
|
|
|
|
# LUA Plugins system
|
|
plugins: Dict[str, bool] = field(default_factory=dict)
|
|
|
|
# Cheating
|
|
show_red_ato: bool = False
|
|
enable_frontline_cheats: bool = False
|
|
enable_base_capture_cheat: bool = False
|
|
|
|
never_delay_player_flights: bool = False
|
|
|
|
@staticmethod
|
|
def plugin_settings_key(identifier: str) -> str:
|
|
return f"plugins.{identifier}"
|
|
|
|
def initialize_plugin_option(self, identifier: str, default_value: bool) -> None:
|
|
try:
|
|
self.plugin_option(identifier)
|
|
except KeyError:
|
|
self.set_plugin_option(identifier, default_value)
|
|
|
|
def plugin_option(self, identifier: str) -> bool:
|
|
return self.plugins[self.plugin_settings_key(identifier)]
|
|
|
|
def set_plugin_option(self, identifier: str, enabled: bool) -> None:
|
|
self.plugins[self.plugin_settings_key(identifier)] = enabled
|
|
|
|
def __setstate__(self, state) -> None:
|
|
# __setstate__ is called with the dict of the object being unpickled. We
|
|
# can provide save compatibility for new settings options (which
|
|
# normally would not be present in the unpickled object) by creating a
|
|
# new settings object, updating it with the unpickled state, and
|
|
# updating our dict with that.
|
|
new_state = Settings().__dict__
|
|
new_state.update(state)
|
|
self.__dict__.update(new_state)
|