11import inflection
22
3- from module .base .button import Button
43from module .base .timer import Timer
54from module .config .utils import get_os_reset_remain
65from module .exception import CampaignEnd , RequestHumanTakeover
1211from module .os .fleet import OSFleet
1312from module .os .globe_camera import GlobeCamera
1413from module .os .globe_operation import RewardUncollectedError
14+ from module .os_handler .assets import AUTO_SEARCH_OS_MAP_OPTION_OFF , AUTO_SEARCH_OS_MAP_OPTION_ON
1515from module .ui .ui import page_os
1616
17- FLEET_LOW_RESOLVE = Button (
18- area = (144 , 148 , 170 , 175 ), color = (255 , 44 , 33 ), button = (144 , 148 , 170 , 175 ),
19- name = 'FLEET_LOW_RESOLVE' )
20-
2117
2218class OSMap (OSFleet , Map , GlobeCamera ):
2319 def os_init (self ):
@@ -65,6 +61,7 @@ def os_init(self):
6561 # self.map_init()
6662 self .hp_reset ()
6763 self .handle_after_auto_search ()
64+ self .handle_current_fleet_resolve (revert = False )
6865
6966 # Exit from special zones types, only SAFE and DANGEROUS are acceptable.
7067 if self .is_in_special_zone ():
@@ -259,7 +256,7 @@ def fleet_resolve(self, revert=True):
259256 if revert and prev != self .zone :
260257 self .globe_goto (prev )
261258
262- def handle_fleet_resolve (self , revert = True ):
259+ def handle_fleet_resolve (self , revert = False ):
263260 """
264261 Check each fleet if afflicted with the low
265262 resolve debuff
@@ -275,12 +272,11 @@ def handle_fleet_resolve(self, revert=True):
275272 logger .info ('OS is in a special zone type, skip fleet resolve' )
276273 return False
277274
278- for _ in range ( 1 , 5 ) :
279- if not self .fleet_set (_ ):
275+ for index in [ 1 , 2 , 3 , 4 ] :
276+ if not self .fleet_set (index ):
280277 self .device .screenshot ()
281278
282- if self .image_color_count (FLEET_LOW_RESOLVE , color = FLEET_LOW_RESOLVE .color ,
283- threshold = 221 , count = 250 ):
279+ if self .fleet_low_resolve_appear ():
284280 logger .info ('At least one fleet is afflicted with '
285281 'the low resolve debuff' )
286282 self .fleet_resolve (revert )
@@ -290,6 +286,27 @@ def handle_fleet_resolve(self, revert=True):
290286 'the low resolve debuff' )
291287 return False
292288
289+ def handle_current_fleet_resolve (self , revert = False ):
290+ """
291+ Similar to handle_fleet_resolve,
292+ but check current fleet only for better performance at initialization
293+
294+ Args:
295+ revert (bool): If go back to previous zone.
296+
297+ Returns:
298+ bool:
299+ """
300+ if self .fleet_low_resolve_appear ():
301+ logger .info ('Current fleet is afflicted with '
302+ 'the low resolve debuff' )
303+ self .fleet_resolve (revert )
304+ return True
305+
306+ logger .info ('Current fleet is not afflicted with '
307+ 'the low resolve debuff' )
308+ return False
309+
293310 def handle_fleet_emp_debuff (self ):
294311 """
295312 EMP debuff limits fleet step to 1 and messes auto search up.
@@ -398,6 +415,7 @@ def os_auto_search_daemon(self, drop=None, skip_first_screenshot=True):
398415 else :
399416 self .device .screenshot ()
400417
418+ # End
401419 if not unlock_checked and unlock_check_timer .reached ():
402420 logger .critical ('Unable to use auto search in current zone' )
403421 logger .critical ('Please finish the story mode of OpSi to unlock auto search '
@@ -413,6 +431,12 @@ def os_auto_search_daemon(self, drop=None, skip_first_screenshot=True):
413431 died_timer .reset ()
414432 else :
415433 died_timer .reset ()
434+
435+ if not unlock_checked :
436+ if self .appear (AUTO_SEARCH_OS_MAP_OPTION_OFF , offset = (5 , 120 )):
437+ unlock_checked = True
438+ elif self .appear (AUTO_SEARCH_OS_MAP_OPTION_ON , offset = (5 , 120 )):
439+ unlock_checked = True
416440 if self .handle_os_auto_search_map_option (drop = drop , enable = success ):
417441 unlock_checked = True
418442 continue
0 commit comments