Skip to content

Commit ed4e8a5

Browse files
committed
♻️ refactor(config, afk, task): 统一管理提示音配置
1 parent 81e6355 commit ed4e8a5

6 files changed

Lines changed: 31 additions & 23 deletions

File tree

src/config.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
}, description='Game Sensitivity Description')
2525

2626
afk_config_option = ConfigOption('挂机设置', { #全局配置示例
27-
'提示音': 2,
27+
"提示音": True,
28+
'提示音次数': 2,
2829
'弹出通知': True,
2930
'防止鼠标干扰': True,
3031
'鼠标抖动': True,
3132
'鼠标抖动锁定在窗口范围': True,
3233
}, description='挂机相关设置', config_description={
33-
'提示音': '单次提示响几次',
34+
"提示音": "在需要时发出声音提醒",
35+
'提示音次数': '单次提示响几次',
3436
'弹出通知': '是否弹出windows通知',
3537
'防止鼠标干扰': '启动任务时和特定场景下会将鼠标移动到安全位置',
3638
'鼠标抖动': '建议启用',

src/tasks/BaseDNATask.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from concurrent.futures import ThreadPoolExecutor
1212
from functools import cached_property
1313

14-
from ok import BaseTask, Box, Logger, color_range_to_bound, run_in_new_thread, og, GenshinInteraction, PyDirectInteraction
14+
from ok import BaseTask, Box, Logger, color_range_to_bound, run_in_new_thread, og, GenshinInteraction, PyDirectInteraction, TaskDisabledException
1515

1616
logger = Logger.get_logger(__name__)
1717
f_black_color = {
@@ -183,10 +183,10 @@ def safe_get(self, key, default=None):
183183
return default
184184

185185
def soundBeep(self, _n=None):
186-
if hasattr(self, "config") and not self.config.get("发出声音提醒", True):
186+
if not self.afk_config.get("提示音", True):
187187
return
188188
if _n is None:
189-
n = max(1, self.afk_config.get("提示音", 1))
189+
n = max(1, self.afk_config.get("提示音次数", 1))
190190
else:
191191
n = _n
192192
run_in_new_thread(
@@ -505,11 +505,22 @@ def move_mouse_relative(self, dx, dy, original_Xsensitivity=1.0, original_Ysensi
505505
self.genshin_interaction.move_mouse_relative(int(dx), int(dy))
506506

507507
def try_bring_to_front(self):
508-
if not self.hwnd.is_foreground():
509-
win32api.keybd_event(win32con.VK_MENU, 0, 0, 0)
510-
win32api.keybd_event(win32con.VK_MENU, 0, win32con.KEYEVENTF_KEYUP, 0)
511-
self.hwnd.bring_to_front()
512-
self.sleep(0.5)
508+
deadline = time.perf_counter() + 10
509+
while time.perf_counter() < deadline:
510+
try:
511+
if not self.hwnd.is_foreground():
512+
win32api.keybd_event(win32con.VK_MENU, 0, 0, 0)
513+
win32api.keybd_event(win32con.VK_MENU, 0, win32con.KEYEVENTF_KEYUP, 0)
514+
self.hwnd.bring_to_front()
515+
self.sleep(0.5)
516+
break
517+
except TaskDisabledException:
518+
raise
519+
except Exception as e:
520+
logger.error('try_bring_to_front error', e)
521+
self.sleep(1)
522+
else:
523+
raise Exception("Failed to bring window to front after multiple retries.")
513524

514525
track_point_color = {
515526
"r": (121, 255), # Red range

src/tasks/CommissionsTask.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ def setup_commission_config(self):
3232
"使用技能": "不使用",
3333
"技能释放频率": 5.0,
3434
"启用自动穿引共鸣": True,
35-
"发出声音提醒": True,
3635
"自动选择首个密函和密函奖励": True,
3736
"优先选择密函奖励": "不使用",
3837
})
@@ -41,7 +40,6 @@ def setup_commission_config(self):
4140
"超时时间": "超时后将重启任务",
4241
"技能释放频率": "毎几秒释放一次技能",
4342
"启用自动穿引共鸣": "在需要跑图时时启用触发任务的自动穿引共鸣",
44-
"发出声音提醒": "在需要时发出声音提醒",
4543
"自动选择首个密函和密函奖励": "刷武器密函时推荐同时开启下一选项",
4644
"优先选择密函奖励": "在上一选项启用时生效",
4745
})
@@ -227,7 +225,7 @@ def choose_letter(self, timeout=0):
227225
letter_roi = self.box_of_screen_scaled(2560, 1440, 565, 651, 732, 805, name="letter_roi", hcenter=True)
228226
letter_snapshot = letter_roi.crop_frame(self.frame)
229227
self.sleep(0.1)
230-
self.click_relative_random(0.531, 0.441, 0.577, 0.551, use_safe_move=True, safe_move_box=box, down_time=0.02)
228+
self.click_relative_random(0.531, 0.441, 0.577, 0.551, use_safe_move=True, safe_move_box=box, down_time=0.05)
231229
self.sleep(0.3)
232230
if self.find_one(template=letter_snapshot, box=letter_roi, threshold=0.7):
233231
self.log_info_notify("密函已耗尽")

src/tasks/fullauto/AutoEscortTask.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ def __init__(self, *args, **kwargs):
3636
"启用自动穿引共鸣",
3737
"使用技能",
3838
"技能释放频率",
39-
"发出声音提醒",
4039
]
4140
for key in keys_to_remove:
4241
self.default_config.pop(key, None)

src/tasks/fullauto/AutoExploration_Fast.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def __init__(self, *args, **kwargs):
3232
'轮次': 3,
3333
'超时时间': 120,
3434
'解密失败自动重开': True,
35-
'地图选择': '全部地图',
35+
'地图选择': ["探险电梯", "探险高台", "探险平地"],
3636
})
3737
self.config_description.update({
3838
'轮次': '打几个轮次',
@@ -47,8 +47,8 @@ def __init__(self, *args, **kwargs):
4747

4848
# 设置地图选择为下拉选择
4949
self.config_type["地图选择"] = {
50-
"type": "drop_down",
51-
"options": ["全部地图", "探险电梯", "探险高台", "探险平地"],
50+
"type": "multi_selection",
51+
"options": ["探险电梯", "探险高台", "探险平地"],
5252
}
5353
self.action_timeout = DEFAULT_ACTION_TIMEOUT
5454
self.quick_move_task = QuickMoveTask(self)
@@ -89,7 +89,7 @@ def run(self):
8989
raise
9090

9191
def walk_to_aim(self):
92-
map_selection = self.config.get("地图选择", "全部地图")
92+
map_selection = self.config.get("地图选择", [])
9393

9494
# 检测当前地图类型
9595
current_map = self.detect_current_map()
@@ -99,16 +99,16 @@ def walk_to_aim(self):
9999
raise MapDetectionError("无法识别当前地图类型")
100100

101101
# 如果选择了特定地图,但当前不是该地图,抛出地图识别错误
102-
if map_selection != "全部地图" and current_map != map_selection:
103-
raise MapDetectionError(f"当前地图({current_map})不匹配选择的地图({map_selection})")
102+
if len(map_selection) != 0 and current_map not in map_selection:
103+
raise MapDetectionError(f"当前地图[{current_map}]不匹配选择的地图{map_selection}")
104104

105105
# 执行对应地图的移动逻辑
106106
if current_map in self.map_configs:
107107
self.log_info(f"识别到地图类型:{current_map},开始执行移动逻辑")
108108
return self.map_configs[current_map]["execute_func"]()
109109
else:
110110
# 这种情况理论上不应该发生,因为current_map是从map_configs中检测出来的
111-
raise MapDetectionError(f"地图配置不一致,检测到地图({current_map})但找不到对应的执行函数")
111+
raise MapDetectionError(f"地图配置不一致,检测到地图[{current_map}]但找不到对应的执行函数")
112112

113113
def detect_current_map(self):
114114
"""检测当前地图类型"""

src/tasks/fullauto/AutoFishTask.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ def __init__(self, *args, **kwargs):
3232
"MAX_START_SEC": 20.0,
3333
"MAX_FIGHT_SEC": 60.0,
3434
"MAX_END_SEC": 20.0,
35-
"发出声音提醒": True,
3635
})
3736

3837
# ROI 配置(鱼条和鱼标搜索区域,基于 1920x1080)
@@ -45,7 +44,6 @@ def __init__(self, *args, **kwargs):
4544
"MAX_START_SEC": "开始阶段超时(秒)",
4645
"MAX_FIGHT_SEC": "溜鱼阶段超时(秒)",
4746
"MAX_END_SEC": "结束阶段超时(秒)",
48-
"发出声音提醒": "完成时播放提示音",
4947
})
5048

5149
# runtime

0 commit comments

Comments
 (0)