Skip to content

Commit a69fca1

Browse files
committed
整合 og 模组,优化战斗检查与自动移动任务的事件处理
1 parent 073c188 commit a69fca1

4 files changed

Lines changed: 67 additions & 82 deletions

File tree

src/combat/CombatCheck.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import time
2-
2+
from ok import og
33
from src.tasks.BaseDNATask import BaseDNATask
44

55
class CombatCheck(BaseDNATask):
@@ -21,19 +21,21 @@ def in_combat(self):
2121
if self._in_combat:
2222
now = time.time()
2323
if now - self.last_combat_check > self.combat_check_interval:
24-
in_combat = self.manual_in_combat and self.in_team()
24+
in_combat = self.manual_in_combat and self.in_team() and og.device_manager.hwnd_window.is_foreground()
2525
self.last_combat_check = now
2626
if in_combat:
2727
return True
2828
return self.reset_to_false(recheck=True, reason='on user stop')
2929
return True
3030
else:
31-
in_combat = getattr(self, "manual_in_combat", False)
31+
in_combat = self.manual_in_combat and self.in_team() and og.device_manager.hwnd_window.is_foreground()
3232
if in_combat:
3333
from src.tasks.AutoCombatTask import AutoCombatTask
3434
if isinstance(self, AutoCombatTask):
3535
self.load_char()
3636
self._in_combat = True
37+
else:
38+
self.reset_to_false(recheck=True, reason='on user stop')
3739
return self._in_combat
3840

3941
def reset_to_false(self, recheck=False, reason=""):

src/globals.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,49 @@
1-
from PySide6.QtCore import QObject
1+
from PySide6.QtCore import QObject, Signal
2+
from pynput import mouse, keyboard
23

3-
from ok import Logger
4+
from ok import Logger, og
45

56
logger = Logger.get_logger(__name__)
67

78

89
class Globals(QObject):
10+
clicked = Signal(int, int, object, bool)
11+
pressed = Signal(object)
912

1013
def __init__(self, exit_event):
1114
super().__init__()
15+
self.pynput_mouse = None
16+
self.pynput_keyboard = None
17+
exit_event.bind_stop(self)
18+
self.init_pynput()
19+
20+
def stop(self):
21+
logger.info("pynput stop")
22+
self.reset_pynput()
23+
24+
def init_pynput(self):
25+
logger.info("pynput start")
26+
if self.pynput_mouse is None:
27+
self.pynput_mouse = mouse.Listener(on_click=self.on_click)
28+
self.pynput_mouse.start()
29+
if self.pynput_keyboard is None:
30+
self.pynput_keyboard = keyboard.Listener(on_press=self.on_press)
31+
self.pynput_keyboard.start()
32+
33+
def reset_pynput(self):
34+
if self.pynput_mouse:
35+
self.pynput_mouse.stop()
36+
self.pynput_mouse = None
37+
if self.pynput_keyboard:
38+
self.pynput_keyboard.stop()
39+
self.pynput_keyboard = None
40+
41+
def on_click(self, x, y, button, pressed):
42+
self.clicked.emit(x, y, button, pressed)
43+
44+
def on_press(self, key):
45+
self.pressed.emit(key)
46+
1247

1348

1449
if __name__ == "__main__":

src/tasks/AutoCombatTask.py

Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from ok import TriggerTask, Logger
1+
from ok import TriggerTask, Logger, og
22
from src.tasks.BaseCombatTask import BaseCombatTask, NotInCombatException, CharDeadException
33

44
from pynput import mouse
@@ -17,35 +17,14 @@ def __init__(self, *args, **kwargs):
1717
self.config_description.update({
1818
'激活键': '鼠标侧键',
1919
})
20-
self.listener = None
21-
self.manual_in_combat = False
22-
self._executor.exit_event.bind_stop(self)
23-
24-
def disable(self):
25-
super().disable()
26-
self.stop()
27-
28-
def pause(self):
29-
super().pause()
30-
self.stop()
31-
32-
def stop(self):
33-
self.manual_activate = False
34-
if self.listener:
35-
self.listener.stop()
36-
self.listener = None
20+
self.connected = False
3721

3822
def run(self):
39-
ret = False
40-
if not self.in_team():
41-
return ret
42-
43-
if not self.listener:
44-
self.listener = mouse.Listener(on_click=self.on_click)
45-
self.listener.start()
23+
if not self.connected:
24+
self.connected = True
25+
og.my_app.clicked.connect(self.on_global_click)
4626

47-
if not self.listener.running:
48-
self.listener.run()
27+
ret = False
4928

5029
while self.in_combat():
5130
ret = True
@@ -62,7 +41,7 @@ def run(self):
6241
self.combat_end()
6342
return ret
6443

