mirror of
https://github.com/LmeSzinc/StarRailCopilot.git
synced 2025-02-07 11:19:47 +00:00
85 lines
3.1 KiB
Python
85 lines
3.1 KiB
Python
from module.base.timer import Timer
|
|
from module.logger import logger
|
|
from module.ocr.ocr import Ocr
|
|
from tasks.base.page import page_event
|
|
from tasks.base.ui import UI
|
|
from tasks.freebies.assets.assets_freebies_gift_of_odyssey import (
|
|
OCR_CLAIM,
|
|
OCR_EVENT,
|
|
EVENT_SELECTED,
|
|
GET_REWARD_BUTTON,
|
|
)
|
|
from tasks.freebies.keywords import KEYWORDS_FREEBIES_GIFT_OF_ODYSSEY, GiftOfOdysseyEvent
|
|
|
|
|
|
class GiftofOdyssey(UI):
|
|
|
|
def run(self):
|
|
logger.hr("Gift of Odyssey", level=1)
|
|
self.ui_ensure(page_event)
|
|
if self._select_event():
|
|
logger.info("Event selected")
|
|
self._get_reward()
|
|
|
|
def _select_event(self):
|
|
logger.info("Selecting Gift of Odyssey event")
|
|
ocr = Ocr(OCR_EVENT)
|
|
# When Gift of Odyssey event is the first event, the ocr results will be effected due to the animation of selected event
|
|
timer = Timer(0.5, count=1).start()
|
|
while 1:
|
|
self.device.screenshot()
|
|
results = ocr.matched_ocr(self.device.image, GiftOfOdysseyEvent)
|
|
if len(results) == 0 and timer.reached():
|
|
logger.info("Event not found, probably already been claimed")
|
|
self.config.stored.GiftofOdysseyClaimed.value = 7
|
|
return False
|
|
if len(results) == 1:
|
|
break
|
|
|
|
skip_first_screenshot = True
|
|
while 1:
|
|
if skip_first_screenshot:
|
|
skip_first_screenshot = False
|
|
else:
|
|
self.device.screenshot()
|
|
|
|
if self.appear(EVENT_SELECTED):
|
|
break
|
|
if self.device.click(results[0]):
|
|
continue
|
|
return True
|
|
|
|
def _get_claim_status(self, image):
|
|
ocr = Ocr(OCR_CLAIM)
|
|
results = ocr.matched_ocr(image, GiftOfOdysseyEvent)
|
|
claimed = [result for result in results if result == KEYWORDS_FREEBIES_GIFT_OF_ODYSSEY.Claimed]
|
|
claim = [result for result in results if result == KEYWORDS_FREEBIES_GIFT_OF_ODYSSEY.Claim]
|
|
awaiting = [result for result in results if result == KEYWORDS_FREEBIES_GIFT_OF_ODYSSEY.Awaiting_check_in]
|
|
status = len(claimed), len(claim), len(awaiting)
|
|
logger.info(f"Claim status (Claimed, Claim, Awaiting check in): {status}")
|
|
if sum(status) != 7:
|
|
logger.warning("Num of OCR results is not seven")
|
|
self.config.stored.GiftofOdysseyClaimed.value = status[0]
|
|
return status
|
|
|
|
def _get_reward(self):
|
|
logger.info("Getting reward")
|
|
skip_first_screenshot = True
|
|
interval = Timer(2)
|
|
while 1:
|
|
if skip_first_screenshot:
|
|
skip_first_screenshot = False
|
|
else:
|
|
self.device.screenshot()
|
|
|
|
if self.appear(EVENT_SELECTED):
|
|
_, claim, _ = self._get_claim_status(self.device.image)
|
|
if claim == 0:
|
|
logger.info("No more reward to get")
|
|
break
|
|
if self.handle_reward():
|
|
continue
|
|
if interval.reached():
|
|
if self.appear_then_click(GET_REWARD_BUTTON):
|
|
interval.reset()
|