StarRailCopilot/tasks/rogue/entry/weekly.py
2023-12-19 01:01:31 +08:00

121 lines
3.6 KiB
Python

from module.base.timer import Timer
from module.logger import logger
from tasks.rogue.assets.assets_rogue_weekly import CLAIM_ALL, REWARD_CHECK, REWARD_CLOSE, REWARD_ENTER, REWARD_RED_DOT
from tasks.rogue.blessing.ui import RogueUI
class RogueRewardHandler(RogueUI):
def _rogue_reward_appear(self) -> bool:
"""
Pages:
in: is_page_rogue_main()
"""
if self.image_color_count(REWARD_RED_DOT, color=(214, 45, 47), threshold=221, count=50):
return True
return False
def _rogue_reward_enter(self, skip_first_screenshot=True):
"""
Pages:
in: is_page_rogue_main()
out: REWARD_CHECK
"""
logger.info('Rogue reward enter')
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if self.appear(REWARD_CHECK):
break
if self.appear_then_click(REWARD_ENTER, interval=2):
continue
def _rogue_reward_exit(self, skip_first_screenshot=True):
"""
Pages:
in: REWARD_CHECK
out: is_page_rogue_main()
"""
logger.info('Rogue reward exit')
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if self.is_page_rogue_main():
break
if self.appear_then_click(REWARD_CLOSE, interval=2):
continue
if self.handle_reward():
continue
def _rogue_reward_claim(self, skip_first_screenshot=True):
"""
Pages:
in: REWARD_CHECK, CLAIM_ALL
out: REWARD_CHECK
"""
logger.info('Rogue reward claim')
claimed = False
appear = False
click_count = 0
timeout = Timer(2, count=10).start()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
# End
if claimed:
if self.appear(REWARD_CHECK):
return True
if self.is_page_rogue_main():
return True
if not appear and timeout.reached():
logger.warning('Rogue reward claim timeout, CLAIM_ALL not found')
return False
if click_count > 3:
logger.warning('Failed to claim weekly rewards, probably because immersifier is full')
return False
if self.handle_reward():
claimed = True
continue
if self.interval_is_reached(CLAIM_ALL, interval=1):
if self.image_color_count(CLAIM_ALL, color=(255, 199, 89), threshold=221, count=500):
self.device.click(CLAIM_ALL)
self.interval_reset(CLAIM_ALL, interval=1)
appear = True
click_count += 1
continue
def rogue_reward_claim(self):
"""
Claim possible rogue rewards.
Returns:
bool: If claimed.
Pages:
in: is_page_rogue_main()
out: is_page_rogue_main()
"""
logger.hr('Rogue reward claim', level=2)
if self._rogue_reward_appear():
self._rogue_reward_enter()
success = self._rogue_reward_claim()
self._rogue_reward_exit()
return success
else:
logger.info('No rogue reward')
return False