65-
def on_click(self, x, y, button, pressed):
44+
def on_global_click(self, x, y, button, pressed):
6645
if self._executor.paused:
6746
return
6847
if self.config.get('激活键', 'x2') == 'x1':
@@ -71,6 +50,3 @@ def on_click(self, x, y, button, pressed):
7150
btn = mouse.Button.x2
7251
if pressed and button == btn:
7352
self.manual_in_combat = not self.manual_in_combat
74-
75-
76-

src/tasks/AutoMoveTask.py

Lines changed: 18 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
logger = Logger.get_logger(__name__)
66

77
class TriggerDeactivateException(Exception):
8-
"""未处于战斗状态异常。"""
8+
"""停止激活异常。"""
99
pass
1010

1111
class AutoMoveTask(BaseCombatTask, TriggerTask):
1212

1313
def __init__(self, *args, **kwargs):
1414
super().__init__(*args, **kwargs)
1515
self.name = "自动穿引共鸣"
16-
self.description = "需使用鼠标侧键主动激活"
16+
self.description = "需使用鼠标侧键主动激活,运行中也可使用左键打断"
1717
self.default_config.update({
1818
'激活键': 'x1',
1919
'按下时间': 0.50,
@@ -25,28 +25,17 @@ def __init__(self, *args, **kwargs):
2525
'按下时间': '左键按住多久',
2626
'间隔时间': '左键释放后等待多久',
2727
})
28-
self.listener = None
2928
self.manual_activate = False
3029
self.signal = False
30+
self.signal_left = False
3131
self.is_down = False
32-
self._executor.exit_event.bind_stop(self)
33-
34-
def disable(self):
35-
super().disable()
36-
self.stop()
37-
38-
def pause(self):
39-
super().pause()
40-
self.stop()
41-
42-
def stop(self):
43-
self.manual_activate = False
44-
self.signal = False
45-
if self.listener:
46-
self.listener.stop()
47-
self.listener = None
32+
self.connected = False
4833

4934
def run(self):
35+
if not self.connected:
36+
self.connected = True
37+
og.my_app.clicked.connect(self.on_global_click)
38+
5039
if self.signal:
5140
self.signal = False
5241
if self.in_team() and og.device_manager.hwnd_window.is_foreground():
@@ -55,11 +44,6 @@ def run(self):
5544
if not self.in_team():
5645
return
5746

58-
if not self.listener:
59-
self.listener = mouse.Listener(on_click=self.on_click)
60-
# self.listener = keyboard.Listener(on_press=self.on_press)
61-
self.listener.start()
62-
6347
while self.manual_activate:
6448
try:
6549
self.do_move()
@@ -76,53 +60,41 @@ def run(self):
7660
def do_move(self):
7761
self.mouse_down()
7862
self.is_down = True
79-
self.sleep(self.config.get('按下时间', 0.50))
63+
self.sleep_check(self.config.get('按下时间', 0.50), False)
8064
self.mouse_up()
8165
self.is_down = False
8266
self.sleep_check(self.config.get('间隔时间', 0.45))
8367

84-
def sleep_check(self, sec):
68+
def sleep_check(self, sec, check_signal_flag=True):
8569
remaining = sec
8670
step = 0.2
8771
while remaining > 0:
8872
s = step if remaining > step else remaining
8973
self.sleep(s)
9074
remaining -= s
91-
if self.signal:
75+
if (self.signal and check_signal_flag) or self.signal_left:
9276
self.switch_state()
9377
if not self.manual_activate:
9478
raise TriggerDeactivateException()
9579

9680
def switch_state(self):
81+
self.signal_left = False
9782
self.signal = False
9883
self.manual_activate = not self.manual_activate
9984
if self.manual_activate:
10085
logger.info("激活快速移动")
10186
else:
10287
logger.info("关闭快速移动")
10388

104-
def on_click(self, x, y, button, pressed):
89+
def on_global_click(self, x, y, button, pressed):
10590
if self._executor.paused:
10691
return
10792
if self.config.get('激活键', 'x2') == 'x1':
10893
btn = mouse.Button.x1
10994
else:
11095
btn = mouse.Button.x2
111-
if pressed and button == btn:
112-
self.signal = True
113-
114-
# def on_press(self, key):
115-
# if self._executor.paused:
116-
# return
117-
# if not self.in_team() or not og.device_manager.hwnd_window.is_foreground():
118-
# return
119-
# active_key = getattr(keyboard.Key, self.config.get('激活键').lower())
120-
# if key == active_key:
121-
# self.manual_activate = not self.manual_activate
122-
# if self.manual_activate:
123-
# logger.info("激活快速移动")
124-
# else:
125-
# logger.info("关闭快速移动")
126-
127-
128-
96+
if pressed:
97+
if button == btn:
98+
self.signal = True
99+
elif button == mouse.Button.left and self.manual_activate:
100+
self.signal_left = True

0 commit comments

Comments
 (0)