def stuck_record_check(self): reached = self.stuck_timer.reached() reached_long = self.stuck_timer_long.reached() if not reached: return False if not reached_long: for button in self.stuck_long_wait_list: if button in self.stuck_record: return False logger.warning('Wait too long') logger.warning(f'Waiting for {self.stuck_record}') self.stuck_record_clear() raise GameStuckError(f'Wait too long')
def _commission_start_click(self, comm): """ Args: comm (Commission): """ logger.info(f'Start commission {comm}') comm_timer = Timer(7) count = 0 while 1: if comm_timer.reached(): self.device.click(comm.button) comm_timer.reset() if self.handle_popup_confirm(): comm_timer.reset() pass if self.appear_then_click(COMMISSION_ADVICE, offset=(5, 20), interval=7): count += 1 comm_timer.reset() pass if self.appear_then_click(COMMISSION_START, offset=(5, 20), interval=7): comm_timer.reset() pass # End if self.handle_info_bar(): break if count >= 3: # Restart game and handle commission recommend bug. # After you click "Recommend", your ships appear and then suddenly disappear. # At the same time, the icon of commission is flashing. logger.warning('Triggered commission list flashing bug') raise GameStuckError('Triggered commission list flashing bug') self.device.screenshot() return True
def _commission_start_click(self, comm, is_urgent=False): """ Start a commission. Args: comm (Commission): is_urgent (bool): Returns: bool: If success Pages: in: page_commission out: page_commission, info_bar, commission details unfold """ logger.hr('Commission start') self.interval_clear(COMMISSION_ADVICE) self.interval_clear(COMMISSION_START) comm_timer = Timer(7) count = 0 while 1: if comm_timer.reached(): self.device.click(comm.button) self.device.sleep(0.3) comm_timer.reset() if self.handle_popup_confirm('COMMISSION_START'): comm_timer.reset() pass if self.appear(COMMISSION_ADVICE, offset=(5, 20), interval=7): area = (0, 0, image_size(self.device.image)[0], COMMISSION_ADVICE.button[1]) current = self.commission_detect(area=area) if is_urgent: current.call('convert_to_night' ) # Convert extra commission to night if current.count >= 1: current = current[0] if current == comm: logger.info('Selected to the correct commission') else: logger.warning('Selected to the wrong commission') return False else: logger.warning( 'No selected commission detected, assuming correct') self.device.click(COMMISSION_ADVICE) count += 1 comm_timer.reset() pass if self.appear_then_click(COMMISSION_START, offset=(5, 20), interval=7): comm_timer.reset() pass # End if self.info_bar_count(): break if count >= 3: # Restart game and handle commission recommend bug. # After you click "Recommend", your ships appear and then suddenly disappear. # At the same time, the icon of commission is flashing. logger.warning('Triggered commission list flashing bug') raise GameStuckError('Triggered commission list flashing bug') self.device.screenshot() return True
def _guild_logistics_collect(self, skip_first_screenshot=True): """ Execute collect/accept screen transitions within logistics Args: skip_first_screenshot (bool): Returns: bool: If all guild logistics are check, no need to check them today. Pages: in: GUILD_LOGISTICS out: GUILD_LOGISTICS """ logger.hr('Guild logistics') confirm_timer = Timer(1.5, count=3).start() exchange_interval = Timer(1.5, count=3) supply_checked = False mission_checked = False exchange_checked = False exchange_count = 0 while 1: if skip_first_screenshot: skip_first_screenshot = False else: self.device.screenshot() # Handle all popups if self.handle_popup_confirm('GUILD_LOGISTICS'): confirm_timer.reset() exchange_interval.reset() continue if self.appear_then_click(GET_ITEMS_1, interval=2): confirm_timer.reset() exchange_interval.reset() continue if self.appear_then_click(GUILD_MISSION_SELECT, offset=(20, 20), interval=2): # Select guild mission for guild leader # Hard-coded to select mission: Siren Subjugation III, defeat 300 enemies # This mission has the most guild supply and it's the easiest one for members to finish confirm_timer.reset() continue if self._is_in_guild_logistics(): # Supply if not supply_checked and self._guild_logistics_supply_available(): self.device.click(GUILD_SUPPLY) confirm_timer.reset() continue else: supply_checked = True # Mission if not mission_checked and self._guild_logistics_mission_available(): self.device.click(GUILD_MISSION) confirm_timer.reset() continue else: mission_checked = True # Exchange if not exchange_checked and exchange_interval.reached(): if self._guild_exchange(): confirm_timer.reset() exchange_interval.reset() exchange_count += 1 continue else: exchange_checked = True # End if not self.info_bar_count() and confirm_timer.reached(): break # if supply_checked and mission_checked and exchange_checked: # break if exchange_count >= 5: # If you run AL across days, then do guild exchange. # There will show an error, said time is not up. # Restart the game can't fix the problem. # To fix this, you have to enter guild logistics once, then restart. # If exchange for 5 times, this bug is considered to be triggered. logger.warning('Triggered guild logistics refresh bug') raise GameStuckError('Triggered guild logistics refresh bug') else: confirm_timer.reset() logger.info(f'supply_checked: {supply_checked}, mission_checked: {mission_checked}, ' f'exchange_checked: {exchange_checked}, mission_finished: {self._guild_logistics_mission_finished}') return all([supply_checked, mission_checked, exchange_checked, self._guild_logistics_mission_finished])