提交文档
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"
|
||||
|
||||
|
||||
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.
|
||||
|
|
|
|||
|
|
@ -155,4 +155,17 @@ Change: 2024-06-18 14:47:09.226223449 +0800
|
|||
### 数据库操作
|
||||
```sh
|
||||
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"
|
||||
]
|
||||
}
|
||||