Skip to content

Commit c9a9619

Browse files
authored
Merge pull request #3 from medicinemelancholy/pr70
支持全自动70级皎皎币本
2 parents 073c188 + 6fa873d commit c9a9619

2 files changed

Lines changed: 224 additions & 0 deletions

File tree

src/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ def make_bottom_right_black(frame): #可选. 某些游戏截图时遮挡UID使
122122
["src.tasks.AutoSkill", "AutoSkill"],
123123
["src.tasks.AutoExpulsion", "AutoExpulsion"],
124124
["src.tasks.Auto65ArtifactTask", "Auto65ArtifactTask"],
125+
["src.tasks.Auto70jjbTask", "Auto70jjbTask"],
125126
["src.tasks.AutoDefence", "AutoDefence"],
126127
["src.tasks.AutoExploration", "AutoExploration"],
127128
["src.tasks.AutoExcavation", "AutoExcavation"],

src/tasks/Auto70jjbTask.py

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
from qfluentwidgets import FluentIcon
2+
import re
3+
import time
4+
import win32con
5+
import win32gui
6+
import cv2
7+
8+
from ok import Logger, TaskDisabledException, Box
9+
from ok import find_boxes_by_name
10+
from src.tasks.DNAOneTimeTask import DNAOneTimeTask
11+
from src.tasks.CommissionsTask import CommissionsTask, Mission, QuickMoveTask
12+
from src.tasks.BaseCombatTask import BaseCombatTask
13+
14+
logger = Logger.get_logger(__name__)
15+
16+
17+
class Auto70jjbTask(DNAOneTimeTask, CommissionsTask, BaseCombatTask):
18+
19+
def __init__(self, *args, **kwargs):
20+
super().__init__(*args, **kwargs)
21+
self.icon = FluentIcon.FLAG
22+
self.description = "全自动"
23+
self.default_config.update({
24+
'轮次': 1,
25+
'波次超时时间': 120,
26+
})
27+
self.config_description = {
28+
'轮次': '打几个轮次',
29+
'波次超时时间': '超时后将重启',
30+
}
31+
self.setup_commission_config()
32+
self.name = "自动70级皎皎币本"
33+
self.action_timeout = 10
34+
self.quick_move_task = QuickMoveTask(self)
35+
36+
def run(self):
37+
DNAOneTimeTask.run(self)
38+
try:
39+
return self.do_run()
40+
except TaskDisabledException as e:
41+
pass
42+
except Exception as e:
43+
logger.error('AutoDefence error', e)
44+
raise
45+
self.quick_move_task.stop()
46+
47+
def do_run(self):
48+
self.init_param()
49+
self.load_char()
50+
_wave = -1
51+
_wait_next_wave = False
52+
_skill_time = 0
53+
_wave_start = 0
54+
self.quick_move_task.stop()
55+
if self.in_team():
56+
self.open_in_mission_menu()
57+
self.sleep(0.5)
58+
while True:
59+
if self.in_team():
60+
self.get_wave_info()
61+
if self.current_wave != -1:
62+
if self.current_wave != _wave:
63+
_wave = self.current_wave
64+
_wave_start = time.time()
65+
_wait_next_wave = False
66+
67+
if not _wait_next_wave and time.time() - _wave_start >= self.config.get('波次超时时间', 120):
68+
self.log_info('任务超时')
69+
self.open_in_mission_menu()
70+
self.sleep(0.5)
71+
_wait_next_wave = True
72+
73+
if not _wait_next_wave:
74+
_skill_time = self.use_skill(_skill_time)
75+
76+
_status = self.handle_mission_interface(stop_func=self.stop_func)
77+
if _status == Mission.START or _status == Mission.STOP:
78+
if _status == Mission.STOP:
79+
self.restart_mission()
80+
self.log_info('任务中止,已重启')
81+
self.init_param()
82+
else:
83+
self.log_info('任务完成')
84+
self.wait_until(self.in_team, time_out=30)
85+
win32gui.SendMessage(self.hwnd.hwnd, win32con.WM_KEYDOWN, 0xA4, 0)
86+
self.sleep(2)
87+
self.walk_to_aim()
88+
win32gui.SendMessage(self.hwnd.hwnd, win32con.WM_KEYUP, 0xA4, 0)
89+
_wave_start = time.time()
90+
elif _status == Mission.CONTINUE:
91+
self.log_info('任务继续')
92+
self.wait_until(self.in_team, time_out=30)
93+
self.current_wave = -1
94+
self.sleep(0.2)
95+
96+
def init_param(self):
97+
self.stop_mission = False
98+
self.current_round = -1
99+
self.current_wave = -1
100+
self.quick_move_task.stop()
101+
102+
def stop_func(self):
103+
self.get_round_info()
104+
n = self.config.get('轮次', 3)
105+
if n == 1 or self.current_round >= n:
106+
return True
107+
108+
def find_next_hint(self, x1, y1, x2, y2, s, box_name='hint_text'):
109+
texts = self.ocr(box=self.box_of_screen(x1, y1, x2, y2, hcenter=True),
110+
target_height=540, name=box_name)
111+
fps_text = find_boxes_by_name(texts,
112+
re.compile(s, re.IGNORECASE))
113+
if fps_text:
114+
return True
115+
return False
116+
117+
def find_and_click(self, x1, y1, x2, y2, s):
118+
if self.find_next_hint(x1, y1, x2, y2, s):
119+
self.click((x1+x2)/2, (y1+y2)/2, after_sleep=0.5)
120+
return True
121+
return False
122+
123+
def wait_hint(self, x1, y1, x2, y2, hint, timeout=2):
124+
if self.wait_until(lambda: self.find_next_hint(x1, y1, x2, y2, hint), time_out=timeout):
125+
self.sleep(0.2)
126+
return True
127+
return False
128+
129+
def reset_and_transport(self):
130+
self.open_in_mission_menu()
131+
self.sleep(0.5)
132+
self.click(0.73, 0.92, after_sleep=0.5)
133+
self.click(0.35, 0.03, after_sleep=0.5)
134+
self.click(0.35, 0.03, after_sleep=0.5)
135+
self.click(0.60, 0.32, after_sleep=0.5)
136+
self.click(0.59, 0.56, after_sleep=1)
137+
138+
def walk_to_aim(self):
139+
if self.find_next_hint(0.18,0.52,0.23,0.55,r'保护目标'):
140+
#无电梯
141+
self.send_key_down('w')
142+
self.sleep(8.5)
143+
self.send_key_up('w')
144+
self.send_key_down('a')
145+
self.sleep(0.2)
146+
self.send_key_up('a')
147+
self.middle_click(after_sleep=0.5)
148+
self.send_key_down('w')
149+
self.sleep(6)
150+
self.send_key_down('d')
151+
self.sleep(5.6)
152+
self.send_key_up('d')
153+
self.sleep(23)
154+
self.send_key_up('w')
155+
self.sleep(0.2)
156+
#分支1直接到达,分支2继续往前走,复位不可
157+
if self.find_next_hint(0.46,0.37,0.51,0.41,r'保护目标'):
158+
self.send_key_down('w')
159+
self.sleep(7.5)
160+
self.send_key('space', down_time=0.2, after_sleep=2.7)
161+
self.send_key_up('w')
162+
return
163+
self.send_key('w', down_time=12.1, after_sleep=0.2)
164+
if self.find_next_hint(0.77,0.34,0.83,0.38,r'保护目标'):
165+
#电梯右
166+
self.sleep(0.5)
167+
self.send_key('space',down_time=0.2,after_sleep=0.2)
168+
self.send_key('w', down_time=0.8,after_sleep=0.2)
169+
self.send_key('d', down_time=0.2,after_sleep=0.2)
170+
self.middle_click(after_sleep=0.5)
171+
self.send_key('w', down_time=3.4,after_sleep=0.2)
172+
self.send_key_down('a')
173+
self.sleep(3.4)
174+
self.send_key_down('w')
175+
self.sleep(2.6)
176+
self.send_key_up('a')
177+
self.sleep(2.1)
178+
self.send_key('a', down_time=0.4,after_sleep=6.4)
179+
self.send_key_up('w')
180+
self.sleep(0.2)
181+
self.send_key('a', down_time=6.1,after_sleep=0.2)
182+
self.send_key('w', down_time=8,after_sleep=0.2)
183+
#两种地图均可复位到达
184+
self.reset_and_transport()
185+
return
186+
if self.find_next_hint(0.17,0.39,0.23,0.43,r'保护目标'):
187+
#电梯左
188+
self.sleep(0.5)
189+
self.send_key('space',down_time=0.2,after_sleep=0.2)
190+
self.send_key_down('w')
191+
self.sleep(3.8)
192+
self.send_key('d', down_time=0.4, after_sleep=3)
193+
self.send_key('d', down_time=0.4, after_sleep=6.7)
194+
self.send_key_up('w')
195+
self.sleep(0.2)
196+
self.send_key('a', down_time=0.2, after_sleep=0.2)
197+
self.middle_click(after_sleep=0.5)
198+
self.send_key_down('w')
199+
self.sleep(8.7)
200+
self.send_key('d', down_time=1, after_sleep=0.5)
201+
self.send_key('d', down_time=0.6, after_sleep=1.3)
202+
self.send_key('d', down_time=0.6, after_sleep=6.2)
203+
self.send_key('d', down_time=0.4, after_sleep=0.5)
204+
self.send_key('d', down_time=0.4, after_sleep=4.5)
205+
self.send_key_up('w')
206+
#两种地图均可复位到达
207+
self.reset_and_transport()
208+
return
209+
#电梯中
210+
self.sleep(0.5)
211+
self.send_key('space',down_time=0.2,after_sleep=0.2)
212+
self.send_key_down('w')
213+
self.sleep(4.8)
214+
self.send_key('d', down_time=1.8, after_sleep=9.6)
215+
self.send_key('d', down_time=3.4, after_sleep=3.4)
216+
self.send_key_up('w')
217+
self.sleep(0.2)
218+
self.send_key('a', down_time=1.9, after_sleep=0.2)
219+
self.send_key('w', down_time=6, after_sleep=0.2)
220+
#两种地图均可复位到达
221+
self.reset_and_transport()
222+
#finish
223+
return

0 commit comments

Comments
 (0)