diff --git a/工作/妙语/妙语.md b/工作/妙语/妙语.md
index fcd608c..4c27ea6 100644
--- a/工作/妙语/妙语.md
+++ b/工作/妙语/妙语.md
@@ -2,6 +2,9 @@ ssh root@123.207.203.228 "make public-docker version=1.3.21 target_commitish=dev
ssh root@123.207.203.228 " make public-pay-docker version=1.0.4 target_commitish=dev description= -f /disk/Public/miaoyu/makefile"
+eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJOaWNrTmFtZSI6IuaWsOeUqOaItyIsIlVzZXJJZCI6IjIiLCJleHAiOjE3MjcyNTcwMTQsImlzcyI6Ikh1YW5NZW5nIiwiYXVkIjoiSHVhbk1lbmdBcHAifQ.1Ai5f5NVpjHcenNkgAgGRuL6Jizli1UyRPV6YkMW5q8
+
+
## 需求
1. 标签
@@ -159,6 +162,11 @@ APPID:1308826010
SecretId:AKIDVyMfzKZdZP8zkNyOdsFuSsBJDB7EScs0
SecretKey:89GWr7JPWYTL8ueHlAYowGZnvzKZjqs9
+
+## 音乐小程序密钥
+AppID:wx595ec949c6efd72b
+AppSecret:1677345a20450146cf4610a41b49794d
+
## token 计算
1. 按照对话的字符token 普7400 token +2000 简介 (7400)3600 汉字
@@ -227,3 +235,10 @@ SecretKey:89GWr7JPWYTL8ueHlAYowGZnvzKZjqs9
docker pull 123.207.203.228:93/hm-admin:latest
+
+
+
+1. 确定页面的功能 (登录、支付、玩游戏、首页)
+2. 鲸云服务 --- 最好是先出个小例子 游戏打通
+3. 后台要重构
+4.
diff --git a/工作/星岚魔盒/星岚魔盒.md b/工作/星岚魔盒/星岚魔盒.md
index bf9aefa..6ff998e 100644
--- a/工作/星岚魔盒/星岚魔盒.md
+++ b/工作/星岚魔盒/星岚魔盒.md
@@ -155,4 +155,17 @@ Change: 2024-06-18 14:47:09.226223449 +0800
### 数据库操作
```sh
ALTER TABLE `goods` ADD COLUMN `goods_describe` VARCHAR(300) COMMENT '描述'
-```
\ No newline at end of file
+```
+
+
+## 20240911
+# 新需求 在一番赏内增加两个奖励类型
+1. 增加新的奖励类型(福袋),抽中后需要在福袋中随机抽取一个奖品(有数量限制,概率不同,等级不同)给用户,福袋内的奖品抽完后,这个福袋就抽不到了。
+2. 增加新的奖励类型(宝箱),抽中后需要在宝箱中随机抽取一个奖品(无数量限制,概率不同,等级不同)给用户,宝箱次数抽完后,这个宝箱就抽不到了。
+3. 用户抽中福袋或者宝箱后,直接帮用户开启。
+##
+1. 增加奖品类型
+2. 后台增加配置福袋和宝箱的配置页面。同时需要增加配置的奖品。
+3. 抽奖的时候增加抽中逻辑
+4. 发放奖品添加新的发放逻辑
+5. 前端页面展示福袋和宝箱内的奖品列表
\ No newline at end of file
diff --git a/文档/.net/基础文档.md b/文档/.net/基础文档.md
new file mode 100644
index 0000000..d703a9b
--- /dev/null
+++ b/文档/.net/基础文档.md
@@ -0,0 +1,71 @@
+# C#
+## 面试和文档
+[面试宝典](https://www.yuque.com/ysgstudyhard/da6e0c)
+[官方博客](https://devblogs.microsoft.com/dotnet-ch/?c=85&WT.mc_id=dotnet-35129-website)
+[官方文档](https://learn.microsoft.com/zh-cn/aspnet/core/web-api/?view=aspnetcore-8.0&WT.mc_id=dotnet-35129-website)
+## 学习视频
+[潮汐教育.net 8-9个小时](https://www.bilibili.com/video/BV1QJ4m137eo/?spm_id_from=333.337.search-card.all.click&vd_source=5a048c750e5cf32cb313515aa014c62e)
+[webapi-基础 7小时](https://www.bilibili.com/video/BV1uLsSeVEjr/?spm_id_from=333.337.search-card.all.click&vd_source=5a048c750e5cf32cb313515aa014c62e)
+[项目实战-18小时](https://www.bilibili.com/video/BV1i9xze8EKk/?spm_id_from=333.337.search-card.all.click&vd_source=5a048c750e5cf32cb313515aa014c62e)
+## [基础](https://www.bilibili.com/video/BV1QJ4m137eo/?spm_id_from=333.337.search-card.all.click&vd_source=5a048c750e5cf32cb313515aa014c62e)
+1. 异常处理
+ 理解如何使用try-catch-finally结构处理异常,确保应用程序在发生错误时的健壮性。掌握如何抛出和捕获自定义异常。
+2. 文件和I/O操作
+ 学习如何读写文件,掌握Stream、File类的使用,理解如何处理大文件和高效的文件操作。
+3. 多线程与异步编程
+ 学习C#的多线程模型和并发编程,掌握Task、async和await的使用。理解并发操作和如何编写异步任务以提升应用性能。
+4. LINQ(语言集成查询)
+ 学习如何使用LINQ进行数据查询和操作,理解select、where、orderby等常用操作符,以及如何对集合进行过滤、排序、投影和聚合。
+5. 泛型
+ 理解C#中的泛型,学习如何使用泛型类和泛型方法来创建通用的、类型安全的集合和方法。
+6. 设计模式
+ 学习常见的设计模式,如单例模式、工厂模式、观察者模式等。理解如何通过设计模式解决常见的开发问题,编写更易维护的代码。
+7. 特性(Attributes)
+ 学习如何使用C#的特性为代码添加元数据,并理解如何使用内置特性(如[Serializable]、[Obsolete])以及自定义特性。
+8. 反射
+ 了解C#中的反射,学习如何在运行时获取类型信息并动态调用方法或访问属性。理解反射的性能影响及其应用场景。
+9. .NET库与NuGet包
+ 学习如何通过NuGet包管理器引入外部库,掌握常用的.NET库如System.IO、System.Net.Http,以及如何管理项目的外部依赖。
+10. API请求
+ 掌握如何使用HttpClient类进行HTTP请求,理解GET、POST等请求方法,以及如何处理请求结果。学习如何序列化和反序列化JSON数据。
+## 框架
+1. Entity Code First
+ 学习如何使用Entity Framework(EF)来进行ORM操作通过C#类映射数据库结构,如何自定义数据生成的模板、数据库CRUD操作等。
+2. Redis
+ 学习Redis缓存机制,理解如何使用StackExchange.Redis库将查询结果缓存,提升应用的性能。
+3. 日志框架 (SeriLog或者Nlog)
+4. Memcached
+ 学习如何使用Memcached进行缓存管理,了解其工作原理和在C#中的集成。
+5. AutoMapper
+ 掌握AutoMapper的基本使用,学习如何将对象映射为不同类型,减少手动编写映射逻辑的重复工作。
+6. SignalR
+ 学习如何使用SignalR进行实时通讯,实现WebSocket通信。理解SignalR的使用场景,如实时聊天、在线游戏等。
+7. socket
+ 学习使用原生的socket进行实时通信。
+# WebAPI & MVC
+1. 依赖注入
+ 掌握依赖注入的概念,学习如何通过ASP.NET Core内置的依赖注入框架来管理服务的生命周期和依赖。
+2. 中间件
+ 了解ASP.NET Core中中间件的作用,学习如何编写自定义中间件,处理请求和响应。
+3. 过滤器
+ 学习如何使用Action Filters、Exception Filters等过滤器在WebAPI请求处理前后执行特定逻辑,掌握自定义过滤器的编写。
+4. 配置文件
+ 学习如何在ASP.NET Core中通过appsettings.json和环境变量管理应用程序配置。理解如何在不同环境下(开发、生产)加载不同的配置。
+5. 跨域请求(CORS)
+ 理解跨域资源共享(CORS)机制,学习如何在WebAPI中配置CORS策略,以允许不同来源的客户端访问API。
+6. Razor语法(MVC)
+ 学习Razor视图引擎,理解如何在ASP.NET MVC中使用Razor语法构建动态页面,处理前端与后端的数据交互。
+7. 身份认证与授权(JWT)
+ 掌握JWT(JSON Web Token)认证机制,学习如何通过JWT实现WebAPI的身份认证与授权。
+# 扩展
+1. git版本控制
+2. sql Server
+3. 单元测试
+
+
+## 前端简单的基础
+1. [html](https://www.runoob.com/html/html-tutorial.html)
+2. [css](https://www.runoob.com/css/css-tutorial.html)
+3. [javascript](https://www.runoob.com/js/js-tutorial.html)
+4. [Jquery](https://www.runoob.com/jquery/jquery-tutorial.html)
+5. [layui.js](https://layui.dev/)
\ No newline at end of file
diff --git a/文档/前端/webRTC.html b/文档/前端/webRTC.html
new file mode 100644
index 0000000..cfc6768
--- /dev/null
+++ b/文档/前端/webRTC.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/脚本/冒泡/assets/images/mp/start/game_icon.png b/脚本/冒泡/assets/images/mp/start/game_icon.png
new file mode 100644
index 0000000..ec936f0
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/start/game_icon.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240921-222822.png b/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240921-222822.png
new file mode 100644
index 0000000..d244dfa
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240921-222822.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021555.png b/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021555.png
new file mode 100644
index 0000000..d323d91
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021555.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021631.png b/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021631.png
new file mode 100644
index 0000000..dd17aea
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021631.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021700.png b/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021700.png
new file mode 100644
index 0000000..122518e
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021700.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/bangpaizhongguan.png b/脚本/冒泡/assets/images/mp/帮派/bangpaizhongguan.png
new file mode 100644
index 0000000..deddd09
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/bangpaizhongguan.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/genghuan.png b/脚本/冒泡/assets/images/mp/帮派/genghuan.png
new file mode 100644
index 0000000..103e675
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/genghuan.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/genghuanqueding.png b/脚本/冒泡/assets/images/mp/帮派/genghuanqueding.png
new file mode 100644
index 0000000..49a7b9d
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/genghuanqueding.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/大力虎.png b/脚本/冒泡/assets/images/mp/帮派/大力虎.png
new file mode 100644
index 0000000..c8a20a0
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/大力虎.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/大力虎1.png b/脚本/冒泡/assets/images/mp/帮派/大力虎1.png
new file mode 100644
index 0000000..4c5f726
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/大力虎1.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/帮派总管.png b/脚本/冒泡/assets/images/mp/帮派/帮派总管.png
new file mode 100644
index 0000000..7f39057
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/帮派总管.png differ
diff --git a/脚本/冒泡/assets/images/mp/帮派/白发魔女.png b/脚本/冒泡/assets/images/mp/帮派/白发魔女.png
new file mode 100644
index 0000000..bda2ff1
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/帮派/白发魔女.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221110 - 副本.png b/脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221110 - 副本.png
new file mode 100644
index 0000000..19f9f81
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221110 - 副本.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221205.png b/脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221205.png
new file mode 100644
index 0000000..f6e36d4
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221205.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221559.png b/脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221559.png
new file mode 100644
index 0000000..31a8f7e
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221559.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/quxiaozidong.png b/脚本/冒泡/assets/images/mp/战斗/quxiaozidong.png
new file mode 100644
index 0000000..473fea9
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/quxiaozidong.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/shangcheng.png b/脚本/冒泡/assets/images/mp/战斗/shangcheng.png
new file mode 100644
index 0000000..bc63a50
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/shangcheng.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/zhandouz.png b/脚本/冒泡/assets/images/mp/战斗/zhandouz.png
new file mode 100644
index 0000000..fe619e3
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/zhandouz.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/zidong.png b/脚本/冒泡/assets/images/mp/战斗/zidong.png
new file mode 100644
index 0000000..c322a24
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/zidong.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/战斗中.png b/脚本/冒泡/assets/images/mp/战斗/战斗中.png
new file mode 100644
index 0000000..418ddf0
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/战斗中.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/战斗中1.png b/脚本/冒泡/assets/images/mp/战斗/战斗中1.png
new file mode 100644
index 0000000..bcae735
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/战斗中1.png differ
diff --git a/脚本/冒泡/assets/images/mp/战斗/物攻.png b/脚本/冒泡/assets/images/mp/战斗/物攻.png
new file mode 100644
index 0000000..ce5bbee
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/战斗/物攻.png differ
diff --git a/脚本/冒泡/assets/images/mp/领奖/玩家系统.png b/脚本/冒泡/assets/images/mp/领奖/玩家系统.png
new file mode 100644
index 0000000..c633731
Binary files /dev/null and b/脚本/冒泡/assets/images/mp/领奖/玩家系统.png differ
diff --git a/脚本/冒泡/detect_tigers.py b/脚本/冒泡/detect_tigers.py
new file mode 100644
index 0000000..817293d
--- /dev/null
+++ b/脚本/冒泡/detect_tigers.py
@@ -0,0 +1,47 @@
+import cv2
+import numpy as np
+
+# 加载游戏截图图像
+image = cv2.imread('detect_tigers/MuMu12-20240922-131314.png')
+
+# 转换为灰度图
+gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
+
+# 加载大力虎的模板图像(你需要准备一个小的模板图像,含有大力虎的外观)
+template = cv2.imread('detect_tigers/dalihu1.png', 0) # 模板应该是灰度图
+w, h = template.shape[::-1]
+
+# 进行模板匹配
+result = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED)
+
+# 设置匹配阈值,值越高匹配越严格
+threshold = 0.5
+locations = np.where(result >= threshold)
+
+# 容差值:合并相近的坐标时使用
+tolerance = 5
+
+# 初始的 Y 和 X 坐标数组
+y_coords = locations[0]
+x_coords = locations[1]
+
+# 存储过滤后的 Y 和 X 坐标
+filtered_coords = []
+
+# 遍历坐标,去重并合并相近的值
+for i in range(len(y_coords)):
+ # 如果过滤后的列表为空,或者当前坐标和最后一个存储的坐标相差大于容差值,则将其加入
+ if not filtered_coords or (abs(y_coords[i] - filtered_coords[-1][1]) > tolerance or abs(x_coords[i] - filtered_coords[-1][0]) > tolerance):
+ filtered_coords.append((x_coords[i], y_coords[i]))
+
+# 打印过滤后的坐标
+for coord in filtered_coords:
+ print(f"X: {coord[0]}, Y: {coord[1]}")
+ # 在原图上标出匹配的位置
+ cv2.rectangle(image, coord, (coord[0] + w, coord[1] + h), (0, 255, 0), 2)
+
+# 显示匹配结果
+cv2.imshow('Detected Tigers', image)
+cv2.waitKey(0)
+cv2.destroyAllWindows()
+# python detect_tigers.py
\ No newline at end of file
diff --git a/脚本/冒泡/detect_tigers/MuMu12-20240921-222822.png b/脚本/冒泡/detect_tigers/MuMu12-20240921-222822.png
new file mode 100644
index 0000000..d244dfa
Binary files /dev/null and b/脚本/冒泡/detect_tigers/MuMu12-20240921-222822.png differ
diff --git a/脚本/冒泡/detect_tigers/MuMu12-20240922-131314.png b/脚本/冒泡/detect_tigers/MuMu12-20240922-131314.png
new file mode 100644
index 0000000..b5a99a8
Binary files /dev/null and b/脚本/冒泡/detect_tigers/MuMu12-20240922-131314.png differ
diff --git a/脚本/冒泡/detect_tigers/dalihu.png b/脚本/冒泡/detect_tigers/dalihu.png
new file mode 100644
index 0000000..4c5f726
Binary files /dev/null and b/脚本/冒泡/detect_tigers/dalihu.png differ
diff --git a/脚本/冒泡/detect_tigers/dalihu1.png b/脚本/冒泡/detect_tigers/dalihu1.png
new file mode 100644
index 0000000..7fed656
Binary files /dev/null and b/脚本/冒泡/detect_tigers/dalihu1.png differ
diff --git a/脚本/冒泡/detect_tigers/shuguai.png b/脚本/冒泡/detect_tigers/shuguai.png
new file mode 100644
index 0000000..c72a58a
Binary files /dev/null and b/脚本/冒泡/detect_tigers/shuguai.png differ
diff --git a/脚本/冒泡/main.js b/脚本/冒泡/main.js
new file mode 100644
index 0000000..293d556
--- /dev/null
+++ b/脚本/冒泡/main.js
@@ -0,0 +1,146 @@
+function generateUUID() {
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+ const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
+ return v.toString(16);
+ });
+}
+images.requestScreenCapture()
+var ra = new RootAutomator();
+ra.setScreenMetrics(540, 960);
+toast("开始运行");
+let mpApp = require('./modules/mp-app');
+const mp = require('./modules/mp-start');
+let mpInfo = require('./modules/mp-info');
+// http://192.168.1.18:800/autoScript/negotiate
+// var res = http.post("http://192.168.1.18:800/autoScript/negotiate");
+console.log('用户所在信息', mpApp.userSaveFile);
+
+if (!files.exists(mpApp.userSaveFile)) {
+ files.createWithDirs(mpApp.userSaveFile);
+ let _userId = generateUUID();
+ files.write(mpApp.userSaveFile, _userId);
+}
+let userId = files.read(mpApp.userSaveFile);
+console.log('用户Id', userId);
+// let ws = new WebSocket('ws://192.168.1.18:800/ws');
+
+// ws
+// .on(WebSocket.EVENT_OPEN, (res, ws) => {
+// console.log('WebSocket 已连接');
+// })
+// .on(WebSocket.EVENT_MESSAGE, (message, ws) => {
+// console.log('接收到消息');
+
+// })
+// .on(WebSocket.EVENT_TEXT, (text, ws) => {
+// console.info('接收到文本消息:');
+// console.info(`text: ${text}`);
+// })
+// .on(WebSocket.EVENT_BYTES, (bytes, ws) => {
+// console.info('接收到字节数组消息:');
+// console.info(`utf8: ${bytes.utf8()}`);
+// console.info(`base64: ${bytes.base64()}`);
+// console.info(`md5: ${bytes.md5()}`);
+// console.info(`hex: ${bytes.hex()}`);
+// })
+// .on(WebSocket.EVENT_CLOSING, (code, reason, ws) => {
+// console.log('WebSocket 关闭中');
+// })
+// .on(WebSocket.EVENT_CLOSED, (code, reason, ws) => {
+// console.log('WebSocket 已关闭');
+// console.log(`code: ${code}`);
+// if (reason) console.log(`reason: ${reason}`);
+// })
+// .on(WebSocket.EVENT_FAILURE, (err, res, ws) => {
+// console.error('WebSocket 连接失败');
+// console.error(err);
+// });
+var window = floaty.window(
+
+
+
+
+
+
+
+
+
+
+);
+window.setPosition(10, 500);
+window.xuanfuqiu.click(() => {
+ //没有自动打怪
+ if (!mpInfo.AutoFightInfo.isAutoFight) {
+ mpInfo.startAutoFight();
+ window.xuanfuqiu.attr('src', "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAmpJREFUWEftVm1SIjEQ7Y4rtYdQdvy1cArhJMpJVk6CnsTxFOCvTaGH2EJIr51JDyFkkgxVFn+cKorKTJJ+/fr1B8KZHzyzffgG0IuBZfWzUsbcEdEEECsA4J+2YSTSBPAEFxf1WP9r3hU8RQBawwAPBXdqBKiNUvMSIFkAy6sfE1TquTVMVCNibYx5Gb9vawYHu91EIf5yzEzcXgby+Hu9madAJwEsry/vEXEhF5IxMzaaupABoTEM2IYnB6ITgO/556YH8STQAXtrKed/o9QT0x6ETBPRfPz28RgD3glgNRwQH/CNvw4Hfz5fpnRw4LG3X5NS05gmogBeh4MFAdyzV6P15oaBrK4vnwFR4pvWIlE9evuY2nDsdgs+50IxCw9GAYj3ZMzUCu1QCwWJsGfOaeIvOxPT0BEAMSaIvQuKDHubWoPCnh9O2XcEQOiXzQVx7wR2dIcLjX/gCMBqOGC6KiKasXI9PfA5qXCcYvm1aGFfS1pNdTLQxl+pG1atAOIDo/XGAhZKc2sRsa8DEfUpAPYZ0bDEgJoMia8tSy1Il9ayTgFoQuAyIEi/XiFohbzPooIQuHz/ChHGakFnGoJfTIyxlPd9hEURsgg7mQWxwnFKIRJjfk8hJ+wkAP4YK8VBOhaVYj9jepViv/r5B0uKUlfzinnPALvbsadcv6d7A8gtATTNiUjbIcW1Y8di2zlFCzHakgNJ4HG0mYSXBgMJxISX1YC/IRjJtPNWG6IXHkDt3u22UkrdBiMZpDzvLEQxmnoOpQdDTC51s0PpARtuAEWAu9hYzjrIDaEhoF4Act6c8v0bwNkZ+A9jMvYwf4eHmwAAAABJRU5ErkJggg==");
+ } else {
+ mpInfo.stopAutoFight();
+ window.xuanfuqiu.attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAhpJREFUWEftVtFRwzAMVSeBTgKaBDoJ7SSESdROQjeBPOOXUx1HdnrH5ae5y7VJbOnp6UnWTja+dhv7lweAVQyY2bOIvInIq4jgP+5rTiN+v8ZvZ1Xlu2aGuwA4x8emxT9AZxE59QBpAjAzRGvOMYzjvqjqOYPDmqfMDP7jApBBVU8R6BCAmb2Phj+dwQOcRgYzIABmekIQiwCKyI+MpNABoiXlSQOgvUgZ3iMdQw14BOAnb/DOP8Z3kQ5uaDczrsd7rWmiCsDMQDvov6rqHkDMDLQyvy0tohI0MwFb2IdUHMqNSwAYPexAaF4LLef8npjLIL5zqmYamgFwzhJiZ6DXMdeB9uTQsTelk4tqAEg/I2jlPQJW2kip8RtqAEAXSgjoB6cH1jZ+8b3nmVpgL5k0FTHA/O9zSREQZJwAk9LWM0XsdUBR3wPAVwRAARArpPacWHIgU2B8jgAwYlaALz8eMr0poJBZRV0poMP/EOGsF0Rl6JtJoviOiyyyspKwW1UAem8ax52NiFXkT9Mk7BBAVnmtFfNdDxFTvbsmtKoVkwU4mza6w6XZfHIgvonNosea6DSclOsHCzeAvLjDiUdyOo4rzpMWaqhbA4mPYOrtUfjFQIKlM+E1NeAXFIMJQPC+5NGMrZmM+CN7MfLFRlSLbuVQChOzU2+JteZQWrABcSJCjOa1sRzqD4fQEsgqAD31t3bNA8DmDPwCZVBiMD0aBgQAAAAASUVORK5CYII=')
+
+ }
+});
+window.xuanfuqiu1.click(() => {
+ //没有自动打怪
+ if (!mpInfo.AutoFightInfo.isFengShou) {
+ mpInfo.AutoFightInfo.isFengShou = true;
+ window.xuanfuqiu1.attr('src', "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAmpJREFUWEftVm1SIjEQ7Y4rtYdQdvy1cArhJMpJVk6CnsTxFOCvTaGH2EJIr51JDyFkkgxVFn+cKorKTJJ+/fr1B8KZHzyzffgG0IuBZfWzUsbcEdEEECsA4J+2YSTSBPAEFxf1WP9r3hU8RQBawwAPBXdqBKiNUvMSIFkAy6sfE1TquTVMVCNibYx5Gb9vawYHu91EIf5yzEzcXgby+Hu9madAJwEsry/vEXEhF5IxMzaaupABoTEM2IYnB6ITgO/556YH8STQAXtrKed/o9QT0x6ETBPRfPz28RgD3glgNRwQH/CNvw4Hfz5fpnRw4LG3X5NS05gmogBeh4MFAdyzV6P15oaBrK4vnwFR4pvWIlE9evuY2nDsdgs+50IxCw9GAYj3ZMzUCu1QCwWJsGfOaeIvOxPT0BEAMSaIvQuKDHubWoPCnh9O2XcEQOiXzQVx7wR2dIcLjX/gCMBqOGC6KiKasXI9PfA5qXCcYvm1aGFfS1pNdTLQxl+pG1atAOIDo/XGAhZKc2sRsa8DEfUpAPYZ0bDEgJoMia8tSy1Il9ayTgFoQuAyIEi/XiFohbzPooIQuHz/ChHGakFnGoJfTIyxlPd9hEURsgg7mQWxwnFKIRJjfk8hJ+wkAP4YK8VBOhaVYj9jepViv/r5B0uKUlfzinnPALvbsadcv6d7A8gtATTNiUjbIcW1Y8di2zlFCzHakgNJ4HG0mYSXBgMJxISX1YC/IRjJtPNWG6IXHkDt3u22UkrdBiMZpDzvLEQxmnoOpQdDTC51s0PpARtuAEWAu9hYzjrIDaEhoF4Act6c8v0bwNkZ+A9jMvYwf4eHmwAAAABJRU5ErkJggg==");
+ } else {
+ mpInfo.AutoFightInfo.isFengShou = false;
+ window.xuanfuqiu1.attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAhpJREFUWEftVtFRwzAMVSeBTgKaBDoJ7SSESdROQjeBPOOXUx1HdnrH5ae5y7VJbOnp6UnWTja+dhv7lweAVQyY2bOIvInIq4jgP+5rTiN+v8ZvZ1Xlu2aGuwA4x8emxT9AZxE59QBpAjAzRGvOMYzjvqjqOYPDmqfMDP7jApBBVU8R6BCAmb2Phj+dwQOcRgYzIABmekIQiwCKyI+MpNABoiXlSQOgvUgZ3iMdQw14BOAnb/DOP8Z3kQ5uaDczrsd7rWmiCsDMQDvov6rqHkDMDLQyvy0tohI0MwFb2IdUHMqNSwAYPexAaF4LLef8npjLIL5zqmYamgFwzhJiZ6DXMdeB9uTQsTelk4tqAEg/I2jlPQJW2kip8RtqAEAXSgjoB6cH1jZ+8b3nmVpgL5k0FTHA/O9zSREQZJwAk9LWM0XsdUBR3wPAVwRAARArpPacWHIgU2B8jgAwYlaALz8eMr0poJBZRV0poMP/EOGsF0Rl6JtJoviOiyyyspKwW1UAem8ax52NiFXkT9Mk7BBAVnmtFfNdDxFTvbsmtKoVkwU4mza6w6XZfHIgvonNosea6DSclOsHCzeAvLjDiUdyOo4rzpMWaqhbA4mPYOrtUfjFQIKlM+E1NeAXFIMJQPC+5NGMrZmM+CN7MfLFRlSLbuVQChOzU2+JteZQWrABcSJCjOa1sRzqD4fQEsgqAD31t3bNA8DmDPwCZVBiMD0aBgQAAAAASUVORK5CYII=')
+
+ }
+});
+window.yuancheng.click(() => {
+ if (!mpInfo.User.update) {
+ mpInfo.startUser(userId);
+ window.yuancheng.attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAg9JREFUSEu1lT9SwlAQxnffGMYb2EgMjYCXMJzCUigcjwEewsIKPUngFGAlRlt7J4Fd3cd78SUkIeJIwQyTsL/d79s/CP/8wabxF8FxAJtNqN9nXvXf17Mm/60FLE6PQkQcA6IEXklgHdT5jYizbpzcVcFKAZItbjZTQAyY+a7/lj4WA9iKJAEEeKyC7AB01kpF3w8mdZlZoIAU0TUDDFmpQX/1ua3SfHYAS7/FTDRoqnEGantDqaYXJ51KwLLtRfs0rTP22W9N5Xk3TkY7FRhppjaDZ781BoCgSacQ81x80t4RRUw0sgpkEgndvihBl37rRQzeB1CIlwwQ2sQWIhXAde8tHeiGswF0QMck+V3UswrmvmursP91AdyLkxzwDwBJTsfSX1KWlOqac2gFWt62F+n5eV/PtgAzsVY368EhFWT+Gbm3AOO+G1B7QpS1W6XZiEGx/2WWchIZKrNSHTuJZW3KzLptETE3rbKn7NQX2/3HVEe3qmzFK3lWtpvciXb9zABFsguZAKgr37sB5nMA9QHIH/04fSgmYqQWabNVk9tFZaMuQSKAo5Mz79YNePGa3hcBZasmB7Bm163fKvnEM2YO3U7MTXKmoemoppDc7XB20M6yczNzd7yAiGheXN/OO5O621F/MrfHREoP5LrpJORsmpOJADMieqq7Hb87+uu1hvzmGDUG7FvbVc+/AC80ZSgTkPkSAAAAAElFTkSuQmCC')
+ } else {
+ mpInfo.stopUser();
+ window.yuancheng.attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAb1JREFUSEu1VcFtwzAMpIoO0ny6hstJ0jyKjhFniD76SjoJ00maBbJCEp9ACrRsqXKKGkgAGxKPvCOPgf75Ca3xReSJiF70/ImZjy13qwAigoBbDXwiIvzw4Lu9H5l5VwKbBdBs90SErHfMfMgDuIqQwKEEMgHQrGUI2NcyM0AFWg8VvRIRM7NVGY/MAVz1YBPHDggAW2Ze+WpHACKCzKuc1oQVEdCKMjZ2LgEoNXvLQETALTRoeb6hk9KFJDfWZR4A6PEgIorIDwRuiN6hq1xioGoNMUYaaMAkEt5zPktg/qxVYXd9Bdeha/z7XwBwN8aKfyKCsjovzr0VaDzogPk5GkCcWOPNNLiHIqdfpNsA0C3iA6omqd0qYuPuqP+HDkx0jzQgopVNYqFNrW1H0wpfsqnP290DJN4q3QKtMEgTb8omOulZHDQP0vf9Q9d1byGE58vlcg4hnJn5s2CAmB/wH60mt4rJqKtoj0T07gMy88cMwMRqcoAods1+K/TFveE7seSmi0Cy3ZE8aGJ2PrPM4yEoPGpk3+5MP9wt7o7fVmbscXVV36K2MgH6VdvPS5d+BGld+LMaNNjzoiM33GcFKNgVoCQAAAAASUVORK5CYII=')
+ }
+
+});
+window.yuancheng2.click(() => {
+ if (mpInfo.User.autoSeekFightThread == null) {
+ mpInfo.startAutoSeekFight();
+ window.yuancheng2.attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAg9JREFUSEu1lT9SwlAQxnffGMYb2EgMjYCXMJzCUigcjwEewsIKPUngFGAlRlt7J4Fd3cd78SUkIeJIwQyTsL/d79s/CP/8wabxF8FxAJtNqN9nXvXf17Mm/60FLE6PQkQcA6IEXklgHdT5jYizbpzcVcFKAZItbjZTQAyY+a7/lj4WA9iKJAEEeKyC7AB01kpF3w8mdZlZoIAU0TUDDFmpQX/1ua3SfHYAS7/FTDRoqnEGantDqaYXJ51KwLLtRfs0rTP22W9N5Xk3TkY7FRhppjaDZ781BoCgSacQ81x80t4RRUw0sgpkEgndvihBl37rRQzeB1CIlwwQ2sQWIhXAde8tHeiGswF0QMck+V3UswrmvmursP91AdyLkxzwDwBJTsfSX1KWlOqac2gFWt62F+n5eV/PtgAzsVY368EhFWT+Gbm3AOO+G1B7QpS1W6XZiEGx/2WWchIZKrNSHTuJZW3KzLptETE3rbKn7NQX2/3HVEe3qmzFK3lWtpvciXb9zABFsguZAKgr37sB5nMA9QHIH/04fSgmYqQWabNVk9tFZaMuQSKAo5Mz79YNePGa3hcBZasmB7Bm163fKvnEM2YO3U7MTXKmoemoppDc7XB20M6yczNzd7yAiGheXN/OO5O621F/MrfHREoP5LrpJORsmpOJADMieqq7Hb87+uu1hvzmGDUG7FvbVc+/AC80ZSgTkPkSAAAAAElFTkSuQmCC')
+ } else {
+ mpInfo.stopAutoSeekFight();
+ window.yuancheng2.attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAb1JREFUSEu1VcFtwzAMpIoO0ny6hstJ0jyKjhFniD76SjoJ00maBbJCEp9ACrRsqXKKGkgAGxKPvCOPgf75Ca3xReSJiF70/ImZjy13qwAigoBbDXwiIvzw4Lu9H5l5VwKbBdBs90SErHfMfMgDuIqQwKEEMgHQrGUI2NcyM0AFWg8VvRIRM7NVGY/MAVz1YBPHDggAW2Ze+WpHACKCzKuc1oQVEdCKMjZ2LgEoNXvLQETALTRoeb6hk9KFJDfWZR4A6PEgIorIDwRuiN6hq1xioGoNMUYaaMAkEt5zPktg/qxVYXd9Bdeha/z7XwBwN8aKfyKCsjovzr0VaDzogPk5GkCcWOPNNLiHIqdfpNsA0C3iA6omqd0qYuPuqP+HDkx0jzQgopVNYqFNrW1H0wpfsqnP290DJN4q3QKtMEgTb8omOulZHDQP0vf9Q9d1byGE58vlcg4hnJn5s2CAmB/wH60mt4rJqKtoj0T07gMy88cMwMRqcoAods1+K/TFveE7seSmi0Cy3ZE8aGJ2PrPM4yEoPGpk3+5MP9wt7o7fVmbscXVV36K2MgH6VdvPS5d+BGld+LMaNNjzoiM33GcFKNgVoCQAAAAASUVORK5CYII=')
+ }
+
+});
+window.renwu.click(() => {
+ if (!mpInfo.Task.autoSeekTask) {
+ mpInfo.startTask();
+ window.renwu.attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAg9JREFUSEu1lT9SwlAQxnffGMYb2EgMjYCXMJzCUigcjwEewsIKPUngFGAlRlt7J4Fd3cd78SUkIeJIwQyTsL/d79s/CP/8wabxF8FxAJtNqN9nXvXf17Mm/60FLE6PQkQcA6IEXklgHdT5jYizbpzcVcFKAZItbjZTQAyY+a7/lj4WA9iKJAEEeKyC7AB01kpF3w8mdZlZoIAU0TUDDFmpQX/1ua3SfHYAS7/FTDRoqnEGantDqaYXJ51KwLLtRfs0rTP22W9N5Xk3TkY7FRhppjaDZ781BoCgSacQ81x80t4RRUw0sgpkEgndvihBl37rRQzeB1CIlwwQ2sQWIhXAde8tHeiGswF0QMck+V3UswrmvmursP91AdyLkxzwDwBJTsfSX1KWlOqac2gFWt62F+n5eV/PtgAzsVY368EhFWT+Gbm3AOO+G1B7QpS1W6XZiEGx/2WWchIZKrNSHTuJZW3KzLptETE3rbKn7NQX2/3HVEe3qmzFK3lWtpvciXb9zABFsguZAKgr37sB5nMA9QHIH/04fSgmYqQWabNVk9tFZaMuQSKAo5Mz79YNePGa3hcBZasmB7Bm163fKvnEM2YO3U7MTXKmoemoppDc7XB20M6yczNzd7yAiGheXN/OO5O621F/MrfHREoP5LrpJORsmpOJADMieqq7Hb87+uu1hvzmGDUG7FvbVc+/AC80ZSgTkPkSAAAAAElFTkSuQmCC')
+ } else {
+ mpInfo.stopTask();
+ window.renwu.attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAb1JREFUSEu1VcFtwzAMpIoO0ny6hstJ0jyKjhFniD76SjoJ00maBbJCEp9ACrRsqXKKGkgAGxKPvCOPgf75Ca3xReSJiF70/ImZjy13qwAigoBbDXwiIvzw4Lu9H5l5VwKbBdBs90SErHfMfMgDuIqQwKEEMgHQrGUI2NcyM0AFWg8VvRIRM7NVGY/MAVz1YBPHDggAW2Ze+WpHACKCzKuc1oQVEdCKMjZ2LgEoNXvLQETALTRoeb6hk9KFJDfWZR4A6PEgIorIDwRuiN6hq1xioGoNMUYaaMAkEt5zPktg/qxVYXd9Bdeha/z7XwBwN8aKfyKCsjovzr0VaDzogPk5GkCcWOPNNLiHIqdfpNsA0C3iA6omqd0qYuPuqP+HDkx0jzQgopVNYqFNrW1H0wpfsqnP290DJN4q3QKtMEgTb8omOulZHDQP0vf9Q9d1byGE58vlcg4hnJn5s2CAmB/wH60mt4rJqKtoj0T07gMy88cMwMRqcoAods1+K/TFveE7seSmi0Cy3ZE8aGJ2PrPM4yEoPGpk3+5MP9wt7o7fVmbscXVV36K2MgH6VdvPS5d+BGld+LMaNNjzoiM33GcFKNgVoCQAAAAASUVORK5CYII=')
+ }
+
+});
+
+window.yuancheng3.click(() => {
+ //没有自动打怪
+ if (!mpInfo.AutoFightInfo.isLaDao) {
+ mpInfo.AutoFightInfo.isLaDao = true;
+ window.yuancheng3.attr('src', "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAmpJREFUWEftVm1SIjEQ7Y4rtYdQdvy1cArhJMpJVk6CnsTxFOCvTaGH2EJIr51JDyFkkgxVFn+cKorKTJJ+/fr1B8KZHzyzffgG0IuBZfWzUsbcEdEEECsA4J+2YSTSBPAEFxf1WP9r3hU8RQBawwAPBXdqBKiNUvMSIFkAy6sfE1TquTVMVCNibYx5Gb9vawYHu91EIf5yzEzcXgby+Hu9madAJwEsry/vEXEhF5IxMzaaupABoTEM2IYnB6ITgO/556YH8STQAXtrKed/o9QT0x6ETBPRfPz28RgD3glgNRwQH/CNvw4Hfz5fpnRw4LG3X5NS05gmogBeh4MFAdyzV6P15oaBrK4vnwFR4pvWIlE9evuY2nDsdgs+50IxCw9GAYj3ZMzUCu1QCwWJsGfOaeIvOxPT0BEAMSaIvQuKDHubWoPCnh9O2XcEQOiXzQVx7wR2dIcLjX/gCMBqOGC6KiKasXI9PfA5qXCcYvm1aGFfS1pNdTLQxl+pG1atAOIDo/XGAhZKc2sRsa8DEfUpAPYZ0bDEgJoMia8tSy1Il9ayTgFoQuAyIEi/XiFohbzPooIQuHz/ChHGakFnGoJfTIyxlPd9hEURsgg7mQWxwnFKIRJjfk8hJ+wkAP4YK8VBOhaVYj9jepViv/r5B0uKUlfzinnPALvbsadcv6d7A8gtATTNiUjbIcW1Y8di2zlFCzHakgNJ4HG0mYSXBgMJxISX1YC/IRjJtPNWG6IXHkDt3u22UkrdBiMZpDzvLEQxmnoOpQdDTC51s0PpARtuAEWAu9hYzjrIDaEhoF4Act6c8v0bwNkZ+A9jMvYwf4eHmwAAAABJRU5ErkJggg==");
+ } else {
+ mpInfo.AutoFightInfo.isLaDao = false;
+ window.yuancheng3.attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAhpJREFUWEftVtFRwzAMVSeBTgKaBDoJ7SSESdROQjeBPOOXUx1HdnrH5ae5y7VJbOnp6UnWTja+dhv7lweAVQyY2bOIvInIq4jgP+5rTiN+v8ZvZ1Xlu2aGuwA4x8emxT9AZxE59QBpAjAzRGvOMYzjvqjqOYPDmqfMDP7jApBBVU8R6BCAmb2Phj+dwQOcRgYzIABmekIQiwCKyI+MpNABoiXlSQOgvUgZ3iMdQw14BOAnb/DOP8Z3kQ5uaDczrsd7rWmiCsDMQDvov6rqHkDMDLQyvy0tohI0MwFb2IdUHMqNSwAYPexAaF4LLef8npjLIL5zqmYamgFwzhJiZ6DXMdeB9uTQsTelk4tqAEg/I2jlPQJW2kip8RtqAEAXSgjoB6cH1jZ+8b3nmVpgL5k0FTHA/O9zSREQZJwAk9LWM0XsdUBR3wPAVwRAARArpPacWHIgU2B8jgAwYlaALz8eMr0poJBZRV0poMP/EOGsF0Rl6JtJoviOiyyyspKwW1UAem8ax52NiFXkT9Mk7BBAVnmtFfNdDxFTvbsmtKoVkwU4mza6w6XZfHIgvonNosea6DSclOsHCzeAvLjDiUdyOo4rzpMWaqhbA4mPYOrtUfjFQIKlM+E1NeAXFIMJQPC+5NGMrZmM+CN7MfLFRlSLbuVQChOzU2+JteZQWrABcSJCjOa1sRzqD4fQEsgqAD31t3bNA8DmDPwCZVBiMD0aBgQAAAAASUVORK5CYII=')
+
+ }
+});
+window.exitOnClose()
+
+window.xuanfuqiu.longClick(() => {
+ //长按结束
+ ra.exit();
+ window.close();
+ console.log('断开 WebSocket');
+ // ws.close(WebSocket.CODE_CLOSE_NORMAL, 'Closed by user');
+ return true;
+});
+setInterval(() => { }, 1000);
+
diff --git a/脚本/冒泡/modules/autojs-utils.js b/脚本/冒泡/modules/autojs-utils.js
new file mode 100644
index 0000000..e69de29
diff --git a/脚本/冒泡/modules/mp-app.js b/脚本/冒泡/modules/mp-app.js
new file mode 100644
index 0000000..ed699e2
--- /dev/null
+++ b/脚本/冒泡/modules/mp-app.js
@@ -0,0 +1,44 @@
+const _App = {
+ version: '1.0.3',
+};
+let mp_app = {
+ version: _App.version,
+ userSaveFilePath: `/sdcard/脚本/冒泡社区/仙剑问情/`,
+ userSaveFile: `/sdcard/脚本/冒泡社区/仙剑问情/UserId.txt`,
+ // saveFilePath: `/sdcard/脚本/冒泡社区/仙剑问情/${_App.version}/`,
+ saveFilePath: `./assets/images/`,
+ isUpdate: false,
+ init() {
+ if (this.isUpdate) {
+ if (files.isDir(this.saveFilePath)) {
+ toastLog('无需更新资源')
+ return;
+ }
+ //活动包名
+ files.ensureDir(this.saveFilePath + "/temp/")
+
+ toast('正在更新资源')
+ files.ensureDir(this.saveFilePath)
+ const url = `https://cos.shhuanmeng.com/jiaoben/%E5%86%92%E6%B3%A1/${this.version}.tar`;
+ console.log('下载地址', url);
+ let res = http.get(url);
+ if (res.statusCode !== 200) {
+ toast("请求失败");
+ return;
+ }
+ let fileData = `${this.saveFilePath}${this.version}.tar`;
+ console.log(fileData);
+ files.writeBytes(fileData, res.body.bytes());
+ //tar -xvzf /sdcard/yourfile.tar.gz -C /sdcard/yourfolder/
+ //shell
+
+ var adbTar = `tar -xvzf ${fileData} -C ${this.saveFilePath}`;
+ console.log('解压文件夹', adbTar);
+ var result = shell(adbTar, true);
+ console.log(result);
+ toast('资源更新结束')
+ }
+ }
+};
+
+module.exports = mp_app;
\ No newline at end of file
diff --git a/脚本/冒泡/modules/mp-image.js b/脚本/冒泡/modules/mp-image.js
new file mode 100644
index 0000000..2039265
--- /dev/null
+++ b/脚本/冒泡/modules/mp-image.js
@@ -0,0 +1,58 @@
+const mp_app = require("./mp-app")
+
+
+let _mpImage = {
+ image: {
+ gameIcon: `mp/start/game_icon.png`,
+ ziDong: `mp/战斗/zidong.png`,
+ quxiaozidong: "mp/战斗/quxiaozidong.png",
+ zhandou: "mp/战斗/战斗中.png",
+ yijianfayan: "mp/战斗/zhandouz.png",
+ 玩家系统: "mp/领奖/玩家系统.png",
+ 白发魔女: "mp/帮派/白发魔女.png"
+ },
+ _image: {
+ gameIcon: null,
+ ziDong: null,
+ quxiaozidong: null,
+ zhandou: null,
+ /**
+ * 一建发言
+ */
+ yijianfayan: null,
+ 玩家系统: null,
+ 白发魔女: null
+ }
+
+}
+/**
+* 给对象添加图片前缀
+* @param {Object} obj
+*/
+function addImagePrefix(obj) {
+ for (let key in obj) {
+ if (typeof obj[key] === 'string') {
+ obj[key] = mp_app.saveFilePath + obj[key];
+ } else if (typeof obj[key] === 'object') {
+ addImagePrefix(obj[key]); // 递归调用处理嵌套对象
+ }
+ }
+}
+/**
+* 给对象添加图片前缀
+* @param {Object} obj
+*/
+function addImage(obj, obj1) {
+ for (let key in obj) {
+ if (typeof obj[key] === 'string') {
+ console.log('加载图片', obj[key]);
+ obj1[key] = images.read(obj[key]);
+ } else if (typeof obj[key] === 'object') {
+ addImage(obj[key], obj1[key]); // 递归调用处理嵌套对象
+ }
+ }
+}
+addImagePrefix(_mpImage.image);
+addImage(_mpImage.image, _mpImage._image);
+
+module.exports = _mpImage;
\ No newline at end of file
diff --git a/脚本/冒泡/modules/mp-info.js b/脚本/冒泡/modules/mp-info.js
new file mode 100644
index 0000000..4942e25
--- /dev/null
+++ b/脚本/冒泡/modules/mp-info.js
@@ -0,0 +1,495 @@
+let mpImage = require('./mp-image');
+let mpApp = require('./mp-app');
+let mp_info = {
+ ra: null,
+ apiBaseUrl: "http://192.168.1.12:800/",
+ /**
+ * 检测次数间隔时间(大约每33毫秒检测一次,1秒30次)
+ */
+ detectInterval: 1000 / 3,
+ detectTimer: null,
+ AutoFightInfo: {
+ isAutoFight: false,
+ thread: null,
+ zhandouCount: 0,
+ isZhanDou: false,
+ currentRounds: 0,
+
+ fightTimer: null,
+ /**
+ * 自动战斗间隔时间(500毫秒)
+ */
+ autoFightInterval: 500,
+ /**
+ *
+ */
+ isFengShou: false,
+ isLaDao: false,
+ },
+ User: {
+ status: -1, // 未知。1未战斗,2战斗中
+ update: false,
+ ws: null,
+ thread: null,
+ autoSeekFightThread: null
+ },
+ Task: {
+ autoSeekTask: false,
+ thread: null
+ },
+ startTask() {
+ this.Task.autoSeekTask = true;
+ this.Task.thread = threads.start(() => this.autoTask());
+ },
+ getNeiZhiDaNao(url, mImage) {
+ let img = this.getCaptureScreen();
+ var base = images.toBase64(img, format = "jpeg", quality = 50)
+ img.recycle();
+ //判断当前位置区域
+ var postData = { image: base, mImage: "" };
+ if (mImage != null) {
+ postData.mImage = mImage;
+ }
+ var response = http.postJson(url, postData);
+ console.log(url, response.body.string(), response.body.json());
+ if (response == null) {
+ return null;
+ }
+ var data = response.body.json();
+ return data;
+ },
+ autoTask() {
+ console.log('开启帮派自动任务', this.apiBaseUrl);
+ var panduanweizhi = this.apiBaseUrl + "api/Task/PanDuanWeiZhi";
+ var taskList = this.apiBaseUrl + "api/Task/TaskList";
+ var piPei = this.apiBaseUrl + "api/Task/PiPei";
+ while (this.Task.autoSeekTask) {
+ var data = this.getNeiZhiDaNao(panduanweizhi, null);
+ if (data == null) {
+ sleep(5000)
+ break;
+ }
+ if (data.action == "click") {
+ console.log(data.data.x, data.data.y);
+ click(data.data.x, data.data.y)
+ //休眠500毫秒
+ sleep(1000);
+ }
+ var data1 = this.getNeiZhiDaNao(taskList);
+ if (data1 == null) {
+ sleep(5000)
+ break;
+ }
+ if (data1.action == "ok") {
+ console.log('模拟按键OK');
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(1000);
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(500);
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(500);
+
+ }
+ //再次点击帮派主管
+ click(data.data.x, data.data.y)
+ this.完成帮派任务(data, piPei, taskList);
+ sleep(2000);
+ }
+ },
+ 完成帮派任务(data, piPei, taskList) {
+
+ //休眠500毫秒
+ sleep(1000);
+ //判断是否在任务列表中
+ var data1 = this.getNeiZhiDaNao(taskList, null);
+ if (data1 == null) {
+ sleep(5000)
+ return;
+ }
+ if (data1.action == "ok") {
+ //等于帮派列表
+ console.log('模拟按键OK');
+ KeyCode("KEYCODE_DPAD_CENTER");
+ }
+ //
+ var 完成任务 = this.getNeiZhiDaNao(piPei, "detect_tigers/帮派/renwuweiwanc.png")
+ if (完成任务.action != null && 完成任务.action != "") {
+ KeyCode("KEYCODE_DPAD_CENTER");
+ console.log('模拟按键OK');
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(1000);
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(500);
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(500);
+ console.log('任务完成');
+
+ return;
+ }
+ //任务未完成
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(100)
+
+ var data1 = this.getNeiZhiDaNao(taskList, null);
+ if (data1 == null) {
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(1000)
+ }
+ var 更换帮派任务 = this.getNeiZhiDaNao(piPei, "detect_tigers/帮派/genghuan.png")
+
+ if (更换帮派任务.action == "ok") {
+ //任务未完成
+ click(更换帮派任务.data.x, 更换帮派任务.data.y)
+ sleep(500)
+ var 确定更换帮派任务 = this.getNeiZhiDaNao(piPei, "detect_tigers/帮派/genghuanqueding.png")
+ if (确定更换帮派任务.action == "ok") {
+ KeyCode("KEYCODE_DPAD_CENTER");
+ console.log('模拟按键OK');
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(1000);
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(500);
+ }
+ }
+ },
+ stopTask() {
+ this.Task.autoSeekTask = false;
+ this.Task.thread.interrupt();
+ this.Task.thread = null;
+ },
+ startUser(userId) {
+ let ws = new WebSocket('ws://192.168.1.12:800/ws?id=' + userId);
+
+ ws
+ .on(WebSocket.EVENT_OPEN, (res, ws) => {
+ console.log('WebSocket 已连接');
+ })
+ .on(WebSocket.EVENT_MESSAGE, (message, ws) => {
+ console.log('接收到消息');
+
+ })
+ .on(WebSocket.EVENT_TEXT, (text, ws) => {
+ console.info('接收到文本消息:');
+ console.info(`text: ${text}`);
+ if (text != null && text != '') {
+ var objx = JSON.parse(text);
+ if (objx != null) {
+ if (objx.Action == "click") {
+ console.log('点击坐标');
+ Tap(objx.Data.X, objx.Data.Y)
+ setTimeout(() => {
+ console.log('点击坐标284, 369');
+ Tap(284, 369)
+ console.log('点击坐标173, 714');
+ Tap(173, 714)
+ }, 500)
+ // sleep(50);
+
+
+ }
+ }
+ }
+
+ })
+ .on(WebSocket.EVENT_BYTES, (bytes, ws) => {
+ console.info('接收到字节数组消息:');
+ console.info(`utf8: ${bytes.utf8()}`);
+ // console.info(`base64: ${bytes.base64()}`);
+ // console.info(`md5: ${bytes.md5()}`);
+ // console.info(`hex: ${bytes.hex()}`);
+ })
+ .on(WebSocket.EVENT_CLOSING, (code, reason, ws) => {
+ console.log('WebSocket 关闭中');
+ })
+ .on(WebSocket.EVENT_CLOSED, (code, reason, ws) => {
+ console.log('WebSocket 已关闭');
+ console.log(`code: ${code}`);
+ if (reason) console.log(`reason: ${reason}`);
+ })
+ .on(WebSocket.EVENT_FAILURE, (err, res, ws) => {
+ console.error('WebSocket 连接失败');
+ console.error(err);
+ });
+ this.User.update = true;
+ this.User.ws = ws;
+ var that = this;
+ this.User.thread = threads.start(function () {
+ while (that.User.update || true) {
+ //
+ try {
+ let img2 = captureScreen();
+ let _bytes = images.toBytes(img2, format = "jpeg", quality = 40)
+ let javaArr = java.lang.reflect.Array
+ .newInstance(java.lang.Byte.TYPE, _bytes.length + 1);
+ javaArr[0] = 0x02;
+ for (let index = 0; index < _bytes.length; index++) {
+ javaArr[index + 1] = _bytes[index];
+ }
+ ws.send(new okio.ByteString(javaArr));
+ } catch (error) {
+ console.log(error);
+
+ }
+
+ sleep(that.detectInterval);
+ }
+ });
+
+ },
+ //自动找怪
+ startAutoSeekFight() {
+ console.log('启动');
+ if (this.User.update && this.User.autoSeekFightThread == null) {
+ var that = this;
+ var ws = this.User.ws;
+ this.User.autoSeekFightThread = threads.start(function () {
+ while (that.User.update) {
+ console.log('开始自动找怪');
+ //
+ try {
+ if (that.AutoFightInfo.isZhanDou) {
+ console.log('自动战斗中,结束');
+ sleep(2000);
+ continue;
+ }
+ console.log('开始发送数据');
+ let img2 = that.getCaptureScreen();
+ let _bytes = images.toBytes(img2, format = "jpeg", quality = 50)
+ let javaArr = java.lang.reflect.Array
+ .newInstance(java.lang.Byte.TYPE, _bytes.length + 1);
+ javaArr[0] = 0x04;
+ for (let index = 0; index < _bytes.length; index++) {
+ javaArr[index + 1] = _bytes[index];
+ }
+ ws.send(new okio.ByteString(javaArr));
+ } catch (error) {
+ console.log('出现问题', error);
+ }
+ sleep(3000);
+ }
+
+
+
+ });
+ }
+ },
+ //自动找怪
+ stopAutoSeekFight() {
+ if (this.User.autoSeekFightThread != null) {
+ this.User.autoSeekFightThread.interrupt();
+ this.User.autoSeekFightThread = null;
+ }
+ },
+ stopUser() {
+ // thread
+ if (this.User.thread != null) {
+ this.User.update = false;
+ this.User.ws.close(WebSocket.CODE_CLOSE_NORMAL, 'Closed by user');
+ this.User.thread.interrupt();
+ this.User.thread = null;
+ }
+ },
+ /**
+ * 启动自动打怪
+ */
+ startAutoFight(ra) {
+ this.ra = ra;
+ if (this.AutoFightInfo.isAutoFight) {
+ toastLog(`自动打怪已经运行中`);
+ return false;
+ }
+ toastLog(`开始自动打怪`);
+ this.AutoFightInfo.isAutoFight = true;
+ var that = this;
+
+ this.AutoFightInfo.thread = threads.start(function () {
+
+ while (that.AutoFightInfo.isAutoFight) {
+
+ try {
+ // let file = mpApp.userSaveFilePath + "autoFight.png";
+ let img1 = captureScreen();
+ var img = images.copy(img1);
+ if (img != null) {
+ that.autoFight(img);
+ img.recycle();
+ }
+ } catch (error) {
+ console.log(error);
+ }
+ sleep(0.5 * 1000); // 保持线程运行,可以根据需求调整
+ }
+ // clearInterval(that.AutoFightInfo.fightTimer);
+ });
+
+ toastLog(`自动打怪已经开始`);
+ return true;
+ },
+ stopAutoFight() {
+ if (this.AutoFightInfo.isAutoFight) {
+ // 停止定时器
+ this.AutoFightInfo.isAutoFight = false;
+ // clearInterval(this.AutoFightInfo.fightTimer);
+ // clearInterval(this.detectTimer);
+ this.AutoFightInfo.thread.interrupt();
+ this.AutoFightInfo.thread = null;
+ toastLog(`停止自动打怪`);
+
+ }
+ },
+ fight() {
+ click(293, 292);
+ sleep(20);
+ click(77, 816);
+ sleep(20);
+ click(270, 435);
+ sleep(20);
+ click(77, 816);
+ },
+ fight1() {
+ click(250, 374);
+ sleep(50);
+ click(318, 342);
+ sleep(50);
+ click(153, 288);
+ sleep(20);
+ click(77, 816);
+ sleep(20);
+ click(270, 435);
+ sleep(20);
+ click(77, 816);
+ },
+ fight2() {
+ click(275, 420);
+ sleep(50);
+ click(290, 387);
+ sleep(50);
+ click(281, 785);
+ sleep(50);
+ click(153, 288);
+ sleep(20);
+ click(77, 816);
+ sleep(20);
+ click(270, 435);
+ sleep(20);
+ click(77, 816);
+ },
+ /**
+ * 自动打怪逻辑
+ */
+ autoFight(img) {
+ // console.log('开始自动打怪');
+
+ var isZhanDou = findImage(img, mpImage._image.yijianfayan, {
+ threshold: 0.5
+ });
+ let zhandou = mpImage._image.zhandou;
+ var p = findImage(img, zhandou, {
+ threshold: 0.5
+ });
+ if (p != null) {
+ isZhanDou = p;
+ }
+ // 判断是否在战斗中
+ if (isZhanDou == null) {
+ if (this.AutoFightInfo.isZhanDou) {
+ // 战斗刚结束
+ sleep(2000);
+ this.AutoFightInfo.isZhanDou = false;
+ console.log(`本次共战斗${this.AutoFightInfo.currentRounds}回合`);
+ if (this.AutoFightInfo.currentRounds > 3) {
+ sleep(50);
+ KeyCode("KEYCODE_2");
+ sleep(10);
+ KeyCode("KEYCODE_2");
+ sleep(10);
+ KeyCode("KEYCODE_2");
+ sleep(10);
+ KeyCode("KEYCODE_2");
+ }
+ this.AutoFightInfo.currentRounds = 0;
+ }
+ return;
+ } else if (isZhanDou != null && !this.AutoFightInfo.isZhanDou) {
+ this.AutoFightInfo.isZhanDou = true;
+ this.AutoFightInfo.zhandouCount++;
+ }
+ if (isZhanDou != null) {
+ // console.log('战斗中');
+ }
+ // console.log(p);
+ if (p != null) {
+ console.log(p.x, p.y);
+ if (this.AutoFightInfo.isFengShou && (this.AutoFightInfo.currentRounds == 0 || this.AutoFightInfo.currentRounds == 2)) {
+ this.fight1();
+ } else if (this.AutoFightInfo.isLaDao && (this.AutoFightInfo.currentRounds == 0 || this.AutoFightInfo.currentRounds == 3 || this.AutoFightInfo.currentRounds == 6)) {
+ this.fight2();
+ } else {
+ this.fight();
+ }
+ // 回合数+1
+ this.AutoFightInfo.currentRounds++;
+ }
+ },
+ reaw() {
+ var thread = threads.start(function () {
+ KeyCode("KEYCODE_9");
+ sleep(120);
+ var img = captureScreen();
+ var wanjia1xit1 = findImage(img, mpImage._image.玩家系统, {
+ threshold: 0.5
+ });
+ var mallList = ocr.detect([127, 252, 284, 486]);
+ console.log(mallList);
+ if (mallList != null) {
+ for (let index = 0; index < mallList.length; index++) {
+ let element = mallList[index];
+ console.log(element);
+ if (element.label.indexOf("玩家") > -1) {
+ console.log('玩家系统坐标', element.bounds);
+ click(element.bounds);
+ break;
+ }
+ }
+ }
+ sleep(200);
+ KeyCode("KEYCODE_DPAD_DOWN");
+ sleep(200);
+ KeyCode("KEYCODE_DPAD_DOWN");
+ sleep(200);
+ KeyCode("KEYCODE_DPAD_DOWN");
+ sleep(200);
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(200);
+ KeyCode("KEYCODE_DPAD_CENTER");
+ sleep(200);
+ KeyCode("KEYCODE_DPAD_CENTER");
+ });
+
+ thread.waitFor();
+ },
+ /**
+ * 获取屏幕图片
+ * @returns 屏幕截图
+ */
+ getCaptureScreen() {
+ try {
+ let img1 = captureScreen();
+ var img = images.copy(img1);
+ return img;
+ } catch (error) {
+ return this.getCaptureScreen();
+ }
+ },
+ 帮派任务() {
+ var that = this;
+ threads.start(function () {
+
+ var image = that.getCaptureScreen();
+
+ });
+ },
+
+};
+
+module.exports = mp_info;
diff --git a/脚本/冒泡/modules/mp-start.js b/脚本/冒泡/modules/mp-start.js
new file mode 100644
index 0000000..d3451f8
--- /dev/null
+++ b/脚本/冒泡/modules/mp-start.js
@@ -0,0 +1,56 @@
+let mpImage = require('./mp-image')
+let mpApp = require('./mp-app');
+
+module.exports = {
+ greetingPrefix: 'Hello',
+ test() {
+ /* e.g. "Hello, AutoJs6 6.4.1" */
+ toastLog(`${this.greetingPrefix}, ${context.getString(R.strings.app_name)} ${app.autojs.versionName}`);
+ },
+ start() {
+ //
+ var result1 = shell("dumpsys activity activities | grep mResumedActivity", true);
+ console.log(result1.result);
+
+ if (result1.result.indexOf("com.mrpoid.app.EmulatorActivity") > -1) {
+ //在游戏中
+ toastLog(`已经在在游戏中`);
+ return;
+ }
+ // var result1 = shell("dumpsys activity activities | grep mResumedActivity", true);
+ if (result1.result.indexOf("com.skymobi.plugin.api.activity.ShardActivity") > -1) {
+ //在冒泡社区中
+ toastLog(`已经在冒泡社区界面`);
+ return;
+ }
+ var a = auto.rootInActiveWindow;
+ let currrPackageName = a.packageName();
+ if (currrPackageName == "com.skymobi.moposns") {
+ toastLog(`已经在冒泡社区界面`)
+ } else {
+ launchApp("冒泡社区");
+ while (true) {
+ let currrPackageName = a.packageName();
+ if (currrPackageName == "com.skymobi.moposns") {
+ toastLog(`已经在冒泡社区界面`)
+ break;
+ }
+ sleep(1000);
+ }
+ }
+ var img = captureScreen();
+
+ // img.saveTo(mpApp.saveFilePath + "/temp/captureScreen.png")
+ // console.log(mpImage.image.gameIcon);
+
+ // var templ = images.read(mpImage.image.gameIcon);
+ // var p = findImage(img, templ);
+ // if (p) {
+ // toastLog("找到啦:" + p);
+ // } else {
+ // toastLog("没找到");
+ // }
+
+ // app.viewFile(mpImage.image.gameIcon);
+ }
+};
\ No newline at end of file
diff --git a/脚本/冒泡/package.json b/脚本/冒泡/package.json
new file mode 100644
index 0000000..d5477d8
--- /dev/null
+++ b/脚本/冒泡/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "冒泡-仙剑问情",
+ "version": "1.0.0",
+ "description": "project-description",
+ "main": "main.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "dts": "npm i @sm003/autojs6-dts"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "devDependencies": {
+ "@sm003/autojs6-dts": "^2.0.0"
+ }
+}
diff --git a/脚本/冒泡/project.json b/脚本/冒泡/project.json
new file mode 100644
index 0000000..87b26bf
--- /dev/null
+++ b/脚本/冒泡/project.json
@@ -0,0 +1,22 @@
+{
+ "assets": [],
+ "encryptLevel": 0,
+ "useFeatures": [],
+ "launchConfig": {
+ "displaySplash": true,
+ "hideLogs": false,
+ "splashText": "Powered by AutoJs6",
+ "stableMode": false
+ },
+ "main": "main.js",
+ "name": "%ProjectName%",
+ "optimization": {
+ "removeOpenCv": false,
+ "unusedResources": false
+ },
+ "packageName": "org.example.my_project",
+ "scripts": {},
+ "versionCode": 1,
+ "versionName": "1.0.0",
+ "ignore": ["build", "node_modules", "out"]
+ }
\ No newline at end of file
diff --git a/脚本/冒泡/re.md b/脚本/冒泡/re.md
new file mode 100644
index 0000000..595755a
--- /dev/null
+++ b/脚本/冒泡/re.md
@@ -0,0 +1,58 @@
+```js
+//这个是Auto.js图标的地址
+var url = "https://www.autojs.org/assets/uploads/profile/3-profileavatar.png";
+var logo = images.load(url);
+//保存到路径/sdcard/auto.js.png
+images.save(logo, "/sdcard/auto.js.png");
+
+
+
+
+var url = "http://www.autojs.org/assets/uploads/profile/3-profileavatar.png";
+var res = http.get(url);
+if(res.statusCode !== 200){
+ toast("请求失败");
+}
+files.writeBytes("/sdcard/1.png", res.body.bytes());
+toast("下载成功");
+app.viewFile("/sdcard/1.png");
+
+
+
+
+
+var path = "/sdcard/脚本/test.js";
+if(!files.exists(path)){
+ toast("脚本文件不存在: " + path);
+ exit();
+}
+var window = floaty.window(
+
+
+
+);
+
+window.exitOnClose();
+
+var execution = null;
+
+window.action.click(()=>{
+ if(window.action.getText() === '开始运行'){
+ execution = engines.execScriptFile(path);
+ window.action.setText('停止运行');
+ }else{
+ if(execution){
+ execution.getEngine().forceStop();
+ }
+ window.action.setText('开始运行');
+ }
+});
+
+window.action.longClick(()=>{
+ window.setAdjustEnabled(!window.isAdjustEnabled());
+ return true;
+});
+
+setInterval(()=>{}, 1000);
+
+```
\ No newline at end of file
diff --git a/脚本/冒泡/tsconfig.json b/脚本/冒泡/tsconfig.json
new file mode 100644
index 0000000..09bee42
--- /dev/null
+++ b/脚本/冒泡/tsconfig.json
@@ -0,0 +1,102 @@
+{
+ "compilerOptions": {
+ /* Visit https://aka.ms/tsconfig.json to read more about this file */
+ /* Projects */
+ // "incremental": true, /* Enable incremental compilation */
+ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
+ // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
+ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
+ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
+ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
+ /* Language and Environment */
+ "target": "es5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
+ "lib": [
+ "ES2020"
+ ], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
+ // "jsx": "preserve", /* Specify what JSX code is generated. */
+ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
+ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
+ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
+ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
+ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
+ // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
+ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
+ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
+ /* Modules */
+ "module": "commonjs", /* Specify what module code is generated. */
+ // "rootDir": "./", /* Specify the root folder within your source files. */
+ "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
+ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
+ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
+ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
+ "typeRoots": [
+ "./node_modules/@types",
+ "./node_modules/@autojs",
+ "./node_modules/@sm003/autojs6-dts/declarations"
+ ], /* Specify multiple folders that act like `./node_modules/@types`. */
+ // "types": [], /* Specify type package names to be included without being referenced in a source file. */
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
+ // "resolveJsonModule": true, /* Enable importing .json files */
+ // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */
+ /* JavaScript Support */
+ "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
+ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
+ /* Emit */
+ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
+ // "declarationMap": true, /* Create sourcemaps for d.ts files. */
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
+ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
+ "outDir": "./out", /* Specify an output folder for all emitted files. */
+ // "removeComments": true, /* Disable emitting comments. */
+ // "noEmit": true, /* Disable emitting files from a compilation. */
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
+ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
+ // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
+ // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
+ /* Interop Constraints */
+ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
+ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
+ "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
+ "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
+ /* Type Checking */
+ "strict": true, /* Enable all strict type-checking options. */
+ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
+ // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
+ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
+ // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
+ // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
+ // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
+ // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
+ /* Completeness */
+ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */
+ },
+ "exclude": [
+ "node_modules",
+ "out"
+ ]
+}
\ No newline at end of file