mirror of
https://github.com/sui-feng-cb/AzurLaneAutoScript1.git
synced 2026-08-18 12:43:00 +08:00
Opt: restructure OS strategic search flow to reduce redundant operations
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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))) \
|
||||
|
||||
Reference in New Issue
Block a user