From b2458ac24452d09f0c9aca2d6170cde883492c10 Mon Sep 17 00:00:00 2001 From: Vasyl Horbachenko Date: Sat, 30 Jun 2018 06:18:05 +0300 Subject: [PATCH] savefile corruption screen and escort RTB waypoints --- __init__.py | 58 ++++++++++++++++++++++------------------- game/db.py | 7 +++-- gen/aircraft.py | 3 +++ ui/corruptedsavemenu.py | 17 ++++++++++++ userdata/persistency.py | 3 +-- 5 files changed, 55 insertions(+), 33 deletions(-) create mode 100644 ui/corruptedsavemenu.py diff --git a/__init__.py b/__init__.py index ef534e58..9cec15f8 100755 --- a/__init__.py +++ b/__init__.py @@ -9,6 +9,7 @@ import theater.nevada import ui.window import ui.mainmenu import ui.newgamemenu +import ui.corruptedsavemenu from game.game import Game from theater import start_generator @@ -23,39 +24,42 @@ def proceed_to_main_menu(game: Game): w = ui.window.Window() -game = persistency.restore_game() -if not game: - new_game_menu = None # type: NewGameMenu +try: + game = persistency.restore_game() + if not game: + new_game_menu = None # type: NewGameMenu - def start_new_game(player_name: str, enemy_name: str, terrain: str, sams: bool, midgame: bool, multiplier: float): - if terrain == "persiangulf": - conflicttheater = theater.persiangulf.PersianGulfTheater() - elif terrain == "nevada": - conflicttheater = theater.nevada.NevadaTheater() - else: - conflicttheater = theater.caucasus.CaucasusTheater() + def start_new_game(player_name: str, enemy_name: str, terrain: str, sams: bool, midgame: bool, multiplier: float): + if terrain == "persiangulf": + conflicttheater = theater.persiangulf.PersianGulfTheater() + elif terrain == "nevada": + conflicttheater = theater.nevada.NevadaTheater() + else: + conflicttheater = theater.caucasus.CaucasusTheater() - if midgame: - for i in range(0, int(len(conflicttheater.controlpoints) / 2)): - conflicttheater.controlpoints[i].captured = True + if midgame: + for i in range(0, int(len(conflicttheater.controlpoints) / 2)): + conflicttheater.controlpoints[i].captured = True - start_generator.generate_initial(conflicttheater, enemy_name, sams, multiplier) - game = Game(player_name=player_name, - enemy_name=enemy_name, - theater=conflicttheater) - game.budget = int(game.budget * multiplier) - game.settings.multiplier = multiplier - game.settings.sams = sams + start_generator.generate_initial(conflicttheater, enemy_name, sams, multiplier) + game = Game(player_name=player_name, + enemy_name=enemy_name, + theater=conflicttheater) + game.budget = int(game.budget * multiplier) + game.settings.multiplier = multiplier + game.settings.sams = sams - if midgame: - game.budget = game.budget * 4 * len(list(conflicttheater.conflicts())) + if midgame: + game.budget = game.budget * 4 * len(list(conflicttheater.conflicts())) + proceed_to_main_menu(game) + + new_game_menu = ui.newgamemenu.NewGameMenu(w, start_new_game) + new_game_menu.display() + else: proceed_to_main_menu(game) - - new_game_menu = ui.newgamemenu.NewGameMenu(w, start_new_game) - new_game_menu.display() -else: - proceed_to_main_menu(game) +except Exception as e: + ui.corruptedsavemenu.CorruptedSaveMenu(w).display() w.run() diff --git a/game/db.py b/game/db.py index c24058fe..77e03707 100644 --- a/game/db.py +++ b/game/db.py @@ -31,7 +31,8 @@ For example, player accessible Hornet is called `FA_18C_hornet`, and MANPAD Igla """ Prices for the aircraft. -This defines both price for the player and prioritization for the enemy (i.e. less important bases will receive units with lower price) +This defines both price for the player (although only aircraft listed in CAP/CAS/Transport/Armor/AirDefense roles will be purchasable) +and prioritization for the enemy (i.e. less important bases will receive units with lower price) """ PRICES = { # fighter @@ -164,15 +165,13 @@ UNIT_BY_TASK = { PinpointStrike: [Armor.MBT_T_90, Armor.MBT_T_80U, Armor.MBT_T_55, Armor.MBT_M1A2_Abrams, Armor.MBT_M60A3_Patton, Armor.ATGM_M1134_Stryker, Armor.APC_BTR_80, ], AirDefence: [ - AirDefence.AAA_Vulcan_M163, + # those are listed multiple times here to balance prioritization more into lower tier AAs AirDefence.AAA_Vulcan_M163, AirDefence.AAA_Vulcan_M163, AirDefence.SAM_Avenger_M1097, AirDefence.SAM_Avenger_M1097, AirDefence.SAM_Patriot_ICC, - AirDefence.AAA_ZU_23_on_Ural_375, - AirDefence.AAA_ZU_23_on_Ural_375, AirDefence.AAA_ZU_23_on_Ural_375, AirDefence.AAA_ZU_23_on_Ural_375, AirDefence.SAM_SA_18_Igla_MANPADS, diff --git a/gen/aircraft.py b/gen/aircraft.py index 8f60d48a..e9775359 100644 --- a/gen/aircraft.py +++ b/gen/aircraft.py @@ -190,6 +190,9 @@ class AircraftConflictGenerator: for group in self.escort_targets: wayp.tasks.append(EscortTaskAction(group.id, engagement_max_dist=ESCORT_ENGAGEMENT_MAX_DIST)) + group.add_waypoint(self.conflict.from_cp.position, RTB_ALTITUDE) + group.land_at(self.conflict.from_cp.at) + groups.append(group) return groups diff --git a/ui/corruptedsavemenu.py b/ui/corruptedsavemenu.py new file mode 100644 index 00000000..04a85fa0 --- /dev/null +++ b/ui/corruptedsavemenu.py @@ -0,0 +1,17 @@ +from tkinter import * +from tkinter.ttk import * + +from ui.window import * + + +class CorruptedSaveMenu(Menu): + def __init__(self, window: Window): + super(CorruptedSaveMenu, self).__init__(window, None, None) + self.frame = window.right_pane + + def display(self): + self.window.clear_right_pane() + + Label(text="Your save game was corrupted!").grid(row=0, column=0) + Label(text="Please restore it by replacing \"liberation_save\" file with \"liberation_save_tmp\" to restore last saved copy.").grid(row=1, column=0) + Label(text="You can find those files under user DCS directory.").grid(row=2, column=0) diff --git a/userdata/persistency.py b/userdata/persistency.py index 85096cda..faca1396 100644 --- a/userdata/persistency.py +++ b/userdata/persistency.py @@ -28,8 +28,7 @@ def restore_game(): with open(_save_file(), "rb") as f: return pickle.load(f) except Exception as e: - print(e) - return None + raise e def save_game(game) -> bool: