diff --git a/repo/js/AutoHoeingOneDragon/README.md b/repo/js/AutoHoeingOneDragon/README.md index 2173a7bfd..174c0768d 100644 --- a/repo/js/AutoHoeingOneDragon/README.md +++ b/repo/js/AutoHoeingOneDragon/README.md @@ -23,7 +23,7 @@ - 在 **地图追踪行走选项** 中请关闭(即不填写)切换队伍,该选项目前在配置组中只有一个js时不生效,请在js自定义配置中填写配队 - 如有需要,按照对应的配队,配置对应的生存位和行走位 - 配置组中的 **不在某时执行** 目前无法打断js的运行,请不要尝试通过配置该项来使本js在特定时间终止运行 - - 在 **战斗配置** 中请为你使用的队伍选择合适的战斗策略,战斗策略相关内容存在疑问请参考文档,配队思路请参考教程视频 + - 在 **战斗配置** 中请为你使用的队伍选择合适的战斗策略,战斗策略相关内容存在疑问请参考文档,配队思路请参考【第四部分】。 - 请打开 **自动检测战斗结束** ,按需配置相关选项,其中 **检查战斗结束的延时** 不推荐默认的1.5秒,建议缩短至0.5秒以下 - 强烈建议关闭 **自动拾取掉落物** ,该选项开启后会显著提高运行用时和卡死风险 - 建议开启 **战斗结束后执行万叶长e**,可显著提高狗粮收益 @@ -76,8 +76,27 @@ - 如果需要增加其他的目标物品,请打开assets/拾取名单.json,在白名单中添加目标物品 - 清空白名单会拾取大部分物品,除了名称包含黑名单的物品,不建议这样使用,有几率和npc交互等造成卡死 +### 四、**锄地配队建议** + - bgi锄地没有那么智能,暂时无法像手动一样灵活进行各种需要索敌的操作,同时各种位移技能也很容易干扰锄地的正常运行,因此建议的锄地配队组队思路如下: + - 一个合理的bgi锄地配队至少应当包含抗打断、召唤物输出、奶妈,精英怪的配队还应当带上万叶 + - 抗打断位用于确保技能的正常释放,通常为护盾角色,只建议e启动角色,如茜特菈莉、伊涅芙等,四星角色莱伊拉也可用,通常不建议使用钟离,柱子对bgi运行影响较大。此外,迪希雅的领域可以给予领域内角色抗打断和分摊伤害,也可以作为抗打断位使用。如果你执意不携带任何抗打断位,角色技能将很容易被怪物打断。 + - 召唤物输出目前可靠的只有芙宁娜,爱可菲可以在没有芙宁娜时作为下位替代,两个角色都有时非常推荐同时携带。如果两者都不携带,锄地的效率将会很低。非常不建议在没有任何形式的自动索敌的情况下使用bgi锄地。 + - 奶妈非常建议携带,可以较大提升bgi锄地的稳定性,减少复活次数从而提高总体效率,同时保持50%以上的血线将提高海鲜的伤害。总体来说e启动奶>q启动奶,白术、希格雯、爱可菲、芭芭拉、夏沃蕾都可以使用,仅当你有满命芙宁娜或钟离时,可以考虑不携带奶妈。**【金箔的回血是不够的!!!】**,不要认为带了金箔就不用带奶了,金箔只能作为补充手段。 + - 其他补充伤害的角色,他们的作用是快速清理近处较多的怪物,有利于提高偏对单的海鲜和烹饪锅处理怪物的效率,只有在你队伍有空余位置时才建议携带(通常没位置),较推荐使用的角色有:玛薇卡、那维莱特、万叶(扩散清杂和聚怪) + - 剩余角色在bgi锄地中基本上没有明显作用,如果非要带着锄地,不建议切出来,全程后台即可 + - 冻结可以打断怪物行动,提高队伍生存能力,建议携带能够冻结怪物的角色,不建议携带会碎冰等破坏冻结状态的角色(尤其钟离) + - 综上,低配较为推荐芙宁娜、莱伊拉、万叶、芭芭拉,中配最推荐爱可菲、芙宁娜、万叶、茜特菈莉,部分角色可能可以身兼多职,请合理衡量他们担任不同位置的能力,并据此决定是否可以腾出空间携带其他角色 + - 以下是一些反面例子: + - 四神队:没有奶,稳定性差,钟离柱子触发攀爬影响较大,雷神和草神占了两个格子但是作用很小,纯混子,各个位置之间没有联动 + - 本体自带的‘群友分享’战斗策略,曾经在大世界探索和秘境中为大家提供了不少便利,如今只适合秘境使用,不适合锄地;特别是缺少召唤物输出、依赖 Q 启动的体系,更适合怀旧体验而非当前的锄地需求。 + - 夜兰、克洛琳德等技能难以避免较大位移的角色,很可能在战斗中跑到奇怪的位置卡死 + - 各种锄精英,却有万叶不带万叶的,不带万叶基本上捡不到狗粮,每天亏6w狗粮 + --- ### 更新日志 +### 1.5.0(2025.08.27) +1.加入配队检测,配队不合理时进行警告,但不影响正常进程 +2.readme中加入锄地配队建议 ### 1.4.16(2025.08.27) 1.修509 2.新增522 diff --git a/repo/js/AutoHoeingOneDragon/main.js b/repo/js/AutoHoeingOneDragon/main.js index 09ea614fb..503c8a96f 100644 --- a/repo/js/AutoHoeingOneDragon/main.js +++ b/repo/js/AutoHoeingOneDragon/main.js @@ -1,4 +1,4 @@ -//当前js版本 1.4.12 +//当前js版本 1.5.0 //拾取时上下滑动的时间 let timeMoveUp; @@ -12,11 +12,14 @@ if (settings.activeDumperMode) { //处理泥头车信息 let gameRegion; let targetItemPath = "assets/targetItems"; let targetItems; +let isFourGod; const rollingDelay = (+settings.rollingDelay || 25); const pickupDelay = (+settings.pickupDelay || 100); const timeMove = (+settings.timeMove || 1000); +let warnMessage = []; + (async function () { //自定义配置处理 const operationMode = settings.operationMode || "运行锄地路线"; @@ -71,7 +74,8 @@ const timeMove = (+settings.timeMove || 1000); timeMoveUp = Math.round(timeMove * 0.45); timeMoveDown = Math.round(timeMove * 0.55); if (!settings.accountName) { - for (let i = 0; i < 120; i++) { + warnMessage.push("请先阅读js文件夹中的【README.md】后使用"); + for (let i = 0; i < 5; i++) { // 原始文本 let originalMessage = " 请先阅读js文件夹中的【README.md】后使用"; // 计算轮替的偏移量,每次循环偏移一位 @@ -126,7 +130,52 @@ const timeMove = (+settings.timeMove || 1000); await copyPathingsByGroup(pathings); await updateRecords(pathings, accountName); } else if (operationMode === "运行锄地路线") { - await switchPartyIfNeeded(partyName) + await switchPartyIfNeeded(partyName); + // 检测四神队伍并输出当前角色 + const avatars = getAvatars() || []; + const need = ['钟离', '芙宁娜', '纳西妲', '雷电将军']; + + let improperTeam = true; + for (let i = 0; i < need.length; i++) { + let found = false; + for (let j = 0; j < avatars.length; j++) { + if (avatars[j] === need[i]) { + found = true; + break; + } + } + if (!found) { + improperTeam = false; + break; + } + } + + // 手动拼接角色名,避免 join 报错 + let teamStr = ''; + for (let k = 0; k < avatars.length; k++) { + teamStr += avatars[k]; + if (k < avatars.length - 1) { + teamStr += '、'; + } + } + + log.info('当前队伍:' + teamStr); + if (improperTeam) { + warnMessage.push("配队不合理,请阅读readme中的锄地配队建议"); + warnMessage.push("如果已经阅读过,请忽略该警告"); + //for (let i = 0; i < 5; i++) { + // 原始文本 + let originalMessage = "\n\n配队不合理,请阅读readme中的锄地配队建议\n\n如果已经阅读过,请忽略该警告"; + // 计算轮替的偏移量,每次循环偏移一位 + //let offset = i % originalMessage.length; // 每次循环偏移一位 + // 构造轮替后的文本 + //let message = originalMessage.slice(-offset) + originalMessage.slice(0, -offset); + // 输出内容 + // log.error(message); + log.warn(originalMessage); + await sleep(3000); + //} + } log.info("开始运行锄地路线"); await updateRecords(pathings, accountName); await processPathingsByGroup(pathings, whitelistKeywords, blacklistKeywords, accountName); @@ -841,6 +890,29 @@ async function runPath(pathFilePath, map_name, whitelistKeywords, blacklistKeywo } } + // 新增:warnTask 函数,与其他任务函数并列 + async function warnLoop() { + while (!state.completed && !state.cancelRequested) { + if (Array.isArray(warnMessage) && warnMessage.length) { + for (let i = 0; i < warnMessage.length; i++) { + log.error(warnMessage[i]); + } + } + for (let j = 0; j < 30; j++) { + if (state.completed || state.cancelRequested) { + break; + } + await sleep(1000); + } + if (state.completed || state.cancelRequested) { + break; + } + } + } + + // 启动任务,变量名仍叫 warnTask + // const warnTask = warnLoop(); + // 启动路径文件执行任务 const pathTask = executePathFile(pathFilePath); @@ -858,6 +930,7 @@ async function runPath(pathFilePath, map_name, whitelistKeywords, blacklistKeywo // 等待所有任务完成 try { + // await Promise.allSettled([pathTask, ocrTask, dumperTask, warnTask]); await Promise.allSettled([pathTask, ocrTask, dumperTask]); } catch (error) { console.error(`执行任务时发生错误:${error.message}`); diff --git a/repo/js/AutoHoeingOneDragon/manifest.json b/repo/js/AutoHoeingOneDragon/manifest.json index 994947617..12cd05cc9 100644 --- a/repo/js/AutoHoeingOneDragon/manifest.json +++ b/repo/js/AutoHoeingOneDragon/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "锄地一条龙", - "version": "1.4.16", + "version": "1.5.0", "description": "一站式解决自动化锄地,支持只拾取狗粮,请仔细阅读README.md后使用", "authors": [ {