Upd: return incomplete quests only (#11)

* Upd: return incomplete quests only

* Fix: Typo

* Fix: Use split_and_pair_button
This commit is contained in:
Hengyu 2023-06-17 01:07:34 +08:00 committed by GitHub
parent 173485b2f7
commit 035ab0a778
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 69 additions and 7 deletions

View File

@ -161,6 +161,8 @@ class KeywordExtract:
self.write_keywords(keyword_class='DungeonTab', output_file='./tasks/dungeon/keywords/tab.py')
self.load_daily_quests_keywords()
self.write_keywords(keyword_class='DailyQuest', output_file='./tasks/daily/keywords/daily_quest.py')
self.load_keywords(['前往', '领取', '进行中', '已领取', '本日活跃度已满'])
self.write_keywords(keyword_class='DailyQuestState', output_file='./tasks/daily/keywords/daily_quest_state.py')
self.load_keywords(list(self.iter_guide()))
self.write_keywords(keyword_class='DungeonList', output_file='./tasks/dungeon/keywords/dungeon.py',
text_convert=dungeon_name)

View File

@ -3,8 +3,9 @@ import numpy as np
from module.base.timer import Timer
from module.logger import *
from module.ocr.ocr import Ocr, OcrResultButton
from module.ocr.utils import split_and_pair_buttons
from tasks.daily.assets.assets_daily_reward import *
from tasks.daily.keywords import DailyQuest
from tasks.daily.keywords import DailyQuest, DailyQuestState, KEYWORDS_DAILY_QUEST_STATE
from tasks.dungeon.keywords import KEYWORDS_DUNGEON_TAB
from tasks.dungeon.ui import DungeonUI
@ -61,12 +62,20 @@ class DailyQuestUI(DungeonUI):
def _ocr_single_page(self) -> list[OcrResultButton]:
ocr = DailyQuestOcr(OCR_DAILY_QUEST)
ocr.merge_thres_y = 20
results = ocr.matched_ocr(self.device.image, DailyQuest)
if len(results) < 4:
logger.warning(f"Recognition failed at {4 - len(results)} quests on one page")
return results
results = ocr.matched_ocr(self.device.image, [DailyQuestState, DailyQuest])
if len(results) < 8:
logger.warning(f"Recognition failed at {8 - len(results)} quests on one page")
def completed_state(state):
return state != KEYWORDS_DAILY_QUEST_STATE.Go and state != KEYWORDS_DAILY_QUEST_STATE.In_Progress
return [quest for quest, _ in
split_and_pair_buttons(results, split_func=completed_state, relative_area=(0, 0, 200, 720))]
def daily_quests_recognition(self):
"""
Returns incomplete quests only
"""
logger.info("Recognizing daily quests")
self.dungeon_tab_goto(KEYWORDS_DUNGEON_TAB.Daily_Training)
self._ensure_position('left')
@ -86,7 +95,7 @@ class DailyQuestUI(DungeonUI):
if self.appear(DAILY_QUEST_FULL) or self.appear(DAILY_QUEST_GOTO):
break
if self.appear_then_click(DAILY_QUEST_REWARD):
if self.appear_then_click(DAILY_QUEST_REWARD, interval=1):
continue
def _no_reward_to_get(self):

View File

@ -1,2 +1,3 @@
import tasks.daily.keywords.daily_quest as KEYWORDS_DAILY_QUEST
from tasks.daily.keywords.classes import DailyQuest
import tasks.daily.keywords.daily_quest_state as KEYWORDS_DAILY_QUEST_STATE
from tasks.daily.keywords.classes import DailyQuest, DailyQuestState

View File

@ -7,3 +7,8 @@ from module.ocr.keyword import Keyword
@dataclass
class DailyQuest(Keyword):
instances: ClassVar = {}
@dataclass
class DailyQuestState(Keyword):
instances: ClassVar = {}

View File

@ -0,0 +1,45 @@
from .classes import DailyQuestState
# This file was auto-generated, do not modify it manually. To generate:
# ``` python -m dev_tools.keyword_extract ```
Go = DailyQuestState(
id=1,
name='Go',
cn='前往',
cht='前往',
en='Go',
jp='進む',
)
Claim = DailyQuestState(
id=2,
name='Claim',
cn='领取',
cht='領取',
en='Claim',
jp='受取',
)
In_Progress = DailyQuestState(
id=3,
name='In_Progress',
cn='进行中',
cht='進行中',
en='In Progress',
jp='進行中',
)
Claimed = DailyQuestState(
id=4,
name='Claimed',
cn='已领取',
cht='已領取',
en='Claimed',
jp='受取済',
)
Today_Activity_completed = DailyQuestState(
id=5,
name='Today_Activity_completed',
cn='本日活跃度已满',
cht='本日活躍度已滿',
en="Today's Activity completed",
jp='本日のアクティブ度が最大に達しました',
)