mirror of
https://github.com/ok-oldking/ok-wuthering-waves.git
synced 2025-06-06 17:05:54 +00:00
121 lines
5.0 KiB
Python
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
|
|
}
|