diff --git a/module/os/map.py b/module/os/map.py index c01cf98cb..be0c9a25e 100644 --- a/module/os/map.py +++ b/module/os/map.py @@ -1009,8 +1009,11 @@ class OSMap(OSFleet, Map, GlobeCamera, StorageHandler, StrategicSearchHandler): self.hp_get() self._solved_map_event = set() self._solved_fleet_mechanism = False - self.clear_question() - self.map_rescan() + self.get_current_zone() + logger.attr('is_zone_name_hidden', self.is_zone_name_hidden) + if self.is_zone_name_hidden: + self.clear_question() + self.map_rescan() def _swipe_camera_avoid_ui(self, grid, ref=None, _ui_avoid_count=0, name='Grid'): """ @@ -1026,12 +1029,12 @@ class OSMap(OSFleet, Map, GlobeCamera, StorageHandler, StrategicSearchHandler): Returns: bool: True if the camera swiped and the map should be rescanned; False if the grid is safe to click. """ - if _ui_avoid_count < 3 and area_cross_area(grid.button, MAP_OPTIONS_AREA.area, threshold=0): + if _ui_avoid_count < 2 and area_cross_area(grid.button, MAP_OPTIONS_AREA.area, threshold=0): if ref is None: ref = self.view.center_loca vector = np.array(grid.location) - np.array(ref) vector = tuple((vector // 2).astype(int)) - logger.info(f'{name} grid {grid} overlaps with map options area, swipe {vector}') + logger.info(f'{name} grid {grid} overlaps with map options area, swipe: {vector}') self.map_swipe(vector) return True return False diff --git a/module/os/tasks/cross_month.py b/module/os/tasks/cross_month.py index 835fe2c3d..1d80c70bd 100644 --- a/module/os/tasks/cross_month.py +++ b/module/os/tasks/cross_month.py @@ -169,8 +169,12 @@ class OpsiCrossMonth(OSMap): continue else: logger.hr(f'OS meowfficer farming, zone_id={zone.zone_id}', level=1) - self.globe_goto(zone, types='SAFE', refresh=True) self.fleet_set(self.config.OpsiFleet_Fleet) + logger.attr('is_zone_name_hidden', self.is_zone_name_hidden) + if self.zone.zone_id != zone.zone_id or not self.is_zone_name_hidden: + self.globe_goto(zone, types='SAFE', refresh=True) + self.run_auto_search() + self.handle_after_auto_search() self.run_strategic_search() self.handle_after_auto_search() else: diff --git a/module/os/tasks/hazard_leveling.py b/module/os/tasks/hazard_leveling.py index 257c2bb68..558350582 100644 --- a/module/os/tasks/hazard_leveling.py +++ b/module/os/tasks/hazard_leveling.py @@ -52,12 +52,15 @@ class OpsiHazard1Leveling(OSMap): else: zone = 22 logger.hr(f'OS hazard 1 leveling, zone_id={zone}', level=1) + self.fleet_set(self.config.OpsiFleet_Fleet) if self.zone.zone_id != zone or not self.is_zone_name_hidden: self.globe_goto(self.name_to_zone(zone), types='SAFE', refresh=True) - self.fleet_set(self.config.OpsiFleet_Fleet) + self.run_auto_search() + self.handle_after_auto_search() self.run_strategic_search() - self.get_current_zone() + # is_zone_name_hidden is refreshed inside run_strategic_search if self.is_zone_name_hidden and not len(self._solved_map_event): + self.run_auto_search() self.fleets_clear_question() self.handle_after_auto_search() self.config.check_task_switch() diff --git a/module/os/tasks/meowfficer_farming.py b/module/os/tasks/meowfficer_farming.py index 332daea8b..1624db9a7 100644 --- a/module/os/tasks/meowfficer_farming.py +++ b/module/os/tasks/meowfficer_farming.py @@ -6,6 +6,17 @@ from module.os.map import OSMap class OpsiMeowfficerFarming(OSMap): + def check_ap(self, cost=0): + # Check action points first to avoid using remaining AP when it not enough for tomorrow's daily + # When not running CL1 and use oil + keep_current_ap = True + check_rest_ap = True + if self.is_cl1_enabled and self.cl1_enough_yellow_coins: + check_rest_ap = False + if not self.is_cl1_enabled and self.config.OpsiGeneral_BuyActionPointLimit > 0: + keep_current_ap = False + self.action_point_set(cost=cost, keep_current_ap=keep_current_ap, check_rest_ap=check_rest_ap) + def os_meowfficer_farming(self): """ Recommend 3 or 5 for higher meowfficer searching point per action points ratio. @@ -48,17 +59,6 @@ class OpsiMeowfficerFarming(OSMap): logger.info('Ash beacon not fully collected, ignore action point limit temporarily') self.config.OS_ACTION_POINT_PRESERVE = 0 logger.attr('OS_ACTION_POINT_PRESERVE', self.config.OS_ACTION_POINT_PRESERVE) - if not ap_checked: - # Check action points first to avoid using remaining AP when it not enough for tomorrow's daily - # When not running CL1 and use oil - keep_current_ap = True - check_rest_ap = True - if self.is_cl1_enabled and self.cl1_enough_yellow_coins: - check_rest_ap = False - if not self.is_cl1_enabled and self.config.OpsiGeneral_BuyActionPointLimit > 0: - keep_current_ap = False - self.action_point_set(cost=0, keep_current_ap=keep_current_ap, check_rest_ap=check_rest_ap) - ap_checked = True # (1252, 1012) is the coordinate of zone 134 (the center zone) in os_globe_map.png if self.config.OpsiMeowfficerFarming_TargetZone != 0: @@ -68,13 +68,28 @@ class OpsiMeowfficerFarming(OSMap): logger.warning(f'wrong zone_id input:{self.config.OpsiMeowfficerFarming_TargetZone}') raise RequestHumanTakeover('wrong input, task stopped') else: + # Refill current AP every round to keep strategic search running + self.check_ap(cost=100) logger.hr(f'OS meowfficer farming, zone_id={zone.zone_id}', level=1) - self.globe_goto(zone, types='SAFE', refresh=True) self.fleet_set(self.config.OpsiFleet_Fleet) + logger.attr('is_zone_name_hidden', self.is_zone_name_hidden) + if self.zone.zone_id != zone.zone_id or not self.is_zone_name_hidden: + self.globe_goto(zone, types='SAFE', refresh=True) + self.run_auto_search() + self.handle_after_auto_search() + self.check_ap() self.run_strategic_search() + # is_zone_name_hidden is refreshed inside run_strategic_search + if self.is_zone_name_hidden and not len(self._solved_map_event): + self.run_auto_search() + self.fleets_clear_question() self.handle_after_auto_search() self.config.check_task_switch() else: + if not ap_checked: + # Check action points once at the start, without using AP boxes + self.check_ap(cost=0) + ap_checked = True zones = self.zone_select(hazard_level=self.config.OpsiMeowfficerFarming_HazardLevel) \ .delete(SelectedGrids([self.zone])) \ .delete(SelectedGrids(self.zones.select(is_port=True))) \