diff --git a/assets/share/freebies/gift_of_odyssey/GET_REWARD_BUTTON.SEARCH.png b/assets/share/freebies/gift_of_odyssey/GET_REWARD_BUTTON.SEARCH.png index 50ba4c60d..7ff5a42e8 100644 Binary files a/assets/share/freebies/gift_of_odyssey/GET_REWARD_BUTTON.SEARCH.png and b/assets/share/freebies/gift_of_odyssey/GET_REWARD_BUTTON.SEARCH.png differ diff --git a/assets/share/freebies/gift_of_odyssey/OCR_CLAIM.png b/assets/share/freebies/gift_of_odyssey/OCR_CLAIM.png new file mode 100644 index 000000000..7ff5a42e8 Binary files /dev/null and b/assets/share/freebies/gift_of_odyssey/OCR_CLAIM.png differ diff --git a/dev_tools/keyword_extract.py b/dev_tools/keyword_extract.py index f857ba911..076664b98 100644 --- a/dev_tools/keyword_extract.py +++ b/dev_tools/keyword_extract.py @@ -576,8 +576,8 @@ class KeywordExtract: read_file(os.path.join(TextMap.DATA_FOLDER, 'ExcelOutput', 'RogueBonus.json')), 'BonusTitle.Hash'))) self.write_keywords(keyword_class='RogueBonus', output_file='./tasks/rogue/keywords/bonus.py') self.generate_rogue_events() - self.load_keywords(['巡星之礼']) - self.write_keywords(keyword_class='GiftOfOdysseyEvent', output_file='./tasks/freebies/keywords/gift_of_odyssey.py') + self.load_keywords(["巡星之礼", "已领取", "领取", "待签到"]) + self.write_keywords(keyword_class="GiftOfOdysseyEvent", output_file="./tasks/freebies/keywords/gift_of_odyssey.py") if __name__ == '__main__': diff --git a/tasks/freebies/assets/assets_freebies_gift_of_odyssey.py b/tasks/freebies/assets/assets_freebies_gift_of_odyssey.py index 6662b4f4f..53ed9ec32 100644 --- a/tasks/freebies/assets/assets_freebies_gift_of_odyssey.py +++ b/tasks/freebies/assets/assets_freebies_gift_of_odyssey.py @@ -18,11 +18,21 @@ GET_REWARD_BUTTON = ButtonWrapper( share=Button( file='./assets/share/freebies/gift_of_odyssey/GET_REWARD_BUTTON.png', area=(647, 397, 665, 415), - search=(626, 243, 1212, 631), + search=(228, 25, 1263, 701), color=(121, 120, 105), button=(647, 397, 665, 415), ), ) +OCR_CLAIM = ButtonWrapper( + name='OCR_CLAIM', + share=Button( + file='./assets/share/freebies/gift_of_odyssey/OCR_CLAIM.png', + area=(228, 25, 1263, 701), + search=(208, 5, 1280, 720), + color=(155, 149, 153), + button=(228, 25, 1263, 701), + ), +) OCR_EVENT = ButtonWrapper( name='OCR_EVENT', share=Button( diff --git a/tasks/freebies/gift_of_odyssey.py b/tasks/freebies/gift_of_odyssey.py index e1caf73e0..ae2cf942e 100644 --- a/tasks/freebies/gift_of_odyssey.py +++ b/tasks/freebies/gift_of_odyssey.py @@ -3,8 +3,13 @@ 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_EVENT, EVENT_SELECTED, GET_REWARD_BUTTON -from tasks.freebies.keywords import GiftOfOdysseyEvent +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): @@ -41,9 +46,20 @@ class GiftofOdyssey(UI): 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") + return status + def _get_reward(self): logger.info("Getting reward") skip_first_screenshot = True @@ -54,9 +70,11 @@ class GiftofOdyssey(UI): else: self.device.screenshot() - if self.appear(EVENT_SELECTED) and not self.appear(GET_REWARD_BUTTON): - logger.info("No more reward to get") - break + 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(): diff --git a/tasks/freebies/keywords/gift_of_odyssey.py b/tasks/freebies/keywords/gift_of_odyssey.py index c939aea54..ea7ee28ff 100644 --- a/tasks/freebies/keywords/gift_of_odyssey.py +++ b/tasks/freebies/keywords/gift_of_odyssey.py @@ -12,3 +12,30 @@ Gift_of_Odyssey = GiftOfOdysseyEvent( jp='巡星の礼', es='Presente del cometa', ) +Claimed = GiftOfOdysseyEvent( + id=2, + name='Claimed', + cn='已领取', + cht='已領取', + en='Claimed', + jp='受取済', + es='Recogido', +) +Claim = GiftOfOdysseyEvent( + id=3, + name='Claim', + cn='领取', + cht='領取', + en='Claim', + jp='受取', + es='Recoger', +) +Awaiting_check_in = GiftOfOdysseyEvent( + id=4, + name='Awaiting_check_in', + cn='待签到', + cht='待簽到', + en='Awaiting check-in', + jp='ログイン待ち', + es='Por registrar', +)