diff --git a/repo/js/AutoArtifactsPro/README.md b/repo/js/AutoArtifactsPro/README.md index 5a740830..329c1143 100644 --- a/repo/js/AutoArtifactsPro/README.md +++ b/repo/js/AutoArtifactsPro/README.md @@ -16,7 +16,7 @@ 使用即表示您已阅读并同意上述条款。 -**Last Updated:** 2025-05-27 +**Last Updated:** 2025-06-09 --- @@ -89,9 +89,9 @@ 4. 02收尾(超出100以外的调查点) 5. 03额外(不受上限影响消失) -## 五、队伍配置 +## 五、推荐配置 -- **双风阵容**:早柚+枫原万叶/砂糖(提升移动效率) +- **双风阵容**:如早柚+枫原万叶/砂糖(提高移速) - **迪希雅**:白天时段提供移速加成 ## 六、选择建议 @@ -132,6 +132,7 @@ 1. 修改盗宝团触发路线,减少摩拉丢失 2.优化ocr模块,现在识别失败时会尝试点击中心位置 3.优化流程,现在只有当用户勾选了不分解四星时才会两次快速选择,可以节约约5秒 +4.修改自定义配置,现在可以输入最低好感运行次数,默认10次,用来保证能够完成最低的好感任务次数。 ### 1.2(2025.06.08) 1. 加入狗粮分解和经验统计功能。 2.优化逻辑,已经运行完成狗粮路线时仍然可以直接执行本js来完成好感 diff --git a/repo/js/AutoArtifactsPro/main.js b/repo/js/AutoArtifactsPro/main.js index 4a4dca0d..9bcb0c33 100644 --- a/repo/js/AutoArtifactsPro/main.js +++ b/repo/js/AutoArtifactsPro/main.js @@ -239,7 +239,7 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120; const fightTimeout = validateTimeoutSetting(settings.fightTimeout, DEFAULT_FIGHT_TIMEOUT_SECONDS, "战斗"); // 好感循环开始 - await AutoFriendshipDev(50, ocrTimeout, fightTimeout, enemyType, endTime); + const runnedTimes = await AutoFriendshipDev(50, ocrTimeout, fightTimeout, enemyType, endTime); } } @@ -323,7 +323,7 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120; //完成剩下好感 - if (settings.completeRemainingFriendship) { + if (runnedTimes < settings.minTimesForFirendship) { //切换至好感队 await switchPartyIfNeeded(friendshipPartyName); // 验证超时设置 @@ -343,7 +343,7 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120; await AutoPath('鳄鱼-准备'); } // 好感循环开始 - await AutoFriendshipDev(50, ocrTimeout, fightTimeout, enemyType, endTime + 24 * 60 * 60 * 1000); + await AutoFriendshipDev(settings.minTimesForFirendship - runnedTimes, ocrTimeout, fightTimeout, enemyType, endTime + 24 * 60 * 60 * 1000); } //伪造js开始记录 @@ -706,10 +706,10 @@ async function AutoFriendshipDev(times, ocrTimeout, fightTimeout, enemyType = " await fakeLog(`第${i + 1}次好感`, false, false, 0); } - log.info(`${enemyType}好感已完成`); + log.info(`${enemyType}好感运行了${i + 1}次`); await genshin.tpToStatueOfTheSeven(); - return true; + return i + 1; } // 验证输入是否是正整数 @@ -777,8 +777,9 @@ async function waitForBattleResult(timeout = 2 * 60 * 1000, enemyType = "盗宝 while (Date.now() - fightStartTime < timeout) { try { // 简化OCR检测,只使用一个try-catch块 - let result = captureGameRegion().find(RecognitionObject.ocr(850, 150, 200, 80)); - let result2 = captureGameRegion().find(RecognitionObject.ocr(0, 200, 300, 300)); + let captureRegion = captureGameRegion(); + let result = captureRegion.find(RecognitionObject.ocr(850, 150, 200, 80)); + let result2 = captureRegion.find(RecognitionObject.ocr(0, 200, 300, 300)); let text = result.text; let text2 = result2.text; diff --git a/repo/js/AutoArtifactsPro/settings.json b/repo/js/AutoArtifactsPro/settings.json index 2dfe6c31..9a0a992b 100644 --- a/repo/js/AutoArtifactsPro/settings.json +++ b/repo/js/AutoArtifactsPro/settings.json @@ -57,9 +57,9 @@ "default": "120" }, { - "name": "completeRemainingFriendship", - "type": "checkbox", - "label": "是否在狗粮路线结束后完成剩余盗宝团好感\n【勾选后将在狗粮路线结束后继续完成剩余的好感任务】", - "default": false + "name": "minTimesForFirendship", + "type": "input-text", + "label": "好感任务最低运行次数\n【若卡时间好感次数不足该次数,则在狗粮结束后补齐】", + "default": "10" } ] \ No newline at end of file diff --git a/repo/js/采集cd管理/main.js b/repo/js/采集cd管理/main.js index 7b10c95e..1e441c6d 100644 --- a/repo/js/采集cd管理/main.js +++ b/repo/js/采集cd管理/main.js @@ -86,7 +86,7 @@ async function fakeLog(name, isJs, isStart, duration) { // 定义目标文件夹路径和记录文件路径 const recordFolder = "record"; // 存储记录文件的文件夹路径 -const timestamp = "::2000-01-01T00:00:00.000Z"; // 固定的时间戳 +const defaultTimeStamp = "2000-01-01T00:00:00.000Z"; // 固定的时间戳 // 从 settings 中读取用户配置,并设置默认值 const userSettings = { @@ -159,19 +159,16 @@ function removeJsonSuffix(fileName) { } log.debug(`路径组1.txt 是否存在: ${indexDoExist}`); - // 根据用户配置选择操作模式 - if (userSettings.operationMode === "重新生成索引文件(用于强制刷新CD或更新文件)" || !indexDoExist) { - if (userSettings.operationMode === "重新生成索引文件(用于强制刷新CD或更新文件)") { + { + if (userSettings.operationMode === "重新生成索引文件(用于强制刷新CD)") { log.info("重新生成索引文件模式,将覆盖现有索引文件"); - } else { - log.info("路径组1.txt 文件不存在,将生成文件"); + } + if (!indexDoExist) { + log.info("路径组1.txt 文件不存在,将尝试生成索引文件"); } // 循环处理多个路径组 for (let i = 1; ; i++) { - const targetFolder = `pathing/路径组${i}`; // 动态生成目标文件夹路径 - const filePaths = file.ReadPathSync(targetFolder); - // 检查当前路径组的 cdtype 是否为空 const currentCdType = pathGroupCdType[i - 1] || ""; if (!currentCdType) { @@ -179,6 +176,9 @@ function removeJsonSuffix(fileName) { break; } + const targetFolder = `pathing/路径组${i}`; // 动态生成目标文件夹路径 + const filePaths = file.ReadPathSync(targetFolder); + // 如果文件夹为空,退出循环 if (filePaths.length === 0) { log.info(`路径组${i} 文件夹为空,停止处理`); @@ -187,13 +187,37 @@ function removeJsonSuffix(fileName) { // 用于存储符合条件的文件名的数组 const jsonFileNames = []; + const entryMap = {}; + // 如果 indexDoExist 为 true,则读取对应的原文件 + if (indexDoExist) { + const pathGroupFilePath = `${subFolderPath}/路径组${i}.txt`; // 使用外层循环的变量 i + let pathGroupContent = await file.readText(pathGroupFilePath); + let pathGroupEntries = pathGroupContent.trim().split('\n'); + + // 创建一个对象来存储 entryName 和 entryTimestamp 的映射 + for (let j = 0; j < pathGroupEntries.length; j++) { + const entryWithTimestamp = pathGroupEntries[j].trim(); + const [entryName, entryTimestamp] = entryWithTimestamp.split('::'); + entryMap[entryName] = entryTimestamp; + } + } // 遍历文件路径数组并提取文件名 for (const filePath of filePaths) { const fileName = basename(filePath); // 提取文件名 if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 const fileNameWithoutSuffix = removeJsonSuffix(fileName); // 移除 .json 后缀 - jsonFileNames.push(`${fileNameWithoutSuffix}${timestamp}`); // 添加时间戳并存储 + + // 给 routeTimeStamp 赋值为 defaultTimeStamp + let routeTimeStamp = defaultTimeStamp; + + if (indexDoExist && userSettings.operationMode !== "重新生成索引文件(用于强制刷新CD)" && entryMap[fileNameWithoutSuffix]) { + routeTimeStamp = entryMap[fileNameWithoutSuffix]; + } + + routeTimeStamp = `::${routeTimeStamp}`; + // 添加时间戳并存储 + jsonFileNames.push(`${fileNameWithoutSuffix}${routeTimeStamp}`); } } @@ -218,9 +242,6 @@ function removeJsonSuffix(fileName) { log.error(`写入文件失败: ${recordFilePath}`); } } - } else { - // 如果用户选择的不是“重新生成索引文件”且文件已存在,则输出特定日志信息 - log.debug("奶龙"); } // 新增逻辑:当选择“执行任务(若不存在索引文件则自动创建)”时,执行类似路径执行的逻辑 @@ -414,7 +435,7 @@ function removeJsonSuffix(fileName) { log.info('所有路径组的任务运行完成'); //伪造js开始的日志 - await fakeLog("采集cd管理", true, true, 0); + await fakeLog("采集cd管路", true, true, 0); } } catch (error) { log.error(`操作失败: ${error}`); diff --git a/repo/js/采集cd管理/manifest.json b/repo/js/采集cd管理/manifest.json index 22b482f9..1bf044c0 100644 --- a/repo/js/采集cd管理/manifest.json +++ b/repo/js/采集cd管理/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "采集cd管理", - "version": "1.1", + "version": "1.2", "bgi_version": "0.44.8", "description": "仅面对会操作文件和读readme的用户,基于文件夹操作自动管理采集路线的cd,会按照路径组的顺序依次运行,直到指定的时间,并会按照给定的cd类型,自动跳过未刷新的路线", "authors": [