├── other files
├── 结束作战.jpg
├── 三周年庆活动.jpg
└── 新版红色开始.jpg
├── PRTS-apk_files
├── res
│ ├── bg
│ │ ├── 1.png
│ │ ├── 10.png
│ │ ├── 11.png
│ │ ├── 12.png
│ │ ├── 13.png
│ │ ├── 14.png
│ │ ├── 15.png
│ │ ├── 16.png
│ │ ├── 17.png
│ │ ├── 18.png
│ │ ├── 19.png
│ │ ├── 2.png
│ │ ├── 20.png
│ │ ├── 21.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ ├── 5.png
│ │ ├── 6.png
│ │ ├── 7.png
│ │ ├── 8.png
│ │ └── 9.png
│ ├── icon.jpeg
│ ├── img
│ │ ├── 返回.jpg
│ │ ├── cost.jpg
│ │ ├── home.jpg
│ │ ├── 全员信赖.jpg
│ │ ├── 接管作战.jpg
│ │ ├── 行动结束.jpg
│ │ ├── 访问基建.jpg
│ │ ├── 进入基建.jpg
│ │ ├── 首页好友.jpg
│ │ ├── 首页齿轮.jpg
│ │ ├── 好友列表白.jpg
│ │ ├── 好友列表黑.jpg
│ │ ├── 开始行动红.jpg
│ │ ├── 开始行动蓝.jpg
│ │ ├── 新开始行动红.jpg
│ │ ├── 结算_三星.jpg
│ │ ├── 行动(结束).jpg
│ │ ├── 访问下位橙.jpg
│ │ ├── 访问下位灰.jpg
│ │ └── 开始行动(三周年).jpg
│ ├── logo.jpeg
│ └── splashIcon.jpeg
├── project.json
└── PRTS.js
├── .gitignore
├── LICENSE
└── README.md
/other files/结束作战.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/other files/结束作战.jpg
--------------------------------------------------------------------------------
/other files/三周年庆活动.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/other files/三周年庆活动.jpg
--------------------------------------------------------------------------------
/other files/新版红色开始.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/other files/新版红色开始.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/1.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/10.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/11.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/12.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/13.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/14.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/15.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/16.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/17.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/18.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/19.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/2.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/20.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/21.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/3.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/4.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/5.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/6.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/7.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/8.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/bg/9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/bg/9.png
--------------------------------------------------------------------------------
/PRTS-apk_files/res/icon.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/icon.jpeg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/返回.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/返回.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/logo.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/logo.jpeg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/cost.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/cost.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/home.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/home.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/全员信赖.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/全员信赖.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/接管作战.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/接管作战.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/行动结束.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/行动结束.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/访问基建.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/访问基建.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/进入基建.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/进入基建.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/首页好友.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/首页好友.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/首页齿轮.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/首页齿轮.jpg
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # 安装包
2 | build/
3 |
4 | # debug files
5 | PRTS debug.js
6 |
7 | # 项目外图片/视频
8 | 微信图片*
9 | *.mp4
10 |
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/好友列表白.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/好友列表白.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/好友列表黑.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/好友列表黑.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/开始行动红.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/开始行动红.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/开始行动蓝.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/开始行动蓝.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/新开始行动红.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/新开始行动红.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/结算_三星.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/结算_三星.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/行动(结束).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/行动(结束).jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/访问下位橙.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/访问下位橙.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/访问下位灰.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/访问下位灰.jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/splashIcon.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/splashIcon.jpeg
--------------------------------------------------------------------------------
/PRTS-apk_files/res/img/开始行动(三周年).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgainstEntropy/PRTS/HEAD/PRTS-apk_files/res/img/开始行动(三周年).jpg
--------------------------------------------------------------------------------
/PRTS-apk_files/project.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets": [],
3 | "build": {
4 | "build_id": "045101E5-19",
5 | "build_number": 19,
6 | "build_time": 1624630634543,
7 | "release": true
8 | },
9 | "encryptLevel": 0,
10 | "useFeatures": [],
11 | "icon": "res/icon.jpeg",
12 | "ignore": ["build", "PRTS debug.js"],
13 | "launchConfig": {
14 | "displaySplash": true,
15 | "hideLogs": false,
16 | "splashIcon": "res/splashIcon.jpeg",
17 | "splashText": "Powered by 蹦蹦炸弹Pro, Modified by 逆熵之光",
18 | "stableMode": false
19 | },
20 | "main": "PRTS.js",
21 | "name": "PRTS v0.6.4",
22 | "optimization": {
23 | "removeAccessibilityService": false,
24 | "removeOpenCv": false,
25 | "unusedResources": false
26 | },
27 | "packageName": "com.prts.arknights",
28 | "permissionConfig": {
29 | "requestListOnStartup": [
30 | "android.permission.WRITE_EXTERNAL_STORAGE",
31 | "android.permission.WRITE_SETTINGS"
32 | ]
33 | },
34 | "scripts": {},
35 | "versionCode": 1,
36 | "versionName": "0.6.4"
37 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Ethan Wang
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PRTS
2 |
3 | 
4 | 
5 |
6 | ## 当前发布版本功能
7 |
8 | ✅ ⚡ 自动代理流程全面由找色升级为找图!**稳定性&泛用性up**!
9 |
10 | ✅ 🎨 优化作战代理流程!**体验up**!
11 |
12 | ✅ 🔋 增加屏幕自动变暗功能!正常开始代理10秒后,屏幕将自动变暗,结束全部代理后恢复亮度!**耗电down!**
13 |
14 | ✅ ✨ 增加悬浮窗拖动功能!现在只需按住悬浮窗上侧的深灰色横条即可拖动悬浮窗至任意位置!**自由度up!**
15 |
16 | ✅ 🔥 简化脚本功能:删除了**本就不必存在**的 自动收取基建 和 任务奖励功能
17 |
18 | ## 较上版本更改内容
19 |
20 | 🐛 修复由于周年庆活动开始按钮UI改变导致的无法代理
21 |
22 | ## 后续版本预更新内容
23 |
24 | ⬜ ✨ 增加一些自定义选项,如:是否自动变暗等......具体功能待定......
25 |
26 | ⬜ 🐛 增加多种分辨率图库,修复由于分辨率导致的无法代理
27 |
28 | ## 使用说明
29 |
30 | ### 【权限说明】
31 |
32 | **注:点击开始会自动弹出需要的权限窗口**
33 |
34 | 1. 打开悬浮窗权限
35 |
36 | 2. 打开无障碍服务
37 |
38 | 3. 同意截取屏幕
39 |
40 | 4. 同意修改系统设置(仅用于自动代理时调整屏幕亮度)
41 |
42 | ### 【功能说明】
43 |
44 | 1. 点悬浮窗上侧的深灰色横条可以显示或隐藏悬浮窗;
45 |
46 | 2. 「+」号和「-」用于设置关卡代理作战次数,在关卡界面点击「开始」,理智不足时不会自动吃药;
47 |
48 | 3. 「信用」用于自动收取
49 |
50 | ☆【**注意:按音量上键会退出软件**】☆
51 |
52 | ## 关于
53 |
54 | 1. 本软件使用[Auto.js Pro](https://pro.autojs.org/)开发,不盈利;
55 |
56 | 2. 不读取任何游戏数据;
57 |
58 | 3. 原作者:韭菜饺子QwQ(现B站ID:[蹦蹦炸弹Pro](https://space.bilibili.com/3157662))
59 |
60 | 4. 修改者:[逆熵之光](https://space.bilibili.com/12294062)
61 |
--------------------------------------------------------------------------------
/PRTS-apk_files/PRTS.js:
--------------------------------------------------------------------------------
1 | "ui";
2 |
3 | //变量初始化
4 | var debug = true;
5 | var ver = "0.6.4";
6 | var err = 1;
7 | var sys_lang = "cn";
8 | var thread_play_isAlive = 0;
9 | var thread_credit_isAlive = 0;
10 | var window = 1;
11 | var main_status = 2;
12 | var window_main;
13 | var window_header;
14 | var mouseTime;
15 | var w_width = 430;
16 | var w_height = 290;
17 | var header_height = 60;
18 | var sort = [];
19 | var bg;
20 | var background = [];
21 |
22 | // 打乱背景图片顺序
23 | for (var i = 1; i <= 21; i++) {
24 | sort.push(i);
25 | }
26 | // sort = sort.sort(function() { return .5 - Math.random(); }); //非完全打乱
27 | for (let i = 1; i < sort.length; i++) {
28 | var rd = Math.floor(Math.random() * (i + 1));
29 | [sort[i], sort[rd]] = [sort[rd], sort[i]];
30 | }
31 |
32 | for (let i of sort.slice(0, 3)) {
33 | bg = 'file://res/bg/' + i + '.png';
34 | background.push(bg);
35 | }
36 |
37 | //坐标转换
38 | setScreenMetrics(device.width, device.height);
39 |
40 | //界面
41 | ui.statusBarColor("#FFC0CB");
42 | ui.layout(
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | );
62 | ui.ver.setText(`当前版本: ${ver}`);
63 | ui.start.setText(" 开\n 始");
64 | ui.use.setText(" 说\n 明");
65 | ui.info.setText(" 关\n 于");
66 |
67 | // 选取随机背景图片
68 | ui.start.attr("bg", background[0]);
69 | ui.use.attr("bg", background[1]);
70 | ui.info.attr("bg", background[2]);
71 |
72 | function change_main_status() {
73 | main_status = (main_status + 1) % 2;
74 | window_header.setSize(w_width, main_status * header_height + 1);
75 | window_header.all.setAlpha(main_status * 0.7);
76 | window_main.setSize(w_width, main_status * w_height + 1);
77 | window_main.all.setAlpha(main_status * 0.85);
78 | }
79 |
80 | //界面按钮事件
81 | ui.start.click(() => {
82 | if (main_status == 2) {
83 | ui.start.setText(" 关\n 闭");
84 | threads.start(function () { main(); });
85 | main_status = 1;
86 | } else if (main_status == 1) {
87 | thread_stop();
88 | ui.start.setText(" 开\n 始");
89 | change_main_status();
90 | } else if (main_status == 0) {
91 | ui.start.setText(" 关\n 闭");
92 | change_main_status();
93 | }
94 | });
95 | ui.use.click(() => {
96 | threads.start(function () {
97 | alert("使用说明", "【权限说明】\n\
98 | (点击开始会自动弹出需要的权限窗口)\n\
99 | 1. 打开悬浮窗权限\n\
100 | 2. 打开无障碍服务\n\
101 | 3. 同意截取屏幕\n\n\
102 | 【功能说明】\n\
103 | 1. 点悬浮窗上侧的深灰色横条可以显示或隐藏悬浮窗;\n\
104 | 2.「+」号和「-」用于设置关卡代理作战次数,在关卡界面点击「开始」,理智不足时不会自动吃药;\n\
105 | 4.「信用」用于自动收取;\n\n\
106 | ☆【注意:按音量上键会退出软件】☆");
107 | });
108 | });
109 | ui.info.click(() => {
110 | threads.start(function () {
111 | alert("关于", "1.本软件使用Auto.js开发,不盈利;\n\
112 | 2.不读取任何游戏数据;\n\
113 | 3.原作者:韭菜饺子QwQ(现B站ID:蹦蹦炸弹Pro)\n\
114 | 主页:https://space.bilibili.com/3157662\n\
115 | 4.修改者:逆熵之光\n\
116 | 主页:https://space.bilibili.com/12294062 \n\n\
117 | 修改内容为:\n\
118 | 1.优化自动代理作战的流程。\n\
119 | 2.将自动收取任务奖励改为自动收取信用。\n");
120 | });
121 | });
122 | ui.blog.click(() => {
123 | app.openUrl("https://space.bilibili.com/12294062");
124 | });
125 |
126 | //主程序
127 | function main() {
128 | //请求截图权限
129 | if (requestScreenCapture(true)) {
130 | toast("请求截图成功")
131 | setTimeout(function () {
132 | //延迟2s,启动明日方舟
133 | switch (sys_lang) {
134 | case "en":
135 | app.launchApp("arknights-taptap-308"); // 英文系统
136 | break;
137 | default:
138 | app.launchApp("明日方舟"); // 中文系统
139 | }
140 | }, 2000)
141 | } else {
142 | toast("请求截图失败");
143 | exit();
144 | }
145 |
146 | //无障碍服务判断
147 | if (auto.service == null) {
148 | toast("请打开无障碍服务");
149 | sleep(2000);
150 | auto.waitFor();
151 | } else {
152 | toast("无障碍服务已打开");
153 | }
154 |
155 | //缩小放大界面
156 | window_header = floaty.rawWindow(
157 |
158 |
159 |
160 | );
161 | window_header.setTouchable(true);
162 | window_header.setPosition(0, 150);
163 | window_header.setSize(w_width, header_height);
164 | setInterval(() => { }, 2000);
165 |
166 | //悬浮窗界面
167 | window_main = floaty.rawWindow(
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 | );
185 | window_main.setTouchable(true);
186 | window_main.setPosition(0, window_header.getY() + header_height);
187 | window_main.setSize(w_width, w_height);
188 | //floaty_window.exitOnClose();
189 | setInterval(() => { }, 2000);
190 |
191 | //按钮事件
192 | window_main.b_start.click(() => { start_play(); });
193 | window_main.b_stop.click(() => { thread_stop(); });
194 | window_main.b_credit.click(() => { start_credit(); });
195 | window_main.add.on("touch_down", () => {
196 | var i = 0; //变量i
197 | mouseTime = setInterval(function () { //setInterval可一直执行内部函数
198 | num_add();
199 | i++ //若过一秒,执行一次i++
200 | }, 100);
201 | if (i == 0) { //i=0时证明无长按事件为单击事件
202 | num_add();
203 | }
204 | });
205 | window_main.add.on("touch_up", () => { clearInterval(mouseTime); });
206 | window_main.subtract.on("touch_down", () => {
207 | var i = 0; //变量i
208 | mouseTime = setInterval(function () { //setInterval可一直执行内部函数
209 | num_subtract();
210 | i++ //若过100ms,执行一次i++
211 | }, 100);
212 | if (i == 0) { //i=0时证明无长按事件为单击事件
213 | num_subtract();
214 | }
215 | });
216 | window_main.subtract.on("touch_up", () => { clearInterval(mouseTime); });
217 |
218 | window_header.title.on('click', () => {
219 | ui.run(() => {
220 | set_window_status((window + 1) % 2);
221 | });
222 | });
223 |
224 | // 悬浮窗拖动
225 | var position;
226 | window_header.title.on('touch', (e) => {
227 | position = [window_header.x - e.getRawX(), window_header.y - e.getRawY()];
228 | });
229 | window_header.title.on('touch_move', (e) => {
230 | let [x, y] = position;
231 | window_header.setPosition(x + e.getRawX(), y + e.getRawY());
232 | window_main.setPosition(x + e.getRawX(), y + e.getRawY() + header_height);
233 | });
234 | }
235 |
236 | //加号
237 | function num_add() {
238 | if (thread_play_isAlive == 0) {
239 | var i;
240 | i = window_main.num.getText();
241 | i++;
242 | window_main.num.setText(i.toString());
243 | }
244 | }
245 |
246 | //减号
247 | function num_subtract() {
248 | if (thread_play_isAlive == 0) {
249 | var i;
250 | i = window_main.num.getText();
251 | if (i > 0) {
252 | i--;
253 | window_main.num.setText(i.toString());
254 | }
255 | }
256 | }
257 |
258 | //开始代理线程
259 | function start_play() {
260 | var num = window_main.num.getText();
261 | if (thread_play_isAlive + thread_credit_isAlive == 0) {
262 | threads.start(function () {
263 | play(num);
264 | });
265 | }
266 | else {
267 | threads.start(function () { toast("正在进行其他操作"); });
268 | }
269 | }
270 |
271 | //开始领取信用线程
272 | function start_credit() {
273 | if (thread_play_isAlive + thread_credit_isAlive == 0) {
274 | threads.start(function () {
275 | credit();
276 | });
277 | }
278 | else {
279 | threads.start(function () { toast("正在进行其他操作"); });
280 | }
281 | }
282 |
283 | //停止所有线程
284 | function thread_stop() {
285 | threads.shutDownAll();
286 | thread_play_isAlive = 0;
287 | thread_credit_isAlive = 0;
288 | window_main.num.setText("0");
289 |
290 | if (err <= 5) {
291 | window_header.title.setText("当前没有操作");
292 | } else if (err > 5) {
293 | window_header.title.setText("自动代理出现失误");
294 | }
295 | err = 1;
296 | }
297 |
298 | //隐藏、显示菜单
299 | function set_window_status(status) { // 0为隐藏,1为显示
300 | window = status;
301 | window_main.setSize(w_width, status * w_height + 1);
302 | window_main.all.setAlpha(status * 0.85);
303 | }
304 |
305 | //返回首页
306 | function back2main() {
307 | var p_back, p_geer;
308 | var img_back = images.read("res/img/返回.jpg");
309 | var img_geer = images.read("res/img/首页齿轮.jpg");
310 | while (true) {
311 | p_back = images.findImage(captureScreen(), img_back);
312 | if (p_back) {
313 | click(p_back.x + 30, p_back.y + 30);
314 | } else {
315 | p_geer = images.findImage(captureScreen(), img_geer);
316 | if (p_geer) { break; }
317 | }
318 | sleep(500);
319 | }
320 | img_back.recycle();
321 | img_geer.recycle();
322 | }
323 |
324 | function wait_until_findImg(img, img_name, config) {
325 | err = 1;
326 | // initialize configuration parameters.
327 | var config = (config === undefined) ? {} : config;
328 | var delta_time = (config.delta_time === undefined) ? 1000 : config.delta_time;
329 | var max_time = (config.max_time === undefined) ? 10 * 1000 : config.max_time;
330 | var wait_click = (config.wait_click === undefined) ? false : config.wait_click;
331 | var final_click = (config.final_click === undefined) ? true : config.final_click;
332 | var click_delay = (config.click_delay === undefined) ? 1000 : config.click_delay;
333 | var bias = (config.click_bias === undefined) ? { x: 20, y: 20 } : config.click_bias;
334 | var end_delay = (config.end_delay === undefined) ? 0 : config.end_delay;
335 | var verbose = (config.verbose === undefined) ? false : config.verbose;
336 | var p;
337 | if (verbose) {
338 | window_header.title.setText(`等待${img_name}`);
339 | }
340 | while (true) {
341 | p = images.findImage(captureScreen(), img);
342 | // sleep(100);
343 | if (p) {
344 | if (final_click) {
345 | sleep(click_delay);
346 | click(p.x + bias.x, p.y + bias.y);
347 | }
348 | break;
349 | } else {
350 | if (wait_click) { click(600, 250); }
351 | sleep(delta_time);
352 | max_time -= delta_time;
353 | // console.log(max_time);
354 | if (max_time < 0) {
355 | err = 10;
356 | window_header.title.setText(`未检测到${img_name}`);
357 | sleep(1000);
358 | return 0;
359 | }
360 | }
361 | }
362 | sleep(end_delay);
363 | return p;
364 | }
365 |
366 | //点击api
367 | /**
368 | * @description 点击img1,直到检测到img2
369 | * @param {image} img1 需要点击的图片
370 | * @param {image} img2 用于判断是否已经点击img1,跳转到img2
371 | * @param {string} img1_name img1的名称
372 | * @param {string} img2_name img2的名称
373 | * @param {object} [config={ }] 一些可选参数
374 | * @param {object} [config.click_bias={ x: 15, y: 15 }] 点击时相对于检测图片左上角的偏移量(像素)
375 | * @param {number} [config.delta_t=500] 一次点击之后,正常情况下跳转到下一个界面的等待时间
376 | * @param {number} [config.end_delay=0] 本次点击完全结束后,直到开始下一个点击事件的延迟时间
377 | * @param {boolean} [config.verbose=false] 是否将点击时间显示在悬浮窗的深灰色横条上
378 | * @return void
379 | */
380 | function clickImg1_until_findImg2(img1, img2, img1_name, img2_name, config) {
381 | err = 1;
382 | // initialize configuration parameters.
383 | var config = (config === undefined) ? {} : config;
384 | var bias = (config.click_bias === undefined) ? { x: 15, y: 15 } : config.click_bias;
385 | var delta_t = (config.delta_t === undefined) ? 1000 : config.delta_t;
386 | var end_delay = (config.end_delay === undefined) ? 0 : config.end_delay;
387 | var verbose = (config.verbose === undefined) ? false : config.verbose;
388 |
389 | if (verbose) {
390 | window_header.title.setText(`点击${img1_name}`);
391 | }
392 | var p1, p2;
393 | while (true) {
394 | p1 = images.findImage(captureScreen(), img1); // 第一个图
395 | sleep(100);
396 | if (p1) {
397 | click(p1.x + bias.x, p1.y + bias.y);
398 | } else {
399 | p2 = images.findImage(captureScreen(), img2); // 第二个图
400 | sleep(100);
401 | if (p2) {
402 | break;
403 | }
404 | }
405 | if (err > 5) {
406 | window_header.title.setText(`未检测到${img2_name}`);
407 | sleep(1000);
408 | return 0;
409 | } else {
410 | err++;
411 | }
412 | sleep(delta_t);
413 | }
414 | if (end_delay) { sleep(end_delay); }
415 | if (p2) { return p2; }
416 | }
417 |
418 | function watchImg1_until_clickImg2(img1, img2, img1_name, img2_name, config) {
419 | err = 1;
420 | // initialize configuration parameters.
421 | var config = (config === undefined) ? {} : config;
422 | var bias = (config.click_bias === undefined) ? { x: 15, y: 15 } : config.click_bias;
423 | var delta_t = (config.delta_t === undefined) ? 2000 : config.delta_t;
424 | var click_delay = (config.click_delay === undefined) ? 1500 : config.click_delay;
425 | var end_delay = (config.end_delay === undefined) ? 2500 : config.end_delay;
426 | var verbose = (config.verbose === undefined) ? false : config.verbose;
427 |
428 | var p1, p2;
429 | if (verbose) {
430 | window_header.title.setText(`正在检测${img1_name}`);
431 | }
432 | while (true) {
433 | p1 = images.findImage(captureScreen(), img1); // 第一个图
434 | if (p1) { sleep(delta_t); } else { break; }
435 | }
436 |
437 | if (verbose) {
438 | window_header.title.setText(`正在检测${img2_name}`);
439 | }
440 | while (true) {
441 | sleep(click_delay);
442 | p2 = images.findImage(captureScreen(), img2); // 第二个图
443 | if (p2) {
444 | click(p2.x + bias.x, p2.y + bias.y);
445 | break;
446 | } else {
447 | click(100, 100);
448 | }
449 | }
450 | if (end_delay) { sleep(end_delay); }
451 | }
452 |
453 | function watchImg(img, img_name, config) {
454 | var config = (config === undefined) ? {} : config;
455 | var delta_t = (config.delta_t === undefined) ? 3000 : config.delta_t;
456 | var verbose = (config.verbose === undefined) ? false : config.verbose;
457 |
458 | var p;
459 | if (verbose) {
460 | window_header.title.setText(`正在检测${img_name}`);
461 | }
462 | while (true) {
463 | p = images.findImage(captureScreen(), img); // 第一个图
464 | if (p) { sleep(delta_t); } else { break; }
465 | }
466 | }
467 |
468 | // 检查关卡
469 | function check(imgs) {
470 | var p;
471 | for (var i = 0; i < imgs.length; i++) {
472 | p = images.findImage(captureScreen(), imgs[i]);
473 | sleep(100);
474 | if (p) {
475 | window_header.title.setText(`检测到开始按钮`);
476 | sleep(1000);
477 | ui.run(() => {
478 | set_window_status(0); // 隐藏菜单
479 | })
480 | return imgs[i];
481 | }
482 | }
483 | window_header.title.setText(`无法检测关卡`);
484 | sleep(1000);
485 | thread_stop();
486 | sleep(200);
487 | }
488 |
489 | //代理线程
490 | function play(num) {
491 | err = 1;
492 | thread_play_isAlive = 1;
493 |
494 | // 读取图片
495 | var img_start_blue = images.read("res/img/开始行动蓝.jpg");
496 | var img_start_3rd = images.read("res/img/开始行动(三周年).jpg");
497 | var img_start_red = images.read("res/img/开始行动红.jpg");
498 | var img_takeover = images.read("res/img/接管作战.jpg");
499 | var img_cost = images.read("res/img/cost.jpg");
500 | var img_over = images.read("res/img/行动(结束).jpg");
501 |
502 | var p_red;
503 |
504 | var b_mode = device.getBrightnessMode();
505 | var b = device.getBrightness();
506 | device.setBrightnessMode(0); // 亮度设为手动模式
507 |
508 | var img_start = check([img_start_blue, img_start_3rd]);
509 |
510 | for (var i = 1; i <= num; i++) {
511 | p_red = clickImg1_until_findImg2(img_start, img_start_red, "开始行动", "红色开始行动",
512 | config = {
513 | verbose: true
514 | });
515 | if (err > 5) { break; }
516 |
517 | click(p_red.x + 30, p_red.y); //点击红色开始行动按钮
518 |
519 | window_header.title.setText(`当前第${i}次代理`);
520 | sleep(10 * 1000); //延迟10s调整屏幕亮度
521 | if (i == 1) {
522 | device.setBrightness(Math.min(50, b / 2));
523 | }
524 | sleep(50 * 1000); // 延迟60s开始检测是否结束战斗
525 |
526 | watchImg(img_takeover, "接管作战");
527 | watchImg(img_cost, "cost"); // 避免中途出现作战失败,导致检测不到接管作战
528 |
529 | // 等待行动结束出现,等待过程中点击屏幕
530 | wait_until_findImg(img_over, "行动结束",
531 | config = {
532 | wait_click: true,
533 | click_delay: 4000
534 | });
535 | if (err > 5) { break; }
536 |
537 | // watchImg1_until_clickImg2(img_cost, img_over, "费用", "行动结束");
538 |
539 | // 等待蓝色开始按钮出现
540 | wait_until_findImg(img_start, "开始行动",
541 | config = {
542 | final_click: false
543 | });
544 | if (err > 5) { break; }
545 | }
546 | // 回收所有图片
547 | img_start_blue.recycle();
548 | img_start_3rd.recycle();
549 | img_start_red.recycle();
550 | img_takeover.recycle();
551 | img_cost.recycle();
552 | img_over.recycle();
553 |
554 | device.setBrightness(b); //恢复原始亮度
555 | device.setBrightnessMode(b_mode); //恢复原始亮度模式
556 | ui.run(() => {
557 | set_window_status(1);
558 | })
559 |
560 | thread_stop();
561 | }
562 |
563 | //领取信用
564 | function credit() {
565 | err = 1;
566 | thread_credit_isAlive = 1;
567 | window_header.title.setText("检测是否首页");
568 | back2main();
569 |
570 | var img_main_friend = images.read("res/img/首页好友.jpg");
571 | var img_friend_list_grey = images.read("res/img/好友列表黑.jpg");
572 | var img_friend_list_white = images.read("res/img/好友列表白.jpg");
573 | var img_visit_construction = images.read("res/img/访问基建.jpg");
574 | var img_enter_construction = images.read("res/img/进入基建.jpg");
575 | var img_next_orange = images.read("res/img/访问下位橙.jpg");
576 | // var img_next_grey = images.read("res/img/访问下位灰.jpg");
577 |
578 | window_header.title.setText("正在领取信用");
579 | ui.run(() => {
580 | set_window_status(0);
581 | })
582 |
583 | clickImg1_until_findImg2(img_main_friend, img_friend_list_grey, "首页好友");
584 | if (err > 5) {
585 | thread_stop();
586 | sleep(100);
587 | }
588 |
589 | clickImg1_until_findImg2(img_friend_list_grey, img_friend_list_white, "灰色好友列表");
590 | if (err > 5) {
591 | thread_stop();
592 | sleep(100);
593 | }
594 |
595 | clickImg1_until_findImg2(img_visit_construction, img_enter_construction, "访问基建");
596 | if (err > 5) {
597 | thread_stop();
598 | sleep(100);
599 | }
600 |
601 | wait_until_findImg(img_next_orange, "橙色访问下位",
602 | config = {
603 | delta_time: 500
604 | });
605 |
606 | for (var i = 1; i <= 10; i++) {
607 | window_header.title.setText(`第${i}次领取`);
608 | wait_until_findImg(img_next_orange, "橙色访问下位",
609 | config = {
610 | bias: { x: 30, y: 30 },
611 | end_delay: 1500,
612 | max_time: 6 * 1000
613 | });
614 | if (err > 5) {
615 | break;
616 | }
617 | }
618 |
619 | img_main_friend.recycle();
620 | img_friend_list_grey.recycle();
621 | img_friend_list_white.recycle();
622 | img_visit_construction.recycle();
623 | img_enter_construction.recycle();
624 | img_next_orange.recycle();
625 | // img_next_grey.recycle();
626 |
627 | ui.run(() => {
628 | set_window_status(1);
629 | })
630 | if (err == 1) {
631 | window_header.title.setText("信用领取完成");
632 | }
633 | sleep(1000);
634 | thread_stop();
635 | sleep(200);
636 | }
637 |
--------------------------------------------------------------------------------