From e27332c6092d0632ea1fe9e7d445b292c100372d Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Wed, 7 Feb 2024 05:24:46 +0800 Subject: [PATCH] Add: Switch world before entering calyx golden --- assets/share/dungeon/ui/CALYX_WORLD_1.png | Bin 0 -> 6798 bytes assets/share/dungeon/ui/CALYX_WORLD_2.png | Bin 0 -> 6999 bytes assets/share/dungeon/ui/CALYX_WORLD_3.png | Bin 0 -> 6900 bytes tasks/dungeon/assets/assets_dungeon_ui.py | 30 +++++++++++++ tasks/dungeon/keywords/classes.py | 11 +++++ tasks/dungeon/ui.py | 51 +++++++++++++++++++++- tasks/map/keywords/classes.py | 6 +++ 7 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 assets/share/dungeon/ui/CALYX_WORLD_1.png create mode 100644 assets/share/dungeon/ui/CALYX_WORLD_2.png create mode 100644 assets/share/dungeon/ui/CALYX_WORLD_3.png diff --git a/assets/share/dungeon/ui/CALYX_WORLD_1.png b/assets/share/dungeon/ui/CALYX_WORLD_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5457292d261d6d6497a8b955c490411ba6d68717 GIT binary patch literal 6798 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 a&Pc#uP9F!^d9|89b{(zTnw9F-PyPcfwkZPu literal 0 HcmV?d00001 diff --git a/assets/share/dungeon/ui/CALYX_WORLD_2.png b/assets/share/dungeon/ui/CALYX_WORLD_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3e3edb76e15028fa4e91d86798437e14a3c5fe GIT binary patch literal 6999 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 XQ7$eKbgN4MuwsU literal 0 HcmV?d00001 diff --git a/assets/share/dungeon/ui/CALYX_WORLD_3.png b/assets/share/dungeon/ui/CALYX_WORLD_3.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb73049b481bbfb72978d365a87ea12522ed2b5 GIT binary patch literal 6900 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 ZB>@h&{<71dVV<+Y+v+-Mr7E^h{sZOLLNEXT literal 0 HcmV?d00001 diff --git a/tasks/dungeon/assets/assets_dungeon_ui.py b/tasks/dungeon/assets/assets_dungeon_ui.py index 3b8a6ece6..7d6007a7e 100644 --- a/tasks/dungeon/assets/assets_dungeon_ui.py +++ b/tasks/dungeon/assets/assets_dungeon_ui.py @@ -3,6 +3,36 @@ from module.base.button import Button, ButtonWrapper # This file was auto-generated, do not modify it manually. To generate: # ``` python -m dev_tools.button_extract ``` +CALYX_WORLD_1 = ButtonWrapper( + name='CALYX_WORLD_1', + share=Button( + file='./assets/share/dungeon/ui/CALYX_WORLD_1.png', + area=(490, 185, 540, 230), + search=(470, 165, 560, 250), + color=(197, 196, 196), + button=(490, 185, 540, 230), + ), +) +CALYX_WORLD_2 = ButtonWrapper( + name='CALYX_WORLD_2', + share=Button( + file='./assets/share/dungeon/ui/CALYX_WORLD_2.png', + area=(590, 185, 640, 230), + search=(570, 165, 660, 250), + color=(199, 198, 198), + button=(590, 185, 640, 230), + ), +) +CALYX_WORLD_3 = ButtonWrapper( + name='CALYX_WORLD_3', + share=Button( + file='./assets/share/dungeon/ui/CALYX_WORLD_3.png', + area=(689, 186, 739, 231), + search=(669, 166, 759, 251), + color=(158, 158, 158), + button=(689, 186, 739, 231), + ), +) DAILY_TRAINING_CHECK = ButtonWrapper( name='DAILY_TRAINING_CHECK', share=Button( diff --git a/tasks/dungeon/keywords/classes.py b/tasks/dungeon/keywords/classes.py index 190efe337..88bccc895 100644 --- a/tasks/dungeon/keywords/classes.py +++ b/tasks/dungeon/keywords/classes.py @@ -31,6 +31,17 @@ class DungeonList(Keyword): from tasks.map.keywords import MapPlane return MapPlane.find_plane_id(self.plane_id) + @cached_property + def world(self): + """ + Returns: + MapWorld: MapWorld object or None + """ + if self.plane is not None: + return self.plane.world + else: + return None + @cached_property def is_Calyx_Golden(self): return 'Calyx_Golden' in self.name diff --git a/tasks/dungeon/ui.py b/tasks/dungeon/ui.py index f5d87e518..17bddbbb0 100644 --- a/tasks/dungeon/ui.py +++ b/tasks/dungeon/ui.py @@ -27,6 +27,7 @@ from tasks.dungeon.keywords import ( ) from tasks.dungeon.keywords.classes import DungeonEntrance from tasks.dungeon.state import DungeonState +from tasks.map.keywords import KEYWORDS_MAP_WORLD class DungeonTabSwitch(Switch): @@ -76,7 +77,11 @@ class OcrDungeonNav(Ocr): class OcrDungeonList(Ocr): def after_process(self, result): + # 乙太之蕾•雅利洛-Ⅵ + result = result.replace('-VI', '-Ⅵ') + result = super().after_process(result) + if self.lang == 'cn': result = result.replace('翼', '巽') # 巽风之形 result = result.replace('皖A0', '50').replace('皖', '') @@ -372,6 +377,43 @@ class DungeonUI(DungeonState): DUNGEON_NAV_LIST.select_row(dungeon.dungeon_nav, main=self, insight=False) return True + def _dungeon_world_set(self, dungeon: DungeonList, skip_first_screenshot=True): + """ + Switch worlds in Calyx_Golden + """ + logger.hr('Dungeon world set', level=2) + if not dungeon.is_Calyx_Golden: + logger.warning(f'Dungeon {dungeon} is not Calyx Golden, no need to set world') + return + if dungeon.world is None: + logger.error(f'Dungeon {dungeon} does not belongs to any world') + return + dic_world_button = { + KEYWORDS_MAP_WORLD.Jarilo_VI: CALYX_WORLD_1, + KEYWORDS_MAP_WORLD.The_Xianzhou_Luofu: CALYX_WORLD_2, + KEYWORDS_MAP_WORLD.Penacony: CALYX_WORLD_3, + } + button = dic_world_button.get(dungeon.world) + if button is None: + logger.error(f'Dungeon {dungeon} with world {dungeon.world} has no corresponding world button') + return + + logger.info(f'Dungeon world set {dungeon.world}') + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + # End + if self.image_color_count(button, color=(18, 18, 18), threshold=180, count=50): + logger.info(f'Dungeon world at {dungeon.world}') + break + # Click + if self.ui_page_appear(page_guide, interval=2): + self.device.click(button) + continue + def _dungeon_insight(self, dungeon: DungeonList): """ Pages: @@ -534,8 +576,7 @@ class DungeonUI(DungeonState): # Reset search button DUNGEON_LIST.search_button = OCR_DUNGEON_LIST - if dungeon.is_Calyx_Golden \ - or dungeon.is_Calyx_Crimson \ + if dungeon.is_Calyx_Crimson \ or dungeon.is_Stagnant_Shadow \ or dungeon.is_Cavern_of_Corrosion \ or dungeon.is_Echo_of_War: @@ -543,6 +584,12 @@ class DungeonUI(DungeonState): self._dungeon_insight(dungeon) self._dungeon_enter(dungeon) return True + if dungeon.is_Calyx_Golden: + self._dungeon_nav_goto(dungeon) + self._dungeon_world_set(dungeon) + self._dungeon_insight(dungeon) + self._dungeon_enter(dungeon) + return True logger.error(f'Goto dungeon {dungeon} is not supported') return False diff --git a/tasks/map/keywords/classes.py b/tasks/map/keywords/classes.py index d94ca017d..a071b7cab 100644 --- a/tasks/map/keywords/classes.py +++ b/tasks/map/keywords/classes.py @@ -37,6 +37,9 @@ class MapPlane(Keyword): return instance return None + def __hash__(self) -> int: + return super().__hash__() + @cached_property def world(self) -> "MapWorld": """ @@ -154,6 +157,9 @@ class MapWorld(Keyword): return instance return None + def __hash__(self) -> int: + return super().__hash__() + @cached_property def is_Herta(self): return self.short_name == 'Herta'