From 88bc74b41b8fa88ec6b773c50b5bc7ae1eeeb02a Mon Sep 17 00:00:00 2001 From: 5117600049 <511760049@qq.com> Date: Fri, 24 Oct 2025 09:30:32 +0800 Subject: [PATCH] =?UTF-8?q?JS=E8=84=9A=E6=9C=AC=E5=85=BB=E6=88=90=E4=B8=80?= =?UTF-8?q?=E6=9D=A1=E9=BE=99=E6=9B=B4=E6=96=B0=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E8=AE=A8=E4=BC=90=20boss=E3=80=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BA=86=E9=80=9A=E7=9F=A5=E8=A1=A8=E7=8E=B0=E3=80=81?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=B0=E5=A2=9E=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E9=A6=96=E9=A2=86=E5=88=B7=E5=8F=96=E6=8C=87=E6=A0=87=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=8660=E7=AD=89=E7=BA=A7=E4=BB=A5?= =?UTF-8?q?=E4=B8=8B=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E9=A6=96=E9=A2=86=E6=9D=90=E6=96=99=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#2223)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update settings.json * Update manifest.json * Update main.js * Update README.md * Add files via upload * Add files via upload * Add files via upload --- repo/js/角色养成一条龙/README.md | 5 +- .../assets/boss/霜夜巡天灵主.png | Bin 0 -> 16910 bytes .../assets/goToBoss/蕴光月幻蝶前往.json | 40 +++ .../assets/goToBoss/霜夜巡天灵主前往.json | 40 +++ repo/js/角色养成一条龙/assets/好感图标.png | Bin 0 -> 7377 bytes repo/js/角色养成一条龙/main.js | 231 ++++++++++++------ repo/js/角色养成一条龙/manifest.json | 5 +- repo/js/角色养成一条龙/settings.json | 120 ++++++++- 8 files changed, 351 insertions(+), 90 deletions(-) create mode 100644 repo/js/角色养成一条龙/assets/boss/霜夜巡天灵主.png create mode 100644 repo/js/角色养成一条龙/assets/goToBoss/蕴光月幻蝶前往.json create mode 100644 repo/js/角色养成一条龙/assets/goToBoss/霜夜巡天灵主前往.json create mode 100644 repo/js/角色养成一条龙/assets/好感图标.png diff --git a/repo/js/角色养成一条龙/README.md b/repo/js/角色养成一条龙/README.md index daf77bbe4..57b14eef7 100644 --- a/repo/js/角色养成一条龙/README.md +++ b/repo/js/角色养成一条龙/README.md @@ -1,4 +1,6 @@ -请自行确保传送点和副本是开启的!!! +请注意本脚本采用的方法是,刷取物品至指定数量,如果没有刷取完成,中途请不要使用!!! + +物品刷取完成后,下次运行会直接跳过并通知,刷取过程中出现问题也会通知,所以强烈建议打开JS消息通知。 目前只刷取角色突破素材、天赋书、技能培养素材,武器材料,不会升级以及合成(区域特产、怪物掉落物还未添加),建议额外在一条龙中添加自动副本刷取圣遗物和每日领奖兜底。 @@ -12,3 +14,4 @@ 配置组设置注意事项 1、开启地图追踪行走配置 2、关闭自动拾取 3、开启战斗配置 4、战斗策略选择"根据队伍自动选择" 5、关闭自动拾取 6、其他默认就行,练度较低的话,战斗超时时间可以加长 + diff --git a/repo/js/角色养成一条龙/assets/boss/霜夜巡天灵主.png b/repo/js/角色养成一条龙/assets/boss/霜夜巡天灵主.png new file mode 100644 index 0000000000000000000000000000000000000000..b669c77febaa92902ad2480a6b92c3871bc257f1 GIT binary patch literal 16910 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

