提交文档
15
工作/妙语/妙语.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"
|
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. 标签
|
1. 标签
|
||||||
|
|
@ -159,6 +162,11 @@ APPID:1308826010
|
||||||
SecretId:AKIDVyMfzKZdZP8zkNyOdsFuSsBJDB7EScs0
|
SecretId:AKIDVyMfzKZdZP8zkNyOdsFuSsBJDB7EScs0
|
||||||
SecretKey:89GWr7JPWYTL8ueHlAYowGZnvzKZjqs9
|
SecretKey:89GWr7JPWYTL8ueHlAYowGZnvzKZjqs9
|
||||||
|
|
||||||
|
|
||||||
|
## 音乐小程序密钥
|
||||||
|
AppID:wx595ec949c6efd72b
|
||||||
|
AppSecret:1677345a20450146cf4610a41b49794d
|
||||||
|
|
||||||
## token 计算
|
## token 计算
|
||||||
1. 按照对话的字符token 普7400 token +2000 简介 (7400)3600 汉字
|
1. 按照对话的字符token 普7400 token +2000 简介 (7400)3600 汉字
|
||||||
|
|
||||||
|
|
@ -227,3 +235,10 @@ SecretKey:89GWr7JPWYTL8ueHlAYowGZnvzKZjqs9
|
||||||
|
|
||||||
|
|
||||||
docker pull 123.207.203.228:93/hm-admin:latest
|
docker pull 123.207.203.228:93/hm-admin:latest
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1. 确定页面的功能 (登录、支付、玩游戏、首页)
|
||||||
|
2. 鲸云服务 --- 最好是先出个小例子 游戏打通
|
||||||
|
3. 后台要重构
|
||||||
|
4.
|
||||||
|
|
|
||||||
|
|
@ -155,4 +155,17 @@ Change: 2024-06-18 14:47:09.226223449 +0800
|
||||||
### 数据库操作
|
### 数据库操作
|
||||||
```sh
|
```sh
|
||||||
ALTER TABLE `goods` ADD COLUMN `goods_describe` VARCHAR(300) COMMENT '描述'
|
ALTER TABLE `goods` ADD COLUMN `goods_describe` VARCHAR(300) COMMENT '描述'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 20240911
|
||||||
|
# 新需求 在一番赏内增加两个奖励类型
|
||||||
|
1. 增加新的奖励类型(福袋),抽中后需要在福袋中随机抽取一个奖品(有数量限制,概率不同,等级不同)给用户,福袋内的奖品抽完后,这个福袋就抽不到了。
|
||||||
|
2. 增加新的奖励类型(宝箱),抽中后需要在宝箱中随机抽取一个奖品(无数量限制,概率不同,等级不同)给用户,宝箱次数抽完后,这个宝箱就抽不到了。
|
||||||
|
3. 用户抽中福袋或者宝箱后,直接帮用户开启。
|
||||||
|
##
|
||||||
|
1. 增加奖品类型
|
||||||
|
2. 后台增加配置福袋和宝箱的配置页面。同时需要增加配置的奖品。
|
||||||
|
3. 抽奖的时候增加抽中逻辑
|
||||||
|
4. 发放奖品添加新的发放逻辑
|
||||||
|
5. 前端页面展示福袋和宝箱内的奖品列表
|
||||||
71
文档/.net/基础文档.md
Normal file
|
|
@ -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/)
|
||||||
61
文档/前端/webRTC.html
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<head>
|
||||||
|
<script type="text/javascript">
|
||||||
|
const WEBSOCKET_URL = "ws://127.0.0.1:8081/";
|
||||||
|
|
||||||
|
var pc, ws;
|
||||||
|
|
||||||
|
async function start() {
|
||||||
|
pc = new RTCPeerConnection();
|
||||||
|
// pc.
|
||||||
|
pc.ontrack = (evt) => {
|
||||||
|
console.log("触发");
|
||||||
|
|
||||||
|
document.querySelector("#videoCtl").srcObject = evt.streams[0];
|
||||||
|
};
|
||||||
|
pc.onicecandidate = (evt) =>
|
||||||
|
evt.candidate && ws.send(JSON.stringify(evt.candidate));
|
||||||
|
|
||||||
|
ws = new WebSocket(document.querySelector("#websockurl").value, []);
|
||||||
|
ws.onmessage = async function (evt) {
|
||||||
|
var obj = JSON.parse(evt.data);
|
||||||
|
if (obj?.candidate) {
|
||||||
|
pc.addIceCandidate(obj);
|
||||||
|
} else if (obj?.sdp) {
|
||||||
|
await pc.setRemoteDescription(new RTCSessionDescription(obj));
|
||||||
|
pc.createAnswer()
|
||||||
|
.then((answer) => pc.setLocalDescription(answer))
|
||||||
|
.then(() => ws.send(JSON.stringify(pc.localDescription)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function closePeer() {
|
||||||
|
await pc?.close();
|
||||||
|
await ws?.close();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<video
|
||||||
|
controls
|
||||||
|
autoplay="autoplay"
|
||||||
|
id="videoCtl"
|
||||||
|
width="640"
|
||||||
|
height="480"
|
||||||
|
></video>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<input type="text" id="websockurl" size="40" />
|
||||||
|
<button type="button" class="btn btn-success" onclick="start();">
|
||||||
|
Start
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-success" onclick="closePeer();">
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.querySelector("#websockurl").value = WEBSOCKET_URL;
|
||||||
|
</script>
|
||||||
BIN
脚本/冒泡/assets/images/mp/start/game_icon.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/MuMu12-20240921-222822.png
Normal file
|
After Width: | Height: | Size: 534 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021555.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021631.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/MuMu12-20240923-021700.png
Normal file
|
After Width: | Height: | Size: 380 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/bangpaizhongguan.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/genghuan.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/genghuanqueding.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/大力虎.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/大力虎1.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/帮派总管.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
脚本/冒泡/assets/images/mp/帮派/白发魔女.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221110 - 副本.png
Normal file
|
After Width: | Height: | Size: 295 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221205.png
Normal file
|
After Width: | Height: | Size: 424 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/MuMu12-20240914-221559.png
Normal file
|
After Width: | Height: | Size: 426 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/quxiaozidong.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/shangcheng.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/zhandouz.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/zidong.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/战斗中.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/战斗中1.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
脚本/冒泡/assets/images/mp/战斗/物攻.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
脚本/冒泡/assets/images/mp/领奖/玩家系统.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
47
脚本/冒泡/detect_tigers.py
Normal file
|
|
@ -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
|
||||||
BIN
脚本/冒泡/detect_tigers/MuMu12-20240921-222822.png
Normal file
|
After Width: | Height: | Size: 534 KiB |
BIN
脚本/冒泡/detect_tigers/MuMu12-20240922-131314.png
Normal file
|
After Width: | Height: | Size: 550 KiB |
BIN
脚本/冒泡/detect_tigers/dalihu.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
脚本/冒泡/detect_tigers/dalihu1.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
脚本/冒泡/detect_tigers/shuguai.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
146
脚本/冒泡/main.js
Normal file
|
|
@ -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(
|
||||||
|
<frame>
|
||||||
|
<vertical>
|
||||||
|
<img id="xuanfuqiu" w="24" h="24" circle="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAhpJREFUWEftVtFRwzAMVSeBTgKaBDoJ7SSESdROQjeBPOOXUx1HdnrH5ae5y7VJbOnp6UnWTja+dhv7lweAVQyY2bOIvInIq4jgP+5rTiN+v8ZvZ1Xlu2aGuwA4x8emxT9AZxE59QBpAjAzRGvOMYzjvqjqOYPDmqfMDP7jApBBVU8R6BCAmb2Phj+dwQOcRgYzIABmekIQiwCKyI+MpNABoiXlSQOgvUgZ3iMdQw14BOAnb/DOP8Z3kQ5uaDczrsd7rWmiCsDMQDvov6rqHkDMDLQyvy0tohI0MwFb2IdUHMqNSwAYPexAaF4LLef8npjLIL5zqmYamgFwzhJiZ6DXMdeB9uTQsTelk4tqAEg/I2jlPQJW2kip8RtqAEAXSgjoB6cH1jZ+8b3nmVpgL5k0FTHA/O9zSREQZJwAk9LWM0XsdUBR3wPAVwRAARArpPacWHIgU2B8jgAwYlaALz8eMr0poJBZRV0poMP/EOGsF0Rl6JtJoviOiyyyspKwW1UAem8ax52NiFXkT9Mk7BBAVnmtFfNdDxFTvbsmtKoVkwU4mza6w6XZfHIgvonNosea6DSclOsHCzeAvLjDiUdyOo4rzpMWaqhbA4mPYOrtUfjFQIKlM+E1NeAXFIMJQPC+5NGMrZmM+CN7MfLFRlSLbuVQChOzU2+JteZQWrABcSJCjOa1sRzqD4fQEsgqAD31t3bNA8DmDPwCZVBiMD0aBgQAAAAASUVORK5CYII=" />
|
||||||
|
<img id="yuancheng" w="24" h="24" circle="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAb1JREFUSEu1VcFtwzAMpIoO0ny6hstJ0jyKjhFniD76SjoJ00maBbJCEp9ACrRsqXKKGkgAGxKPvCOPgf75Ca3xReSJiF70/ImZjy13qwAigoBbDXwiIvzw4Lu9H5l5VwKbBdBs90SErHfMfMgDuIqQwKEEMgHQrGUI2NcyM0AFWg8VvRIRM7NVGY/MAVz1YBPHDggAW2Ze+WpHACKCzKuc1oQVEdCKMjZ2LgEoNXvLQETALTRoeb6hk9KFJDfWZR4A6PEgIorIDwRuiN6hq1xioGoNMUYaaMAkEt5zPktg/qxVYXd9Bdeha/z7XwBwN8aKfyKCsjovzr0VaDzogPk5GkCcWOPNNLiHIqdfpNsA0C3iA6omqd0qYuPuqP+HDkx0jzQgopVNYqFNrW1H0wpfsqnP290DJN4q3QKtMEgTb8omOulZHDQP0vf9Q9d1byGE58vlcg4hnJn5s2CAmB/wH60mt4rJqKtoj0T07gMy88cMwMRqcoAods1+K/TFveE7seSmi0Cy3ZE8aGJ2PrPM4yEoPGpk3+5MP9wt7o7fVmbscXVV36K2MgH6VdvPS5d+BGld+LMaNNjzoiM33GcFKNgVoCQAAAAASUVORK5CYII=" />
|
||||||
|
<img id="xuanfuqiu1" w="24" h="24" circle="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAhpJREFUWEftVtFRwzAMVSeBTgKaBDoJ7SSESdROQjeBPOOXUx1HdnrH5ae5y7VJbOnp6UnWTja+dhv7lweAVQyY2bOIvInIq4jgP+5rTiN+v8ZvZ1Xlu2aGuwA4x8emxT9AZxE59QBpAjAzRGvOMYzjvqjqOYPDmqfMDP7jApBBVU8R6BCAmb2Phj+dwQOcRgYzIABmekIQiwCKyI+MpNABoiXlSQOgvUgZ3iMdQw14BOAnb/DOP8Z3kQ5uaDczrsd7rWmiCsDMQDvov6rqHkDMDLQyvy0tohI0MwFb2IdUHMqNSwAYPexAaF4LLef8npjLIL5zqmYamgFwzhJiZ6DXMdeB9uTQsTelk4tqAEg/I2jlPQJW2kip8RtqAEAXSgjoB6cH1jZ+8b3nmVpgL5k0FTHA/O9zSREQZJwAk9LWM0XsdUBR3wPAVwRAARArpPacWHIgU2B8jgAwYlaALz8eMr0poJBZRV0poMP/EOGsF0Rl6JtJoviOiyyyspKwW1UAem8ax52NiFXkT9Mk7BBAVnmtFfNdDxFTvbsmtKoVkwU4mza6w6XZfHIgvonNosea6DSclOsHCzeAvLjDiUdyOo4rzpMWaqhbA4mPYOrtUfjFQIKlM+E1NeAXFIMJQPC+5NGMrZmM+CN7MfLFRlSLbuVQChOzU2+JteZQWrABcSJCjOa1sRzqD4fQEsgqAD31t3bNA8DmDPwCZVBiMD0aBgQAAAAASUVORK5CYII=" />
|
||||||
|
<img id="yuancheng2" w="24" h="24" circle="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAb1JREFUSEu1VcFtwzAMpIoO0ny6hstJ0jyKjhFniD76SjoJ00maBbJCEp9ACrRsqXKKGkgAGxKPvCOPgf75Ca3xReSJiF70/ImZjy13qwAigoBbDXwiIvzw4Lu9H5l5VwKbBdBs90SErHfMfMgDuIqQwKEEMgHQrGUI2NcyM0AFWg8VvRIRM7NVGY/MAVz1YBPHDggAW2Ze+WpHACKCzKuc1oQVEdCKMjZ2LgEoNXvLQETALTRoeb6hk9KFJDfWZR4A6PEgIorIDwRuiN6hq1xioGoNMUYaaMAkEt5zPktg/qxVYXd9Bdeha/z7XwBwN8aKfyKCsjovzr0VaDzogPk5GkCcWOPNNLiHIqdfpNsA0C3iA6omqd0qYuPuqP+HDkx0jzQgopVNYqFNrW1H0wpfsqnP290DJN4q3QKtMEgTb8omOulZHDQP0vf9Q9d1byGE58vlcg4hnJn5s2CAmB/wH60mt4rJqKtoj0T07gMy88cMwMRqcoAods1+K/TFveE7seSmi0Cy3ZE8aGJ2PrPM4yEoPGpk3+5MP9wt7o7fVmbscXVV36K2MgH6VdvPS5d+BGld+LMaNNjzoiM33GcFKNgVoCQAAAAASUVORK5CYII=" />
|
||||||
|
<img id="renwu" w="24" h="24" circle="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAb1JREFUSEu1VcFtwzAMpIoO0ny6hstJ0jyKjhFniD76SjoJ00maBbJCEp9ACrRsqXKKGkgAGxKPvCOPgf75Ca3xReSJiF70/ImZjy13qwAigoBbDXwiIvzw4Lu9H5l5VwKbBdBs90SErHfMfMgDuIqQwKEEMgHQrGUI2NcyM0AFWg8VvRIRM7NVGY/MAVz1YBPHDggAW2Ze+WpHACKCzKuc1oQVEdCKMjZ2LgEoNXvLQETALTRoeb6hk9KFJDfWZR4A6PEgIorIDwRuiN6hq1xioGoNMUYaaMAkEt5zPktg/qxVYXd9Bdeha/z7XwBwN8aKfyKCsjovzr0VaDzogPk5GkCcWOPNNLiHIqdfpNsA0C3iA6omqd0qYuPuqP+HDkx0jzQgopVNYqFNrW1H0wpfsqnP290DJN4q3QKtMEgTb8omOulZHDQP0vf9Q9d1byGE58vlcg4hnJn5s2CAmB/wH60mt4rJqKtoj0T07gMy88cMwMRqcoAods1+K/TFveE7seSmi0Cy3ZE8aGJ2PrPM4yEoPGpk3+5MP9wt7o7fVmbscXVV36K2MgH6VdvPS5d+BGld+LMaNNjzoiM33GcFKNgVoCQAAAAASUVORK5CYII=" />
|
||||||
|
<img id="yuancheng3" w="24" h="24" circle="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAb1JREFUSEu1VcFtwzAMpIoO0ny6hstJ0jyKjhFniD76SjoJ00maBbJCEp9ACrRsqXKKGkgAGxKPvCOPgf75Ca3xReSJiF70/ImZjy13qwAigoBbDXwiIvzw4Lu9H5l5VwKbBdBs90SErHfMfMgDuIqQwKEEMgHQrGUI2NcyM0AFWg8VvRIRM7NVGY/MAVz1YBPHDggAW2Ze+WpHACKCzKuc1oQVEdCKMjZ2LgEoNXvLQETALTRoeb6hk9KFJDfWZR4A6PEgIorIDwRuiN6hq1xioGoNMUYaaMAkEt5zPktg/qxVYXd9Bdeha/z7XwBwN8aKfyKCsjovzr0VaDzogPk5GkCcWOPNNLiHIqdfpNsA0C3iA6omqd0qYuPuqP+HDkx0jzQgopVNYqFNrW1H0wpfsqnP290DJN4q3QKtMEgTb8omOulZHDQP0vf9Q9d1byGE58vlcg4hnJn5s2CAmB/wH60mt4rJqKtoj0T07gMy88cMwMRqcoAods1+K/TFveE7seSmi0Cy3ZE8aGJ2PrPM4yEoPGpk3+5MP9wt7o7fVmbscXVV36K2MgH6VdvPS5d+BGld+LMaNNjzoiM33GcFKNgVoCQAAAAASUVORK5CYII=" />
|
||||||
|
</vertical>
|
||||||
|
</frame>
|
||||||
|
);
|
||||||
|
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);
|
||||||
|
|
||||||
0
脚本/冒泡/modules/autojs-utils.js
Normal file
44
脚本/冒泡/modules/mp-app.js
Normal file
|
|
@ -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;
|
||||||
58
脚本/冒泡/modules/mp-image.js
Normal file
|
|
@ -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;
|
||||||
495
脚本/冒泡/modules/mp-info.js
Normal file
|
|
@ -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;
|
||||||
56
脚本/冒泡/modules/mp-start.js
Normal file
|
|
@ -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);
|
||||||
|
}
|
||||||
|
};
|
||||||
16
脚本/冒泡/package.json
Normal file
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
22
脚本/冒泡/project.json
Normal file
|
|
@ -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"]
|
||||||
|
}
|
||||||
58
脚本/冒泡/re.md
Normal file
|
|
@ -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(
|
||||||
|
<frame>
|
||||||
|
<button id="action" text="开始运行" w="90" h="40" bg="#77ffffff"/>
|
||||||
|
</frame>
|
||||||
|
);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
```
|
||||||
102
脚本/冒泡/tsconfig.json
Normal file
|
|
@ -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 `<reference>`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"
|
||||||
|
]
|
||||||
|
}
|
||||||