0
0
mirror of https://github.com/ok-oldking/ok-wuthering-waves.git synced 2025-06-07 01:15:18 +00:00

optimize combat liberation check

This commit is contained in:
firedcto@gmail.com 2024-07-12 17:46:49 +08:00
parent 488d1c761c
commit 8c2225ff44
3 changed files with 25 additions and 26 deletions

View File

@ -262,7 +262,7 @@ class BaseChar:
self.task.raise_not_in_combat('too long clicking a liberation') self.task.raise_not_in_combat('too long clicking a liberation')
self.task.next_frame() self.task.next_frame()
if clicked: if clicked:
if self.task.wait_until(lambda: not self.task.in_team()[0], time_out=1): if self.task.wait_until(lambda: not self.task.in_team()[0], time_out=0.6):
self.logger.debug(f'not in_team successfully casted liberation') self.logger.debug(f'not in_team successfully casted liberation')
else: else:
self.task.in_liberation = False self.task.in_liberation = False
@ -277,7 +277,6 @@ class BaseChar:
self.task.in_liberation = False self.task.in_liberation = False
if clicked: if clicked:
liberation_time = f'{(time.time() - start):.2f}' liberation_time = f'{(time.time() - start):.2f}'
self.task.info[f'{self} liberation time'] = liberation_time
self.logger.info(f'click_liberation end {liberation_time}') self.logger.info(f'click_liberation end {liberation_time}')
return clicked return clicked
@ -424,17 +423,17 @@ class BaseChar:
return False return False
else: else:
return self.is_available(snap, 'liberation') return self.is_available(snap, 'liberation')
else: # else:
mark_to_check = char_lib_check_marks[self.index] # mark_to_check = char_lib_check_marks[self.index]
box = self.task.get_box_by_name(mark_to_check) # box = self.task.get_box_by_name(mark_to_check)
box = box.copy(x_offset=-box.width, y_offset=-box.height, width_offset=box.width * 2, # box = box.copy(x_offset=-box.width, y_offset=-box.height, width_offset=box.width * 2,
height_offset=box.height * 2) # height_offset=box.height * 2)
for match in char_lib_check_marks: # for match in char_lib_check_marks:
mark = self.task.find_one(match, box=box, canny_lower=10, canny_higher=80, threshold=0.6) # mark = self.task.find_one(match, box=box, canny_lower=10, canny_higher=80, threshold=0.8)
if mark is not None: # if mark is not None:
self.logger.debug(f'{self.__repr__()} liberation ready by checking mark {mark}') # self.logger.debug(f'{self.__repr__()} liberation ready by checking mark {mark}')
self.liberation_available_mark = True # self.liberation_available_mark = True
return True # return True
def __str__(self): def __str__(self):
return self.__repr__() return self.__repr__()

View File

@ -60,20 +60,15 @@ class BaseCombatTask(BaseTask, FindFeature, OCR, CombatCheck):
def run_in_circle_to_find_echo(self, circle_count=3): def run_in_circle_to_find_echo(self, circle_count=3):
directions = ['w', 'a', 's', 'd'] directions = ['w', 'a', 's', 'd']
step = 1 step = 1.5
duration = 1 duration = 0.5
total_index = 0 total_index = 0
for count in range(circle_count): for count in range(circle_count):
logger.debug(f'running first circle_count{circle_count} circle {total_index} duration:{duration}') logger.debug(f'running first circle_count{circle_count} circle {total_index} duration:{duration}')
for direction in directions: for direction in directions:
if total_index > 2 and (total_index + 1) % 2 == 0: if total_index > 2 and (total_index + 1) % 2 == 0:
duration += step duration += step
# self.send_key_down(direction)
# self.sleep(0.02)
# self.mouse_down(key="right")
picked = self.send_key_and_wait_f(direction, False, time_out=duration, running=True) picked = self.send_key_and_wait_f(direction, False, time_out=duration, running=True)
# self.mouse_up(key="right")
# self.send_key_up(direction)
if picked: if picked:
self.mouse_up(key="right") self.mouse_up(key="right")
return True return True
@ -219,12 +214,15 @@ class BaseCombatTask(BaseTask, FindFeature, OCR, CombatCheck):
else: else:
logger.warning(f"can't find the f to enter") logger.warning(f"can't find the f to enter")
return False return False
remaining = time.time() - start
self.send_key('f') self.send_key('f')
if self.handle_claim_button(): if self.handle_claim_button():
self.sleep(0.5)
self.send_key_down(direction) self.send_key_down(direction)
if running: if running:
self.mouse_down(key='right') self.mouse_down(key='right')
self.sleep(time.time() - start) self.sleep(remaining + 0.2)
if running: if running:
self.mouse_up(key='right') self.mouse_up(key='right')
self.send_key_up(direction) self.send_key_up(direction)

View File

@ -56,7 +56,8 @@ class FarmEchoTask(BaseCombatTask):
self.wait_in_team_and_world(time_out=20) self.wait_in_team_and_world(time_out=20)
self.sleep(1) self.sleep(1)
self.walk_until_f(time_out=10, self.walk_until_f(time_out=10,
direction='w' if self.config.get('Entrance Direction') == 'Forward' else 's') direction='w' if self.config.get('Entrance Direction') == 'Forward' else 's',
raise_if_not_found=True)
logger.info(f'enter success') 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) 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}') logger.info(f'found stam {stam}')
@ -103,16 +104,17 @@ class FarmEchoTask(BaseCombatTask):
# continue # continue
logger.info(f'choose level {start}') logger.info(f'choose level {start}')
self.click_relative(x, y + (start - 1) * distance) self.click_relative(x, y + (start - 1) * distance)
# self.sleep(1) self.sleep(0.5)
# self.click_relative(x, y + (start - 1) * distance) # self.click_relative(x, y + (start - 1) * distance)
self.wait_click_feature('gray_button_challenge', raise_if_not_found=True, use_gray_scale=True) self.wait_click_feature('gray_button_challenge', raise_if_not_found=True, use_gray_scale=True,
click_after_delay=0.5)
# self.sleep(1) # self.sleep(1)
# confirm_button = self.find_one('gray_confirm_exit_button', use_gray_scale=True, threshold=0.7) # 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, 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) 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, self.wait_click_feature('gray_start_battle', relative_x=-1, raise_if_not_found=True,
use_gray_scale=True, click_after_delay=0.5) use_gray_scale=True, click_after_delay=0.5, threshold=0.8)
def find_echo_drop(self): def find_echo_drop(self):
# self.click_relative(0.5, 0.5) # self.click_relative(0.5, 0.5)