1
0
mirror of https://github.com/sui-feng-cb/AzurLaneAutoScript1.git synced 2026-08-19 04:50:43 +08:00

Opt: restructure OS strategic search flow to reduce redundant operations

This commit is contained in:
positnuec
2026-08-13 21:45:35 +08:00
parent 2d2db92c3c
commit 602a35a660
4 changed files with 44 additions and 19 deletions

View File

@@ -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:

View File

@@ -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()

View File

@@ -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))) \