diff --git a/src/bot.py b/src/bot.py index d59b377..ca22849 100644 --- a/src/bot.py +++ b/src/bot.py @@ -26,8 +26,9 @@ import random class Bot: - def __init__(self, screen: Screen): + def __init__(self, screen: Screen, pick_corpose_on_start: bool = False): self._screen = screen + self._pick_corpose_on_start = pick_corpose_on_start self._config = Config() self._game_stats = GameStats() self._game_recovery = GameRecovery(self._screen) @@ -137,7 +138,8 @@ class Bot: self.trigger_or_stop("maintenance") def on_maintenance(self): - if self._death_manager.died() or self._health_manager.did_chicken(): + if self._pick_corpose_on_start or self._death_manager.died() or self._health_manager.did_chicken(): + self._pick_corpose_on_start = False time.sleep(0.6) # Also do this for did_chicken because we can not be 100% sure that chicken did not press esc before # the death manager could determine if we were dead @@ -339,6 +341,7 @@ class Bot: def on_end_game(self): self._pre_buffed = 0 + self._death_manager.handle_death_screen() if self._health_manager.did_chicken() or self._death_manager.died(): Logger.info("End game while chicken or death happened. Running game recovery to get back to hero selection.") time.sleep(1.5) @@ -359,6 +362,7 @@ class Bot: def on_end_run(self): success = self._char.tp_town() self._tps_left -= 1 + success &= not self._death_manager.handle_death_screen() if success: success, _= self._template_finder.search_and_wait(["A5_TOWN_1", "A5_TOWN_0"], time_out=10) if success: diff --git a/src/run.py b/src/run.py index 553538f..4394264 100644 --- a/src/run.py +++ b/src/run.py @@ -17,10 +17,8 @@ import cv2 import traceback -def run_bot(config: Config): - screen = Screen(config.general["monitor"]) - game_recovery = GameRecovery(screen) - bot = Bot(screen) +def run_bot(config: Config, screen: Screen, game_recovery: GameRecovery, pick_corpose_on_start: bool = False): + bot = Bot(screen, pick_corpose_on_start) bot_thread = threading.Thread(target=bot.start) bot_thread.start() do_restart = False @@ -29,6 +27,8 @@ def run_bot(config: Config): while 1: if bot.current_game_length() > config.general["max_game_length_s"]: Logger.info(f"Max game length reached. Attempting to restart {config.general['name']}!") + if config.general["info_screenshots"]: + cv2.imwrite("./info_screenshots/info_max_game_length_reached_" + time.strftime("%Y%m%d_%H%M%S") + ".png", bot._screen.grab()) bot.stop() kill_thread(bot_thread) do_restart = game_recovery.go_to_hero_selection() @@ -36,7 +36,7 @@ def run_bot(config: Config): time.sleep(0.5) bot_thread.join() if do_restart: - run_bot(config) + run_bot(config, screen, game_recovery, True) else: if config.general["info_screenshots"]: cv2.imwrite("./info_screenshots/info_could_not_recover_" + time.strftime("%Y%m%d_%H%M%S") + ".png", bot._screen.grab()) @@ -76,7 +76,9 @@ def main(): while 1: if keyboard.is_pressed(config.general['resume_key']): - run_bot(config) + screen = Screen(config.general["monitor"]) + game_recovery = GameRecovery(screen) + run_bot(config, screen, game_recovery) break if keyboard.is_pressed(config.general['auto_settings_key']): adjust_settings()