diff --git a/config/params.ini b/config/params.ini index 5a90fcd..a558379 100644 --- a/config/params.ini +++ b/config/params.ini @@ -5,6 +5,8 @@ message_api_type=discord custom_message_hook= max_game_length_s=380 max_consecutive_fails=0 +max_runtime_before_break_m=0 +break_length_m=0 randomize_runs=0 difficulty=hell info_screenshots=1 @@ -17,6 +19,7 @@ d2r_path=C:\Program Files (x86)\Diablo II Resurrected\D2R.exe ; the online/offline tab and upon restart will attempt to find the same template to select the char restart_d2r_when_stuck=0 + [routes] run_trav=0 run_pindle=1 diff --git a/src/bot.py b/src/bot.py index c8d83df..c4a12de 100644 --- a/src/bot.py +++ b/src/bot.py @@ -10,6 +10,7 @@ from typing import Union from collections import OrderedDict from health_manager import set_pause_state from transmute import Transmute +from utils.misc import wait, hms from game_stats import GameStats from logger import Logger @@ -118,6 +119,7 @@ class Bot: self._current_threads = [] self._ran_no_pickup = False self._previous_run_failed = False + self._timer = time.time() # Create State Machine self._states=['initialization','hero_selection', 'town', 'pindle', 'shenk', 'trav', 'nihlathak', 'arcane', 'diablo'] @@ -405,6 +407,28 @@ class Bot: view.save_and_exit() set_pause_state(True) self._game_stats.log_end_game(failed=failed) + + if Config().general["max_runtime_before_break_m"] and Config().general["break_length_m"]: + elapsed_time = time.time() - self._timer + Logger.info(f'Session length = {elapsed_time} s, max_runtime_before_break_m {Config().general["max_runtime_before_break_m"]*60} s.') + + if elapsed_time > (Config().general["max_runtime_before_break_m"]*60): + Logger.info(f'Max session length reached, taking a break for {Config().general["break_length_m"]} minutes.') + self._messenger.send_message(f'Ran for {hms(elapsed_time)}, taking a break for {Config().general["break_length_m"]} minutes.') + if not self._pausing: + self.toggle_pause() + + wait(Config().general["break_length_m"]*60) + + break_msg = f'Break over, now running for {Config().general["max_runtime_before_break_m"]} more minutes.' + Logger.info(break_msg) + self._messenger.send_message(break_msg) + if self._pausing: + self.toggle_pause() + + self._timer = time.time() + + self._do_runs = copy(self._do_runs_reset) if Config().general["randomize_runs"]: self.shuffle_runs() diff --git a/src/config.py b/src/config.py index da67307..efe3288 100644 --- a/src/config.py +++ b/src/config.py @@ -212,6 +212,8 @@ class Config: "name": self._select_val("general", "name"), "max_game_length_s": float(self._select_val("general", "max_game_length_s")), "max_consecutive_fails": int(self._select_val("general", "max_consecutive_fails")), + "max_runtime_before_break_m": float(_default_iff(self._select_val("general", "max_runtime_before_break_m"), '', 0)), + "break_length_m": float(_default_iff(self._select_val("general", "break_length_m"), '', 0)), "randomize_runs": bool(int(self._select_val("general", "randomize_runs"))), "difficulty": self._select_val("general", "difficulty"), "message_api_type": self._select_val("general", "message_api_type"),