From bdf499126aca0027a54d0094588ac2c55a0d3cc9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=8F=A4=E5=8F=88?=
<104784428+guyou45@users.noreply.github.com>
Date: Sat, 8 Nov 2025 00:32:06 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=B0=83=E7=94=A8abgi?=
=?UTF-8?q?=E7=9A=84=E4=B8=80=E6=9D=A1=E9=BE=99=EF=BC=8C=E5=92=8C=E5=88=A0?=
=?UTF-8?q?=E6=8E=89=E5=A4=9A=E4=BD=99=E6=96=87=E4=BB=B6=20(#2326)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Add files via upload
* Delete repo/js/AutoPickLitter/main copy.js
---
repo/js/AutoPickLitter/main copy.js | 1123 ----------------------
repo/js/调用一条龙/README.md | 48 +
repo/js/调用一条龙/assets/img/步骤一.png | Bin 0 -> 77938 bytes
repo/js/调用一条龙/assets/img/步骤三.png | Bin 0 -> 88436 bytes
repo/js/调用一条龙/assets/img/步骤二.png | Bin 0 -> 84753 bytes
repo/js/调用一条龙/assets/img/步骤五.png | Bin 0 -> 81581 bytes
repo/js/调用一条龙/assets/img/步骤六.png | Bin 0 -> 82066 bytes
repo/js/调用一条龙/assets/img/步骤四.png | Bin 0 -> 78242 bytes
repo/js/调用一条龙/main.js | 14 +
repo/js/调用一条龙/manifest.json | 26 +
repo/js/调用一条龙/settings.json | 8 +
11 files changed, 96 insertions(+), 1123 deletions(-)
delete mode 100644 repo/js/AutoPickLitter/main copy.js
create mode 100644 repo/js/调用一条龙/README.md
create mode 100644 repo/js/调用一条龙/assets/img/步骤一.png
create mode 100644 repo/js/调用一条龙/assets/img/步骤三.png
create mode 100644 repo/js/调用一条龙/assets/img/步骤二.png
create mode 100644 repo/js/调用一条龙/assets/img/步骤五.png
create mode 100644 repo/js/调用一条龙/assets/img/步骤六.png
create mode 100644 repo/js/调用一条龙/assets/img/步骤四.png
create mode 100644 repo/js/调用一条龙/main.js
create mode 100644 repo/js/调用一条龙/manifest.json
create mode 100644 repo/js/调用一条龙/settings.json
diff --git a/repo/js/AutoPickLitter/main copy.js b/repo/js/AutoPickLitter/main copy.js
deleted file mode 100644
index 80c4cb735..000000000
--- a/repo/js/AutoPickLitter/main copy.js
+++ /dev/null
@@ -1,1123 +0,0 @@
-// 初始化相关变量
-let gameRegion; // 游戏截图区域
-const dialogZone = { x: { min: 900, max: 1700 }, y: { min: 420, max: 880 } }; // 对话识别区域
-let record = {}; // record 记录内容
-let recordsNum = 0; // 写入内容次数
-let sticksTime = false; // 判定是否可以上香
-//六龙蛋位置
-const coordinates = [
- [551, 153],
- [881, 341],
- [1087, 161],
- [1342, 357],
- [472, 572],
- [572, 721]
-];
-
-// 通用方法区域
-//切换队伍
-async function switchPartyIfNeeded() {
- if (!settings.partyName) {
- await genshin.returnMainUi();
- return;
- };
- try {
- log.info("正在尝试切换至" + settings.partyName);
- if (!await genshin.switchParty(settings.partyName)) {
- log.info("切换队伍失败,前往七天神像重试");
- await genshin.tpToStatueOfTheSeven();
- await genshin.switchParty(settings.partyName);
- }
- } catch {
- log.error("队伍切换失败,可能处于联机模式或其他不可切换状态");
- notification.error(`队伍切换失败,可能处于联机模式或其他不可切换状态`);
- await genshin.returnMainUi();
- };
-};
-
-// 文字识别/点击,并返回结果
-async function performOcr(keyWords, xRange, yRange, judge, timeout = 500) {
- let startTime = new Date();
- let retryCount = 0;
- while (Date.now() - startTime < timeout) {
- gameRegion = captureGameRegion();
- try {
- if (judge) {
- // 识别相关区域内容,返回结果
- let ocrResult = gameRegion.find(RecognitionObject.ocr(
- xRange.min, yRange.min,
- xRange.max - xRange.min, yRange.max - yRange.min
- ));
- gameRegion.dispose();
- if (ocrResult) {
- return { success: true, text: ocrResult.text};
- };
- } else {
- // 比对相关内容并点击
- let resList = gameRegion.findMulti(RecognitionObject.ocr(
- xRange.min, yRange.min,
- xRange.max - xRange.min, yRange.max - yRange.min
- ));
- gameRegion.dispose();
- for (let res of resList) {
- let correctedText = res.text;
- if (correctedText.includes(keyWords)) {
- let centerX = Math.round(res.x + res.width / 2);
- let centerY = Math.round(res.y + res.height / 2);
- keyDown("VK_MENU");
- await sleep(700);
- moveMouseTo(centerX, centerY);
- leftButtonClick();
- await sleep(800);
- keyUp("VK_MENU");
- await sleep(1000);
- leftButtonClick();
- return { success: true, text: correctedText};
- };
- };
- };
- } catch (error) {
- retryCount++; // 增加重试计数
- log.warn(`OCR 识别失败,正在进行第 ${retryCount} 次重试...`);
- }
- await sleep(50);
- };
- // log.warn(`经过多次尝试,仍然无法识别`);
- return { success: false};
-};
-
-// 图像识别/点击,并返回结果
-async function findImgIcon(imagePath, xRange, yRange, judge, threshold = 0.8, timeout = 500) {
- let startTime = new Date();
- let retryCount = 0;
- let template = file.ReadImageMatSync(imagePath);
- let recognitionObject = RecognitionObject.TemplateMatch(template, xRange.min, yRange.min,
- xRange.max - xRange.min, yRange.max - yRange.min);
- recognitionObject.Threshold = threshold;
- // recognitionObject.Use3Channels = true;
- recognitionObject.InitTemplate();
- while (Date.now() - startTime < timeout) {
- gameRegion = captureGameRegion();
- let result = gameRegion.find(recognitionObject);
- gameRegion.dispose();
- try {
- if (judge) {
- if (result.isExist()) {
- let centerX = Math.round(result.x + result.width / 2);
- let centerY = Math.round(result.y + result.height / 2);
- keyDown("VK_MENU");
- await sleep(500);
- moveMouseTo(centerX, centerY);
- leftButtonClick();
- await sleep(800);
- keyUp("VK_MENU");
- await sleep(1000);
- leftButtonClick();
- return { success: true, coordinates:[centerX, centerY]};
- };
- } else {
- if (result.isExist()) {
- return { success: true, coordinates:[0, 0]};
- };
- };
- } catch (error) {
- retryCount++; // 增加重试计数
- log.warn(`模板匹配失败,正在进行第 ${retryCount} 次重试...`);
- };
- await sleep(50);
- };
- // log.warn(`经过多次尝试,仍然无法识别`);
- return { success: false};
-};
-
-// 滚动页面
-// totalDistance: 需要滚动的总距离
-// stepDistance: 每次滚动的距离
-// delayMs: 两次滚动之间的延迟
-async function scrollPage(totalDistance, stepDistance = 10, delayMs = 5) {
- // 移动鼠标到(999, 750)并按下左键
- moveMouseTo(999, 750);
- await sleep(50);
- leftButtonDown();
-
- // 估算需要滚动的步数
- const steps = Math.ceil(totalDistance / stepDistance);
- // 依次滚动
- for (let j = 0; j < steps; j++) {
- // 计算本次滚动剩余的距离
- const remainingDistance = totalDistance - j * stepDistance;
- // 如果剩余距离小于 stepDistance,则滚动剩余的距离
- // 否则滚动 stepDistance
- const moveDistance = remainingDistance < stepDistance ? remainingDistance : stepDistance;
- // 滚动
- moveMouseBy(0, -moveDistance);
- // 等待 delayMs ms
- await sleep(delayMs);
- }
- // 等待700ms
- await sleep(700);
- // 释放左键
- leftButtonUp();
- // 等待100ms
- await sleep(100);
-}
-
-//fakeLog 函数,使用方法:将本函数放在主函数前,调用时请务必使用await,否则可能出现v8白框报错
-//在js开头处伪造该js结束运行的日志信息,如 await fakeLog("js脚本", true, true, 0);
-//在js结尾处伪造该js开始运行的日志信息,如 await fakeLog("js脚本", true, false, 2333);
-//duration项目仅在伪造结束信息时有效,且无实际作用,可以任意填写,当你需要在日志中输出特定值时才需要,单位为毫秒
-//在调用地图追踪前伪造该地图追踪开始运行的日志信息,如 await fakeLog(`地图追踪.json`, false, true, 0);
-//在调用地图追踪后伪造该地图追踪结束运行的日志信息,如 await fakeLog(`地图追踪.json`, false, false, 0);
-//如此便可以在js运行过程中伪造地图追踪的日志信息,可以在日志分析等中查看
-async function fakeLog(name, isJs, isStart, duration) {
- await sleep(10);
- const currentTime = Date.now();
- // 参数检查
- if (typeof name !== 'string') {
- log.error("参数 'name' 必须是字符串类型!");
- return;
- };
- if (typeof isJs !== 'boolean') {
- log.error("参数 'isJs' 必须是布尔型!");
- return;
- };
- if (typeof isStart !== 'boolean') {
- log.error("参数 'isStart' 必须是布尔型!");
- return;
- };
- if (typeof currentTime !== 'number' || !Number.isInteger(currentTime)) {
- log.error("参数 'currentTime' 必须是整数!");
- return;
- };
- if (typeof duration !== 'number' || !Number.isInteger(duration)) {
- log.error("参数 'duration' 必须是整数!");
- return;
- };
-
- // 将 currentTime 转换为 Date 对象并格式化为 HH:mm:ss.sss
- const date = new Date(currentTime);
- const hours = String(date.getHours()).padStart(2, '0');
- const minutes = String(date.getMinutes()).padStart(2, '0');
- const seconds = String(date.getSeconds()).padStart(2, '0');
- const milliseconds = String(date.getMilliseconds()).padStart(3, '0');
- const formattedTime = `${hours}:${minutes}:${seconds}.${milliseconds}`;
-
- // 将 duration 转换为分钟和秒,并保留三位小数
- const durationInSeconds = duration / 1000; // 转换为秒
- const durationMinutes = Math.floor(durationInSeconds / 60);
- const durationSeconds = (durationInSeconds % 60).toFixed(3); // 保留三位小数
-
- // 使用四个独立的 if 语句处理四种情况
- if (isJs && isStart) {
- // 处理 isJs = true 且 isStart = true 的情况
- const logMessage = `正在伪造js开始的日志记录\n\n` +
- `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` +
- `------------------------------\n\n` +
- `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` +
- `→ 开始执行JS脚本: "${name}"`;
- log.debug(logMessage);
- };
- if (isJs && !isStart) {
- // 处理 isJs = true 且 isStart = false 的情况
- const logMessage = `正在伪造js结束的日志记录\n\n` +
- `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` +
- `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` +
- `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` +
- `------------------------------`;
- log.debug(logMessage);
- };
- if (!isJs && isStart) {
- // 处理 isJs = false 且 isStart = true 的情况
- const logMessage = `正在伪造地图追踪开始的日志记录\n\n` +
- `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` +
- `------------------------------\n\n` +
- `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` +
- `→ 开始执行地图追踪任务: "${name}"`;
- log.debug(logMessage);
- };
- if (!isJs && !isStart) {
- // 处理 isJs = false 且 isStart = false 的情况
- const logMessage = `正在伪造地图追踪结束的日志记录\n\n` +
- `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` +
- `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` +
- `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` +
- `------------------------------`;
- log.debug(logMessage);
- };
-};
-
-// 读写信息
-async function recordForFile(judge) {
- /* ---------- 文件名合法性校验 ---------- */
- const illegalCharacters = /[\\/:*?"<>|]/;
- const reservedNames = [
- "CON", "PRN", "AUX", "NUL",
- "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
- "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"
- ];
-
- let accountName = settings.accountName || "默认账户";
-
- if (accountName === "" ||
- accountName.startsWith(" ") ||
- accountName.endsWith(" ") ||
- illegalCharacters.test(accountName) ||
- reservedNames.includes(accountName.toUpperCase()) ||
- accountName.length > 255
- ) {
- log.error(`账户名 "${accountName}" 不合法,将使用默认值`);
- accountName = "默认账户";
- await sleep(5000);
- } else {
- log.info(`账户名 "${accountName}" 合法`);
- };
-
- if (judge) {
- /* ---------- 读取记录文件 ---------- */
- const recordFolderPath = "records/";
- let recordFilePath = `records/${accountName}.txt`;
-
- const filesInSubFolder = file.ReadPathSync(recordFolderPath);
- let fileExists = false;
- for (const filePath of filesInSubFolder) {
- if (filePath === `records\\${accountName}.txt`) {
- fileExists = true;
- break;
- };
- };
-
- /* ---------- 初始化记录对象 ---------- */
- record = {
- lastRunDate: "1970/01/01",
- lastActivateTime: new Date("1970-01-01T20:00:00.000Z"),
- lastDragonEggsNum: "【山之血:0,太阳的轰鸣:0圣龙君临:0,菲耶蒂娜:0,献给小酒杯:0,飞澜鲨鲨:0】",
- records: new Array(51).fill(""),
- version: ""
- };
-
- let recordIndex = 0;
-
- if (fileExists) {
- log.info(`记录文件 ${recordFilePath} 存在`);
- } else {
- log.warn(`无记录文件,将使用默认数据`);
- return;
- };
-
- let content = await file.readText(recordFilePath);
- let lines = content.split("\n");
-
- /* ---------- 逐行解析 ---------- */
- for (const rawLine of lines) {
- const line = rawLine.trim();
- if (!line) continue;
-
- /* 运行完成日期 */
- if (line.startsWith("上次运行日期:")) {
- record.lastRunDate = line.slice("上次运行日期:".length).trim();
- };
-
- /* 上次上香时间 */
- let timeStr = null;
- if (line.startsWith("上次上香时间:")) {
- timeStr = line.slice("上次上香时间:".length).trim();
- };
- if (timeStr) {
- const d = new Date(timeStr);
- if (!isNaN(d.getTime())) {
- record.lastActivateTime = d; // 保持 Date 对象
- };
- };
-
- /* 背包龙蛋数目 */
- if (line.startsWith("背包龙蛋数目:")) {
- record.lastDragonEggsNum = line.slice("背包龙蛋数目:".length).trim();
- };
-
- /* 相关信息保存 */
- if (line.startsWith(">>>>>>>>>> ") && recordIndex < record.records.length) {
- record.records[recordIndex++] = line;
- } else if (line.startsWith("抽签的结果: ") && recordIndex < record.records.length) {
- record.records[recordIndex++] = line;
- } else if (line.startsWith("获得的食物: ") && recordIndex < record.records.length) {
- record.records[recordIndex++] = line;
- } else if (line.startsWith("幸运签内容: ") && recordIndex < record.records.length) {
- record.records[recordIndex++] = line;
- } else if (line.startsWith("获得的龙蛋: ") && recordIndex < record.records.length) {
- record.records[recordIndex++] = line;
- } else if (line.startsWith("转盘的运势: ") && recordIndex < record.records.length) {
- record.records[recordIndex++] = line;
- };
-
- };
-
- log.info(`上次运行日期: ${record.lastRunDate}`);
- log.info(`上次上香开始时间: ${record.lastActivateTime.toLocaleString()}`);
-
- /* ---------- 读取 manifest 版本 ---------- */
- try {
- const manifest = JSON.parse(await file.readText("manifest.json"));
- record.version = manifest.version;
- log.info(`当前版本为${record.version}`);
- } catch (err) {
- log.error("读取或解析 manifest.json 失败:", err);
- };
-
- /* ---------- 判断上香时间 ---------- */
- if (settings.sticks) {
- const now = Date.now(); // 当前毫秒时间戳
- const aimActivateTime = new Date(record.lastActivateTime.getTime() + 24 * 60 * 60 * 1000).getTime();
- /* ---------- 计算下次可上香时间 ---------- */
- if (aimActivateTime - now > 0) {
- log.info(`上香时间还未到!!!`);
- sticksTime = false;
- } else {
- log.info(`上香时间已到,请准备上香!`);
- sticksTime = true;
- };
- };
- } else {
- let recordFilePath = `records/${accountName}.txt`;
- let lines = [
- `上次运行日期: ${record.lastRunDate}`,
- `上次上香时间: ${record.lastActivateTime.toISOString()}`,
- `背包龙蛋数目: ${record.lastDragonEggsNum}`,
- ...record.records.filter(Boolean)
- ];
-
- let content = lines.join('\n');
-
- try {
- await file.writeText(recordFilePath, content, false);
- log.info(`记录已写入 ${recordFilePath}`);
- } catch (e) {
- log.error(`写入 ${recordFilePath} 失败:`, e);
- };
- };
-};
-
-// 检查背包龙蛋数目
-async function chcekDragonEggs() {
- await genshin.returnMainUi();
- //打开背包
- await keyPress("B");
- await sleep(1500);
- await click(1250,50);
- let DragonEggs = [0, 0, 0, 0, 0, 0];
- let judgeEgg = 0;
- // 判定是不是只有一页
- let sliderTop = await findImgIcon("assets/RecognitionObject/SliderTop.png", { min: 1277, max: 1300 }, { min: 120, max: 160 }, false);
- if (!sliderTop.success) {
- for (let index = 0; index < 6; index++) {
- let DragonEgg = await findImgIcon(`assets/RecognitionObject/DragonEgg${index}.png`, { min: 99, max: 1295 }, { min: 104, max: 967 }, true, 0.95);
- if (DragonEgg.success) {
- let ocrEggNum = await performOcr("",
- { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true);
- log.info(`第一次识别到的数字:${ocrEggNum.text}`);
- if (ocrEggNum.text == "") {
- await sleep(500);
- ocrEggNum = await performOcr("",
- { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true);
- log.info(`第二次识别到的数字:${ocrEggNum.text}`);
- };
- DragonEggs[index] = Number(ocrEggNum.text);
- }else{
- DragonEggs[index] = 0;
- };
-
- };
- }else{
- for (let scroll = 0; scroll <= 10; scroll++) {
- for (let index = 0; index < 6; index++) {
- let DragonEgg = await findImgIcon(`assets/RecognitionObject/DragonEgg${index}.png`, { min: 99, max: 1295 }, { min: 104, max: 967 }, true, 0.95);
- if (DragonEgg.success) {
- let ocrEggNum = await performOcr("",
- { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true);
- log.info(`第一次识别到的数字:${ocrEggNum.text}`);
- if (ocrEggNum.text == "") {
- await sleep(500);
- ocrEggNum = await performOcr("",
- { min: DragonEgg.coordinates[0]-46, max: DragonEgg.coordinates[0]+34 }, { min: DragonEgg.coordinates[1]+56, max: DragonEgg.coordinates[1]+83 }, true);
- log.info(`第二次识别到的数字:${ocrEggNum.text}`);
- };
- if (ocrEggNum.text == "") {
- ocrEggNum.text = 1;
- };
- DragonEggs[index] = ocrEggNum.text;
- }else{
- DragonEggs[index] = 0;
- };
- };
- if (judgeEgg == 1) {
- break;
- };
- if (DragonEggs.every(item => item == 0)) {
- // 都为空就滑动背包 滑动大点
- await sleep(1000);
- await scrollPage(680, 10, 5);
- await sleep(1000);
- continue;
- } else if (DragonEggs.some(item => item != 0) && judgeEgg == 0) {
- // 露出最后一排数字
- // await scrollPage(50, 5, 5);
- // 不为空就滑动背包 滑动小点
- await sleep(1000);
- await scrollPage(200, 10, 5);
- await sleep(1000);
- judgeEgg = 1;
- };
-
- // 判断是否到底
- let sliderBottom = await findImgIcon("assets/RecognitionObject/SliderBottom.png", { min: 1284, max: 1293 }, { min: 916, max: 942 }, false);
- if (sliderBottom.success) {
- log.info("已到达最后一页!");
- break;
- };
- };
- };
-
- log.info(`背包龙蛋数目: 【山之血:${DragonEggs[0]},太阳的轰鸣:${DragonEggs[1]},圣龙君临:${DragonEggs[2]},菲耶蒂娜:${DragonEggs[3]},献给小酒杯:${DragonEggs[4]},飞澜鲨鲨:${DragonEggs[5]}】`);
- if (settings.notify) {
- notification.Send(`背包龙蛋数目: 【山之血:${DragonEggs[0]},太阳的轰鸣:${DragonEggs[1]},圣龙君临:${DragonEggs[2]},菲耶蒂娜:${DragonEggs[3]},献给小酒杯:${DragonEggs[4]},飞澜鲨鲨:${DragonEggs[5]}】`);
- };
- // 更新记录
- record.lastDragonEggsNum = `【山之血:${DragonEggs[0]},太阳的轰鸣:${DragonEggs[1]},圣龙君临:${DragonEggs[2]},菲耶蒂娜:${DragonEggs[3]},献给小酒杯:${DragonEggs[4]},飞澜鲨鲨:${DragonEggs[5]}】`;
- await recordForFile(false);
- return DragonEggs;
-};
-
-//添加信息
-function writeContentToFile(content, judge) {
- //文件名合法校验
- let finalAccountName = settings.accountName || "默认账户";
- try {
- const illegalCharacters = /[\\/:*?"<>|]/;
- const reservedNames = [
- "CON", "PRN", "AUX", "NUL",
- "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
- "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"
- ];
-
- if (finalAccountName === "" ||
- finalAccountName.startsWith(" ") ||
- finalAccountName.endsWith(" ") ||
- illegalCharacters.test(finalAccountName) ||
- reservedNames.includes(finalAccountName.toUpperCase()) ||
- finalAccountName.length > 255
- ) {
- log.error(`账户名 "${finalAccountName}" 不合法,将使用默认值`);
- finalAccountName = "默认账户";
- }
- } catch (error) {
- // 只在文件完全不存在时创建,避免覆盖
- file.writeTextSync(finalAccountName, content, false);
- log.info(`创建新文件: ${finalAccountName}`);
- }
-
-
- let filePath = `records/${finalAccountName}.txt`;
- //读取现有内容
- let existingContent = "";
- try {
- existingContent = file.readTextSync(filePath);
- } catch (e) {
- }
-
- if (judge) {
- runDate = `>>>>>>>${new Date().getFullYear()}年${String(new Date().getMonth() + 1).padStart(2, '0')}月${String(new Date().getDate()).padStart(2, '0')}日`;
- const finalContent1 = runDate + "\n" + existingContent;
- //按行分割,保留最近365条完整记录(按原始换行分割,不过滤)
- const lines = finalContent1.split("\n");
- const keepLines = lines.length > 365 * 5 ? lines.slice(0, 365 * 5) : lines; // 假设每条记录最多5行
- const result1 = file.writeTextSync(filePath, keepLines.join("\n"), false);
-
- if (result1) {
- log.info(`写入成功: ${filePath}`);
- } else {
- log.error(`写入失败: ${filePath}`);
- }
-
- } else {
-
- //拼接
- const finalContent = content + existingContent;
- //按行分割,保留最近365条完整记录(按原始换行分割,不过滤)
- const lines = finalContent.split("\n");
- const keepLines = lines.length > 365 * 5 ? lines.slice(0, 365 * 5) : lines; // 假设每条记录最多5行
- const result = file.writeTextSync(filePath, keepLines.join("\n"), false);
-
- if (result) {
- log.info(`写入成功: ${filePath}`);
- } else {
- log.error(`写入失败: ${filePath}`);
- }
- }
-};
-
-// 执行区
-(async function() {
- await fakeLog("AutoPickLitter脚本", true, true, 0);
-
- // 判定你是不是新人
- if(!settings.water && !settings.sticks && !settings.lots && !settings.conchs && !settings.meal && !settings.eggs && !settings.turntable && !settings.todayLuck){
- log.error(`亲,这面请您点击【打开脚本目录】找到AutoPickLitter文件并打开然后去阅读README!!!`);
- log.error(`亲,这面请您点击【打开脚本目录】找到AutoPickLitter文件并打开然后去阅读README!!!`);
- log.error(`亲,这面请您点击【打开脚本目录】找到AutoPickLitter文件并打开然后去阅读README!!!`);
- await fakeLog("AutoPickLitter脚本", true, false, 2333);
- return 0;
- };
-
- // 判定文件名的合法性,以及初始化相关文件
- await recordForFile(true);
- // 更新日期信息
- record.lastRunDate = new Date(Date.now() - 4 * 60 * 60 * 1000)
- .toLocaleDateString('zh-CN', { timeZone: 'Asia/Shanghai', year: 'numeric', month: '2-digit', day: '2-digit' })
- .replace(/\//g, '/');
-
- await recordForFile(false);
- // 蒙德清泉镇圣水
- if (settings.water) {
- await fakeLog("蒙德清泉镇圣水", false, true, 0);
- await genshin.returnMainUi();
- await pathingScript.runFile("assets/霍普金斯.json");
- await genshin.returnMainUi();
- await genshin.returnMainUi();
- await pathingScript.runFile("assets/蒙德清泉镇路线.json");
- //识别对话位置,并点击
- let ocrResults = await performOcr("神奇的", dialogZone.x, dialogZone.y, false);
- if (ocrResults.length != 0) {
- await performOcr("如何才", dialogZone.x, dialogZone.y, false);
- let ocrOver = await performOcr("已",{ min: 1482, max: 1630 }, { min: 912, max: 957 }, false);
- if (ocrOver.success) {
- log.info("已售罄!!!");
- } else {
- let ocrMora = await performOcr("", { min: 1600, max: 1780 }, { min: 30, max: 60 }, true);
- if (ocrMora == "") {
- await sleep(500);
- ocrMora = await performOcr("", { min: 1600, max: 1780 }, { min: 30, max: 60 }, true);
- };
- if (BigInt(ocrMora.text) >= 300) {
- await sleep(800);
- await click(1636,1019);
- await sleep(1000);
- await click(1168,785);
- await sleep(1000);
- } else {
- log.info("不是哥们,你怎么比我还穷!!!");
- };
- };
- };
- await genshin.returnMainUi();
- await fakeLog("蒙德清泉镇圣水", false, false, 0);
- };
-
- // 璃月璃沙娇上香
- if (sticksTime) {
- await fakeLog("璃月璃沙娇上香", false, true, 0);
- await genshin.returnMainUi();
- // 更新上香时间
- record.lastActivateTime = new Date();
- await recordForFile(false);
- await pathingScript.runFile("assets/璃月璃沙娇路线.json");
- await sleep(1000);
- // 识别区域
- let ocrResults = await performOcr("王平安", dialogZone.x, dialogZone.y, false);
- if (ocrResults.success) {
- await sleep(700);
- await genshin.chooseTalkOption("能给我几支香吗");
- await sleep(700);
- leftButtonClick();
- await sleep(700);
- leftButtonClick();
- await sleep(2000);
- let ocrResults1 = await performOcr("敬香", dialogZone.x, dialogZone.y, false);
- if(ocrResults1.success){
- await click(1168,785);
- await sleep(700);
- } else {
- log.error("未识别到对话,可能角色移速太快加上有开盾打断识别了");
- await genshin.returnMainUi();
- };
- } else {
- log.error(`识别图像时发生异常: ${error.message}`);
- };
- await genshin.returnMainUi();
- await fakeLog("璃月璃沙娇上香", false, false, 0);
- };
-
- // 稻妻鸣神大社抽签
- if (settings.lots) {
- await fakeLog("稻妻鸣神大社抽签", false, true, 0)
- await genshin.returnMainUi();
- await pathingScript.runFile("assets/稻妻鸣神大社路线.json");
- await sleep(1000);
- // 识别对话位置,并点击
- let ocrResults = await performOcr("御神签箱", dialogZone.x, dialogZone.y, false);
- if (ocrResults.success) {
- await sleep(700);
- leftButtonClick();
- await sleep(2000);
- let ocrResults1 = await performOcr("求签吧", dialogZone.x, dialogZone.y, false);
- if (ocrResults1.success) {
- await sleep(2000);
- leftButtonClick();
- await sleep(4000);
- leftButtonClick();
- await sleep(3500);
- };
- let ocrResults2 = await performOcr("玄冬林", dialogZone.x, dialogZone.y, false);
- let results = "";
- if (ocrResults2.success) {
- await sleep(1000);
- leftButtonClick();
- await sleep(700);
- let ocrResults3 = await performOcr("我要", dialogZone.x, dialogZone.y, false);
- if (ocrResults3.success) {
- await sleep(700);
- leftButtonClick();
- await sleep(1500);
- // 交互道具,直接选择位置点击
- await click(111,184);
- await sleep(1000);
- await click(1250,817);
- await sleep(1000);
- await click(1603,1013);
- await sleep(1500);
- await genshin.returnMainUi();
- // 打开背包找签
- await keyPress("B");
- await sleep(1000);
- await click(1150,50);
- await sleep(700);
- for(let scroll = 0; scroll <= 22; scroll++){
- // 识别御神签
- let yuShenQian = await findImgIcon("assets/RecognitionObject/YuShenQianHalf.png", { min: 99, max: 1295 }, { min: 104, max: 967 }, true);
- if (yuShenQian.success) {
- break;
- };
- if ( scroll != 0) {
- // 判断是否到底
- let sliderBottom = await findImgIcon("assets/RecognitionObject/SliderBottom.png", { min: 1284, max: 1293 }, { min: 916, max: 942 }, false);
- if (sliderBottom.success) {
- log.info("已到达最后一页!");
- break;
- };
- };
- //滑动背包
- await scrollPage(680, 10, 5);
- await sleep(100);
- };
- await sleep(2000);
- await click(1670,1025);
- await sleep(3000);
- // 通过图片识别
- // 大凶or凶
- let bigBad = await findImgIcon("assets/RecognitionObject/BigBad.png", { min: 630, max: 830 }, { min: 100, max: 160 }, false);
- let bad = await findImgIcon("assets/RecognitionObject/Bad.png", { min: 630, max: 830 }, { min: 100, max: 160 }, false);
- // 大吉、中吉、吉、末吉
- let bigLuck = await findImgIcon("assets/RecognitionObject/BigLuck.png", { min: 630, max: 830 }, { min: 100, max: 160 }, false);
- let midLuck = await findImgIcon("assets/RecognitionObject/MidLuck.png", { min: 630, max: 830 }, { min: 100, max: 160 }, false);
- let endLuck = await findImgIcon("assets/RecognitionObject/EndLuck.png", { min: 630, max: 830 }, { min: 100, max: 160 }, false);
- let luck = await findImgIcon("assets/RecognitionObject/Luck.png", { min: 630, max: 830 }, { min: 100, max: 160 }, false);
- await genshin.returnMainUi();
- if (bigBad.success) {
- log.info("抽签的结果:大凶");
- results = "大凶";
- await pathingScript.runFile("assets/挂签路线.json");
- await performOcr("御签挂", { min: 900, max: 1700 }, { min: 380, max: 880 }, false);
- await genshin.chooseTalkOption("挂起来吧");
- await sleep(700);
- await click(111,184);
- await sleep(1000);
- await click(1250,817);
- await sleep(1000);
- await click(1603,1013);
- await sleep(1500);
- await genshin.returnMainUi();
- log.info("事事顺利");
- } else if (bad.success) {
- log.info("抽签的结果:凶");
- results = "凶";
- await pathingScript.runFile("assets/挂签路线.json");
- await performOcr("御签挂", { min: 900, max: 1700 }, { min: 380, max: 880 }, false);
- await sleep(700);
- await genshin.chooseTalkOption("挂起来吧");
- await click(111,184);
- await sleep(1000);
- await click(1250,817);
- await sleep(1000);
- await click(1603,1013);
- await sleep(1500);
- await genshin.returnMainUi();
- log.info("事事顺利");
- } else if (bigLuck.success) {
- log.info("抽签的结果:大吉");
- results = "大吉";
- } else if (midLuck.success) {
- log.info("抽签的结果:中吉");
- results = "中吉";
- } else if (endLuck.success) {
- log.info("抽签的结果:末吉");
- results = "末吉";
- } else if (luck.success) {
- log.info("抽签的结果:吉");
- results = "吉";
- } else {
- log.warn("嘘,快踢作者屁股,修bug!!!");
- };
- } else {
- await sleep(700);
- await genshin.chooseTalkOption("再见");
- await sleep(700);
- leftButtonClick();
- await sleep(1500);
- log.info("对话出现再见,默认解签完毕以及查看签操作!!!");
- };
-
- for (let i = record.records.length - 1; i > 0; i--) {
- record.records[i] = record.records[i - 1];
- }
- record.records[0] = `抽签的结果: ${results}`;
- if (settings.notify) {
- notification.Send(`抽签的结果: ${results}`);
- }
- await recordForFile(false);//修改记录文件
- };
- } else {
- log.error(`识别图像时发生异常: ${error.message}`);
- // await genshin.returnMainUi();
- };
- await genshin.returnMainUi();
- await fakeLog("稻妻鸣神大社抽签", false, true, 0)
- };
-
- // 稻妻踏鞴砂海螺
- if (settings.conchs) {
- await fakeLog("稻妻踏鞴砂海螺", false, true, 0)
- await genshin.returnMainUi();
- await pathingScript.runFile("assets/稻妻踏鞴砂路线.json");
- await sleep(1000);
- if (settings.doYouOpen) {
- await pathingScript.runFile("assets/阿敬.json");
- let figure = parseInt(settings.pickupTreasure);
- let ocrResults = await performOcr("阿敬", dialogZone.x, dialogZone.y, false);
- if (ocrResults.success) {
- await sleep(1000);
- let ocrResults1 = await performOcr("想要", dialogZone.x, dialogZone.y, false);
- if (ocrResults1.success) {
- await sleep(700);
- leftButtonClick();
- await sleep(1500);
- //交互道具,直接选择位置点击
- await click(111,184);
- await sleep(1000);
- await click(1250,817);
- await sleep(1000);
- await click(1603,1013);
- await sleep(1500);
- await genshin.returnMainUi();
- if (figure != 0) {
- await pathingScript.runFile(`assets/宝箱${figure}.json`);
- log.info(`你即将开启${figure}号宝箱`);
- } else {
- figure = Math.floor(Math.random() * 3) + 1;
- log.info(`你即将开启${figure}号宝箱`);
- await pathingScript.runFile(`assets/宝箱${figure}.json`);
- };
- } else {
- log.info("你开过了?look my eyes,回答我!!!");
- await genshin.chooseTalkOption("再见");
- await sleep(700);
- leftButtonClick();
- await sleep(1500);
- };
- } else {
- log.error(`识别图像时发生异常: ${error.message}`);
- };
- };
- await genshin.returnMainUi();
- await fakeLog("稻妻踏鞴砂海螺", false, false, 0)
- };
-
- //枫丹梅洛彼得堡福利餐
- if(settings.meal){
- await fakeLog("枫丹梅洛彼得堡福利餐", false, true, 0)
- await genshin.returnMainUi();
- await pathingScript.runFile("assets/枫丹梅洛彼得堡路线.json");
- await sleep(1000);
- let ocrResults = await performOcr("布兰", dialogZone.x, dialogZone.y, false);
- if (ocrResults.success) {
- let ocrResults1 = await performOcr("没什么", dialogZone.x, dialogZone.y, false);
- if(ocrResults1.success){
- log.info("对话出现没什么,默认领取和使用过!!!");
- } else{
- // await genshin.chooseTalkOption("给我一份福利餐");
- await performOcr("给我一份福利餐", dialogZone.x, dialogZone.y, false);
- await sleep(1000);
- leftButtonClick();
- await sleep(1000);
- leftButtonClick();
- await sleep(1500);
- //打开背包找签
- log.info("打开背包");
- await keyPress("B");
- await sleep(1500);
- await click(1250,50);
- for(let scroll = 0; scroll <= 10; scroll++){
- let welffareMeal = await findImgIcon("assets/RecognitionObject/WelffareMealHalf.png", { min: 99, max: 1295 }, { min: 104, max: 967 }, false);
- if (welffareMeal.success) {
- break;
- }
- //滑动背包
- await sleep(1000);
- await scrollPage(680, 10, 5);
- await sleep(1000);
-
- if ( scroll != 0) {
- // 判断是否到底
- let sliderBottom = await findImgIcon("assets/RecognitionObject/SliderBottom.png", { min: 1284, max: 1293 }, { min: 916, max: 942 }, false);
- if (sliderBottom.success) {
- log.info("已到达最后一页!");
- break;
- };
- };
- };
- //这里是点击使用
- await sleep(1000);
- await click(1670,1025);
- await sleep(3000);
- //识别获得的食物名称
- let ocrText = await performOcr("", { min: 813, max: 985 }, { min: 585, max: 619 }, true);
- if (ocrText.text == "") {
- await sleep(500);
- ocrText = await performOcr("", { min: 813, max: 985 }, { min: 585, max: 619 }, true);
- };
- log.info(`获得:${ocrText.text}`);
- for (let i = record.records.length - 1; i > 0; i--) {
- record.records[i] = record.records[i - 1];
- }
- record.records[0] = `获得的食物: ${ocrText.text}`;
- if (settings.notify) {
- notification.Send(`获得的食物: ${ocrText.text}`);
- };
- await recordForFile(false);// 修改记录文件
-
- //点击幸运签,并识别内容
- await sleep(1000);
- await click(1000,520);
- await sleep(3000);
- let ocrText1 = await performOcr("", { min: 716, max: 1200 }, { min: 631, max: 710 }, true);
- if (ocrText.text == "") {
- await sleep(500);
- ocrText1 = await performOcr("", { min: 716, max: 1200 }, { min: 631, max: 710 }, true);
- };
- let text = ocrText1.text.replace(/\r\n|\n|\r/g, "");
-
- log.info(`幸运签内容:${text}`);
-
- for (let i = record.records.length - 1; i > 0; i--) {
- record.records[i] = record.records[i - 1];
- }
- record.records[0] = `幸运签内容: ${text}`;
- if (settings.notify) {
- notification.Send(`幸运签内容: ${text}`);
- }
- await recordForFile(false);// 修改记录文件
-
- };
-
- } else {
- log.error(`识别图像时发生异常: ${error.message}`);
- };
- await genshin.returnMainUi();
- await fakeLog("枫丹梅洛彼得堡福利餐", false, false, 0)
- };
-
- // 纳塔悠悠集市龙蛋
- if(settings.eggs){
- let nowDragonEggsNum = record.lastDragonEggsNum;
- if (record.lastDragonEggsNum == "【山之血:0,太阳的轰鸣:0,圣龙君临:0,菲耶蒂娜:0,献给小酒杯:0,飞澜鲨鲨:0】" || settings.updateEggs) {
- nowDragonEggsNum = await chcekDragonEggs();
- };
- let nowDragonEggs = nowDragonEggsNum.match(/\d+/g).map(Number);
- await fakeLog("纳塔悠悠集市龙蛋", false, true, 0)
- await genshin.returnMainUi();
- await pathingScript.runFile("assets/纳塔悠悠集市路线.json");
- let ocrResults = await performOcr("察尔瓦", dialogZone.x, dialogZone.y, false);
- if (ocrResults.success) {
- await sleep(700);
- leftButtonClick();
- await sleep(2000);
- let ocrResults1 = await performOcr("让我挑一枚", dialogZone.x, dialogZone.y, false);
- if (ocrResults1.success) {
- await sleep(5000);
- let figure = 0;
- if (settings.selectDragonEggModel == "随机模式") {
- const crypto = require('crypto');
- figure = crypto.randomInt(0, 6);
- // figure = Math.floor(Math.random() * 6);
- } else if (settings.selectDragonEggModel == "指定模式") {
- switch (settings.pickupDragonEgg) {
- case "闪闪礼蛋·山之血":
- figure = 0;
- break;
- case "闪闪礼蛋·太阳的轰鸣":
- figure = 1;
- break;
- case "闪闪礼蛋·圣龙君临":
- figure = 2;
- break;
- case "闪闪礼蛋·菲耶蒂娜":
- figure = 3;
- break;
- case "闪闪礼蛋·献给小酒杯":
- figure = 4;
- break;
- case "闪闪礼蛋·飞澜鲨鲨":
- figure = 5;
- break;
- default:
- log.warn("嘘,快踢作者屁股,修bug!!!");
- break;
- };
- }else {
-
- };
-
- // 日志输出会去点击那个龙蛋
- switch (figure) {
- case 0:
- log.info("获得的龙蛋:闪闪礼蛋·山之血");
- break;
- case 1:
- log.info("获得的龙蛋:闪闪礼蛋·太阳的轰鸣");
- break;
- case 2:
- log.info("获得的龙蛋:闪闪礼蛋·圣龙君临");
- break;
- case 3:
- log.info("获得的龙蛋:闪闪礼蛋·菲耶蒂娜");
- break;
- case 4:
- log.info("获得的龙蛋:闪闪礼蛋·献给小酒杯");
- break;
- case 5:
- log.info("获得的龙蛋:闪闪礼蛋·飞澜鲨鲨");
- break;
- default:
- log.warn("嘘,快踢作者屁股,修bug!!!");
- break;
- };
-
- moveMouseTo(coordinates[figure - 1][0],coordinates[figure - 1][1]);
- nowDragonEggs[figure]++;
- if (settings.notify) {
- notification.Send(`背包龙蛋数目: 【山之血:${nowDragonEggs[0]},太阳的轰鸣:${nowDragonEggs[1]},圣龙君临:${nowDragonEggs[2]},菲耶蒂娜:${nowDragonEggs[3]},献给小酒杯:${nowDragonEggs[4]},飞澜鲨鲨:${nowDragonEggs[5]}】`);
- };
- // 更新记录
- record.lastDragonEggsNum = `【山之血:${nowDragonEggs[0]},太阳的轰鸣:${nowDragonEggs[1]},圣龙君临:${nowDragonEggs[2]},菲耶蒂娜:${nowDragonEggs[3]},献给小酒杯:${nowDragonEggs[4]},飞澜鲨鲨:${nowDragonEggs[5]}】`;
- await recordForFile(false);
-
- moveMouseTo(coordinates[figure - 1][0],coordinates[figure - 1][1]);
-
- await sleep(100);
- leftButtonClick();
- await sleep(3000);
- } else {
- log.info("你今天已经领取过了");
- };
- } else {
- log.error(`识别图像时发生异常: ${error.message}`);
- };
-
- await genshin.returnMainUi();
- await fakeLog("纳塔悠悠集市龙蛋", false, false, 0)
- };
-
- //挪德卡莱那夏镇好运转盘
- if (settings.turntable) {
- await fakeLog("挪德卡莱那夏镇好运转盘", false, true, 0)
- await genshin.returnMainUi();
- await pathingScript.runFile("assets/挪德卡莱那夏镇好运转盘路线.json");
- await sleep(1000);
- let ocrResults = await performOcr("好运速转", dialogZone.x, dialogZone.y, false);
- if (ocrResults.success) {
- await sleep(3000);
- leftButtonClick();
- await sleep(1000);
- let ocrResults1 = await performOcr("拨动转盘", dialogZone.x, dialogZone.y, false);
- if (ocrResults1.success) {
- await sleep(6000);
- let ocrText = await performOcr("", { min: 555, max: 1365 }, { min: 902, max: 1000 }, true);
- if (ocrText.text == "") {
- await sleep(500);
- ocrText = await performOcr("", { min: 555, max: 1365 }, { min: 902, max: 1000 }, true);
- };
- log.info(`转盘运势:${ocrText.text}`);
- // writeContentToFile(`转盘的运势:${recognizedText}\n`, false);
- let text = ocrText.text.replace(/\r\n|\n|\r/g, "");
-
-
- for (let i = record.records.length - 1; i > 0; i--) {
- record.records[i] = record.records[i - 1];
- }
- record.records[0] = `转盘的运势: ${text}`;
- if (settings.notify) {
- notification.Send(`转盘的运势: ${text}`);
- }
- await recordForFile(false);// 修改记录文件
-
- await sleep(2000);
- leftButtonClick();
- await sleep(700);
- } else {
- log.error(`识别图像时发生异常: ${error.message}`);
- };
- } else {
- log.error(`识别图像时发生异常: ${error.message}`);
- };
- await genshin.returnMainUi();
- await fakeLog("挪德卡莱那夏镇好运转盘", false, false, 0)
- };
-
- // 挪德卡莱那夏镇今日收获
- if (settings.todayLuck) {
- await fakeLog("挪德卡莱那夏镇美味的今日收获", false, true, 0)
- await genshin.returnMainUi();
- await pathingScript.runFile("assets/挪德卡莱那夏镇美味的今日收获路线.json");
- await sleep(1000);
- let ocrResults = await performOcr("莉莉希", dialogZone.x, dialogZone.y, false);
- if (ocrResults.success) {
- await sleep(700);
- leftButtonClick();
- let ocrResults1 = await performOcr("可以领", dialogZone.x, dialogZone.y, false);
- if (ocrResults1.success) {
- await sleep(700);
- leftButtonClick();
- await sleep(1500);
- } else {
- log.warn("情况一,你根本没仔细看提示");
- log.warn("情况二,你把它残忍放进背包了");
- await sleep(1000);
- await genshin.chooseTalkOption("其实");
- await sleep(1000);
- await sleep(700);
- leftButtonClick();
- await sleep(1500);
- };
- } else {
- log.error(`识别图像时发生异常: ${error.message}`);
- };
- await genshin.returnMainUi();
- await fakeLog("挪德卡莱那夏镇美味的今日收获", false, false, 0)
- };
-
- for (let i = record.records.length - 1; i > 0; i--) {
- record.records[i] = record.records[i - 1];
- }
- record.records[0] = `>>>>>>>>>> ${new Date().getFullYear()}年${String(new Date().getMonth() + 1).padStart(2, '0')}月${String(new Date().getDate()).padStart(2, '0')}日`;
- await recordForFile(false);// 修改记录文件
-
- await fakeLog("AutoPickLitter脚本", true, false, 2333);
-
-})();
\ No newline at end of file
diff --git a/repo/js/调用一条龙/README.md b/repo/js/调用一条龙/README.md
new file mode 100644
index 000000000..aea4bd56c
--- /dev/null
+++ b/repo/js/调用一条龙/README.md
@@ -0,0 +1,48 @@
+# OBS录制
+
+## 介绍
+#### 该脚本是搭配auto-bgi软件使用,进行开启一条龙
+#### 不了解的可以去BetterGI的QQ频道搜索【auto-bgi】
+#### 也可以电脑点击【[ABGI](https://gitee.com/wangjian0327/auto-bgi/blob/ginVue/README.md)】,进行学习,了解
+
+------
+
+ ## 注意
+ #### 使用`调用一条龙`脚本时,`ABGI`最低版本为【3.1】
+
+------
+
+## 使用方法
+
+#### 在`调度器`中新建`配置组`,`配置组`添加`调用一条龙`右键脚本名字,找到【修改通用配置】将里面的【JS HTTP权限】下的`禁用`选择`启用`,在【修改JS脚本自定义设置】,选or填相关内容
+#### 图文教程拿`OBS录制`做示例
+------
+
+#### 图文教程步骤一:
+
+
+#### 图文教程步骤二:
+
+
+#### 图文教程步骤三:
+
+
+#### 图文教程步骤四:
+
+
+#### 图文教程步骤五
+
+
+#### 图文教程步骤六
+
+
+------
+
+## 版本
+#### 0.0.1
+有啥不懂的,八九十群,可以艾特【古又】
+
+
+
+
+
diff --git a/repo/js/调用一条龙/assets/img/步骤一.png b/repo/js/调用一条龙/assets/img/步骤一.png
new file mode 100644
index 0000000000000000000000000000000000000000..822ce2ad3c86f5302f50499ef26c8eaaae9e42c6
GIT binary patch
literal 77938
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