Feature: Runtime breaks (#665)

* New params for runtime and break time

* New params to manage session length and break time

* Starting message

* Message adjustments

* use _default_iff in config

Co-authored-by: mgleed <aliigleed16@gmail.com>
This commit is contained in:
egut125
2022-03-28 17:55:15 -04:00
committed by GitHub
parent 2079b81df4
commit c4a5c6fe34
3 changed files with 29 additions and 0 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -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"),