diff --git a/assets/cn/handler/USE_DATA_KEY_NOTIFIED.png b/assets/cn/handler/USE_DATA_KEY_NOTIFIED.png new file mode 100644 index 000000000..36727c11c Binary files /dev/null and b/assets/cn/handler/USE_DATA_KEY_NOTIFIED.png differ diff --git a/assets/en/handler/USE_DATA_KEY.png b/assets/en/handler/USE_DATA_KEY.png index 86e2c3804..8edd8b6ce 100644 Binary files a/assets/en/handler/USE_DATA_KEY.png and b/assets/en/handler/USE_DATA_KEY.png differ diff --git a/assets/en/handler/USE_DATA_KEY_NOTIFIED.png b/assets/en/handler/USE_DATA_KEY_NOTIFIED.png new file mode 100644 index 000000000..36727c11c Binary files /dev/null and b/assets/en/handler/USE_DATA_KEY_NOTIFIED.png differ diff --git a/assets/jp/handler/USE_DATA_KEY_NOTIFIED.png b/assets/jp/handler/USE_DATA_KEY_NOTIFIED.png new file mode 100644 index 000000000..36727c11c Binary files /dev/null and b/assets/jp/handler/USE_DATA_KEY_NOTIFIED.png differ diff --git a/assets/tw/handler/USE_DATA_KEY_NOTIFIED.png b/assets/tw/handler/USE_DATA_KEY_NOTIFIED.png new file mode 100644 index 000000000..36727c11c Binary files /dev/null and b/assets/tw/handler/USE_DATA_KEY_NOTIFIED.png differ diff --git a/module/combat/auto_search_combat.py b/module/combat/auto_search_combat.py index de5518fa6..f0dbc8b92 100644 --- a/module/combat/auto_search_combat.py +++ b/module/combat/auto_search_combat.py @@ -1,3 +1,4 @@ +from module.base.timer import Timer from module.combat.assets import * from module.combat.combat import Combat from module.exception import CampaignEnd @@ -7,6 +8,7 @@ from module.map.assets import * class AutoSearchCombat(Combat): fleets_reversed: bool # Define in MapOperation + _auto_search_in_stage_timer = Timer(3, count=6) def get_fleet_current_index(self): """ @@ -24,6 +26,24 @@ class AutoSearchCombat(Combat): logger.warning('Unknown fleet current index, use 1 by default') return 1 + def _handle_auto_search_menu_missing(self): + """ + Sometimes game is bugged, auto search menu is not shown. + After BOSS battle, it enters campaign directly. + To handle this, if game in campaign for a certain time, it means auto search ends. + + Returns: + bool: If triggered + """ + if self.is_in_stage(): + if self._auto_search_in_stage_timer.reached(): + logger.info('Catch auto search menu missing') + return True + else: + self._auto_search_in_stage_timer.reset() + + return False + def auto_search_moving(self, skip_first_screenshot=True): """ Pages: @@ -60,8 +80,7 @@ class AutoSearchCombat(Combat): break if self.is_in_auto_search_menu(): raise CampaignEnd - if self.is_in_stage(): - # Sometimes game is bugged, and auto search menu is not shown + if self._handle_auto_search_menu_missing(): raise CampaignEnd def auto_search_combat_execute(self, emotion_reduce, fleet_index): @@ -118,8 +137,7 @@ class AutoSearchCombat(Combat): break if self.is_in_auto_search_menu(): raise CampaignEnd - if self.is_in_stage(): - # Sometimes game is bugged, and auto search menu is not shown + if self._handle_auto_search_menu_missing(): raise CampaignEnd def auto_search_combat(self, emotion_reduce=None, fleet_index=1): diff --git a/module/handler/info_handler.py b/module/handler/info_handler.py index 14fef922a..0af24abac 100644 --- a/module/handler/info_handler.py +++ b/module/handler/info_handler.py @@ -115,6 +115,8 @@ class InfoHandler(ModuleBase): return False if self.appear(USE_DATA_KEY, offset=(20, 20)): + self.device.click(USE_DATA_KEY_NOTIFIED) + self.device.sleep((0.5, 0.8)) return self.handle_popup_confirm('USE_DATA_KEY') return False diff --git a/module/war_archives/war_archives.py b/module/war_archives/war_archives.py index 1172125b9..5513e3af5 100644 --- a/module/war_archives/war_archives.py +++ b/module/war_archives/war_archives.py @@ -23,7 +23,7 @@ class CampaignWarArchives(CampaignRun, CampaignBase): return False return super().handle_reward() - def triggered_stop_condition(self): + def triggered_stop_condition(self, oil_check=True): # Must be in archives campaign to OCR check if self.appear(WAR_ARCHIVES_CAMPAIGN_CHECK, offset=(20, 20)): # Check for 0 data keys left to use @@ -34,7 +34,7 @@ class CampaignWarArchives(CampaignRun, CampaignBase): return True # Else, check other stop conditions - return super().triggered_stop_condition() + return super().triggered_stop_condition(oil_check) def run(self, name=None, folder='campaign_main', total=0): backup = self.config.cover(USE_DATA_KEY=True)