提交文档

This commit is contained in:
zpc 2024-10-02 00:36:43 +08:00
parent 1bd3dbe8c8
commit 71bed8a5be
43 changed files with 1205 additions and 1 deletions

View File

@ -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 @@ APPID1308826010
SecretId:AKIDVyMfzKZdZP8zkNyOdsFuSsBJDB7EScs0
SecretKey:89GWr7JPWYTL8ueHlAYowGZnvzKZjqs9
## 音乐小程序密钥
AppIDwx595ec949c6efd72b
AppSecret1677345a20450146cf4610a41b49794d
## token 计算
1. 按照对话的字符token 普7400 token +2000 简介 74003600 汉字
@ -227,3 +235,10 @@ SecretKey:89GWr7JPWYTL8ueHlAYowGZnvzKZjqs9
docker pull 123.207.203.228:93/hm-admin:latest
1. 确定页面的功能 (登录、支付、玩游戏、首页)
2. 鲸云服务 --- 最好是先出个小例子 游戏打通
3. 后台要重构
4.

View File

@ -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. 前端页面展示福袋和宝箱内的奖品列表

View 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 FrameworkEF来进行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
掌握JWTJSON 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
View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

146
脚本/冒泡/main.js Normal file
View 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);

View File

View 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;

View 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;

View 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;

View 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);
}
};

View 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"
}
}

View 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
View 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
View 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"
]
}