From 1e19248ba9b6ddcec24b5c2e28891cb6e79c930b Mon Sep 17 00:00:00 2001 From: Marvin <52848568+mleem97@users.noreply.github.com> Date: Sun, 10 Aug 2025 05:21:17 +0200 Subject: [PATCH] Handle dungeon floor selection with chapter mapping --- Src/bot_core.py | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/Src/bot_core.py b/Src/bot_core.py index 7299550..1c20d52 100644 --- a/Src/bot_core.py +++ b/Src/bot_core.py @@ -702,7 +702,20 @@ def mana_level(self, cards, hero_power=False): # Start a dungeon floor from PvE page def play_dungeon(self, floor=5): self.logger.debug(f"Starting Dungeon floor {floor}") - chapter_num = int(np.ceil(floor / 3)) + # Explicit mapping of floors to chapters + floor_map = { + 1: range(1, 4), + 2: range(4, 7), + 3: range(7, 10), + 4: range(10, 13), + 5: [13], + 6: [14], + } + chapter_num = 1 + for chap, floors in floor_map.items(): + if floor in floors: + chapter_num = chap + break self.logger.debug(f"Looking for chapter {chapter_num}") pos = np.array([0, 0]) avail_buttons = self.get_current_icons(available=True) @@ -711,7 +724,13 @@ def play_dungeon(self, floor=5): # Swipe to the top [self.swipe([0, 0], [2, 0]) for _ in range(14)] self.click(30, 600, 5) # stop scroll and scan screen for buttons - expanded = 0 + self.getScreen() + # Log visible floors for debugging + visible = ocr_utils.find_chapter_headers(self.screenRGB) + for chap, xy in visible.items(): + floors_here = ocr_utils.read_floor_from_chapter(self.screenRGB, xy) + self.logger.debug(f"Visible chapter {chap} floors: {floors_here}") + for i in range(12): self.getScreen() chapters = ocr_utils.find_chapter_headers(self.screenRGB) @@ -719,9 +738,12 @@ def play_dungeon(self, floor=5): if chapter_num in chapters: pos = np.array(chapters[chapter_num]) self.logger.info(f"Found chapter {chapter_num} at {pos}") - if not expanded: - expanded = 1 - self.click_button(pos + [500, 90]) + # Expand chapter only if a collapse icon is detected + icons = self.get_current_icons(available=True) + chapter_icon = f"chapter_{chapter_num}.png" + if (icons["icon"] == chapter_icon).any(): + self.logger.debug(f"Chapter {chapter_num} collapsed, expanding") + self.click_button(pos) self.getScreen() if pos[1] < 550 and floor % 3 != 0: break @@ -760,7 +782,10 @@ def play_dungeon(self, floor=5): chosen_offset = slot_offsets[3] self.click_button(pos + chosen_offset) - self.click_button((500, 600)) + # Play selected floor then choose random partner + self.click_button((500, 600)) # Play + time.sleep(0.5) + self.click_button((500, 800)) # Random for i in range(10): time.sleep(2) avail_buttons = self.get_current_icons(available=True)