Check corpse after game recovery (#137)

* Check corpse after game recovery

* add some death manager handling

* actually end game on death deteciton at end of run
This commit is contained in:
aeon0
2021-11-28 15:04:33 +01:00
committed by GitHub
parent df7ef97575
commit 6fbbdb46dc
2 changed files with 14 additions and 8 deletions
+6 -2
View File
@@ -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:
+8 -6
View File
@@ -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()