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:
+6
-2
@@ -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
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user