|
| 1 | +import cv2 |
| 2 | +import numpy as np |
| 3 | + |
| 4 | +import re |
| 5 | +from ok import find_boxes_by_name, find_boxes_within_boundary, Logger |
| 6 | +from src.task.BaseCombatTask import BaseCombatTask |
| 7 | + |
| 8 | +logger = Logger.get_logger(__name__) |
| 9 | + |
| 10 | + |
| 11 | +class FiveToOneTask(BaseCombatTask): |
| 12 | + |
| 13 | + def __init__(self, *args, **kwargs): |
| 14 | + super().__init__(*args, **kwargs) |
| 15 | + self.description = "游戏语言必须为简体中文,必须16:9分辨率,勾选需要的, 没勾的都会自动合成" |
| 16 | + self.name = "数据坞五合一" |
| 17 | + self.default_config = { |
| 18 | + } |
| 19 | + self.sets = [ |
| 20 | + '凝夜白霜', '熔山裂谷', '彻空冥雷', '啸谷长风', '浮星祛暗', '沉日劫明', '隐世回光', '轻云出月', '不绝余音', |
| 21 | + '凌冽决断之心', |
| 22 | + '此间永驻之光', '幽夜隐匿之帷', '高天共奏之曲', '无惧浪涛之勇', '流云逝尽之空'] |
| 23 | + # , '愿戴荣光之旅', '奔狼燎原之焰', |
| 24 | + |
| 25 | + self.main_stats = ["攻击力百分比", "生命值百分比", "防御力百分比", "暴击率", "暴击伤害", "共鸣效率", |
| 26 | + "冷凝伤害加成", |
| 27 | + "热熔伤害加成", |
| 28 | + "导电伤害加成", |
| 29 | + "气动伤害加成", "衍射伤害加成", "湮灭伤害加成", "治疗效果加成"] |
| 30 | + self.black_list = ["主属性生命值", "主属性攻击力", "主属性防御力"] |
| 31 | + self.add_text_fix( |
| 32 | + {'凝夜自霜': '凝夜白霜', '主属性灭伤害加成': '主属性湮灭伤害加成', "灭伤害加成": "主属性湮灭伤害加成", |
| 33 | + '主属性行射伤害加成': '主属性衍射伤害加成'}) |
| 34 | + |
| 35 | + self.config_type = {} |
| 36 | + self.claim_handled = False |
| 37 | + for set_name in self.sets: |
| 38 | + self.default_config[set_name] = [] |
| 39 | + for key in self.default_config.keys(): |
| 40 | + self.config_type[key] = {'type': "multi_selection", 'options': self.main_stats} |
| 41 | + |
| 42 | + def run(self): |
| 43 | + self.log_info("开始任务") |
| 44 | + self.ensure_main() |
| 45 | + self.log_info("在主页") |
| 46 | + self.back() |
| 47 | + self.wait_click_ocr(match="数据坞", box="right", raise_if_not_found=True, settle_time=0.2) |
| 48 | + self.wait_ocr(match="数据坞", box="top_left", raise_if_not_found=True, settle_time=0.2) |
| 49 | + self.click_relative(0.04, 0.56, after_sleep=0.5) |
| 50 | + self.wait_click_ocr(match="批量融合", box="bottom_right", raise_if_not_found=True, settle_time=0.2) |
| 51 | + self.loop_merge() |
| 52 | + self.log_info("五合一完成!") |
| 53 | + |
| 54 | + def loop_merge(self): |
| 55 | + name_box = self.box_of_screen(0.11, 0.19, 0.87, 0.75) |
| 56 | + for set_name in self.sets: |
| 57 | + self.click_relative(0.03, 0.91, after_sleep=0.3) |
| 58 | + self.click_relative(0.62, 0.82, after_sleep=0.01) # 重置 |
| 59 | + self.click_relative(0.20, 0.71, after_sleep=0.01) # 1c |
| 60 | + self.click_relative(0.47, 0.71, after_sleep=0.01) # 3c |
| 61 | + self.click_relative(0.71, 0.71, after_sleep=0.01) # 4c |
| 62 | + |
| 63 | + self.click_relative(0.895, 0.57, after_sleep=0.2) # 滚动 |
| 64 | + self.wait_click_ocr(box=name_box, match=re.compile(set_name), raise_if_not_found=True) |
| 65 | + |
| 66 | + self.click_relative(0.895, 0.74, after_sleep=0.2) # 滚动 |
| 67 | + choices = self.ocr(box=name_box) |
| 68 | + keeps = self.config.get(set_name, []) |
| 69 | + for choice in choices: |
| 70 | + in_keep = False |
| 71 | + if choice.name in self.black_list: |
| 72 | + continue |
| 73 | + for keep in keeps: |
| 74 | + if keep in choice.name: |
| 75 | + in_keep = True |
| 76 | + break |
| 77 | + if not in_keep: |
| 78 | + self.click_box(choice, after_sleep=0.01) |
| 79 | + self.log_info(f"不在配置 {set_name} {choice.name} 选择合成!") |
| 80 | + self.click_relative(0.81, 0.84, after_sleep=0.5) |
| 81 | + while True: |
| 82 | + self.click_relative(0.26, 0.91, after_sleep=0.5) # 全选 |
| 83 | + self.click_relative(0.78, 0.9, after_sleep=1) |
| 84 | + if not self.claim_handled: |
| 85 | + if confirm := self.ocr(match="确认", box="bottom_right"): |
| 86 | + self.click_relative(0.49, 0.55, after_sleep=0.1) |
| 87 | + self.click_box(confirm, after_sleep=0.5) |
| 88 | + self.claim_handled = True |
| 89 | + if self.ocr(match="批量融合", box="bottom_right"): |
| 90 | + self.click_relative(0.26, 0.91, after_sleep=0.5) |
| 91 | + self.log_info(f"{set_name} 不够5个") |
| 92 | + break # 没有更多 |
| 93 | + self.wait_ocr(match="获得声骸", box="top", raise_if_not_found=True, settle_time=1) |
| 94 | + self.click_relative(0.53, 0.05, after_sleep=0.5) |
| 95 | + self.click_relative(0.68, 0.91, after_sleep=0.5) # 批量融合 |
0 commit comments