diff --git a/src/bot.py b/src/bot.py index 7228123..8306a7a 100644 --- a/src/bot.py +++ b/src/bot.py @@ -116,18 +116,17 @@ class Bot: # Adapt order to the config self._do_runs = OrderedDict((k, self._do_runs[k]) for k in Config().routes_order if k in self._do_runs and self._do_runs[k]) - runs = list(self._do_runs.keys()) self._do_runs_reset = copy(self._do_runs) Logger.info(f"Doing runs: {self._do_runs_reset.keys()}") if Config().general["randomize_runs"]: self.shuffle_runs() - self._pindle = Pindle(self._pather, self._town_manager, self._char, self._pickit, runs) - self._shenk = ShenkEld(self._pather, self._town_manager, self._char, self._pickit, runs) - self._trav = Trav(self._pather, self._town_manager, self._char, self._pickit, runs) - self._nihlathak = Nihlathak(self._pather, self._town_manager, self._char, self._pickit, runs) - self._arcane = Arcane(self._pather, self._town_manager, self._char, self._pickit, runs) - self._diablo = Diablo(self._pather, self._town_manager, self._char, self._pickit, runs) - self._vizier = Vizier(self._pather, self._town_manager, self._char, self._pickit, runs) + self._pindle = Pindle(self._pather, self._town_manager, self._char, self._pickit, self._do_runs) + self._shenk = ShenkEld(self._pather, self._town_manager, self._char, self._pickit, self._do_runs) + self._trav = Trav(self._pather, self._town_manager, self._char, self._pickit, self._do_runs) + self._nihlathak = Nihlathak(self._pather, self._town_manager, self._char, self._pickit, self._do_runs) + self._arcane = Arcane(self._pather, self._town_manager, self._char, self._pickit, self._do_runs) + self._diablo = Diablo(self._pather, self._town_manager, self._char, self._pickit, self._do_runs) + self._vizier = Vizier(self._pather, self._town_manager, self._char, self._pickit, self._do_runs) # Create member variables self._picked_up_items = False @@ -216,7 +215,10 @@ class Bot: def shuffle_runs(self): tmp = list(self._do_runs.items()) random.shuffle(tmp) - self._do_runs = OrderedDict(tmp) + #We clear() and update() to avoid assignment on _do_runs as this list is referenced + #by other classes and we want updates persisted everywhere. + self._do_runs.clear() + self._do_runs.update(OrderedDict(tmp)) def is_last_run(self): found_unfinished_run = False @@ -484,8 +486,10 @@ class Bot: self._timer = time.time() - - self._do_runs = copy(self._do_runs_reset) + #We clear() and update() to avoid assignment on _do_runs as this list is referenced + #by other classes and we want updates persisted everywhere. + self._do_runs.clear() + self._do_runs.update(self._do_runs_reset) if Config().general["randomize_runs"]: self.shuffle_runs() self.trigger_or_stop("init") diff --git a/src/run/arcane.py b/src/run/arcane.py index fd2634e..7364dd4 100644 --- a/src/run/arcane.py +++ b/src/run/arcane.py @@ -10,6 +10,7 @@ from dataclasses import dataclass from chest import Chest from ui import waypoint from health_manager import set_pause_state +from collections import OrderedDict class Arcane: @@ -21,7 +22,7 @@ class Arcane: town_manager: TownManager, char: IChar, pickit: PickIt, - runs: list[str] + runs: OrderedDict ): self._pather = pather self._town_manager = town_manager diff --git a/src/run/diablo.py b/src/run/diablo.py index 2488fb9..42410b3 100644 --- a/src/run/diablo.py +++ b/src/run/diablo.py @@ -13,6 +13,7 @@ from screen import convert_abs_to_monitor, grab from ui_manager import detect_screen_object, ScreenObjects from ui import skills, loading, waypoint from inventory import belt, personal +from collections import OrderedDict class Diablo: @@ -24,7 +25,7 @@ class Diablo: town_manager: TownManager, char: IChar, pickit: PickIt, - runs: list[str] + runs: OrderedDict ): self._pather = pather self._town_manager = town_manager diff --git a/src/run/nihlathak.py b/src/run/nihlathak.py index 1347a6a..37c262a 100644 --- a/src/run/nihlathak.py +++ b/src/run/nihlathak.py @@ -10,6 +10,7 @@ from screen import convert_abs_to_monitor import random from ui import loading, waypoint +from collections import OrderedDict class Nihlathak: @@ -21,7 +22,7 @@ class Nihlathak: town_manager: TownManager, char: IChar, pickit: PickIt, - runs: list[str] + runs: OrderedDict ): self._pather = pather self._town_manager = town_manager diff --git a/src/run/pindle.py b/src/run/pindle.py index e946a46..47368c4 100644 --- a/src/run/pindle.py +++ b/src/run/pindle.py @@ -6,6 +6,7 @@ import template_finder from town.town_manager import TownManager from utils.misc import wait from ui import loading +from collections import OrderedDict class Pindle: @@ -17,7 +18,7 @@ class Pindle: town_manager: TownManager, char: IChar, pickit: PickIt, - runs: list[str] + runs: OrderedDict ): self._pather = pather self._town_manager = town_manager diff --git a/src/run/shenk_eld.py b/src/run/shenk_eld.py index 6946339..116e0ab 100644 --- a/src/run/shenk_eld.py +++ b/src/run/shenk_eld.py @@ -6,6 +6,7 @@ import template_finder from town.town_manager import TownManager from utils.misc import wait from ui import waypoint +from collections import OrderedDict class ShenkEld: @@ -17,7 +18,7 @@ class ShenkEld: town_manager: TownManager, char: IChar, pickit: PickIt, - runs: list[str] + runs: OrderedDict ): self._pather = pather self._town_manager = town_manager diff --git a/src/run/trav.py b/src/run/trav.py index 9616d6e..b71d5e1 100644 --- a/src/run/trav.py +++ b/src/run/trav.py @@ -7,6 +7,7 @@ from town.town_manager import TownManager from utils.misc import wait from ui import waypoint +from collections import OrderedDict class Trav: @@ -18,7 +19,7 @@ class Trav: town_manager: TownManager, char: IChar, pickit: PickIt, - runs: list[str] + runs: OrderedDict ): self._pather = pather self._town_manager = town_manager @@ -57,4 +58,8 @@ class Trav: if not self._pather.traverse_nodes([229], self._char, timeout=2.5, use_tp_charge=self._char.capabilities.can_teleport_natively): self._pather.traverse_nodes([228, 229], self._char, timeout=2.5, use_tp_charge=True) picked_up_items |= self._pickit.pick_up_items(self._char) + # If travincal run is not the last run + if self.name != next(reversed(self._runs)): + # Make sure we go back to the center to not hide the tp + self._pather.traverse_nodes([230], self._char, timeout=2.5) return (Location.A3_TRAV_CENTER_STAIRS, picked_up_items)