mirror of
https://gitee.com/sui-feng-cb/AzurLaneAutoScript1
synced 2026-03-09 18:39:04 +08:00
Chore: Use new syntax sugar in os_handler
This commit is contained in:
parent
8ea89756f1
commit
475c2dd2bc
@ -238,12 +238,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
|
|||||||
logger.hr('Wait until camera stable')
|
logger.hr('Wait until camera stable')
|
||||||
record = None
|
record = None
|
||||||
confirm_timer = Timer(0.6, count=2).start()
|
confirm_timer = Timer(0.6, count=2).start()
|
||||||
while 1:
|
for _ in self.loop(skip_first=skip_first_screenshot):
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
self.update_os()
|
self.update_os()
|
||||||
current = self.view.backend.homo_loca
|
current = self.view.backend.homo_loca
|
||||||
logger.attr('homo_loca', current)
|
logger.attr('homo_loca', current)
|
||||||
@ -289,12 +284,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
|
|||||||
clicked_story = False
|
clicked_story = False
|
||||||
stuck_timer = Timer(20, count=5).start()
|
stuck_timer = Timer(20, count=5).start()
|
||||||
confirm_timer.reset()
|
confirm_timer.reset()
|
||||||
while 1:
|
for _ in self.loop(skip_first=skip_first_screenshot):
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# Map event
|
# Map event
|
||||||
event = self.handle_map_event(drop=drop)
|
event = self.handle_map_event(drop=drop)
|
||||||
if event:
|
if event:
|
||||||
@ -702,7 +692,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
|
|||||||
button = Button(area=area, color=(), button=area, name='BOSS_LEAVE')
|
button = Button(area=area, color=(), button=area, name='BOSS_LEAVE')
|
||||||
return button
|
return button
|
||||||
|
|
||||||
def boss_leave(self, skip_first_screenshot=True):
|
def boss_leave(self):
|
||||||
"""
|
"""
|
||||||
Pages:
|
Pages:
|
||||||
in: is_in_map(), or combat_appear()
|
in: is_in_map(), or combat_appear()
|
||||||
@ -714,12 +704,7 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh):
|
|||||||
|
|
||||||
click_timer = Timer(3)
|
click_timer = Timer(3)
|
||||||
pause_interval = Timer(0.5, count=1)
|
pause_interval = Timer(0.5, count=1)
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.is_in_map():
|
if self.is_in_map():
|
||||||
self.predict_radar()
|
self.predict_radar()
|
||||||
|
|||||||
@ -89,14 +89,9 @@ class GlobeOperation(ActionPointHandler):
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def ensure_no_zone_pinned(self, skip_first_screenshot=True):
|
def ensure_no_zone_pinned(self):
|
||||||
confirm_timer = Timer(1, count=2).start()
|
confirm_timer = Timer(1, count=2).start()
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.handle_zone_pinned():
|
if self.handle_zone_pinned():
|
||||||
confirm_timer.reset()
|
confirm_timer.reset()
|
||||||
else:
|
else:
|
||||||
@ -189,12 +184,14 @@ class GlobeOperation(ActionPointHandler):
|
|||||||
in: is_in_zone_select
|
in: is_in_zone_select
|
||||||
out: is_zone_pinned
|
out: is_zone_pinned
|
||||||
"""
|
"""
|
||||||
|
logger.info(f'Zone select: {button}')
|
||||||
def appear():
|
for _ in self.loop():
|
||||||
return self.appear(button, offset=self._zone_select_offset, threshold=self._zone_select_similarity)
|
# End
|
||||||
|
if self.is_zone_pinned():
|
||||||
self.ui_click(button, appear_button=appear, check_button=self.is_zone_pinned,
|
break
|
||||||
skip_first_screenshot=True)
|
if self.appear_then_click(
|
||||||
|
button, offset=self._zone_select_offset, threshold=self._zone_select_similarity, interval=5):
|
||||||
|
continue
|
||||||
|
|
||||||
def zone_type_select(self, types=('SAFE', 'DANGEROUS')):
|
def zone_type_select(self, types=('SAFE', 'DANGEROUS')):
|
||||||
"""
|
"""
|
||||||
@ -282,23 +279,17 @@ class GlobeOperation(ActionPointHandler):
|
|||||||
return self.ui_click(GLOBE_GOTO_MAP, check_button=self.is_in_map, offset=(20, 20),
|
return self.ui_click(GLOBE_GOTO_MAP, check_button=self.is_in_map, offset=(20, 20),
|
||||||
retry_wait=3, skip_first_screenshot=skip_first_screenshot)
|
retry_wait=3, skip_first_screenshot=skip_first_screenshot)
|
||||||
|
|
||||||
def os_map_goto_globe(self, unpin=True, skip_first_screenshot=True):
|
def os_map_goto_globe(self, unpin=True):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
unpin (bool):
|
unpin (bool):
|
||||||
skip_first_screenshot (bool):
|
|
||||||
|
|
||||||
Pages:
|
Pages:
|
||||||
in: is_in_map
|
in: is_in_map
|
||||||
out: is_in_globe
|
out: is_in_globe
|
||||||
"""
|
"""
|
||||||
click_count = 0
|
click_count = 0
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.is_in_globe():
|
if self.is_in_globe():
|
||||||
break
|
break
|
||||||
@ -335,15 +326,9 @@ class GlobeOperation(ActionPointHandler):
|
|||||||
if self.handle_popup_confirm('GOTO_GLOBE'):
|
if self.handle_popup_confirm('GOTO_GLOBE'):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
skip_first_screenshot = True
|
|
||||||
confirm_timer = Timer(1, count=2).start()
|
confirm_timer = Timer(1, count=2).start()
|
||||||
unpinned = 0
|
unpinned = 0
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if unpin:
|
if unpin:
|
||||||
if self.handle_zone_pinned():
|
if self.handle_zone_pinned():
|
||||||
unpinned += 1
|
unpinned += 1
|
||||||
@ -355,11 +340,10 @@ class GlobeOperation(ActionPointHandler):
|
|||||||
if self.is_zone_pinned():
|
if self.is_zone_pinned():
|
||||||
break
|
break
|
||||||
|
|
||||||
def globe_enter(self, zone, skip_first_screenshot=True):
|
def globe_enter(self, zone):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
zone (Zone): Zone to enter.
|
zone (Zone): Zone to enter.
|
||||||
skip_first_screenshot (bool):
|
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
OSExploreError: If zone locked.
|
OSExploreError: If zone locked.
|
||||||
@ -371,11 +355,7 @@ class GlobeOperation(ActionPointHandler):
|
|||||||
click_timer = Timer(10)
|
click_timer = Timer(10)
|
||||||
click_count = 0
|
click_count = 0
|
||||||
pinned = None
|
pinned = None
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
if pinned is None:
|
if pinned is None:
|
||||||
pinned = self.get_zone_pinned_name()
|
pinned = self.get_zone_pinned_name()
|
||||||
|
|
||||||
|
|||||||
@ -458,12 +458,11 @@ class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler):
|
|||||||
logger.attr('CL1 time cost', f'{cost}s/round')
|
logger.attr('CL1 time cost', f'{cost}s/round')
|
||||||
self._auto_search_round_timer = time.time()
|
self._auto_search_round_timer = time.time()
|
||||||
|
|
||||||
def os_auto_search_daemon(self, drop=None, strategic=False, skip_first_screenshot=True):
|
def os_auto_search_daemon(self, drop=None, strategic=False):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
drop (DropRecord):
|
drop (DropRecord):
|
||||||
strategic (bool): True if running in strategic search
|
strategic (bool): True if running in strategic search
|
||||||
skip_first_screenshot:
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
int: Number of finished battle
|
int: Number of finished battle
|
||||||
@ -487,12 +486,7 @@ class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler):
|
|||||||
finished_combat = 0
|
finished_combat = 0
|
||||||
died_timer = Timer(1.5, count=3)
|
died_timer = Timer(1.5, count=3)
|
||||||
self.hp_reset()
|
self.hp_reset()
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if not unlock_checked and unlock_check_timer.reached():
|
if not unlock_checked and unlock_check_timer.reached():
|
||||||
logger.critical('Unable to use auto search in current zone')
|
logger.critical('Unable to use auto search in current zone')
|
||||||
@ -547,7 +541,7 @@ class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler):
|
|||||||
|
|
||||||
return finished_combat
|
return finished_combat
|
||||||
|
|
||||||
def interrupt_auto_search(self, skip_first_screenshot=True):
|
def interrupt_auto_search(self):
|
||||||
"""
|
"""
|
||||||
Raises:
|
Raises:
|
||||||
TaskEnd: If auto search interrupted
|
TaskEnd: If auto search interrupted
|
||||||
@ -560,12 +554,7 @@ class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler):
|
|||||||
is_loading = False
|
is_loading = False
|
||||||
pause_interval = Timer(0.5, count=1)
|
pause_interval = Timer(0.5, count=1)
|
||||||
in_main_timer = Timer(3, count=6)
|
in_main_timer = Timer(3, count=6)
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.is_in_main():
|
if self.is_in_main():
|
||||||
logger.info('Auto search interrupted')
|
logger.info('Auto search interrupted')
|
||||||
@ -634,7 +623,7 @@ class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler):
|
|||||||
backup = self.config.temporary(Campaign_UseAutoSearch=True)
|
backup = self.config.temporary(Campaign_UseAutoSearch=True)
|
||||||
try:
|
try:
|
||||||
if strategic:
|
if strategic:
|
||||||
self.strategic_search_start(skip_first_screenshot=True)
|
self.strategic_search_start()
|
||||||
combat = self.os_auto_search_daemon(drop=drop, strategic=strategic)
|
combat = self.os_auto_search_daemon(drop=drop, strategic=strategic)
|
||||||
finished_combat += combat
|
finished_combat += combat
|
||||||
except CampaignEnd:
|
except CampaignEnd:
|
||||||
@ -927,6 +916,8 @@ class OSMap(OSFleet, Map, GlobeCamera, StrategicSearchHandler):
|
|||||||
if self.zone.is_port:
|
if self.zone.is_port:
|
||||||
logger.info('Current zone is a port, do not need rescan')
|
logger.info('Current zone is a port, do not need rescan')
|
||||||
return False
|
return False
|
||||||
|
if self.is_cl1_enabled and not self.config.is_task_enabled('OpsiMeowfficerFarming'):
|
||||||
|
return False
|
||||||
|
|
||||||
for _ in range(5):
|
for _ in range(5):
|
||||||
if not self._solved_fleet_mechanism:
|
if not self._solved_fleet_mechanism:
|
||||||
|
|||||||
@ -91,18 +91,13 @@ class FleetSelector:
|
|||||||
index = 5 - index
|
index = 5 - index
|
||||||
return Button(area=(), color=(), button=area, name='%s_INDEX_%s' % (str(self._bar), str(index)))
|
return Button(area=(), color=(), button=area, name='%s_INDEX_%s' % (str(self._bar), str(index)))
|
||||||
|
|
||||||
def open(self, skip_first_screenshot=True):
|
def open(self):
|
||||||
"""
|
"""
|
||||||
Activate dropdown menu for fleet selection.
|
Activate dropdown menu for fleet selection.
|
||||||
"""
|
"""
|
||||||
main = self.main
|
main = self.main
|
||||||
click_timer = Timer(3, count=6)
|
click_timer = Timer(3, count=6)
|
||||||
while 1:
|
for _ in main.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
main.device.screenshot()
|
|
||||||
|
|
||||||
if main.handle_map_event():
|
if main.handle_map_event():
|
||||||
click_timer.reset()
|
click_timer.reset()
|
||||||
continue
|
continue
|
||||||
@ -116,18 +111,13 @@ class FleetSelector:
|
|||||||
main.device.click(self._choose)
|
main.device.click(self._choose)
|
||||||
click_timer.reset()
|
click_timer.reset()
|
||||||
|
|
||||||
def close(self, skip_first_screenshot=True):
|
def close(self):
|
||||||
"""
|
"""
|
||||||
Deactivate dropdown menu for fleet selection.
|
Deactivate dropdown menu for fleet selection.
|
||||||
"""
|
"""
|
||||||
main = self.main
|
main = self.main
|
||||||
click_timer = Timer(3, count=6)
|
click_timer = Timer(3, count=6)
|
||||||
while 1:
|
for _ in main.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
main.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if not self.bar_opened():
|
if not self.bar_opened():
|
||||||
break
|
break
|
||||||
@ -137,23 +127,17 @@ class FleetSelector:
|
|||||||
main.device.click(self._choose)
|
main.device.click(self._choose)
|
||||||
click_timer.reset()
|
click_timer.reset()
|
||||||
|
|
||||||
def click(self, index, skip_first_screenshot=True):
|
def click(self, index):
|
||||||
"""
|
"""
|
||||||
Choose a fleet on dropdown menu, and dropdown deactivated.
|
Choose a fleet on dropdown menu, and dropdown deactivated.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
index (int): Fleet index, 1-6.
|
index (int): Fleet index, 1-6.
|
||||||
skip_first_screenshot (bool):
|
|
||||||
"""
|
"""
|
||||||
main = self.main
|
main = self.main
|
||||||
button = self.get_button(index)
|
button = self.get_button(index)
|
||||||
click_timer = Timer(3, count=6)
|
click_timer = Timer(3, count=6)
|
||||||
while 1:
|
for _ in main.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
main.device.screenshot()
|
|
||||||
|
|
||||||
if main.handle_map_event():
|
if main.handle_map_event():
|
||||||
click_timer.reset()
|
click_timer.reset()
|
||||||
continue
|
continue
|
||||||
@ -171,25 +155,19 @@ class FleetSelector:
|
|||||||
main.device.click(button)
|
main.device.click(button)
|
||||||
click_timer.reset()
|
click_timer.reset()
|
||||||
|
|
||||||
def ensure_to_be(self, index, skip_first_screenshot=True):
|
def ensure_to_be(self, index):
|
||||||
"""
|
"""
|
||||||
Set to a specific fleet.
|
Set to a specific fleet.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
index (int): Fleet index, 1-4.
|
index (int): Fleet index, 1-4.
|
||||||
skip_first_screenshot (bool):
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
bool: If fleet switched.
|
bool: If fleet switched.
|
||||||
"""
|
"""
|
||||||
confirm_timer = Timer(1.5, count=5).start()
|
confirm_timer = Timer(1.5, count=5).start()
|
||||||
main = self.main
|
main = self.main
|
||||||
while 1:
|
for _ in main.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
main.device.screenshot()
|
|
||||||
|
|
||||||
if confirm_timer.reached():
|
if confirm_timer.reached():
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@ -158,7 +158,7 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
|
|||||||
self.config.HOMO_EDGE_COLOR_RANGE = (0, 33)
|
self.config.HOMO_EDGE_COLOR_RANGE = (0, 33)
|
||||||
self.config.MAP_ENSURE_EDGE_INSIGHT_CORNER = ''
|
self.config.MAP_ENSURE_EDGE_INSIGHT_CORNER = ''
|
||||||
|
|
||||||
def zone_init(self, fallback_init=True, skip_first_screenshot=True):
|
def zone_init(self, fallback_init=True):
|
||||||
"""
|
"""
|
||||||
Wrap get_current_zone(), set self.zone to the current zone.
|
Wrap get_current_zone(), set self.zone to the current zone.
|
||||||
This method must be called after entering a new zone.
|
This method must be called after entering a new zone.
|
||||||
@ -166,7 +166,6 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
fallback_init (bool): Whether to get zone from globe map when unable to parse zone name.
|
fallback_init (bool): Whether to get zone from globe map when unable to parse zone name.
|
||||||
skip_first_screenshot (bool):
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Zone: Current zone.
|
Zone: Current zone.
|
||||||
@ -178,12 +177,7 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
|
|||||||
self.wait_os_map_buttons()
|
self.wait_os_map_buttons()
|
||||||
logger.info('Get zone name')
|
logger.info('Get zone name')
|
||||||
timeout = Timer(1.5, count=5).start()
|
timeout = Timer(1.5, count=5).start()
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# Handle popups
|
# Handle popups
|
||||||
if self.handle_map_event():
|
if self.handle_map_event():
|
||||||
timeout.reset()
|
timeout.reset()
|
||||||
@ -236,13 +230,10 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
|
|||||||
"""
|
"""
|
||||||
return self.appear(MAP_EXIT, offset=(20, 20))
|
return self.appear(MAP_EXIT, offset=(20, 20))
|
||||||
|
|
||||||
def map_exit(self, skip_first_screenshot=True):
|
def map_exit(self):
|
||||||
"""
|
"""
|
||||||
Exit from an obscure zone, abyssal zone, or stronghold.
|
Exit from an obscure zone, abyssal zone, or stronghold.
|
||||||
|
|
||||||
Args:
|
|
||||||
skip_first_screenshot:
|
|
||||||
|
|
||||||
Pages:
|
Pages:
|
||||||
in: is_in_map
|
in: is_in_map
|
||||||
out: is_in_map, zone that you came from
|
out: is_in_map, zone that you came from
|
||||||
@ -250,12 +241,7 @@ class OSMapOperation(MapOrderHandler, MissionHandler, PortHandler, StorageHandle
|
|||||||
logger.hr('Map exit')
|
logger.hr('Map exit')
|
||||||
confirm_timer = Timer(1, count=2)
|
confirm_timer = Timer(1, count=2)
|
||||||
changed = False
|
changed = False
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if changed and self.is_in_map():
|
if changed and self.is_in_map():
|
||||||
if confirm_timer.reached():
|
if confirm_timer.reached():
|
||||||
|
|||||||
@ -35,7 +35,7 @@ class OperationSiren(
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
self = OperationSiren('month_test', task='OpsiMonthBoss')
|
self = OperationSiren('alas', task='OpsiMonthBoss')
|
||||||
|
|
||||||
self.config = self.config.merge(OSConfig())
|
self.config = self.config.merge(OSConfig())
|
||||||
|
|
||||||
|
|||||||
@ -108,14 +108,10 @@ class ActionPointHandler(UI, MapEventHandler):
|
|||||||
def is_current_ap_visible(self):
|
def is_current_ap_visible(self):
|
||||||
return self.match_template_color(CURRENT_AP_CHECK, offset=(40, 5), threshold=15)
|
return self.match_template_color(CURRENT_AP_CHECK, offset=(40, 5), threshold=15)
|
||||||
|
|
||||||
def action_point_use(self, skip_first_screenshot=True):
|
def action_point_use(self):
|
||||||
prev = self._action_point_current
|
prev = self._action_point_current
|
||||||
self.interval_clear(ACTION_POINT_USE)
|
self.interval_clear(ACTION_POINT_USE)
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.appear_then_click(ACTION_POINT_USE, offset=(20, 20), interval=3):
|
if self.appear_then_click(ACTION_POINT_USE, offset=(20, 20), interval=3):
|
||||||
self.device.sleep(0.3)
|
self.device.sleep(0.3)
|
||||||
@ -145,15 +141,13 @@ class ActionPointHandler(UI, MapEventHandler):
|
|||||||
self._action_point_current = current
|
self._action_point_current = current
|
||||||
self._action_point_box = box
|
self._action_point_box = box
|
||||||
self._action_point_total = total
|
self._action_point_total = total
|
||||||
|
# handle exceeds
|
||||||
|
if total > 3000:
|
||||||
|
self.config.override(OpsiGeneral_DoRandomMapEvent=False)
|
||||||
|
|
||||||
def action_point_safe_get(self, skip_first_screenshot=True):
|
def action_point_safe_get(self):
|
||||||
timeout = Timer(3, count=6).start()
|
timeout = Timer(3, count=6).start()
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.is_current_ap_visible():
|
if self.is_current_ap_visible():
|
||||||
break
|
break
|
||||||
@ -246,52 +240,34 @@ class ActionPointHandler(UI, MapEventHandler):
|
|||||||
logger.warning('Unable to find an active action point box button')
|
logger.warning('Unable to find an active action point box button')
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
def action_point_set_button(self, index, skip_first_screenshot=True):
|
def action_point_set_button(self, index):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
index (int): 0 to 3. 0 for oil, 1 for 20 ap box, 2 for 50 ap box, 3 for 100 ap box.
|
index (int): 0 to 3. 0 for oil, 1 for 20 ap box, 2 for 50 ap box, 3 for 100 ap box.
|
||||||
skip_first_screenshot (bool):
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
bool: If success.
|
bool: If success.
|
||||||
"""
|
"""
|
||||||
for _ in range(3):
|
for _ in self.loop(timeout=2):
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.action_point_get_active_button() == index:
|
if self.action_point_get_active_button() == index:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
self.device.click(ACTION_POINT_GRID[index, 0])
|
self.device.click(ACTION_POINT_GRID[index, 0])
|
||||||
self.device.sleep(0.3)
|
self.device.sleep(0.3)
|
||||||
|
else:
|
||||||
|
logger.warning('FSet action point button timeout')
|
||||||
|
return False
|
||||||
|
|
||||||
logger.warning('Failed to set action point button after 3 trial')
|
def action_point_get_buy_remain(self):
|
||||||
return False
|
|
||||||
|
|
||||||
def action_point_get_buy_remain(self, skip_first_screenshot=True):
|
|
||||||
"""
|
"""
|
||||||
Args:
|
|
||||||
skip_first_screenshot:
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
int: Remaining number of purchases of action points
|
int: Remaining number of purchases of action points
|
||||||
|
|
||||||
Pages:
|
Pages:
|
||||||
in: ACTION_POINT_USE
|
in: ACTION_POINT_USE
|
||||||
"""
|
"""
|
||||||
timeout = Timer(1, count=2).start()
|
|
||||||
current = 0
|
current = 0
|
||||||
while 1:
|
for _ in self.loop(timeout=1):
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if timeout.reached():
|
|
||||||
logger.warning('Get action points buy remain timeout')
|
|
||||||
break
|
|
||||||
|
|
||||||
current, _, total = OCR_ACTION_POINT_BUY_REMAIN.ocr(self.device.image)
|
current, _, total = OCR_ACTION_POINT_BUY_REMAIN.ocr(self.device.image)
|
||||||
|
|
||||||
@ -300,6 +276,8 @@ class ActionPointHandler(UI, MapEventHandler):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
break
|
break
|
||||||
|
else:
|
||||||
|
logger.warning('Get action points buy remain timeout')
|
||||||
|
|
||||||
return current
|
return current
|
||||||
|
|
||||||
@ -334,18 +312,13 @@ class ActionPointHandler(UI, MapEventHandler):
|
|||||||
logger.info('Not enough oil to buy')
|
logger.info('Not enough oil to buy')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def action_point_quit(self, skip_first_screenshot=True):
|
def action_point_quit(self):
|
||||||
"""
|
"""
|
||||||
Pages:
|
Pages:
|
||||||
in: ACTION_POINT_USE
|
in: ACTION_POINT_USE
|
||||||
out: page_os
|
out: page_os
|
||||||
"""
|
"""
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
# sometimes you have action point popup without black-blurred background
|
# sometimes you have action point popup without black-blurred background
|
||||||
# ACTION_POINT_CANCEL and OS_CHECK both appears
|
# ACTION_POINT_CANCEL and OS_CHECK both appears
|
||||||
@ -454,18 +427,13 @@ class ActionPointHandler(UI, MapEventHandler):
|
|||||||
logger.warning('Failed to get action points after 12 trial')
|
logger.warning('Failed to get action points after 12 trial')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def action_point_enter(self, skip_first_screenshot=True):
|
def action_point_enter(self):
|
||||||
"""
|
"""
|
||||||
Pages:
|
Pages:
|
||||||
in: OS_CHECK
|
in: OS_CHECK
|
||||||
out: ACTION_POINT_USE
|
out: ACTION_POINT_USE
|
||||||
"""
|
"""
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.appear(ACTION_POINT_USE, offset=(20, 20)):
|
if self.appear(ACTION_POINT_USE, offset=(20, 20)):
|
||||||
break
|
break
|
||||||
|
|
||||||
@ -500,10 +468,10 @@ class ActionPointHandler(UI, MapEventHandler):
|
|||||||
if not self.handle_action_point(zone, pinned, cost, keep_current_ap, check_rest_ap):
|
if not self.handle_action_point(zone, pinned, cost, keep_current_ap, check_rest_ap):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
while 1:
|
# wait until AP popup closed
|
||||||
|
for _ in self.loop():
|
||||||
if self.appear(IN_MAP, offset=(200, 5)):
|
if self.appear(IN_MAP, offset=(200, 5)):
|
||||||
break
|
break
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -525,9 +493,8 @@ class ActionPointHandler(UI, MapEventHandler):
|
|||||||
logger.info(f'Not having {amount} action points')
|
logger.info(f'Not having {amount} action points')
|
||||||
|
|
||||||
self.action_point_quit()
|
self.action_point_quit()
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if self.appear(IN_MAP, offset=(200, 5)):
|
if self.appear(IN_MAP, offset=(200, 5)):
|
||||||
break
|
break
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
return enough
|
return enough
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
from module.base.timer import Timer
|
from module.handler.enemy_searching import EnemySearchingHandler as EnemySearchingHandler_
|
||||||
from module.handler.enemy_searching import \
|
|
||||||
EnemySearchingHandler as EnemySearchingHandler_
|
|
||||||
from module.logger import logger
|
from module.logger import logger
|
||||||
from module.os.assets import MAP_GOTO_GLOBE_FOG
|
from module.os.assets import MAP_GOTO_GLOBE_FOG
|
||||||
from module.os_handler.assets import AUTO_SEARCH_REWARD, IN_MAP, ORDER_ENTER
|
from module.os_handler.assets import AUTO_SEARCH_REWARD, IN_MAP, ORDER_ENTER
|
||||||
@ -15,25 +13,16 @@ class EnemySearchingHandler(EnemySearchingHandler_):
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def wait_os_map_buttons(self, skip_first_screenshot=True):
|
def wait_os_map_buttons(self):
|
||||||
"""
|
"""
|
||||||
When entering a os map, radar and buttons slide out from the right.
|
When entering a os map, radar and buttons slide out from the right.
|
||||||
Wait until they slide to the final position.
|
Wait until they slide to the final position.
|
||||||
"""
|
"""
|
||||||
timeout = Timer(1, count=2).start()
|
for _ in self.loop(timeout=1):
|
||||||
while 1:
|
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
|
||||||
if timeout.reached():
|
|
||||||
logger.warning('wait_os_map_buttons timeout, assume waited')
|
|
||||||
break
|
|
||||||
if self.appear(ORDER_ENTER, offset=(20, 20)):
|
if self.appear(ORDER_ENTER, offset=(20, 20)):
|
||||||
break
|
break
|
||||||
|
|
||||||
# A game bug that AUTO_SEARCH_REWARD from the last cleared zone popups
|
# A game bug that AUTO_SEARCH_REWARD from the last cleared zone popups
|
||||||
if self.appear_then_click(AUTO_SEARCH_REWARD, offset=(50, 50), interval=3):
|
if self.appear_then_click(AUTO_SEARCH_REWARD, offset=(50, 50), interval=3):
|
||||||
continue
|
continue
|
||||||
|
else:
|
||||||
|
logger.warning('wait_os_map_buttons timeout, assume waited')
|
||||||
|
|||||||
@ -104,46 +104,6 @@ class MapEventHandler(EnemySearchingHandler):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def handle_siren_platform(self):
|
|
||||||
"""
|
|
||||||
Handle siren platform notice after entering map
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
bool: If handled
|
|
||||||
"""
|
|
||||||
if not self.handle_story_skip():
|
|
||||||
return False
|
|
||||||
|
|
||||||
logger.info('Handle siren platform')
|
|
||||||
timeout = Timer(self.MAP_ENEMY_SEARCHING_TIMEOUT_SECOND).start()
|
|
||||||
appeared = False
|
|
||||||
while 1:
|
|
||||||
self.device.screenshot()
|
|
||||||
if self.is_in_map():
|
|
||||||
timeout.start()
|
|
||||||
else:
|
|
||||||
timeout.reset()
|
|
||||||
|
|
||||||
if self.handle_story_skip():
|
|
||||||
timeout.reset()
|
|
||||||
continue
|
|
||||||
|
|
||||||
# End
|
|
||||||
if self.enemy_searching_appear():
|
|
||||||
appeared = True
|
|
||||||
else:
|
|
||||||
if appeared:
|
|
||||||
self.handle_enemy_flashing()
|
|
||||||
self.device.sleep(1)
|
|
||||||
logger.info('Enemy searching appeared.')
|
|
||||||
break
|
|
||||||
self.enemy_searching_color_initial()
|
|
||||||
if timeout.reached():
|
|
||||||
logger.info('Enemy searching timeout.')
|
|
||||||
break
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def handle_map_event(self, drop=None):
|
def handle_map_event(self, drop=None):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
@ -185,39 +145,27 @@ class MapEventHandler(EnemySearchingHandler):
|
|||||||
self._os_in_map_confirm_timer.reset()
|
self._os_in_map_confirm_timer.reset()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def ensure_no_map_event(self, skip_first_screenshot=True):
|
def ensure_no_map_event(self):
|
||||||
self._os_in_map_confirm_timer.reset()
|
self._os_in_map_confirm_timer.reset()
|
||||||
|
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.handle_map_event():
|
if self.handle_map_event():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.handle_os_in_map():
|
if self.handle_os_in_map():
|
||||||
break
|
break
|
||||||
|
|
||||||
def os_auto_search_quit(self, drop=None, skip_first_screenshot=True):
|
def os_auto_search_quit(self, drop=None):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
drop (DropImage):
|
drop (DropImage):
|
||||||
skip_first_screenshot (bool):
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
bool: True if current map cleared
|
bool: True if current map cleared
|
||||||
"""
|
"""
|
||||||
confirm_timer = Timer(1.2, count=3).start()
|
confirm_timer = Timer(1.2, count=3).start()
|
||||||
cleared = False
|
cleared = False
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.appear(AUTO_SEARCH_REWARD, offset=(50, 50), interval=2):
|
if self.appear(AUTO_SEARCH_REWARD, offset=(50, 50), interval=2):
|
||||||
if self.ensure_no_info_bar():
|
if self.ensure_no_info_bar():
|
||||||
cleared = True
|
cleared = True
|
||||||
|
|||||||
@ -15,19 +15,14 @@ class MapOrderHandler(MapOperation, ActionPointHandler, MapEventHandler, ZoneMan
|
|||||||
def is_in_map_order(self):
|
def is_in_map_order(self):
|
||||||
return self.appear(ORDER_CHECK, offset=(20, 20))
|
return self.appear(ORDER_CHECK, offset=(20, 20))
|
||||||
|
|
||||||
def order_enter(self, skip_first_screenshot=True):
|
def order_enter(self):
|
||||||
"""
|
"""
|
||||||
Pages:
|
Pages:
|
||||||
in: is_in_map
|
in: is_in_map
|
||||||
out: is_in_map_order
|
out: is_in_map_order
|
||||||
"""
|
"""
|
||||||
logger.info('Order enter')
|
logger.info('Order enter')
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.is_in_map_order():
|
if self.is_in_map_order():
|
||||||
break
|
break
|
||||||
@ -52,11 +47,10 @@ class MapOrderHandler(MapOperation, ActionPointHandler, MapEventHandler, ZoneMan
|
|||||||
self.ui_click(ORDER_CHECK, appear_button=self.is_in_map_order, check_button=self.is_in_map,
|
self.ui_click(ORDER_CHECK, appear_button=self.is_in_map_order, check_button=self.is_in_map,
|
||||||
skip_first_screenshot=True)
|
skip_first_screenshot=True)
|
||||||
|
|
||||||
def order_execute(self, button, skip_first_screenshot=True):
|
def order_execute(self, button):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
button (Button): A button in navigational order page.
|
button (Button): A button in navigational order page.
|
||||||
skip_first_screenshot (bool):
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
bool: If success
|
bool: If success
|
||||||
@ -69,15 +63,10 @@ class MapOrderHandler(MapOperation, ActionPointHandler, MapEventHandler, ZoneMan
|
|||||||
self.order_enter()
|
self.order_enter()
|
||||||
|
|
||||||
missing_timer = Timer(1, count=3).start()
|
missing_timer = Timer(1, count=3).start()
|
||||||
confirm_timer = Timer(1.2, count=4)
|
confirm_timer = Timer(1.2, count=4).start()
|
||||||
assume_zone = self.name_to_zone(11)
|
assume_zone = self.name_to_zone(11)
|
||||||
|
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.is_in_map():
|
if self.is_in_map():
|
||||||
if confirm_timer.reached():
|
if confirm_timer.reached():
|
||||||
@ -109,13 +98,9 @@ class MapOrderHandler(MapOperation, ActionPointHandler, MapEventHandler, ZoneMan
|
|||||||
missing_timer.reset()
|
missing_timer.reset()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
def wait_until_order_finished(self, skip_first_screenshot=True):
|
def wait_until_order_finished(self):
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
# End
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.is_in_map() and self.appear(ORDER_ENTER, offset=(20, 20)):
|
if self.is_in_map() and self.appear(ORDER_ENTER, offset=(20, 20)):
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@ from datetime import timedelta
|
|||||||
|
|
||||||
from module.base.timer import Timer
|
from module.base.timer import Timer
|
||||||
from module.base.utils import *
|
from module.base.utils import *
|
||||||
from module.config.utils import get_os_next_reset, DEFAULT_TIME
|
from module.config.utils import DEFAULT_TIME, get_os_next_reset
|
||||||
from module.logger import logger
|
from module.logger import logger
|
||||||
from module.map_detection.utils import fit_points
|
from module.map_detection.utils import fit_points
|
||||||
from module.os.assets import GLOBE_GOTO_MAP
|
from module.os.assets import GLOBE_GOTO_MAP
|
||||||
@ -42,7 +42,7 @@ class MissionHandler(GlobeOperation, ZoneManager):
|
|||||||
def is_in_os_mission(self):
|
def is_in_os_mission(self):
|
||||||
return self.appear(MISSION_CHECK, offset=(20, 20))
|
return self.appear(MISSION_CHECK, offset=(20, 20))
|
||||||
|
|
||||||
def os_mission_enter(self, skip_first_screenshot=True):
|
def os_mission_enter(self):
|
||||||
"""
|
"""
|
||||||
Enter mission list and claim mission reward.
|
Enter mission list and claim mission reward.
|
||||||
|
|
||||||
@ -52,12 +52,7 @@ class MissionHandler(GlobeOperation, ZoneManager):
|
|||||||
"""
|
"""
|
||||||
logger.info('OS mission enter')
|
logger.info('OS mission enter')
|
||||||
confirm_timer = Timer(2, count=6).start()
|
confirm_timer = Timer(2, count=6).start()
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.is_in_os_mission() \
|
if self.is_in_os_mission() \
|
||||||
and not self.appear(MISSION_FINISH, offset=(20, 20)) \
|
and not self.appear(MISSION_FINISH, offset=(20, 20)) \
|
||||||
@ -95,14 +90,9 @@ class MissionHandler(GlobeOperation, ZoneManager):
|
|||||||
confirm_timer.reset()
|
confirm_timer.reset()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
def os_mission_quit(self, skip_first_screenshot=True):
|
def os_mission_quit(self):
|
||||||
logger.info('OS mission quit')
|
logger.info('OS mission quit')
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
# sometimes you have os mission popup without black-blurred background
|
# sometimes you have os mission popup without black-blurred background
|
||||||
# MISSION_QUIT and is_in_map appears
|
# MISSION_QUIT and is_in_map appears
|
||||||
@ -145,13 +135,7 @@ class MissionHandler(GlobeOperation, ZoneManager):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
logger.info('Checkout os mission')
|
logger.info('Checkout os mission')
|
||||||
skip_first_screenshot = True
|
for _ in self.loop():
|
||||||
while 1:
|
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.is_zone_pinned():
|
if self.is_zone_pinned():
|
||||||
if self.get_zone_pinned_name() == 'ARCHIVE':
|
if self.get_zone_pinned_name() == 'ARCHIVE':
|
||||||
@ -194,14 +178,8 @@ class MissionHandler(GlobeOperation, ZoneManager):
|
|||||||
|
|
||||||
# MISSION_OVERVIEW_CHECK
|
# MISSION_OVERVIEW_CHECK
|
||||||
confirm_timer = Timer(1, count=3).start()
|
confirm_timer = Timer(1, count=3).start()
|
||||||
skip_first_screenshot = True
|
|
||||||
success = True
|
success = True
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.handle_manjuu():
|
if self.handle_manjuu():
|
||||||
confirm_timer.reset()
|
confirm_timer.reset()
|
||||||
continue
|
continue
|
||||||
|
|||||||
@ -62,14 +62,10 @@ class OSStatus(UI):
|
|||||||
tasks = SelectedGrids(self.config.pending_task + self.config.waiting_task).filter(func).sort('next_run')
|
tasks = SelectedGrids(self.config.pending_task + self.config.waiting_task).filter(func).sort('next_run')
|
||||||
return tasks.first_or_none()
|
return tasks.first_or_none()
|
||||||
|
|
||||||
def get_yellow_coins(self, skip_first_screenshot=True) -> int:
|
def get_yellow_coins(self) -> int:
|
||||||
timeout = Timer(2, count=3).start()
|
timeout = Timer(2, count=3).start()
|
||||||
while True:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
# End
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
yellow_coins = OCR_SHOP_YELLOW_COINS.ocr(self.device.image)
|
yellow_coins = OCR_SHOP_YELLOW_COINS.ocr(self.device.image)
|
||||||
if timeout.reached():
|
if timeout.reached():
|
||||||
logger.warning('Get yellow coins timeout')
|
logger.warning('Get yellow coins timeout')
|
||||||
|
|||||||
@ -54,14 +54,8 @@ class PortHandler(OSShop):
|
|||||||
skip_first_screenshot=True)
|
skip_first_screenshot=True)
|
||||||
|
|
||||||
confirm_timer = Timer(1.5, count=3).start()
|
confirm_timer = Timer(1.5, count=3).start()
|
||||||
skip_first_screenshot = True
|
|
||||||
success = True
|
success = True
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.appear_then_click(PORT_MISSION_ACCEPT, offset=(20, 20), interval=0.2):
|
if self.appear_then_click(PORT_MISSION_ACCEPT, offset=(20, 20), interval=0.2):
|
||||||
confirm_timer.reset()
|
confirm_timer.reset()
|
||||||
continue
|
continue
|
||||||
@ -110,14 +104,8 @@ class PortHandler(OSShop):
|
|||||||
self.ui_click(PORT_GOTO_DOCK, appear_button=PORT_CHECK, check_button=PORT_DOCK_CHECK,
|
self.ui_click(PORT_GOTO_DOCK, appear_button=PORT_CHECK, check_button=PORT_DOCK_CHECK,
|
||||||
skip_first_screenshot=True)
|
skip_first_screenshot=True)
|
||||||
|
|
||||||
skip_first_screenshot = True
|
|
||||||
repaired = False
|
repaired = False
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.info_bar_count():
|
if self.info_bar_count():
|
||||||
break
|
break
|
||||||
|
|||||||
@ -16,19 +16,14 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
def is_in_storage(self):
|
def is_in_storage(self):
|
||||||
return self.appear(STORAGE_CHECK, offset=(20, 20))
|
return self.appear(STORAGE_CHECK, offset=(20, 20))
|
||||||
|
|
||||||
def storage_enter(self, skip_first_screenshot=True):
|
def storage_enter(self):
|
||||||
"""
|
"""
|
||||||
Pages:
|
Pages:
|
||||||
in: is_in_map, STORAGE_ENTER
|
in: is_in_map, STORAGE_ENTER
|
||||||
out: STORAGE_CHECK
|
out: STORAGE_CHECK
|
||||||
"""
|
"""
|
||||||
logger.info('Storage enter')
|
logger.info('Storage enter')
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# End
|
# End
|
||||||
if self.is_in_storage():
|
if self.is_in_storage():
|
||||||
break
|
break
|
||||||
@ -52,11 +47,10 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
logger.info('Storage quit')
|
logger.info('Storage quit')
|
||||||
self.ui_back(STORAGE_ENTER, offset=(200, 5), skip_first_screenshot=True)
|
self.ui_back(STORAGE_ENTER, offset=(200, 5), skip_first_screenshot=True)
|
||||||
|
|
||||||
def _storage_item_use(self, button, skip_first_screenshot=True):
|
def _storage_item_use(self, button):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
button (Button): Item
|
button (Button): Item
|
||||||
skip_first_screenshot (bool):
|
|
||||||
|
|
||||||
Pages:
|
Pages:
|
||||||
in: STORAGE_CHECK
|
in: STORAGE_CHECK
|
||||||
@ -71,12 +65,7 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
self.interval_clear(GET_ADAPTABILITY)
|
self.interval_clear(GET_ADAPTABILITY)
|
||||||
self.interval_clear(GET_MISSION)
|
self.interval_clear(GET_MISSION)
|
||||||
|
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
# Accidentally clicked on an item, having popups for its info
|
# Accidentally clicked on an item, having popups for its info
|
||||||
if self.appear(GET_MISSION, offset=True, interval=2):
|
if self.appear(GET_MISSION, offset=True, interval=2):
|
||||||
logger.info(f'_storage_item_use item info -> {GET_MISSION}')
|
logger.info(f'_storage_item_use item info -> {GET_MISSION}')
|
||||||
@ -112,22 +101,14 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
if success and self.appear(STORAGE_CHECK, offset=(20, 20)):
|
if success and self.appear(STORAGE_CHECK, offset=(20, 20)):
|
||||||
break
|
break
|
||||||
|
|
||||||
def storage_logger_use_all(self, skip_first_screenshot=True):
|
def storage_logger_use_all(self):
|
||||||
"""
|
"""
|
||||||
Args:
|
|
||||||
skip_first_screenshot:
|
|
||||||
|
|
||||||
Pages:
|
Pages:
|
||||||
in: STORAGE_CHECK
|
in: STORAGE_CHECK
|
||||||
out: STORAGE_CHECK, scroll to bottom
|
out: STORAGE_CHECK, scroll to bottom
|
||||||
"""
|
"""
|
||||||
logger.hr('Storage logger use all')
|
logger.hr('Storage logger use all')
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if SCROLL_STORAGE.appear(main=self):
|
if SCROLL_STORAGE.appear(main=self):
|
||||||
SCROLL_STORAGE.set_bottom(main=self, skip_first_screenshot=True)
|
SCROLL_STORAGE.set_bottom(main=self, skip_first_screenshot=True)
|
||||||
|
|
||||||
@ -142,11 +123,8 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
logger.info('All loggers in storage have been used')
|
logger.info('All loggers in storage have been used')
|
||||||
break
|
break
|
||||||
|
|
||||||
def storage_sample_use_all(self, skip_first_screenshot=True):
|
def storage_sample_use_all(self):
|
||||||
"""
|
"""
|
||||||
Args:
|
|
||||||
skip_first_screenshot:
|
|
||||||
|
|
||||||
Pages:
|
Pages:
|
||||||
in: STORAGE_CHECK
|
in: STORAGE_CHECK
|
||||||
out: STORAGE_CHECK, scroll to bottom
|
out: STORAGE_CHECK, scroll to bottom
|
||||||
@ -156,12 +134,7 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
TEMPLATE_STORAGE_QUALITY_OFFENSE, TEMPLATE_STORAGE_QUALITY_SURVIVAL, TEMPLATE_STORAGE_QUALITY_COMBAT
|
TEMPLATE_STORAGE_QUALITY_OFFENSE, TEMPLATE_STORAGE_QUALITY_SURVIVAL, TEMPLATE_STORAGE_QUALITY_COMBAT
|
||||||
]
|
]
|
||||||
for sample_type in sample_types:
|
for sample_type in sample_types:
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
image = rgb2gray(self.device.image)
|
image = rgb2gray(self.device.image)
|
||||||
items = sample_type.match_multi(image, similarity=0.75)
|
items = sample_type.match_multi(image, similarity=0.75)
|
||||||
logger.attr('Storage_sample', len(items))
|
logger.attr('Storage_sample', len(items))
|
||||||
@ -178,12 +151,11 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
self.storage_sample_use_all()
|
self.storage_sample_use_all()
|
||||||
self.storage_quit()
|
self.storage_quit()
|
||||||
|
|
||||||
def _storage_coordinate_checkout(self, button, types=('OBSCURE',), skip_first_screenshot=True):
|
def _storage_coordinate_checkout(self, button, types=('OBSCURE',)):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
button (Button): Item
|
button (Button): Item
|
||||||
types (tuple[str]):
|
types (tuple[str]):
|
||||||
skip_first_screenshot (bool):
|
|
||||||
|
|
||||||
Pages:
|
Pages:
|
||||||
in: STORAGE_CHECK
|
in: STORAGE_CHECK
|
||||||
@ -194,12 +166,7 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
STORAGE_COORDINATE_CHECKOUT
|
STORAGE_COORDINATE_CHECKOUT
|
||||||
])
|
])
|
||||||
self.popup_interval_clear()
|
self.popup_interval_clear()
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.appear(STORAGE_CHECK, offset=(30, 30), interval=5):
|
if self.appear(STORAGE_CHECK, offset=(30, 30), interval=5):
|
||||||
self.device.click(button)
|
self.device.click(button)
|
||||||
continue
|
continue
|
||||||
@ -233,11 +200,10 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
else:
|
else:
|
||||||
raise ScriptError(f'Unknown storage item: {item}')
|
raise ScriptError(f'Unknown storage item: {item}')
|
||||||
|
|
||||||
def storage_checkout_item(self, item, skip_first_screenshot=True):
|
def storage_checkout_item(self, item):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
item (str): 'OBSCURE' or 'ABYSSAL'.
|
item (str): 'OBSCURE' or 'ABYSSAL'.
|
||||||
skip_first_screenshot:
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
bool: If checkout
|
bool: If checkout
|
||||||
@ -252,12 +218,7 @@ class StorageHandler(GlobeOperation, ZoneManager):
|
|||||||
SCROLL_STORAGE.set_top(main=self, skip_first_screenshot=skip_first_screenshot)
|
SCROLL_STORAGE.set_top(main=self, skip_first_screenshot=skip_first_screenshot)
|
||||||
|
|
||||||
confirm_timer = Timer(0.6, count=2).start()
|
confirm_timer = Timer(0.6, count=2).start()
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
image = rgb2gray(self.device.image)
|
image = rgb2gray(self.device.image)
|
||||||
items = self._storage_item_to_template(item).match_multi(image, similarity=0.75)
|
items = self._storage_item_to_template(item).match_multi(image, similarity=0.75)
|
||||||
logger.attr(f'Storage_{item}', len(items))
|
logger.attr(f'Storage_{item}', len(items))
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
from module.base.timer import Timer
|
|
||||||
from module.base.utils import get_color
|
from module.base.utils import get_color
|
||||||
from module.logger import logger
|
from module.logger import logger
|
||||||
from module.os_handler.assets import *
|
from module.os_handler.assets import *
|
||||||
@ -9,15 +8,11 @@ STRATEGIC_SEARCH_SCROLL = Scroll(STRATEGIC_SEARCH_SCROLL_AREA, color=(247, 211,
|
|||||||
|
|
||||||
|
|
||||||
class StrategicSearchHandler(MapEventHandler):
|
class StrategicSearchHandler(MapEventHandler):
|
||||||
def strategy_search_enter(self, skip_first_screenshot=False):
|
def strategy_search_enter(self):
|
||||||
logger.info('Strategic search enter')
|
logger.info('Strategic search enter')
|
||||||
self.interval_clear(STRATEGIC_SEARCH_MAP_OPTION_OFF)
|
self.interval_clear(STRATEGIC_SEARCH_MAP_OPTION_OFF)
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
# End
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.appear(STRATEGIC_SEARCH_POPUP_CHECK, offset=(20, 20)):
|
if self.appear(STRATEGIC_SEARCH_POPUP_CHECK, offset=(20, 20)):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -29,39 +24,28 @@ class StrategicSearchHandler(MapEventHandler):
|
|||||||
self.device.click(STRATEGIC_SEARCH_MAP_OPTION_OFF)
|
self.device.click(STRATEGIC_SEARCH_MAP_OPTION_OFF)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
def strategic_search_set_tab(self, skip_first_screenshot=False):
|
def strategic_search_set_tab(self):
|
||||||
logger.info('Strategic search set tab')
|
logger.info('Strategic search set tab')
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if get_color(self.device.image, STRATEGIC_SEARCH_TAB_SECURED.area)[2] <= 150:
|
if get_color(self.device.image, STRATEGIC_SEARCH_TAB_SECURED.area)[2] <= 150:
|
||||||
self.device.click(STRATEGIC_SEARCH_TAB_SECURED)
|
self.device.click(STRATEGIC_SEARCH_TAB_SECURED)
|
||||||
continue
|
continue
|
||||||
if get_color(self.device.image, STRATEGIC_SEARCH_TAB_SECURED.area)[2] > 150:
|
if get_color(self.device.image, STRATEGIC_SEARCH_TAB_SECURED.area)[2] > 150:
|
||||||
break
|
break
|
||||||
|
|
||||||
def _strategy_search_scroll_appear(self, skip_first_screenshot=True):
|
def _strategy_search_scroll_appear(self):
|
||||||
"""
|
"""
|
||||||
Returns:
|
Returns:
|
||||||
bool: If it still exists
|
bool: If it still exists
|
||||||
"""
|
"""
|
||||||
timeout = Timer(2, count=4).start()
|
for _ in self.loop(timeout=2):
|
||||||
while 1:
|
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if STRATEGIC_SEARCH_SCROLL.appear(main=self):
|
if STRATEGIC_SEARCH_SCROLL.appear(main=self):
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
logger.warning('STRATEGIC_SEARCH_SCROLL disappeared')
|
logger.warning('STRATEGIC_SEARCH_SCROLL disappeared')
|
||||||
if timeout.reached():
|
else:
|
||||||
logger.warning('STRATEGIC_SEARCH_SCROLL disappeared confirm')
|
logger.warning('STRATEGIC_SEARCH_SCROLL disappeared confirm')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _strategy_option_selected(self, button):
|
def _strategy_option_selected(self, button):
|
||||||
"""
|
"""
|
||||||
@ -69,21 +53,18 @@ class StrategicSearchHandler(MapEventHandler):
|
|||||||
"""
|
"""
|
||||||
return self.image_color_count(button.button, color=(156, 255, 82), count=30)
|
return self.image_color_count(button.button, color=(156, 255, 82), count=30)
|
||||||
|
|
||||||
def strategic_search_set_option(self, skip_first_screenshot=True):
|
def strategic_search_set_option(self):
|
||||||
"""
|
"""
|
||||||
Args:
|
|
||||||
skip_first_screenshot:
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
If success. False if strategic settings closed for unknown reason.
|
If success. False if strategic settings closed for unknown reason.
|
||||||
"""
|
"""
|
||||||
logger.info('Strategic search set option')
|
logger.info('Strategic search set option')
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
if self._strategy_option_selected(STRATEGIC_SEARCH_ZONEMODE_REPEAT) \
|
||||||
skip_first_screenshot = False
|
and self._strategy_option_selected(STRATEGIC_SEARCH_MERCHANT_STOP):
|
||||||
else:
|
logger.attr('zone_mode', 'repeat')
|
||||||
self.device.screenshot()
|
logger.attr('encounter_merchant', 'stop')
|
||||||
|
break
|
||||||
if self._strategy_option_selected(STRATEGIC_SEARCH_ZONEMODE_RANDOM):
|
if self._strategy_option_selected(STRATEGIC_SEARCH_ZONEMODE_RANDOM):
|
||||||
logger.attr('zone_mode', 'random')
|
logger.attr('zone_mode', 'random')
|
||||||
self.device.click(STRATEGIC_SEARCH_ZONEMODE_REPEAT)
|
self.device.click(STRATEGIC_SEARCH_ZONEMODE_REPEAT)
|
||||||
@ -92,36 +73,24 @@ class StrategicSearchHandler(MapEventHandler):
|
|||||||
logger.attr('encounter_merchant', 'continue')
|
logger.attr('encounter_merchant', 'continue')
|
||||||
self.device.click(STRATEGIC_SEARCH_MERCHANT_STOP)
|
self.device.click(STRATEGIC_SEARCH_MERCHANT_STOP)
|
||||||
continue
|
continue
|
||||||
if self._strategy_option_selected(STRATEGIC_SEARCH_ZONEMODE_REPEAT) \
|
|
||||||
and self._strategy_option_selected(STRATEGIC_SEARCH_MERCHANT_STOP):
|
|
||||||
logger.attr('zone_mode', 'repeat')
|
|
||||||
logger.attr('encounter_merchant', 'stop')
|
|
||||||
skip_first_screenshot = True
|
|
||||||
break
|
|
||||||
|
|
||||||
STRATEGIC_SEARCH_SCROLL.drag_threshold = 0.1
|
STRATEGIC_SEARCH_SCROLL.drag_threshold = 0.1
|
||||||
STRATEGIC_SEARCH_SCROLL.set(0.5, main=self)
|
STRATEGIC_SEARCH_SCROLL.set(0.5, main=self)
|
||||||
if not self._strategy_search_scroll_appear():
|
if not self._strategy_search_scroll_appear():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
self.appear(STRATEGIC_SEARCH_DEVICE_CHECK, offset=(20, 200), similarity=0.7)
|
self.appear(STRATEGIC_SEARCH_DEVICE_CHECK, offset=(20, 200), similarity=0.7)
|
||||||
STRATEGIC_SEARCH_DEVICE_STOP.load_offset(STRATEGIC_SEARCH_DEVICE_CHECK)
|
STRATEGIC_SEARCH_DEVICE_STOP.load_offset(STRATEGIC_SEARCH_DEVICE_CHECK)
|
||||||
STRATEGIC_SEARCH_DEVICE_CONTINUE.load_offset(STRATEGIC_SEARCH_DEVICE_CHECK)
|
STRATEGIC_SEARCH_DEVICE_CONTINUE.load_offset(STRATEGIC_SEARCH_DEVICE_CHECK)
|
||||||
|
|
||||||
|
if self._strategy_option_selected(STRATEGIC_SEARCH_DEVICE_STOP):
|
||||||
|
logger.attr('encounter_device', 'stop')
|
||||||
|
break
|
||||||
if self._strategy_option_selected(STRATEGIC_SEARCH_DEVICE_CONTINUE):
|
if self._strategy_option_selected(STRATEGIC_SEARCH_DEVICE_CONTINUE):
|
||||||
logger.attr('encounter_device', 'continue')
|
logger.attr('encounter_device', 'continue')
|
||||||
self.device.click(STRATEGIC_SEARCH_DEVICE_STOP)
|
self.device.click(STRATEGIC_SEARCH_DEVICE_STOP)
|
||||||
continue
|
continue
|
||||||
if self._strategy_option_selected(STRATEGIC_SEARCH_DEVICE_STOP):
|
|
||||||
logger.attr('encounter_device', 'stop')
|
|
||||||
skip_first_screenshot = True
|
|
||||||
break
|
|
||||||
|
|
||||||
STRATEGIC_SEARCH_SCROLL.drag_threshold = 0.05
|
STRATEGIC_SEARCH_SCROLL.drag_threshold = 0.05
|
||||||
STRATEGIC_SEARCH_SCROLL.edge_add = (0.5, 0.8)
|
STRATEGIC_SEARCH_SCROLL.edge_add = (0.5, 0.8)
|
||||||
@ -129,42 +98,31 @@ class StrategicSearchHandler(MapEventHandler):
|
|||||||
if not self._strategy_search_scroll_appear():
|
if not self._strategy_search_scroll_appear():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
self.appear(STRATEGIC_SEARCH_SUBMIT_CHECK, offset=(20, 20), similarity=0.7)
|
self.appear(STRATEGIC_SEARCH_SUBMIT_CHECK, offset=(20, 20), similarity=0.7)
|
||||||
STRATEGIC_SEARCH_SUBMIT_OFF.load_offset(STRATEGIC_SEARCH_SUBMIT_CHECK)
|
STRATEGIC_SEARCH_SUBMIT_OFF.load_offset(STRATEGIC_SEARCH_SUBMIT_CHECK)
|
||||||
STRATEGIC_SEARCH_SUBMIT_ON.load_offset(STRATEGIC_SEARCH_SUBMIT_CHECK)
|
STRATEGIC_SEARCH_SUBMIT_ON.load_offset(STRATEGIC_SEARCH_SUBMIT_CHECK)
|
||||||
|
|
||||||
|
if self._strategy_option_selected(STRATEGIC_SEARCH_SUBMIT_ON):
|
||||||
|
logger.attr('auto_submit', 'on')
|
||||||
|
break
|
||||||
if self._strategy_option_selected(STRATEGIC_SEARCH_SUBMIT_OFF):
|
if self._strategy_option_selected(STRATEGIC_SEARCH_SUBMIT_OFF):
|
||||||
logger.attr('auto_submit', 'off')
|
logger.attr('auto_submit', 'off')
|
||||||
self.device.click(STRATEGIC_SEARCH_SUBMIT_ON)
|
self.device.click(STRATEGIC_SEARCH_SUBMIT_ON)
|
||||||
continue
|
continue
|
||||||
if self._strategy_option_selected(STRATEGIC_SEARCH_SUBMIT_ON):
|
|
||||||
logger.attr('auto_submit', 'on')
|
|
||||||
break
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def strategic_search_confirm(self, skip_first_screenshot=False):
|
def strategic_search_confirm(self):
|
||||||
logger.info('Strategic search confirm')
|
logger.info('Strategic search confirm')
|
||||||
while 1:
|
for _ in self.loop():
|
||||||
if skip_first_screenshot:
|
|
||||||
skip_first_screenshot = False
|
|
||||||
else:
|
|
||||||
self.device.screenshot()
|
|
||||||
|
|
||||||
if self.appear(STRATEGIC_SEARCH_POPUP_CHECK, offset=(20, 20)) \
|
if self.appear(STRATEGIC_SEARCH_POPUP_CHECK, offset=(20, 20)) \
|
||||||
and self.handle_popup_confirm(offset=(30, 30), name='STRATEGIC_SEARCH'):
|
and self.handle_popup_confirm(offset=(30, 30), name='STRATEGIC_SEARCH'):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if self.is_in_map():
|
if self.is_in_map():
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def strategic_search_start(self, skip_first_screenshot=False):
|
def strategic_search_start(self):
|
||||||
"""
|
"""
|
||||||
Returns:
|
Returns:
|
||||||
If success.
|
If success.
|
||||||
@ -175,12 +133,12 @@ class StrategicSearchHandler(MapEventHandler):
|
|||||||
"""
|
"""
|
||||||
logger.hr('Strategic search start')
|
logger.hr('Strategic search start')
|
||||||
for _ in range(3):
|
for _ in range(3):
|
||||||
self.strategy_search_enter(skip_first_screenshot=skip_first_screenshot)
|
self.strategy_search_enter()
|
||||||
self.strategic_search_set_tab(skip_first_screenshot=True)
|
self.strategic_search_set_tab()
|
||||||
success = self.strategic_search_set_option(skip_first_screenshot=True)
|
success = self.strategic_search_set_option()
|
||||||
if not success:
|
if not success:
|
||||||
continue
|
continue
|
||||||
self.strategic_search_confirm(skip_first_screenshot=True)
|
self.strategic_search_confirm()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
logger.warning('Failed to start strategic search')
|
logger.warning('Failed to start strategic search')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user