diff --git a/assets/templates/a4_town/a4_town_0.png b/assets/templates/a4_town/a4_town_0.png new file mode 100644 index 0000000..b500801 Binary files /dev/null and b/assets/templates/a4_town/a4_town_0.png differ diff --git a/assets/templates/a4_town/a4_town_1.png b/assets/templates/a4_town/a4_town_1.png new file mode 100644 index 0000000..fa848f8 Binary files /dev/null and b/assets/templates/a4_town/a4_town_1.png differ diff --git a/assets/templates/a4_town/a4_town_2.png b/assets/templates/a4_town/a4_town_2.png new file mode 100644 index 0000000..f7a9090 Binary files /dev/null and b/assets/templates/a4_town/a4_town_2.png differ diff --git a/assets/templates/a4_town/a4_town_3.png b/assets/templates/a4_town/a4_town_3.png new file mode 100644 index 0000000..327d30f Binary files /dev/null and b/assets/templates/a4_town/a4_town_3.png differ diff --git a/assets/templates/a4_town/a4_town_4.png b/assets/templates/a4_town/a4_town_4.png new file mode 100644 index 0000000..562e478 Binary files /dev/null and b/assets/templates/a4_town/a4_town_4.png differ diff --git a/assets/templates/a4_town/a4_town_5.png b/assets/templates/a4_town/a4_town_5.png new file mode 100644 index 0000000..640d583 Binary files /dev/null and b/assets/templates/a4_town/a4_town_5.png differ diff --git a/assets/templates/a4_town/a4_town_6.png b/assets/templates/a4_town/a4_town_6.png new file mode 100644 index 0000000..91b4145 Binary files /dev/null and b/assets/templates/a4_town/a4_town_6.png differ diff --git a/assets/templates/a4_town/a4_town_7.png b/assets/templates/a4_town/a4_town_7.png new file mode 100644 index 0000000..aa4dd27 Binary files /dev/null and b/assets/templates/a4_town/a4_town_7.png differ diff --git a/assets/templates/a4_town/a4_town_8.png b/assets/templates/a4_town/a4_town_8.png new file mode 100644 index 0000000..a6bca8b Binary files /dev/null and b/assets/templates/a4_town/a4_town_8.png differ diff --git a/src/bot.py b/src/bot.py index 6f30108..e3b4107 100644 --- a/src/bot.py +++ b/src/bot.py @@ -162,10 +162,10 @@ class Bot: # TODO: If tp is up we always go back into the portal... if not self._tp_is_up and (HealthManager.get_health(self._config, img) < 0.6 or HealthManager.get_mana(self._config, img) < 0.3): Logger.info("Need some healing first. Going to Malah.") - if not self._pather.traverse_nodes(self._curr_location, Location.MALAH, self._char): + if not self._pather.traverse_nodes(self._curr_location, Location.A5_MALAH, self._char): self.trigger_or_stop("end_game") return - self._curr_location = Location.MALAH + self._curr_location = Location.A5_MALAH self._npc_manager.open_npc_menu(Npc.MALAH) if not self._pather.traverse_nodes(self._curr_location, Location.A5_TOWN_START, self._char): self.trigger_or_stop("end_game") @@ -193,10 +193,10 @@ class Bot: if self._tps_left < 3 or (self._config.char["tp"] and not self._ui_manager.has_tps()): Logger.info("Repairing and buying TPs at Larzuk.") - if not self._pather.traverse_nodes(self._curr_location, Location.LARZUK, self._char): + if not self._pather.traverse_nodes(self._curr_location, Location.A5_LARZUK, self._char): self.trigger_or_stop("end_game") return - self._curr_location = Location.LARZUK + self._curr_location = Location.A5_LARZUK self._npc_manager.open_npc_menu(Npc.LARZUK) self._npc_manager.press_npc_btn(Npc.LARZUK, "trade_repair") if self._ui_manager.repair_and_fill_up_tp(): @@ -209,10 +209,10 @@ class Bot: merc_alive = self._template_finder.search("MERC", self._screen.grab(), threshold=0.9, roi=[0, 0, 200, 200]).valid if not merc_alive: Logger.info("Reviving merc.") - if not self._pather.traverse_nodes(self._curr_location, Location.QUAL_KEHK, self._char): + if not self._pather.traverse_nodes(self._curr_location, Location.A5_QUAL_KEHK, self._char): self.trigger_or_stop("end_game") return - self._curr_location = Location.QUAL_KEHK + self._curr_location = Location.A5_QUAL_KEHK if self._npc_manager.open_npc_menu(Npc.QUAL_KEHK): self._npc_manager.press_npc_btn(Npc.QUAL_KEHK, "resurrect") time.sleep(1.2) @@ -230,8 +230,8 @@ class Bot: def on_run_pindle(self): def do_it() -> bool: Logger.info("Run Pindle") - if not self._pather.traverse_nodes(self._curr_location, Location.NIHLATHAK_PORTAL, self._char): return False - self._curr_location = Location.NIHLATHAK_PORTAL + if not self._pather.traverse_nodes(self._curr_location, Location.A5_NIHLATHAK_PORTAL, self._char): return False + self._curr_location = Location.A5_NIHLATHAK_PORTAL wait(0.3, 0.4) # otherwise will often missclick because still moving found_loading_screen_func = lambda: self._ui_manager.wait_for_loading_screen(2.0) if not self._char.select_by_template(["A5_RED_PORTAL", "A5_RED_PORTAL_TEXT"], found_loading_screen_func): return False diff --git a/src/pather.py b/src/pather.py index cb2ede2..559cdb2 100644 --- a/src/pather.py +++ b/src/pather.py @@ -20,10 +20,10 @@ class Location: A5_TOWN_START = "a5_town_start" A5_STASH = "a5_stash" A5_WP = "a5_wp" - QUAL_KEHK = "qual_kehk" - MALAH = "malah" - NIHLATHAK_PORTAL = "nihlathak_portal" - LARZUK = "larzuk" + A5_QUAL_KEHK = "qual_kehk" + A5_MALAH = "malah" + A5_NIHLATHAK_PORTAL = "nihlathak_portal" + A5_LARZUK = "larzuk" # Pindle PINDLE_START = "pindle_start" PINDLE_SAVE_DIST = "pindle_save_dist" @@ -36,6 +36,10 @@ class Location: SHENK_START = "shenk_start" SHENK_SAVE_DIST = "shenk_save_dist" SHENK_END = "shenk_end" + # A4 Town + A4_WP = "a4_town_wp" + A4_TYRAEL_STASH = "a4_tyrael_stash" + A4_VENDOR = "a4_vendor" # A3 Town A3_TOWN_START = "a3_town_start" A3_ORMUS = "a3_ormus" @@ -97,7 +101,13 @@ class Pather: 147: {'SHENK_16': (317, -18), 'SHENK_9': (-67, 139), 'SHENK_10': (-431, 67)}, 148: {'SHENK_16': (682, 103), 'SHENK_9': (301, 263), 'SHENK_10': (-65, 188), 'SHENK_11': (-306, 139)}, 149: {'SHENK_11': (261, 395), 'SHENK_10': (495, 421), 'SHENK_13': (393, -9)}, - # A3 twon + # A4 town + 160: {"A4_TOWN_4": (-100, -133), "A4_TOWN_3": (-117, 238), "A4_TOWN_0": (-364, 151), "A4_TOWN_6": (24, -425), "A4_TOWN_5": (-347, -277)}, + 161: {"A4_TOWN_3": (-289, 156), "A4_TOWN_4": (-272, -215), "A4_TOWN_2": (385, -92), "A4_TOWN_6": (-148, -507), "A4_TOWN_0": (-536, 69)}, + 162: {"A4_TOWN_4": (74, 66), "A4_TOWN_5": (-173, -78), "A4_TOWN_6": (198, -226), "A4_TOWN_0": (-190, 350), "A4_TOWN_7": (-101, -455)}, + 163: {"A4_TOWN_5": (-92, 143), "A4_TOWN_7": (-19, -233), "A4_TOWN_6": (280, -4), "A4_TOWN_4": (156, 288), "A4_TOWN_8": (-598, 5)}, + 164: {"A4_TOWN_7": (235, 39), "A4_TOWN_8": (-344, 277), "A4_TOWN_5": (163, 415), "A4_TOWN_6": (534, 268), "A4_TOWN_4": (409, 559)}, + # A3 town 180: {"A3_TOWN_0": (-144, 170), "A3_TOWN_1": (-417, 59), "A3_TOWN_2": (-716, -161)}, 181: {"A3_TOWN_1": (-113, 155), "A3_TOWN_0": (160, 266), "A3_TOWN_2": (-412, -65), "A3_TOWN_3": (-867, 133)}, 182: {"A3_TOWN_2": (-101, -135), "A3_TOWN_1": (198, 85), "A3_TOWN_0": (471, 196), "A3_TOWN_3": (-556, 63), "A3_TOWN_12": (-500, 717)}, @@ -124,22 +134,22 @@ class Pather: } self._paths = { # A5 Town - (Location.A5_TOWN_START, Location.NIHLATHAK_PORTAL): [3, 4, 5, 6, 8, 9], + (Location.A5_TOWN_START, Location.A5_NIHLATHAK_PORTAL): [3, 4, 5, 6, 8, 9], (Location.A5_TOWN_START, Location.A5_STASH): [3, 4, 5], (Location.A5_TOWN_START, Location.A5_WP): [3, 4], - (Location.A5_TOWN_START, Location.QUAL_KEHK): [3, 4, 5, 6, 10, 11, 12], - (Location.A5_TOWN_START, Location.MALAH): [1, 2], - (Location.A5_TOWN_START, Location.LARZUK): [3, 4, 5, 13, 14], - (Location.MALAH, Location.A5_TOWN_START): [1, 0], - (Location.A5_STASH, Location.NIHLATHAK_PORTAL): [6, 8, 9], - (Location.A5_STASH, Location.QUAL_KEHK): [5, 6, 10, 11, 12], - (Location.A5_STASH, Location.LARZUK): [13, 14], + (Location.A5_TOWN_START, Location.A5_QUAL_KEHK): [3, 4, 5, 6, 10, 11, 12], + (Location.A5_TOWN_START, Location.A5_MALAH): [1, 2], + (Location.A5_TOWN_START, Location.A5_LARZUK): [3, 4, 5, 13, 14], + (Location.A5_MALAH, Location.A5_TOWN_START): [1, 0], + (Location.A5_STASH, Location.A5_NIHLATHAK_PORTAL): [6, 8, 9], + (Location.A5_STASH, Location.A5_QUAL_KEHK): [5, 6, 10, 11, 12], + (Location.A5_STASH, Location.A5_LARZUK): [13, 14], (Location.A5_STASH, Location.A5_WP): [], - (Location.QUAL_KEHK, Location.NIHLATHAK_PORTAL): [12, 11, 10, 6, 8, 9], - (Location.QUAL_KEHK, Location.A5_WP): [12, 11, 10, 6], - (Location.LARZUK, Location.QUAL_KEHK): [13, 14, 5, 6, 10, 11, 12], - (Location.LARZUK, Location.NIHLATHAK_PORTAL): [14, 13, 5, 6, 8, 9], - (Location.LARZUK, Location.A5_WP): [14, 13, 5], + (Location.A5_QUAL_KEHK, Location.A5_NIHLATHAK_PORTAL): [12, 11, 10, 6, 8, 9], + (Location.A5_QUAL_KEHK, Location.A5_WP): [12, 11, 10, 6], + (Location.A5_LARZUK, Location.A5_QUAL_KEHK): [13, 14, 5, 6, 10, 11, 12], + (Location.A5_LARZUK, Location.A5_NIHLATHAK_PORTAL): [14, 13, 5, 6, 8, 9], + (Location.A5_LARZUK, Location.A5_WP): [14, 13, 5], # Pindle (Location.PINDLE_START, Location.PINDLE_SAVE_DIST): [100, 101, 102, 103], (Location.PINDLE_SAVE_DIST, Location.PINDLE_END): [104], @@ -149,6 +159,9 @@ class Pather: # Shenk (Location.SHENK_START, Location.SHENK_SAVE_DIST): [140, 141, 142, 143, 144, 145, 146, 147, 148], (Location.SHENK_SAVE_DIST, Location.SHENK_END): [149], + # A4 Town + (Location.A4_WP, Location.A4_TYRAEL_STASH): [160, 161], + (Location.A4_TYRAEL_STASH, Location.A4_WP): [161, 160], # A3 Town (Location.A3_TOWN_START, Location.A3_STASH_WP): [180, 181, 182, 183, 184, 185, 186, 187, 188], (Location.A3_TOWN_START, Location.A3_ORMUS): [180, 181, 182, 183, 184, 185],