mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
191 lines
6.1 KiB
Python
191 lines
6.1 KiB
Python
import json
|
|
import logging
|
|
import os
|
|
from pathlib import Path
|
|
from shutil import copyfile
|
|
|
|
import dcs
|
|
|
|
from game import persistency
|
|
|
|
global __dcs_saved_game_directory
|
|
global __dcs_installation_directory
|
|
global __last_save_file
|
|
global __prefer_liberation_payloads
|
|
global __server_port
|
|
|
|
|
|
USER_PATH = Path(os.environ["LOCALAPPDATA"]) / "DCSRetribution"
|
|
|
|
PREFERENCES_PATH = USER_PATH / "retribution_preferences.json"
|
|
|
|
|
|
def init():
|
|
global __dcs_saved_game_directory
|
|
global __dcs_installation_directory
|
|
global __last_save_file
|
|
global __ignore_empty_install_directory
|
|
global __prefer_liberation_payloads
|
|
global __server_port
|
|
|
|
if PREFERENCES_PATH.exists():
|
|
try:
|
|
logging.debug("Loading Retribution preferences from %s", PREFERENCES_PATH)
|
|
with PREFERENCES_PATH.open() as prefs:
|
|
pref_data = json.load(prefs)
|
|
__dcs_saved_game_directory = pref_data["saved_game_dir"]
|
|
__dcs_installation_directory = pref_data["dcs_install_dir"]
|
|
__last_save_file = pref_data.get("last_save_file", "")
|
|
__ignore_empty_install_directory = pref_data.get(
|
|
"ignore_empty_install_directory", False
|
|
)
|
|
__prefer_liberation_payloads = pref_data.get(
|
|
"prefer_liberation_payloads", False
|
|
)
|
|
__server_port = pref_data.get("server_port", 16880)
|
|
is_first_start = False
|
|
except (KeyError, json.JSONDecodeError):
|
|
__dcs_saved_game_directory = ""
|
|
__dcs_installation_directory = ""
|
|
__last_save_file = ""
|
|
__ignore_empty_install_directory = False
|
|
__prefer_liberation_payloads = False
|
|
__server_port = 16880
|
|
is_first_start = True
|
|
else:
|
|
__last_save_file = ""
|
|
__ignore_empty_install_directory = False
|
|
__prefer_liberation_payloads = False
|
|
__server_port = 16880
|
|
try:
|
|
__dcs_saved_game_directory = (
|
|
dcs.installation.get_dcs_saved_games_directory()
|
|
)
|
|
if os.path.exists(__dcs_saved_game_directory + ".openbeta"):
|
|
__dcs_saved_game_directory = (
|
|
dcs.installation.get_dcs_saved_games_directory() + ".openbeta"
|
|
)
|
|
except:
|
|
__dcs_saved_game_directory = ""
|
|
try:
|
|
__dcs_installation_directory = dcs.installation.get_dcs_install_directory()
|
|
except:
|
|
__dcs_installation_directory = ""
|
|
|
|
is_first_start = True
|
|
persistency.setup(
|
|
__dcs_saved_game_directory, __prefer_liberation_payloads, __server_port
|
|
)
|
|
return is_first_start
|
|
|
|
|
|
def setup(saved_game_dir, install_dir, prefer_liberation_payloads, port):
|
|
global __dcs_saved_game_directory
|
|
global __dcs_installation_directory
|
|
global __prefer_liberation_payloads
|
|
global __server_port
|
|
__dcs_saved_game_directory = saved_game_dir
|
|
__dcs_installation_directory = install_dir
|
|
__prefer_liberation_payloads = prefer_liberation_payloads
|
|
__server_port = port
|
|
persistency.setup(saved_game_dir, prefer_liberation_payloads, port)
|
|
|
|
|
|
def setup_last_save_file(last_save_file):
|
|
global __last_save_file
|
|
__last_save_file = last_save_file
|
|
|
|
|
|
def save_config():
|
|
global __dcs_saved_game_directory
|
|
global __dcs_installation_directory
|
|
global __last_save_file
|
|
global __ignore_empty_install_directory
|
|
global __server_port
|
|
pref_data = {
|
|
"saved_game_dir": __dcs_saved_game_directory,
|
|
"dcs_install_dir": __dcs_installation_directory,
|
|
"last_save_file": __last_save_file,
|
|
"ignore_empty_install_directory": __ignore_empty_install_directory,
|
|
"prefer_liberation_payloads": __prefer_liberation_payloads,
|
|
"server_port": __server_port,
|
|
}
|
|
PREFERENCES_PATH.parent.mkdir(exist_ok=True, parents=True)
|
|
with PREFERENCES_PATH.open("w") as prefs:
|
|
json.dump(pref_data, prefs, indent=" ")
|
|
|
|
|
|
def get_dcs_install_directory():
|
|
global __dcs_installation_directory
|
|
return __dcs_installation_directory
|
|
|
|
|
|
def get_saved_game_dir():
|
|
global __dcs_saved_game_directory
|
|
return __dcs_saved_game_directory
|
|
|
|
|
|
def prefer_liberation_payloads():
|
|
global __prefer_liberation_payloads
|
|
return __prefer_liberation_payloads
|
|
|
|
|
|
def server_port():
|
|
global __server_port
|
|
return __server_port
|
|
|
|
|
|
def ignore_empty_install_directory():
|
|
global __ignore_empty_install_directory
|
|
return __ignore_empty_install_directory
|
|
|
|
|
|
def set_ignore_empty_install_directory(value: bool):
|
|
global __ignore_empty_install_directory
|
|
__ignore_empty_install_directory = value
|
|
|
|
|
|
def get_last_save_file():
|
|
global __last_save_file
|
|
print(__last_save_file)
|
|
if os.path.exists(__last_save_file):
|
|
return __last_save_file
|
|
else:
|
|
return None
|
|
|
|
|
|
def replace_mission_scripting_file():
|
|
install_dir = get_dcs_install_directory()
|
|
mission_scripting_path = os.path.join(
|
|
install_dir, "Scripts", "MissionScripting.lua"
|
|
)
|
|
liberation_scripting_path = "./resources/scripts/MissionScripting.lua"
|
|
backup_scripting_path = "./resources/scripts/MissionScripting.original.lua"
|
|
if install_dir != "" and os.path.isfile(mission_scripting_path):
|
|
with open(mission_scripting_path, "r") as ms:
|
|
current_file_content = ms.read()
|
|
with open(liberation_scripting_path, "r") as libe_ms:
|
|
liberation_file_content = libe_ms.read()
|
|
|
|
# Save original file
|
|
if current_file_content != liberation_file_content:
|
|
copyfile(mission_scripting_path, backup_scripting_path)
|
|
|
|
# Replace DCS file
|
|
copyfile(liberation_scripting_path, mission_scripting_path)
|
|
|
|
|
|
def restore_original_mission_scripting():
|
|
install_dir = get_dcs_install_directory()
|
|
mission_scripting_path = os.path.join(
|
|
install_dir, "Scripts", "MissionScripting.lua"
|
|
)
|
|
backup_scripting_path = "./resources/scripts/MissionScripting.original.lua"
|
|
|
|
if (
|
|
install_dir != ""
|
|
and os.path.isfile(backup_scripting_path)
|
|
and os.path.isfile(mission_scripting_path)
|
|
):
|
|
copyfile(backup_scripting_path, mission_scripting_path)
|