C@Mt2M)Uj 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 20 ){ try { log.info(`体力充足,开始检测物品数量`); - const bookCounts = await getMaterialCount(materialName); + let bookCounts = await getMaterialCount(materialName); res = 0.12*(bookRequireCounts[0]-bookCounts[0])+0.36*(bookRequireCounts[1]-bookCounts[1])+(bookRequireCounts[2]-bookCounts[2]); if(res>0){ log.info(`${materialName}天赋书大约还差${res.toFixed(2)}本紫色品质没有刷取`); await gotoAutoDomain(); } else { - notification.send(`${materialName}天赋书数量已经满足要求!!!`); + addNotification(`${materialName}天赋书数量已经满足要求!!!`); + await addCompletedTask("talent", materialName, bookRequireCounts); return; } } @@ -795,7 +864,7 @@ if(afterStamina< 20) skipCheckStamina = 0; let bookCounts = await getMaterialCount(materialName); res = 0.12*(bookRequireCounts[0]-bookCounts[0])+0.36*(bookRequireCounts[1]-bookCounts[1])+(bookRequireCounts[2]-bookCounts[2]); } - notification.send(`${materialName}天赋书大约还差${res.toFixed(2)}本紫色品质没有刷取`); + addNotification(`${materialName}天赋书大约还差${res.toFixed(2)}本紫色品质没有刷取`); return; } } @@ -803,14 +872,18 @@ if(afterStamina< 20) skipCheckStamina = 0; log.info(`体力值为${afterStamina},可能无法刷取${materialName}天赋书`); const bookCounts = await getMaterialCount(materialName); let res = 0.12*(bookRequireCounts[0]-bookCounts[0])+0.36*(bookRequireCounts[1]-bookCounts[1])+(bookRequireCounts[2]-bookCounts[2]); - notification.send(`${materialName}天赋书大约还差${res.toFixed(2)}本紫色品质没有刷取`); + if(res <= 0){ + await addCompletedTask("talent", materialName, bookRequireCounts); + addNotification(`${materialName}天赋书数量已经满足要求!!!`); + } + else addNotification(`${materialName}天赋书大约还差${res.toFixed(2)}本紫色品质没有刷取`); return; } } } //去刷武器材料 -async function getWeaponMaterial(materialName) { +async function getWeaponMaterial(materialName,weaponRequireCounts) { while(1){ log.info(`准备刷取武器材料,开始检查体力`); let afterStamina = 0; @@ -820,25 +893,26 @@ if(afterStamina< 20) skipCheckStamina = 0; if ( afterStamina >= 20 ){ try { log.info(`体力充足,开始检测物品数量`); - const weaponCounts = await getWeaponMaterialCount(materialName); + let weaponCounts = await getWeaponMaterialCount(materialName); res = 0.12*(weaponRequireCounts[0]-weaponCounts.green)+0.36*(weaponRequireCounts[1]-weaponCounts.blue)+(weaponRequireCounts[2]-weaponCounts.purple)+3*(weaponRequireCounts[3]-weaponCounts.gold); if(res>0){ log.info(`武器材料${materialName}大约还差${res.toFixed(2)}个紫色品质没有刷取`); await gotoAutoDomain("weaponDomain"); } else { - notification.send(`武器材料${materialName}数量已经满足要求!!!`); + addNotification(`武器材料${materialName}数量已经满足要求!!!`); + await addCompletedTask("wepon", materialName, weaponRequireCounts); return; } } catch (error) { - notification.send(`武器材料${materialName}刷取失败,错误信息: ${error}`); + addNotification(`武器材料${materialName}刷取失败,错误信息: ${error}`); await genshin.tp(2297.6201171875,-824.5869140625);//传送到神像回血 if (error.message != '秘境未在开启时间,跳过执行'){ const weaponCounts = await getWeaponMaterialCount(materialName); res = 0.12*(weaponRequireCounts[0]-weaponCounts.green)+0.36*(weaponRequireCounts[1]-weaponCounts.blue)+(weaponRequireCounts[2]-weaponCounts.purple)+3*(weaponRequireCounts[3]-weaponCounts.gold); } - notification.send(`武器材料${materialName}大约还差${res.toFixed(2)}个紫色品质没有刷取`); + addNotification(`武器材料${materialName}大约还差${res.toFixed(2)}个紫色品质没有刷取`); return; } } @@ -846,13 +920,18 @@ if(afterStamina< 20) skipCheckStamina = 0; log.info(`体力值为${afterStamina},可能无法刷取武器材料${materialName}`); const weaponCounts = await getWeaponMaterialCount(materialName); let res = 0.12*(weaponRequireCounts[0]-weaponCounts.green)+0.36*(weaponRequireCounts[1]-weaponCounts.blue)+(weaponRequireCounts[2]-weaponCounts.purple)+3*(weaponRequireCounts[3]-weaponCounts.gold); - notification.send(`武器材料${materialName}大约还差${res.toFixed(2)}个紫色品质没有刷取`); + if(res <= 0){ + await addCompletedTask("wepon", materialName, weaponRequireCounts); + addNotification(`武器材料${materialName}数量已经满足要求!!!`); + } + else addNotification(`武器材料${materialName}大约还差${res.toFixed(2)}个紫色品质没有刷取`); return; } } } + //去刷boss材料 -async function getBossMaterial(bossName) { +async function getBossMaterial(bossName,bossRequireCounts) { while(1){ log.info(`准备刷取 boss 材料,开始检查体力`); let afterStamina = 0; @@ -862,10 +941,10 @@ if(afterStamina< 20) skipCheckStamina = 0; if ( afterStamina >= 40 ){ try { log.info(`体力充足,开始检测物品数量`); - const bossCounts = await getBossMaterialCount(bossName); - res = settings.bossRequireCounts-bossCounts; + let bossCounts = await getBossMaterialCount(bossName); + res = bossRequireCounts-bossCounts; if(res>0){ - notification.send(`${bossName}还差${res}个材料没有刷取`); + log.info(`${bossName}还差${res}个材料没有刷取`); if(!settings.teamName) throw new Error('未输入队伍名称'); await genshin.returnMainUi(); await genshin.switchParty(settings.teamName); @@ -898,12 +977,13 @@ if(afterStamina< 20) skipCheckStamina = 0; log.info(`首领讨伐结束`); } else { - notification.send(`${bossName}材料数量已经满足要求!!!`); + addNotification(`${bossName}材料数量已经满足要求!!!`); + await addCompletedTask("boss", bossName, bossRequireCounts); return; } } catch (error) { - notification.send(`${bossName}刷取失败,错误信息: ${error}`); + addNotification(`${bossName}刷取失败,错误信息: ${error}`); await genshin.tp(2297.6201171875,-824.5869140625);//传送到神像回血 return; } @@ -911,8 +991,12 @@ if(afterStamina< 20) skipCheckStamina = 0; else{ log.info(`体力值为${afterStamina},可能无法刷取首领材料${bossName}`); const bossCounts = await getBossMaterialCount(bossName); - let res = settings.bossRequireCounts-bossCounts; - notification.send(`${bossName}还差${res}个材料没有刷取`); + let res = bossRequireCounts-bossCounts; + if(res>0) addNotification(`${bossName}还差${res}个材料没有刷取`); + else { + addNotification(`${bossName}材料数量已经满足要求!!!`); + await addCompletedTask("boss", bossName, bossRequireCounts); + } return; } } @@ -950,73 +1034,62 @@ function parseAndValidateCounts(input, expectedCount) { return result; } -let weaponRequireCounts; -let weaponRequireCounts1; -let weaponRequireCounts2; -let bookRequireCounts; -let bookRequireCounts1; -let bookRequireCounts2; -let skipCheckStamina = 1; + +(async function () { + if(!settings.unfairContractTerms) throw new Error('未签署霸王条款,无法使用'); +const completedTasks = await loadCompletedTasks(); +log.info(`已加载 ${Object.keys(completedTasks).length} 个已完成任务记录`); -if(settings.talentBookName != "无" && settings.talentBookName){ +for (let i = 0; i < 3; i++) { + +const talentBookName = eval(`settings.talentBookName${i}`); +if(talentBookName != "无" && talentBookName){ try{ -bookRequireCounts = parseAndValidateCounts(settings.talentBookRequireCounts, 3); -log.info(`天赋书1方案解析成功: ${bookRequireCounts.join(', ')}`); -await getTalentBook(settings.talentBookName)} -catch (error) { notification.send(`${settings.talentBookName}刷取失败,错误信息: ${error}`);} +let bookRequireCounts = parseAndValidateCounts(eval(`settings.talentBookRequireCounts${i}`), 3); +log.info(`天赋书${i+1}方案解析成功: ${bookRequireCounts.join(', ')}`); +const isCompleted = await isTaskCompleted("talent", talentBookName, bookRequireCounts); +if (isCompleted){addNotification(`天赋书${talentBookName} 已刷取至目标数量,跳过执行`);} +else await getTalentBook(talentBookName,bookRequireCounts); +// 刷取完成后标记为完成 +//await addCompletedTask("talent", talentBookName, bookRequireCounts); +} +catch (error) { notification.send(`天赋书${talentBookName}刷取失败,错误信息: ${error}`);} +} +else log.info(`没有选择刷取天赋书${i+1},跳过执行`); } -else log.info(`没有选择刷取天赋书1,跳过执行`); -if(settings.talentBookName1 != "无" && settings.talentBookName1){ + +for (let i = 0; i < 3; i++) { +const weaponName = eval(`settings.weaponName${i}`); +if(weaponName != "无" && weaponName){ try{ -bookRequireCounts1 = parseAndValidateCounts(settings.talentBookRequireCounts1, 3); -log.info(`天赋书2方案解析成功: ${bookRequireCounts1.join(', ')}`); -await getTalentBook(settings.talentBookName1)} -catch (error) { notification.send(`${settings.talentBookName1}刷取失败,错误信息: ${error}`);} +weaponRequireCounts = parseAndValidateCounts(eval(`settings.weaponMaterialRequireCounts${i}`), 4); +log.info(`武器材料${i+1}方案解析成功: ${weaponRequireCounts.join(', ')}`); +const isCompleted = await isTaskCompleted("wepon", weaponName, weaponRequireCounts); +if (isCompleted){addNotification(`武器材料${weaponName} 已刷取至目标数量,跳过执行`);} +else await getWeaponMaterial(weaponName,weaponRequireCounts); +} +catch (error) { notification.send(`武器材料${weaponName}刷取失败,错误信息: ${error}`);} +} +else log.info(`没有选择刷取武器材料${i+1},跳过执行`); } -else log.info(`没有选择刷取天赋书2,跳过执行`); -if(settings.talentBookName2 != "无" && settings.talentBookName2){ +for (let i = 0; i < 3; i++) { +const bossName = eval(`settings.bossName${i}`); +if(bossName != "无" && bossName){ try{ -bookRequireCounts2 = parseAndValidateCounts(settings.talentBookRequireCounts2, 3); -log.info(`天赋书3方案解析成功: ${bookRequireCounts2.join(', ')}`); -await getTalentBook(settings.talentBookName2)} -catch (error) { notification.send(`${settings.talentBookName2}刷取失败,错误信息: ${error}`);} +bossRequireCounts = eval(`settings.bossRequireCounts${i}`); +const isCompleted = await isTaskCompleted("boss", bossName, bossRequireCounts); +if (isCompleted){addNotification(`首领材料${bossName} 已刷取至目标数量,跳过执行`);} +else await getBossMaterial(bossName,bossRequireCounts); +} +catch (error) { notification.send(`首领材料${bossName}刷取失败,错误信息: ${error}`);} +} +else log.info(`没有选择挑战首领${i+1},跳过执行`); } -else log.info(`没有选择刷取天赋书3,跳过执行`); -if(settings.weaponName != "无" && settings.weaponName){ -try{ -weaponRequireCounts = parseAndValidateCounts(settings.weaponMaterialRequireCounts, 4); -log.info(`武器材料1方案解析成功: ${weaponRequireCounts.join(', ')}`); -await getWeaponMaterial(settings.weaponName)} -catch (error) { notification.send(`${settings.weaponName}刷取失败,错误信息: ${error}`);} -} -else log.info(`没有选择刷取武器材料1,跳过执行`); - -if(settings.weaponName1 != "无" && settings.weaponName1){ -try{ -weaponRequireCounts1 = parseAndValidateCounts(settings.weaponMaterialRequireCounts1, 4); -log.info(`武器材料2方案解析成功: ${weaponRequireCounts1.join(', ')}`); -await getWeaponMaterial(settings.weaponName1)} -catch (error) { notification.send(`${settings.weaponName1}刷取失败,错误信息: ${error}`);} -} -else log.info(`没有选择刷取武器材料2,跳过执行`); - -if(settings.weaponName2 != "无" && settings.weaponName2){ -try{ -weaponRequireCounts2 = parseAndValidateCounts(settings.weaponMaterialRequireCounts2, 4); -log.info(`武器材料3方案解析成功: ${weaponRequireCounts2.join(', ')}`); -await getWeaponMaterial(settings.weaponName2)} -catch (error) { notification.send(`${settings.weaponName2}刷取失败,错误信息: ${error}`);} -} -else log.info(`没有选择刷取武器材料3,跳过执行`); - -if(settings.bossName != "无" && settings.bossName){ -try{await getBossMaterial(settings.bossName)} -catch (error) { notification.send(`${settings.bossName}刷取失败,错误信息: ${error}`);} -} -else log.info(`没有选择挑战首领,跳过执行`); +sendBufferedNotifications();//发送累积的完成信息 })(); + diff --git a/repo/js/角色养成一条龙/manifest.json b/repo/js/角色养成一条龙/manifest.json index 56338da43..7434bef92 100644 --- a/repo/js/角色养成一条龙/manifest.json +++ b/repo/js/角色养成一条龙/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "角色养成一条龙", - "version": "1.4", + "version": "1.5", "description": "详见readme.md", "authors": [ { @@ -10,5 +10,8 @@ } ], "settings_ui": "settings.json", + "saved_files": [ + "completed_tasks.json", + ], "main": "main.js" } diff --git a/repo/js/角色养成一条龙/settings.json b/repo/js/角色养成一条龙/settings.json index 2a27e2cbd..2f6ca60f8 100644 --- a/repo/js/角色养成一条龙/settings.json +++ b/repo/js/角色养成一条龙/settings.json @@ -1,6 +1,6 @@ [ { - "name": "talentBookName", + "name": "talentBookName0", "type": "select", "label": "请选择天赋书1类型", "options": [ @@ -29,7 +29,7 @@ ] }, { - "name": "talentBookRequireCounts", + "name": "talentBookRequireCounts0", "type": "input-text", "label": "天赋书1数量,绿-蓝-紫" }, @@ -102,7 +102,7 @@ "label": "天赋书3数量,绿-蓝-紫" }, { - "name": "weaponName", + "name": "weaponName0", "type": "select", "label": "请选择武器材料1类型", "options": [ @@ -131,7 +131,7 @@ ] }, { - "name": "weaponMaterialRequireCounts", + "name": "weaponMaterialRequireCounts0", "type": "input-text", "label": "武器材料1数量,绿-蓝-紫-金" }, @@ -204,9 +204,9 @@ "label": "武器材料3数量,绿-蓝-紫-金" }, { - "name": "bossName", + "name": "bossName0", "type": "select", - "label": "请选择首领", + "label": "请选择首领1", "options": [ "无", "爆炎树", @@ -243,13 +243,115 @@ "遗迹巨蛇", "隐山猊兽", "兆载永劫龙兽", - "重拳出击鸭" + "重拳出击鸭", + "蕴光月幻蝶", + "霜夜巡天灵主", ] }, { - "name": "bossRequireCounts", + "name": "bossRequireCounts0", "type": "input-text", - "label": "首领材料数量" + "label": "首领1材料数量" + }, + { + "name": "bossName1", + "type": "select", + "label": "请选择首领2", + "options": [ + "无", + "爆炎树", + "半永恒统辖矩阵", + "掣电树", + "纯水精灵", + "翠翎恐蕈", + "深罪浸礼者", + "深邃摹结株", + "风蚀沙虫", + "冰风组曲-歌裴莉娅的葬送", + "冰风组曲-科培琉司的劫罚", + "古岩龙蜥", + "恒常机关阵列", + "急冻树", + "金焰绒翼龙暴君", + "雷音权现", + "灵觉隐修的迷者", + "魔像督军", + "秘源机兵·统御械", + "秘源机兵·构型械", + "魔偶剑鬼", + "千年珍珠骏麟", + "熔岩辉龙像", + "贪食匿叶龙山王", + "铁甲熔火帝皇", + "无相之草", + "无相之火", + "无相之雷", + "无相之水", + "无相之岩", + "水形幻人", + "实验性场力发生装置", + "遗迹巨蛇", + "隐山猊兽", + "兆载永劫龙兽", + "重拳出击鸭", + "蕴光月幻蝶", + "霜夜巡天灵主", + ] + }, + { + "name": "bossRequireCounts1", + "type": "input-text", + "label": "首领2材料数量" + }, + { + "name": "bossName2", + "type": "select", + "label": "请选择首领3", + "options": [ + "无", + "爆炎树", + "半永恒统辖矩阵", + "掣电树", + "纯水精灵", + "翠翎恐蕈", + "深罪浸礼者", + "深邃摹结株", + "风蚀沙虫", + "冰风组曲-歌裴莉娅的葬送", + "冰风组曲-科培琉司的劫罚", + "古岩龙蜥", + "恒常机关阵列", + "急冻树", + "金焰绒翼龙暴君", + "雷音权现", + "灵觉隐修的迷者", + "魔像督军", + "秘源机兵·统御械", + "秘源机兵·构型械", + "魔偶剑鬼", + "千年珍珠骏麟", + "熔岩辉龙像", + "贪食匿叶龙山王", + "铁甲熔火帝皇", + "无相之草", + "无相之火", + "无相之雷", + "无相之水", + "无相之岩", + "水形幻人", + "实验性场力发生装置", + "遗迹巨蛇", + "隐山猊兽", + "兆载永劫龙兽", + "重拳出击鸭", + "蕴光月幻蝶", + "霜夜巡天灵主", + ] + }, + { + "name": "bossRequireCounts2", + "type": "input-text", + "label": "首领3材料数量" }, { "name": "teamName",