diff --git a/assets/cn/retire/DOCK_FIRST_NPC.png b/assets/cn/retire/DOCK_FIRST_NPC.png new file mode 100644 index 000000000..db691f5af Binary files /dev/null and b/assets/cn/retire/DOCK_FIRST_NPC.png differ diff --git a/module/awaken/awaken.py b/module/awaken/awaken.py index ae7829b2a..692ee3e4f 100644 --- a/module/awaken/awaken.py +++ b/module/awaken/awaken.py @@ -3,7 +3,7 @@ from module.base.timer import Timer from module.exception import ScriptError from module.logger import logger from module.ocr.ocr import Digit -from module.retire.dock import CARD_GRIDS, DOCK_EMPTY, Dock, SHIP_DETAIL_CHECK +from module.retire.dock import DOCK_EMPTY, Dock from module.ui.assets import BACK_ARROW from module.ui.page import page_dock, page_main @@ -346,8 +346,11 @@ class Awaken(Dock): break # page_dock -> SHIP_DETAIL_CHECK - self.ship_info_enter( - CARD_GRIDS[(0, 0)], check_button=SHIP_DETAIL_CHECK, long_click=False) + entered = self.dock_enter_first() + if not entered: + logger.info('awaken_run finished, no ships to awaken') + result = 'finish' + break # is_in_awaken result = self.awaken_ship(use_array) diff --git a/module/equipment/equipment.py b/module/equipment/equipment.py index c0cf641c3..e3c774634 100644 --- a/module/equipment/equipment.py +++ b/module/equipment/equipment.py @@ -3,8 +3,7 @@ from module.base.decorator import cached_property from module.base.timer import Timer from module.equipment.assets import * from module.logger import logger -from module.retire.assets import DOCK_CHECK -from module.retire.assets import EQUIP_CONFIRM as RETIRE_EQUIP_CONFIRM +from module.retire.assets import DOCK_CHECK, EQUIP_CONFIRM as RETIRE_EQUIP_CONFIRM from module.storage.storage import StorageHandler from module.ui.assets import BACK_ARROW from module.ui.navbar import Navbar diff --git a/module/retire/assets.py b/module/retire/assets.py index cbdb30b3c..8e3ecf56d 100644 --- a/module/retire/assets.py +++ b/module/retire/assets.py @@ -11,6 +11,7 @@ DOCK_CHECK = Button(area={'cn': (121, 14, 175, 39), 'en': (121, 17, 189, 39), 'j DOCK_EMPTY = Button(area={'cn': (95, 347, 388, 378), 'en': (95, 318, 264, 339), 'jp': (96, 347, 252, 376), 'tw': (94, 347, 390, 379)}, color={'cn': (160, 154, 159), 'en': (106, 99, 106), 'jp': (159, 152, 156), 'tw': (163, 157, 162)}, button={'cn': (95, 347, 388, 378), 'en': (95, 318, 264, 339), 'jp': (96, 347, 252, 376), 'tw': (94, 347, 390, 379)}, file={'cn': './assets/cn/retire/DOCK_EMPTY.png', 'en': './assets/en/retire/DOCK_EMPTY.png', 'jp': './assets/jp/retire/DOCK_EMPTY.png', 'tw': './assets/tw/retire/DOCK_EMPTY.png'}) DOCK_FILTER = Button(area={'cn': (1099, 5, 1193, 48), 'en': (1098, 4, 1194, 49), 'jp': (1101, 6, 1192, 46), 'tw': (1099, 6, 1193, 47)}, color={'cn': (70, 87, 127), 'en': (73, 90, 128), 'jp': (67, 84, 125), 'tw': (78, 96, 137)}, button={'cn': (1099, 5, 1193, 48), 'en': (1098, 4, 1194, 49), 'jp': (1101, 6, 1192, 46), 'tw': (1099, 6, 1193, 47)}, file={'cn': './assets/cn/retire/DOCK_FILTER.png', 'en': './assets/en/retire/DOCK_FILTER.png', 'jp': './assets/jp/retire/DOCK_FILTER.png', 'tw': './assets/tw/retire/DOCK_FILTER.png'}) DOCK_FILTER_CONFIRM = Button(area={'cn': (714, 613, 886, 671), 'en': (718, 618, 883, 666), 'jp': (717, 618, 885, 668), 'tw': (715, 630, 884, 680)}, color={'cn': (86, 133, 192), 'en': (108, 148, 201), 'jp': (83, 128, 188), 'tw': (83, 130, 190)}, button={'cn': (714, 613, 886, 671), 'en': (718, 618, 883, 666), 'jp': (717, 618, 885, 668), 'tw': (715, 630, 884, 680)}, file={'cn': './assets/cn/retire/DOCK_FILTER_CONFIRM.png', 'en': './assets/en/retire/DOCK_FILTER_CONFIRM.png', 'jp': './assets/jp/retire/DOCK_FILTER_CONFIRM.png', 'tw': './assets/tw/retire/DOCK_FILTER_CONFIRM.png'}) +DOCK_FIRST_NPC = Button(area={'cn': (96, 111, 123, 123), 'en': (96, 111, 123, 123), 'jp': (96, 111, 123, 123), 'tw': (96, 111, 123, 123)}, color={'cn': (184, 150, 150), 'en': (184, 150, 150), 'jp': (184, 150, 150), 'tw': (184, 150, 150)}, button={'cn': (96, 111, 123, 123), 'en': (96, 111, 123, 123), 'jp': (96, 111, 123, 123), 'tw': (96, 111, 123, 123)}, file={'cn': './assets/cn/retire/DOCK_FIRST_NPC.png', 'en': './assets/cn/retire/DOCK_FIRST_NPC.png', 'jp': './assets/cn/retire/DOCK_FIRST_NPC.png', 'tw': './assets/cn/retire/DOCK_FIRST_NPC.png'}) DOCK_SCROLL = Button(area={'cn': (1239, 76, 1248, 641), 'en': (1239, 76, 1248, 641), 'jp': (1237, 78, 1250, 628), 'tw': (1239, 76, 1248, 641)}, color={'cn': (47, 46, 37), 'en': (47, 46, 37), 'jp': (180, 156, 66), 'tw': (47, 46, 37)}, button={'cn': (1239, 76, 1248, 641), 'en': (1239, 76, 1248, 641), 'jp': (1237, 78, 1250, 628), 'tw': (1239, 76, 1248, 641)}, file={'cn': './assets/cn/retire/DOCK_SCROLL.png', 'en': './assets/en/retire/DOCK_SCROLL.png', 'jp': './assets/jp/retire/DOCK_SCROLL.png', 'tw': './assets/tw/retire/DOCK_SCROLL.png'}) DOCK_SELECTED = Button(area={'cn': (582, 662, 647, 685), 'en': (702, 660, 751, 686), 'jp': (603, 662, 655, 685), 'tw': (582, 662, 647, 685)}, color={'cn': (75, 75, 83), 'en': (84, 85, 93), 'jp': (84, 83, 92), 'tw': (75, 75, 83)}, button={'cn': (582, 662, 647, 685), 'en': (702, 660, 751, 686), 'jp': (603, 662, 655, 685), 'tw': (582, 662, 647, 685)}, file={'cn': './assets/cn/retire/DOCK_SELECTED.png', 'en': './assets/en/retire/DOCK_SELECTED.png', 'jp': './assets/jp/retire/DOCK_SELECTED.png', 'tw': './assets/tw/retire/DOCK_SELECTED.png'}) EMPTY_ENHANCE_SLOT_PLUS = Button(area={'cn': (737, 402, 773, 437), 'en': (737, 402, 773, 437), 'jp': (737, 402, 773, 437), 'tw': (737, 402, 773, 437)}, color={'cn': (46, 46, 46), 'en': (46, 46, 46), 'jp': (46, 46, 46), 'tw': (46, 46, 46)}, button={'cn': (737, 402, 773, 437), 'en': (737, 402, 773, 437), 'jp': (737, 402, 773, 437), 'tw': (737, 402, 773, 437)}, file={'cn': './assets/cn/retire/EMPTY_ENHANCE_SLOT_PLUS.png', 'en': './assets/en/retire/EMPTY_ENHANCE_SLOT_PLUS.png', 'jp': './assets/jp/retire/EMPTY_ENHANCE_SLOT_PLUS.png', 'tw': './assets/tw/retire/EMPTY_ENHANCE_SLOT_PLUS.png'}) diff --git a/module/retire/dock.py b/module/retire/dock.py index 6bcaf7efa..27029538b 100644 --- a/module/retire/dock.py +++ b/module/retire/dock.py @@ -1,6 +1,6 @@ import module.config.server as server -from module.base.button import ButtonGrid +from module.base.button import ButtonGrid, get_color, color_similar from module.base.decorator import cached_property from module.base.timer import Timer from module.equipment.equipment import Equipment @@ -257,3 +257,57 @@ class Dock(Equipment): continue if self.handle_popup_confirm('DOCK_SELECT_CONFIRM'): continue + + def dock_enter_first(self, non_npc=True, skip_first_screenshot=True): + """ + Enter first ship in dock + + Args: + non_npc: True to enter the second ship if first ship is NPC + skip_first_screenshot: + + Returns: + bool: True if success to enter + False if dock empty + False if non_npc and only one NPC in dock + + Pages: + in: page_dock + out: SHIP_DETAIL_CHECK + """ + logger.info('Dock enter first') + self.interval_clear(DOCK_CHECK, interval=3) + + while 1: + if skip_first_screenshot: + skip_first_screenshot = False + else: + self.device.screenshot() + + # End + if self.appear(SHIP_DETAIL_CHECK, offset=(20, 20)): + return True + if self.appear(DOCK_EMPTY, offset=(20, 20)): + logger.info('Dock empty') + return False + + # Click + if self.appear(DOCK_CHECK, offset=(20, 20), interval=3): + if non_npc: + # Check NPC + if DOCK_FIRST_NPC.match_luma(self.device.image, offset=(20, 20)): + logger.info('First ship is NPC, select second') + button = CARD_GRIDS[(1, 0)] + # Check if there's second ship + color = get_color(self.device.image, button.area) + if color_similar(color, (34, 34, 42)): + logger.info('Second ship empty, dock empty') + return False + else: + button = CARD_GRIDS[(0, 0)] + else: + button = CARD_GRIDS[(0, 0)] + self.device.click(button) + continue + if self.handle_game_tips(): + continue diff --git a/module/retire/enhancement.py b/module/retire/enhancement.py index be0a3702d..a1c9b0131 100644 --- a/module/retire/enhancement.py +++ b/module/retire/enhancement.py @@ -54,9 +54,7 @@ class Enhancement(Dock): if self.appear(DOCK_EMPTY, offset=(30, 30)): return False - self.ship_info_enter( - CARD_GRIDS[(0, 0)], check_button=SHIP_DETAIL_CHECK, long_click=False) - return True + return self.dock_enter_first() def _enhance_quit(self): """