0
0
mirror of https://github.com/ok-oldking/ok-wuthering-waves.git synced 2025-06-06 17:05:54 +00:00
ok-wuthering-waves/src/task/FarmEchoTask.py
2024-07-14 18:16:21 +08:00

121 lines
5.0 KiB
Python

import re
from ok.logging.Logger import get_logger
from src.task.BaseCombatTask import BaseCombatTask
logger = get_logger(__name__)
class FarmEchoTask(BaseCombatTask):
def __init__(self):
super().__init__()
self.description = "Click Start at the Entrance(Dreamless, Jue)"
self.name = "Farm Echo in Dungeon"
self.default_config.update({
'Level': 1,
'Repeat Farm Count': 100,
'Entrance Direction': 'Forward'
})
self.config_description = {
'Level': '(1-6) Important, Choose which level to farm, lower levels might not produce a echo',
'Entrance Direction': 'Choose Forward for Dreamless, Backward for Jue'
}
self.config_type["Entrance Direction"] = {'type': "drop_down", 'options': ['Forward', 'Backward']}
self.crownless_pos = (0.9, 0.4)
self.last_drop = False
def run(self):
# return self.run_in_circle_to_find_echo()
self.handler.post(self.mouse_reset, 0.01)
# self.find_echo_drop()
# return
if not self.in_team()[0]:
self.log_error('must be in game world and in teams', notify=True)
return
if self.config.get('Teleport'):
# book = self.find_one('gray_book_button', use_gray_scale=True)
# if not book:
# self.log_error("can't find the book button")
# return
self.sleep(2)
self.log_info('click f2 to open the book')
self.send_key('f2')
self.wait_click_feature('gray_book_forgery', raise_if_not_found=True, use_gray_scale=True, threshold=0.8)
self.wait_click_feature('gray_book_weekly_boss', raise_if_not_found=True, use_gray_scale=True,
threshold=0.8)
self.sleep(1)
self.click_relative(self.crownless_pos[0], self.crownless_pos[1])
self.wait_click_feature('gray_teleport', raise_if_not_found=True, use_gray_scale=True)
# loop here
count = 0
while count < self.config.get("Repeat Farm Count", 0):
count += 1
self.wait_in_team_and_world(time_out=20)
self.sleep(1)
self.walk_until_f(time_out=10,
direction='w' if self.config.get('Entrance Direction') == 'Forward' else 's',
raise_if_not_found=True)
logger.info(f'enter success')
stam = self.wait_ocr(0.75, 0.02, 0.85, 0.09, match=re.compile('240'), raise_if_not_found=True)
logger.info(f'found stam {stam}')
self.sleep(1)
self.choose_level(self.config.get("Level"))
self.combat_once()
logger.info(f'farm echo combat end')
self.wait_in_team_and_world(time_out=20)
logger.info(f'farm echo move forward walk_until_f to find echo')
if self.config.get('Entrance Direction') == 'Forward':
dropped = self.walk_until_f(time_out=3,
raise_if_not_found=False) # find and pick echo
logger.debug(f'farm echo found echo move forward walk_until_f to find echo')
else:
self.sleep(2)
dropped = self.run_in_circle_to_find_echo(3)
self.incr_drop(dropped)
self.sleep(0.5)
self.send_key('esc')
self.wait_click_feature('gray_confirm_exit_button', relative_x=-1, raise_if_not_found=True,
use_gray_scale=True)
self.wait_in_team_and_world(time_out=40)
self.sleep(4)
if self.config.get('Entrance Direction') == 'Backward':
self.send_key('a', down_time=0.2) # Jue
self.sleep(1)
def incr_drop(self, dropped):
if dropped:
self.info['Echo Count'] = self.info.get('Echo Count', 0) + 1
self.last_drop = dropped
def choose_level(self, start):
y = 0.17
x = 0.15
distance = 0.08
# for i in range(4):
# if i < start:
# continue
logger.info(f'choose level {start}')
self.click_relative(x, y + (start - 1) * distance)
self.sleep(0.5)
# self.click_relative(x, y + (start - 1) * distance)
self.wait_click_feature('gray_button_challenge', raise_if_not_found=True, use_gray_scale=True,
click_after_delay=0.5)
# self.sleep(1)
# confirm_button = self.find_one('gray_confirm_exit_button', use_gray_scale=True, threshold=0.7)
self.wait_click_feature('gray_confirm_exit_button', relative_x=-1, raise_if_not_found=False,
use_gray_scale=True, time_out=3, click_after_delay=0.5, threshold=0.8)
self.wait_click_feature('gray_start_battle', relative_x=-1, raise_if_not_found=True,
use_gray_scale=True, click_after_delay=0.5, threshold=0.8)
echo_color = {
'r': (200, 255), # Red range
'g': (150, 220), # Green range
'b': (130, 170) # Blue range
}