0
0
mirror of https://github.com/ok-oldking/ok-wuthering-waves.git synced 2025-06-05 08:25:28 +00:00
ok-wuthering-waves/src/task/SkipDialogTask.py
2024-09-29 13:45:13 +08:00

87 lines
3.4 KiB
Python

import time
import re
from ok.feature.FindFeature import FindFeature
from ok.logging.Logger import get_logger
from ok.ocr.OCR import OCR
from ok.task.TriggerTask import TriggerTask
from src.task.BaseWWTask import BaseWWTask
logger = get_logger(__name__)
class AutoDialogTask(TriggerTask, BaseWWTask, FindFeature, OCR):
def __init__(self):
super().__init__()
self.default_config = {'_enabled': True}
self.skip = None
self.trigger_interval = 1
self.has_eye_time = 0
self.name = "Skip Dialog during Quests"
self.confirm_dialog_checked = False
def run(self):
pass
def skip_confirm(self):
if not self.confirm_dialog_checked:
if self.calculate_color_percentage(dialog_white_color, box=self.box_of_screen(0.42, 0.59, 0.56,
0.64)) > 0.9 and self.calculate_color_percentage(
dialog_black_color, box=self.box_of_screen(0.61, 0.60, 0.74, 0.64)) > 0.8:
logger.info('confirm dialog exists, click confirm')
self.click_relative(0.44, 0.55)
self.sleep(0.2)
self.click_relative(0.67, 0.62)
self.confirm_dialog_checked = True
return True
if skip_button := self.find_one('skip_quest_confirm', threshold=0.8):
self.click(skip_button)
return True
def trigger(self):
skip = self.ocr(0.03, 0.03, 0.11, 0.10, target_height=540, match=re.compile(r'SKIP', re.IGNORECASE),
threshold=0.7)
if skip:
logger.info('Click Skip Dialog')
self.click_box(skip, move_back=True)
return self.wait_until(self.skip_confirm, wait_until_before_delay=0, raise_if_not_found=False)
if time.time() - self.has_eye_time < 2:
btn_dialog_close = self.find_one('btn_dialog_close', use_gray_scale=True, threshold=0.8)
if btn_dialog_close:
self.click(btn_dialog_close, move_back=True)
return
btn_dialog_eye = self.find_one('btn_dialog_eye', use_gray_scale=True, threshold=0.8)
if btn_dialog_eye:
self.has_eye_time = time.time()
btn_auto_play_dialog = self.find_one('btn_auto_play_dialog', use_gray_scale=True)
if btn_auto_play_dialog:
self.click_box(btn_auto_play_dialog, move_back=True)
logger.info('toggle auto play')
self.sleep(0.2)
if arrow := self.find_feature('btn_dialog_arrow', x=0.59, y=0.33, to_x=0.75, to_y=0.75,
use_gray_scale=True, threshold=0.7):
self.click(arrow[-1])
logger.info('choose arrow')
self.sleep(0.2)
elif dots := self.find_feature('btn_dialog_3dots', x=0.59, y=0.33, to_x=0.75, to_y=0.75,
use_gray_scale=True, threshold=0.7):
if dots:
self.click(dots[-1])
logger.info('choose dot')
self.sleep(0.2)
return
dialog_white_color = {
'r': (230, 255), # Red range
'g': (230, 255), # Green range
'b': (230, 255) # Blue range
}
dialog_black_color = {
'r': (0, 15), # Red range
'g': (0, 15), # Green range
'b': (0, 15) # Blue range
}