diff --git a/repo/js/七圣召唤七日历练全自动/assets/cardPlayer.png b/repo/js/七圣召唤七日历练全自动/assets/cardPlayer.png new file mode 100644 index 00000000..0e926f89 Binary files /dev/null and b/repo/js/七圣召唤七日历练全自动/assets/cardPlayer.png differ diff --git a/repo/js/七圣召唤七日历练全自动/assets/tavern.png b/repo/js/七圣召唤七日历练全自动/assets/tavern.png new file mode 100644 index 00000000..e0001366 Binary files /dev/null and b/repo/js/七圣召唤七日历练全自动/assets/tavern.png differ diff --git a/repo/js/七圣召唤七日历练全自动/assets/老版.js b/repo/js/七圣召唤七日历练全自动/assets/老版.js new file mode 100644 index 00000000..30c525c1 --- /dev/null +++ b/repo/js/七圣召唤七日历练全自动/assets/老版.js @@ -0,0 +1,309 @@ +(async function () { + +// 存储识别到的文本信息 +let textArray = []; + +//获取挑战对象名称 +async function captureAndStoreTexts() { + // 清空数组 + textArray = []; + // 四个固定位置坐标 + const positions = [ + {x: 450, y: 620}, + {x: 760, y: 620}, + {x: 1070, y: 620}, + {x: 1380, y: 620} + ]; + // 截取区域大小 + const width = 210; + const height = 60; + await sleep(500); + keyPress("F6") + await sleep(1000); + click(300, 370);//点击七日历练 + await sleep(1000); + // 获取游戏区域截图 + const captureRegion = captureGameRegion(); + + // 遍历四个位置进行OCR识别 + for (const pos of positions) { + // 创建OCR识别区域 + const ocrRo = RecognitionObject.ocr(pos.x, pos.y, width, height); + + // 在指定区域进行OCR识别 + const result = captureRegion.find(ocrRo); + + if (!result.isEmpty() && result.text) { + // 存储识别结果和对应位置 + textArray.push({ + text: result.text.trim(), + x: pos.x + width / 2, // 点击中心位置 + y: pos.y + height / 2 + }); + + log.info(`识别到文本: ${result.text} 位置: (${pos.x}, ${pos.y})`); + } else { + log.warn(`位置 (${pos.x}, ${pos.y}) 未识别到文本`); + } + } + + log.info(`已存储的文本数量: ${textArray.length}`); + keyPress("ESCAPE"); + await sleep(1000); +} + +//局部搜索并点击匹配的文本 +async function searchAndClickTexts() { + // 限定区域坐标和大小 + const searchX = 1210; + const searchY = 440; + const searchWidth = 150; + const searchHeight = 195; + + // 获取游戏区域截图 + const captureRegion = captureGameRegion(); + + // 在限定区域内进行OCR识别 + const ocrRo = RecognitionObject.ocr(searchX, searchY, searchWidth, searchHeight); + const results = captureRegion.findMulti(ocrRo); + + // 遍历OCR结果 + for (let i = 0; i < results.count; i++) { + const res = results[i]; + const resText = res.text.trim(); + + // 在存储的文本数组中查找匹配项 + const index = textArray.findIndex(item => item.text === resText); + + if (index !== -1) { + // 找到匹配项,点击对应位置 + + log.info(`找到匹配文本: ${resText}`); + + // 点击存储的位置 + await keyMouseScript.runFile(`assets/ALT点击.json`); + await sleep(500); + res.click(); + await sleep(500); + await keyMouseScript.runFile(`assets/ALT释放.json`); + await Playcards(); + + // 从数组中移除已处理的文本 + textArray.splice(index, 1); + + return true; + } + } + return false; +} + +//函数:打开地图前往猫尾酒馆 + async function gotoTavern() { +log.info(`前往猫尾酒馆`); +await sleep(1000); +keyPress("m"); +await sleep(1500); +click(1841, 1015);//地图选择 +await sleep(1000); +click(1460, 140);//蒙德 +await sleep(1200); +click(48, 441);//放大地图 +await sleep(400); +click(48, 441);//放大地图 +await sleep(400); +click(48, 441);//放大地图 +await sleep(400); +click(48, 441);//放大地图 +await sleep(400); +click(48, 441);//放大地图 +await sleep(400); +click(1000, 645);//猫尾酒馆 +await sleep(600); +click(1345, 690);//猫尾酒馆 +await sleep(600); +click(1707, 1010);//猫尾酒馆 +await sleep(7000); + } + +//函数:对话和打牌 + async function Playcards() { +for (let i = 0;i < 5; i++) { +keyPress("VK_SPACE"); +await sleep(500); +keyPress("VK_SPACE");//对话 +await sleep(1000); + } +keyPress("F"); +await sleep(1500); +click(1610,900 );//点击挑战 +await sleep(8000); +await dispatcher.runTask(new SoloTask("AutoGeniusInvokation")); +await sleep(3000); +click(1860,50 );//避免失败卡死:点击设置 +await sleep(1000); +click(1600,260 );//避免失败卡死:退出对局 +await sleep(1000); +click(1180,756 );//避免失败卡死:确认 +await sleep(6000); +click(754,915 );//退出挑战 +await sleep(10000); +for (let i = 0;i < 3; i++) { +keyPress("VK_SPACE"); +await sleep(500); +keyPress("VK_SPACE");//对话 +await sleep(900); + } + } + +//前往一号桌 + async function gotoTable1() { + log.info(`前往1号桌`); +keyDown("d"); +await sleep(1500); +keyUp("d"); +keyDown("w"); +await sleep(400); +keyUp("w"); +keyDown("d"); +keyDown("w"); +await sleep(1200); +keyUp("d"); +keyUp("w"); +await sleep(700); + } +//前往二号桌 + async function gotoTable2() { +log.info(`前往2号桌`); +keyDown("d"); +await sleep(1500); +keyUp("d"); +keyDown("w"); +await sleep(400); +keyUp("w"); +keyDown("d"); +keyDown("w"); +await sleep(1200); +keyUp("d"); +keyUp("w"); +keyDown("s"); +await sleep(700); +keyUp("s"); +await sleep(700); + } +//前往三号桌 + async function gotoTable3() { +log.info(`前往3号桌`); +keyDown("w"); +await sleep(2000); +keyUp("w"); +keyDown("d"); +await sleep(5000); +keyUp("d"); +keyDown("a"); +await sleep(1500); +keyUp("a"); +await sleep(700); + } +//前往四号桌 + async function gotoTable4() { +log.info(`前往4号桌`); +keyDown("w"); +await sleep(2000); +keyUp("w"); +keyDown("d"); +await sleep(5000); +keyUp("d"); +keyDown("a"); +await sleep(1500); +keyUp("a"); +keyDown("d"); +await sleep(200); +keyUp("d"); +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(700); + } +//前往一号包间 + async function gotoTable5() { +log.info(`前往1号包间`); +keyDown("w"); +await sleep(2500); +keyUp("w"); +keyDown("d"); +await sleep(200); +keyUp("d"); +await sleep(500); +keyPress("ESCAPE"); +await sleep(1500); +keyPress("ESCAPE"); +await sleep(1500); +keyDown("w"); +await sleep(5900); +keyUp("w"); +await sleep(700); + } +//前往二号包间 + async function gotoTable6() { +log.info(`前往2号包间`); +await sleep(1500); +keyDown("d"); +await sleep(1500); +keyUp("d"); +keyDown("w"); +keyDown("d"); +await sleep(4000); +keyUp("d"); +keyUp("w"); +keyDown("a"); +await sleep(1500); +keyUp("a"); +keyDown("w"); +await sleep(3000); +keyPress("VK_SPACE"); +await sleep(1000); +keyUp("w"); +keyDown("s"); +await sleep(1000); +keyPress("VK_SPACE"); +await sleep(700); +keyUp("s"); +await sleep(500); + + } + +//主流程 +await genshin.returnMainUi(); +await gotoTavern(); +await sleep(4000); +await captureAndStoreTexts(); + for (let i = 0;i < 6; i++) { + + if (textArray.length === 0) break; + if (i != 0)await gotoTavern(); + await gotoTable1(); + await searchAndClickTexts(); + if (textArray.length === 0) break; + await gotoTavern(); + await gotoTable2(); + await searchAndClickTexts(); + if (textArray.length === 0) break; + await gotoTavern(); + await gotoTable3(); + await searchAndClickTexts(); + if (textArray.length === 0) break; + await gotoTavern(); + await gotoTable4(); + await searchAndClickTexts(); + if (textArray.length === 0) break; + await gotoTavern(); + await gotoTable5(); + await searchAndClickTexts(); + if (textArray.length === 0) break; + await gotoTavern(); + await gotoTable6(); + await searchAndClickTexts(); + if (textArray.length === 0) break; + } + + })(); diff --git a/repo/js/七圣召唤七日历练全自动/main.js b/repo/js/七圣召唤七日历练全自动/main.js index d6e91a4e..6ab4bf36 100644 --- a/repo/js/七圣召唤七日历练全自动/main.js +++ b/repo/js/七圣召唤七日历练全自动/main.js @@ -1,14 +1,101 @@ (async function () { - // 定义识别对象 - 玩家卡片图片 +// 存储挑战玩家信息 +let textArray = []; +let skipNum = 0; +//检查挑战结果 await checkChallengeResults(); +async function checkChallengeResults() { + const region1 = RecognitionObject.ocr(785, 890, 340, 82);// 对话区域 + let capture = captureGameRegion(); + let res1 = capture.find(region1); + if (res1.test != "对局胜利"){ + log.info("挑战失败"); + await sleep(1000); + click(960, 540); + await sleep(500); + click(1860,50 );//避免失败卡死 + await sleep(1000); + click(1600,260 ); + await sleep(1000); + click(1180,756 ); + await sleep(6000); + click(754,915 );//退出挑战 + await sleep(4000); + await autoConversation(); + await sleep(1000); + return; + } + else{ + log.info("挑战成功"); + await sleep(1000); + click(754,915 );//退出挑战 + await sleep(4000); + await autoConversation(); + await sleep(1000); + return; + } + +} + +//自动对话,直到出现选项框 await autoConversation(); +async function autoConversation() { + const region1 = RecognitionObject.ocr(785, 890, 340, 82);// 对话区域 + const region2 = RecognitionObject.ocr(1250, 400, 660, 440);// 选项区域 + let talkTime = 0; + await sleep(500);//点击后等待一段时间避免误判 + //最多10次对话 + while (talkTime < 20) { + let capture = captureGameRegion(); + let res1 = capture.find(region1); + let res2 = capture.find(region2); + if (!res1.isEmpty() && res2.isEmpty()){ + talkTime++; + keyPress("VK_SPACE"); + await sleep(1500); + } + else if(!res1.isEmpty() && !res2.isEmpty()){ + keyPress("F"); + log.info("已选择谈话内容"); + return; + } + else if(res1.isEmpty() && !res2.isEmpty()){ + log.info("谈话完成"); + return; + } + talkTime++; + await sleep(1500); + } + throw new Error('对话时间超时'); +} + +//检测传送结束 +async function tpEndDetection() { + const region = RecognitionObject.ocr(1690, 230, 75, 350);// 队伍名称区域 + let tpTime = 0; + await sleep(500);//点击传送后等待一段时间避免误判 + //最多30秒传送时间 + while (tpTime < 300) { + let capture = captureGameRegion(); + let res = capture.find(region); + if (!res.isEmpty()){ + log.info("传送完成"); + await sleep(1200);//传送结束后有僵直 + return; + } + tpTime++; + await sleep(100); + } + throw new Error('传送时间超时'); +} + + + +// 打开地图,查看玩家位置,并前往相应位置 const cardPlayerRo = RecognitionObject.TemplateMatch( file.ReadImageMatSync("assets/cardPlayer.png")); -/** - * 检测指定点位是否有玩家卡片,发现后调用对应的函数 - * @returns {Promise} 是否找到并处理了卡片 - */ const detectCardPlayer = async () => { // 定义要检测的6个点位及对应的处理函数 let i =0; +let findNum = 0; const checkPoints = [ { x: 640, y: 750, action: async () => await gotoTable1() }, // 点位1 { x: 810, y: 790, action: async () => await gotoTable2() }, // 点位2 @@ -18,20 +105,23 @@ let i =0; { x: 290, y: 530, action: async () => await gotoTable6() } // 点位6 ]; - await openMap(); - keyPress("M"); + + keyPress("M"); await sleep(1200); click(48, 441);//放大地图 -await sleep(500); +await sleep(300); click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); +await sleep(300); click(48, 441);//放大地图 +await sleep(300); + +//地图拖动到指定位置 +moveMouseTo(200,200 ); +leftButtonDown(); await sleep(500); +moveMouseTo(170,288 );await sleep(500); +moveMouseTo(104,1000 );await sleep(500); +leftButtonUp();await sleep(500); -await sleep(500); // 获取游戏区域截图 const captureRegion = captureGameRegion(); @@ -52,27 +142,26 @@ const cropRegion = captureRegion.DeriveCrop( // 如果找到卡片 if (!result.IsEmpty()) { - log.info(`在点位${i}找到玩家卡片,执行对应操作`); - - await sleep(1000); - keyPress("ESCAPE"); - await sleep(1500); - await point.action(); // 调用该点位对应的函数 - return true; // 返回true表示已找到并处理 - + findNum++; + if (findNum - skipNum == 1) { + log.info(`在点位${i}找到玩家,执行对应操作`); + await sleep(1000); + keyPress("ESCAPE"); + await sleep(1500); + await point.action(); // 调用该点位对应的函数 + return true; // 返回true表示已找到并处理 + } } + } // 所有点位都未找到 - log.info("未在任何检测点找到玩家卡片"); + log.info("未在任何检测点找到玩家"); textArray.length = 0; return false; } -// 存储识别到的文本信息 -let textArray = []; - //获取挑战对象名称 async function captureAndStoreTexts() { // 清空数组 @@ -120,12 +209,13 @@ async function captureAndStoreTexts() { } } - log.info(`已存储的文本数量: ${textArray.length}`); + log.info(`剩余挑战人数:${textArray.length}`); keyPress("ESCAPE"); await sleep(1000); + } -//局部搜索并点击匹配的文本 +//检查是否有对应的挑战对手 async function searchAndClickTexts() { // 限定区域坐标和大小 const searchX = 1210; @@ -152,7 +242,7 @@ async function searchAndClickTexts() { // 找到匹配项,点击对应位置 log.info(`找到匹配文本: ${resText}`); - + skipNum = 0; // 点击存储的位置 await keyMouseScript.runFile(`assets/ALT点击.json`); await sleep(500); @@ -167,12 +257,15 @@ async function searchAndClickTexts() { return true; } } + log.info(`未找到匹配文本`); + skipNum++; return false; } //函数:打开地图前往猫尾酒馆 async function gotoTavern() { - +const tavernRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/tavern.png")); +await genshin.returnMainUi(); await sleep(1000); keyPress("m"); await sleep(1500); @@ -190,49 +283,43 @@ click(48, 441);//放大地图 await sleep(400); click(48, 441);//放大地图 await sleep(400); -click(1000, 645);//猫尾酒馆 -await sleep(600); -click(1345, 690);//猫尾酒馆 -await sleep(600); -click(1707, 1010);//猫尾酒馆 -await sleep(7000); +let tavern = captureGameRegion().find(tavernRo); +if (tavern.isExist()) { + tavern.click(); + await sleep(500); + } + else{ + throw new Error('未能找到猫尾酒馆'); + } +tavern = captureGameRegion().find(tavernRo); +if (tavern.isExist()) { + tavern.click(); + await sleep(500); + } + else{ + throw new Error('未能找到猫尾酒馆'); + } +click(1707, 1010);//确认传送 +await sleep(1000); +await tpEndDetection(); } //函数:对话和打牌 async function Playcards() { -for (let i = 0;i < 5; i++) { -keyPress("VK_SPACE"); -await sleep(500); -keyPress("VK_SPACE");//对话 await sleep(1000); - } -keyPress("F"); +await autoConversation(); +log.info("对话完成"); await sleep(1500); click(1610,900 );//点击挑战 await sleep(8000); await dispatcher.runTask(new SoloTask("AutoGeniusInvokation")); await sleep(3000); -click(960, 540); -await sleep(500); -click(1860,50 );//避免失败卡死:点击设置 -await sleep(1000); -click(1600,260 );//避免失败卡死:退出对局 -await sleep(1000); -click(1180,756 );//避免失败卡死:确认 -await sleep(6000); -click(754,915 );//退出挑战 -await sleep(10000); -for (let i = 0;i < 3; i++) { -keyPress("VK_SPACE"); -await sleep(500); -keyPress("VK_SPACE");//对话 -await sleep(900); - } +await checkChallengeResults(); +await sleep(1000); } //前往一号桌 async function gotoTable1() { -await gotoTavern(); log.info(`前往1号桌`); keyDown("d"); await sleep(1500); @@ -249,7 +336,6 @@ await sleep(700); } //前往二号桌 async function gotoTable2() { -await gotoTavern(); log.info(`前往2号桌`); keyDown("d"); await sleep(1500); @@ -269,7 +355,6 @@ await sleep(700); } //前往三号桌 async function gotoTable3() { -await gotoTavern(); log.info(`前往3号桌`); keyDown("w"); await sleep(2000); @@ -284,7 +369,6 @@ await sleep(700); } //前往四号桌 async function gotoTable4() { -await gotoTavern(); log.info(`前往4号桌`); keyDown("w"); await sleep(2000); @@ -305,7 +389,6 @@ await sleep(700); } //前往一号包间 async function gotoTable5() { -await gotoTavern(); log.info(`前往1号包间`); keyDown("w"); await sleep(2500); @@ -325,7 +408,6 @@ await sleep(700); } //前往二号包间 async function gotoTable6() { -await gotoTavern(); log.info(`前往2号包间`); await sleep(1500); keyDown("d"); @@ -367,18 +449,19 @@ await sleep(700); //主流程 -await genshin.returnMainUi(); +log.info(`前往猫尾酒馆`); await gotoTavern(); -await sleep(4000); await captureAndStoreTexts(); - for (let i = 0;i < 6; i++) {//六次循环兜底,避免多次挑战不过 - -if (textArray.length === 0) break; +if (textArray.length != 0){ +await detectCardPlayer(); +await searchAndClickTexts(); +} + for (let i = 0;i < 20; i++) {//循环兜底,避免角色未到达指定位置 +if (textArray.length === 0) break; +await gotoTavern(); await detectCardPlayer(); await searchAndClickTexts(); - } - await genshin.returnMainUi(); await sleep(500); keyPress("F6") diff --git a/repo/js/七圣召唤七日历练全自动/manifest.json b/repo/js/七圣召唤七日历练全自动/manifest.json index 7698a271..20435dad 100644 --- a/repo/js/七圣召唤七日历练全自动/manifest.json +++ b/repo/js/七圣召唤七日历练全自动/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "打牌一条龙", - "version": "1.1", + "version": "1.5", "description": "只靠一个牌组的话,胜率还是太低了,所以有没有既简单又强势的卡组推荐下呢?", "authors": [ { diff --git a/repo/js/周本-仆人/assets/recover.json b/repo/js/周本-仆人/assets/recover.json deleted file mode 100644 index 326ad3c5..00000000 --- a/repo/js/周本-仆人/assets/recover.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "info": { - "name": "未命名路径", - "type": "collect", - "author": "柒叶子", - "version": "1.0", - "description": "前往周本", - "bgiVersion": "0.35.1" - }, - "positions": [ - - { - "id": 1, - "x":1468.0986328125, - "y":1998.05859375 , - "type": "teleport", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - ] -} \ No newline at end of file diff --git a/repo/js/周本-仆人/manifest.json b/repo/js/周本-仆人/manifest.json deleted file mode 100644 index 0e270fd8..00000000 --- a/repo/js/周本-仆人/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "仆人周本刷取", - "version": "1.1", - "description": "建议队伍:钟离(必须一号位)、芙芙、精通雷神、6命芭芭拉。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,推荐使用战斗脚本(周本队前进版),关闭战斗结束拾取物品和万叶拾取,最后根据队伍大致表现,填入合适的战斗超时时间,(周本队前进版)建议280s,此外周本压力较大,会强制使用美味的月亮派,请提前准备", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/周本-仆人/周本队前进版.txt b/repo/js/周本-仆人/周本队前进版.txt deleted file mode 100644 index 6c5afe37..00000000 --- a/repo/js/周本-仆人/周本队前进版.txt +++ /dev/null @@ -1,5 +0,0 @@ -钟离 e(hold),d(0.8),w(0.6) -雷电将军 e -芭芭拉 e,q -钟离 e(hold),d(0.8),w(0.6) -芙宁娜 q,e diff --git a/repo/js/周本-公子/assets/recover.json b/repo/js/周本-公子/assets/recover.json deleted file mode 100644 index 326ad3c5..00000000 --- a/repo/js/周本-公子/assets/recover.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "info": { - "name": "未命名路径", - "type": "collect", - "author": "柒叶子", - "version": "1.0", - "description": "前往周本", - "bgiVersion": "0.35.1" - }, - "positions": [ - - { - "id": 1, - "x":1468.0986328125, - "y":1998.05859375 , - "type": "teleport", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - ] -} \ No newline at end of file diff --git a/repo/js/周本-公子/manifest.json b/repo/js/周本-公子/manifest.json deleted file mode 100644 index c3ff6417..00000000 --- a/repo/js/周本-公子/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "黄金屋自动刷取", - "version": "1.1", - "description": "建议队伍:钟离(必须一号位)、芙芙、精通雷神、6命芭芭拉。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,推荐使用战斗脚本(周本队后退版),关闭战斗结束拾取物品和万叶拾取,最后根据队伍大致表现,填入合适的战斗超时时间,(周本队后退版)建议180s,此外周本压力较大,会强制使用美味的月亮派,请提前准备", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/周本-公子/周本队后退版.txt b/repo/js/周本-公子/周本队后退版.txt deleted file mode 100644 index c332fac5..00000000 --- a/repo/js/周本-公子/周本队后退版.txt +++ /dev/null @@ -1,8 +0,0 @@ -钟离 s(2.4),e(hold) -雷电将军 e -芭芭拉 e -钟离 s(2.4),e(hold) -芙宁娜 q,e - - - diff --git a/repo/js/周本-女士/assets/recover.json b/repo/js/周本-女士/assets/recover.json deleted file mode 100644 index 326ad3c5..00000000 --- a/repo/js/周本-女士/assets/recover.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "info": { - "name": "未命名路径", - "type": "collect", - "author": "柒叶子", - "version": "1.0", - "description": "前往周本", - "bgiVersion": "0.35.1" - }, - "positions": [ - - { - "id": 1, - "x":1468.0986328125, - "y":1998.05859375 , - "type": "teleport", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - ] -} \ No newline at end of file diff --git a/repo/js/周本-女士/main.js b/repo/js/周本-女士/main.js deleted file mode 100644 index 5e82a6ca..00000000 --- a/repo/js/周本-女士/main.js +++ /dev/null @@ -1,53 +0,0 @@ -(async function () { - await sleep(1000); -await pathingScript.runFile("assets/recover.json"); -await sleep(5000); -await pathingScript.runFile("assets/tp.json"); -await sleep(1000); -keyDown("w"); -await sleep(2000); -keyUp("w"); -await sleep(1000); -keyPress("F"); -await sleep(2000); -click(1725, 1020);//单人挑战 -await sleep(2000); -click(1725, 1020);//开始挑战 -await sleep(15000); -keyPress("ESCAPE");//点击任意处 -await sleep(2000); -keyPress("1"); -await sleep(1000);//切回钟离 -keyDown("s"); -await sleep(1000); -keyUp("s"); -await dispatcher.runTask(new SoloTask("AutoFight")); -keyPress("1"); -await sleep(1000);//切回钟离 - -keyDown("s"); -await sleep(2000); -keyUp("s"); - -keyDown("w"); -await sleep(3600); -keyUp("w"); - -keyDown("a"); -await sleep(400); -keyUp("a"); - -await sleep(1000); -keyPress("F");//领奖 -await sleep(1000); -click(950, 750);//使用树脂 -await sleep(6000); -click(975, 1000);//退出秘境 -await sleep(1000); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(500); -click(950, 750);//点击确认:避免挑战失败无法退出 -await sleep(3500); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(7500); -})(); diff --git a/repo/js/周本-女士/manifest.json b/repo/js/周本-女士/manifest.json deleted file mode 100644 index 0ab3b0ea..00000000 --- a/repo/js/周本-女士/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "女士周本刷取", - "version": "1.1", - "description": "建议队伍:钟离(必须一号位)、芙芙、火神、6命芭芭拉。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,推荐使用战斗脚本(女士周本队特制版),关闭战斗结束拾取物品和万叶拾取,最后根据队伍大致表现,填入合适的战斗超时时间,(女士周本队特制版)建议300s", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/周本-女士/周本队女士专用后退版.txt b/repo/js/周本-女士/周本队女士专用后退版.txt deleted file mode 100644 index f3181de4..00000000 --- a/repo/js/周本-女士/周本队女士专用后退版.txt +++ /dev/null @@ -1,8 +0,0 @@ -钟离 s(0.7),e(hold) -玛薇卡 e -芭芭拉 s(0.7),e,q -钟离 s(0.7),e(hold) -芙宁娜 s(0.7),q,e - - - diff --git a/repo/js/周本-散兵/assets/recover.json b/repo/js/周本-散兵/assets/recover.json deleted file mode 100644 index 326ad3c5..00000000 --- a/repo/js/周本-散兵/assets/recover.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "info": { - "name": "未命名路径", - "type": "collect", - "author": "柒叶子", - "version": "1.0", - "description": "前往周本", - "bgiVersion": "0.35.1" - }, - "positions": [ - - { - "id": 1, - "x":1468.0986328125, - "y":1998.05859375 , - "type": "teleport", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - ] -} \ No newline at end of file diff --git a/repo/js/周本-散兵/manifest.json b/repo/js/周本-散兵/manifest.json deleted file mode 100644 index a8def8e3..00000000 --- a/repo/js/周本-散兵/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "散兵周本刷取", - "version": "1.0", - "description": "建议队伍:钟离(必须一号位)、芙芙、精通雷神、6命芭芭拉。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,推荐使用战斗脚本(周本队后退版),关闭战斗结束拾取物品和万叶拾取,最后根据队伍大致表现,填入合适的战斗超时时间,(周本队后退版)建议500s,此外周本压力较大,会强制使用美味的月亮派,请提前准备", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} \ No newline at end of file diff --git a/repo/js/周本-散兵/周本队后退版.txt b/repo/js/周本-散兵/周本队后退版.txt deleted file mode 100644 index c332fac5..00000000 --- a/repo/js/周本-散兵/周本队后退版.txt +++ /dev/null @@ -1,8 +0,0 @@ -钟离 s(2.4),e(hold) -雷电将军 e -芭芭拉 e -钟离 s(2.4),e(hold) -芙宁娜 q,e - - - diff --git a/repo/js/周本-若陀/assets/recover.json b/repo/js/周本-若陀/assets/recover.json deleted file mode 100644 index 326ad3c5..00000000 --- a/repo/js/周本-若陀/assets/recover.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "info": { - "name": "未命名路径", - "type": "collect", - "author": "柒叶子", - "version": "1.0", - "description": "前往周本", - "bgiVersion": "0.35.1" - }, - "positions": [ - - { - "id": 1, - "x":1468.0986328125, - "y":1998.05859375 , - "type": "teleport", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - ] -} \ No newline at end of file diff --git a/repo/js/周本-若陀/main.js b/repo/js/周本-若陀/main.js deleted file mode 100644 index 21f1e351..00000000 --- a/repo/js/周本-若陀/main.js +++ /dev/null @@ -1,83 +0,0 @@ -(async function () { -const food = 'yueliang'; - await sleep(1000); -await pathingScript.runFile("assets/recover.json"); -await sleep(5000); -await pathingScript.runFile("assets/tp.json"); -await sleep(1000); -keyDown("w"); -await sleep(2000); -keyUp("w"); -await sleep(1000); -keyPress("F"); -await sleep(2000); -click(1725, 1020);//单人挑战 -await sleep(2000); -click(1725, 1020);//开始挑战 -await sleep(15000); -keyPress("ESCAPE");//点击任意处 -await sleep(2000); -keyPress("1"); -await sleep(1000);//切回钟离 -keyPress("B");//打开背包 -await sleep(2000); -click(863, 51);//选择食物 -await sleep(1000); -click(170, 1020);//筛选 -await sleep(1000); -click(195, 1020);//重置 -await sleep(1000); -click(110, 110);//输入名字 -await sleep(1000); -for (const char of food) { - keyPress(char); - await sleep(500); -} -keyPress("SPACE"); -await sleep(500); -click(490, 1020);//确认筛选 -await sleep(1000); -click(180, 180);//选择第一个食物 -await sleep(1000); -click(1690, 1015);//使用 -await sleep(1000); -keyPress("ESCAPE"); -await sleep(1500); -keyDown("w"); -await sleep(2000); -keyUp("w"); -await sleep(10000); -keyDown("s"); -await sleep(500); -keyDown("SHIFT"); -await sleep(1000); -keyUp("SHIFT"); -await sleep(500); -keyUp("s"); -await dispatcher.runTask(new SoloTask("AutoFight")); -keyPress("1"); -await sleep(1000);//切回钟离 -keyDown("s"); -await sleep(2400);//再次校准位置 -keyUp("s"); -keyDown("w"); -await sleep(8300); -keyUp("w"); -await sleep(1000); -keyDown("a"); -await sleep(2200); -keyUp("a"); -await sleep(1000); -keyPress("F");//领奖 -await sleep(1000); -click(950, 750);//使用树脂 -await sleep(6000); -click(975, 1000);//退出秘境 -await sleep(1000); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(500); -click(950, 750);//点击确认:避免挑战失败无法退出 -await sleep(3500); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(7500); -})(); diff --git a/repo/js/周本-若陀/manifest.json b/repo/js/周本-若陀/manifest.json deleted file mode 100644 index a8c5c37c..00000000 --- a/repo/js/周本-若陀/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "若陀龙王自动刷取", - "version": "1.1", - "description": "建议队伍:钟离(必须一号位)、芙芙、精通雷神、6命芭芭拉。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,推荐使用战斗脚本(周本队后退版),关闭战斗结束拾取物品和万叶拾取,最后根据队伍大致表现,填入合适的战斗超时时间,(周本队原地版)建议260s,此外周本压力较大,会强制使用美味的月亮派,请提前准备", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/周本-若陀/周本队后退版.txt b/repo/js/周本-若陀/周本队后退版.txt deleted file mode 100644 index c332fac5..00000000 --- a/repo/js/周本-若陀/周本队后退版.txt +++ /dev/null @@ -1,8 +0,0 @@ -钟离 s(2.4),e(hold) -雷电将军 e -芭芭拉 e -钟离 s(2.4),e(hold) -芙宁娜 q,e - - - diff --git a/repo/js/周本-草龙/assets/recover.json b/repo/js/周本-草龙/assets/recover.json deleted file mode 100644 index 326ad3c5..00000000 --- a/repo/js/周本-草龙/assets/recover.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "info": { - "name": "未命名路径", - "type": "collect", - "author": "柒叶子", - "version": "1.0", - "description": "前往周本", - "bgiVersion": "0.35.1" - }, - "positions": [ - - { - "id": 1, - "x":1468.0986328125, - "y":1998.05859375 , - "type": "teleport", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - ] -} \ No newline at end of file diff --git a/repo/js/周本-草龙/main.js b/repo/js/周本-草龙/main.js deleted file mode 100644 index eefb52de..00000000 --- a/repo/js/周本-草龙/main.js +++ /dev/null @@ -1,85 +0,0 @@ -(async function () { -const food = 'yueliang'; - await sleep(1000); -await pathingScript.runFile("assets/recover.json"); -await sleep(5000); -await pathingScript.runFile("assets/tp.json"); -await sleep(1000); -keyDown("w"); -await sleep(2000); -keyUp("w"); -await sleep(1000); -keyPress("F"); -await sleep(2000); -click(1725, 1020);//单人挑战 -await sleep(2000); -click(1725, 1020);//开始挑战 -await sleep(15000); -keyPress("ESCAPE");//点击任意处 -await sleep(2000); -keyPress("1"); -await sleep(1000);//切回钟离 -keyPress("B");//打开背包 -await sleep(2000); -click(863, 51);//选择食物 -await sleep(1000); -click(170, 1020);//筛选 -await sleep(1000); -click(195, 1020);//重置 -await sleep(1000); -click(110, 110);//输入名字 -await sleep(1000); -for (const char of food) { - keyPress(char); - await sleep(500); -} -keyPress("SPACE"); -await sleep(500); -click(490, 1020);//确认筛选 -await sleep(1000); -click(180, 180);//选择第一个食物 -await sleep(1000); -click(1690, 1015);//使用 -await sleep(1000); -keyPress("ESCAPE"); -await sleep(1500); -keyDown("w"); -await sleep(8500); -keyUp("w"); -await sleep(6500); -keyDown("e"); -await sleep(1000);//钟离开盾 -keyUp("e"); -keyDown("a"); -await sleep(2000); -keyUp("a"); -keyDown("w"); -await sleep(3500); -keyUp("w"); -keyDown("d"); -await sleep(3500); -keyUp("d"); -await dispatcher.runTask(new SoloTask("AutoFight")); -await sleep(30000);//等待柱子碎裂 -keyPress("1"); -await sleep(1000);//切回钟离 - -keyDown("s"); -await sleep(6000); -keyUp("s"); -keyDown("w"); -await sleep(4000); -keyUp("w"); -keyPress("F");//领奖 -await sleep(1000); -click(950, 750);//使用树脂 -await sleep(6000); -click(975, 1000);//退出秘境 -await sleep(1000); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(500); -click(950, 750);//点击确认:避免挑战失败无法退出 -await sleep(3500); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(7500); -})(); diff --git a/repo/js/周本-草龙/manifest.json b/repo/js/周本-草龙/manifest.json deleted file mode 100644 index cb0a15b3..00000000 --- a/repo/js/周本-草龙/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "阿佩普周本刷取", - "version": "1.1", - "description": "建议队伍:钟离(必须一号位)、芙芙、火神、6命芭芭拉。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,推荐使用战斗脚本(周本队火神原地版),关闭战斗结束拾取物品和万叶拾取,最后根据队伍大致表现,填入合适的战斗超时时间,(周本队火神原地版)建议260s,此外周本压力较大,会强制使用美味的月亮派,请提前准备", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/周本-草龙/周本队火神原地版.txt b/repo/js/周本-草龙/周本队火神原地版.txt deleted file mode 100644 index fb59357b..00000000 --- a/repo/js/周本-草龙/周本队火神原地版.txt +++ /dev/null @@ -1,8 +0,0 @@ -钟离 wait(2.3),e(hold) -玛薇卡 e -芭芭拉 e -钟离 wait(2.3),e(hold) -芙宁娜 q,e - - - diff --git a/repo/js/周本-雷神/assets/recover.json b/repo/js/周本-雷神/assets/recover.json deleted file mode 100644 index 326ad3c5..00000000 --- a/repo/js/周本-雷神/assets/recover.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "info": { - "name": "未命名路径", - "type": "collect", - "author": "柒叶子", - "version": "1.0", - "description": "前往周本", - "bgiVersion": "0.35.1" - }, - "positions": [ - - { - "id": 1, - "x":1468.0986328125, - "y":1998.05859375 , - "type": "teleport", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - ] -} \ No newline at end of file diff --git a/repo/js/周本-雷神/main.js b/repo/js/周本-雷神/main.js deleted file mode 100644 index d9aca7e4..00000000 --- a/repo/js/周本-雷神/main.js +++ /dev/null @@ -1,72 +0,0 @@ -(async function () { -const food = 'yueliang'; - await sleep(1000); -await pathingScript.runFile("assets/recover.json"); -await sleep(5000); -await pathingScript.runFile("assets/tp.json"); -await sleep(1000); -keyDown("w"); -await sleep(2000); -keyUp("w"); -await sleep(1000); -keyPress("F"); -await sleep(2000); -click(1725, 1020);//单人挑战 -await sleep(2000); -click(1725, 1020);//开始挑战 -await sleep(15000); -keyPress("ESCAPE");//点击任意处 -await sleep(2000); -keyPress("B");//打开背包 -await sleep(2000); -click(863, 51);//选择食物 -await sleep(1000); -click(170, 1020);//筛选 -await sleep(1000); -click(195, 1020);//重置 -await sleep(1000); -click(110, 110);//输入名字 -await sleep(1000); -for (const char of food) { - keyPress(char); - await sleep(500); -} -keyPress("SPACE"); -await sleep(500); -click(490, 1020);//确认筛选 -await sleep(1000); -click(180, 180);//选择第一个食物 -await sleep(1000); -click(1690, 1015);//使用 -await sleep(1000); -keyPress("ESCAPE"); -await sleep(1500); - -keyPress("1"); -await sleep(1000);//切回钟离 -keyDown("s"); -await sleep(1000); -keyUp("s"); -await dispatcher.runTask(new SoloTask("AutoFight")); -keyPress("1"); -await sleep(1000);//切回钟离 -keyDown("s"); -await sleep(2400);//再次校准位置 -keyUp("s"); -keyDown("w"); -await sleep(5200); -keyUp("w"); -await sleep(1000); -keyPress("F");//领奖 -await sleep(1000); -click(950, 750);//使用树脂 -await sleep(6000); -click(975, 1000);//退出秘境 -await sleep(1000); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(500); -click(950, 750);//点击确认:避免挑战失败无法退出 -await sleep(3500); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(7500); -})(); diff --git a/repo/js/周本-雷神/manifest.json b/repo/js/周本-雷神/manifest.json deleted file mode 100644 index d08fe6b1..00000000 --- a/repo/js/周本-雷神/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "雷神周本刷取", - "version": "1.1", - "description": "建议队伍:钟离(必须一号位)、芙芙、精通雷神、6命芭芭拉。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,推荐使用战斗脚本(周本队后退版),关闭战斗结束拾取物品和万叶拾取,最后根据队伍大致表现,填入合适的战斗超时时间,(周本队后退版)建议210s,此外周本压力较大,会强制使用美味的月亮派,请提前准备,如果队伍练度不够,请必须保证有一个六命老芭,不然打不过", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/周本-雷神/周本队后退版.txt b/repo/js/周本-雷神/周本队后退版.txt deleted file mode 100644 index c332fac5..00000000 --- a/repo/js/周本-雷神/周本队后退版.txt +++ /dev/null @@ -1,8 +0,0 @@ -钟离 s(2.4),e(hold) -雷电将军 e -芭芭拉 e -钟离 s(2.4),e(hold) -芙宁娜 q,e - - - diff --git a/repo/js/周本-风魔龙/assets/recover.json b/repo/js/周本-风魔龙/assets/recover.json deleted file mode 100644 index 326ad3c5..00000000 --- a/repo/js/周本-风魔龙/assets/recover.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "info": { - "name": "未命名路径", - "type": "collect", - "author": "柒叶子", - "version": "1.0", - "description": "前往周本", - "bgiVersion": "0.35.1" - }, - "positions": [ - - { - "id": 1, - "x":1468.0986328125, - "y":1998.05859375 , - "type": "teleport", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - ] -} \ No newline at end of file diff --git a/repo/js/周本-风魔龙/manifest.json b/repo/js/周本-风魔龙/manifest.json deleted file mode 100644 index 0938f43b..00000000 --- a/repo/js/周本-风魔龙/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "manifest_version": 1, - "name": "风魔龙自动刷取", - "version": "1.1", - "bgi_version": "0.42.0", - "description": "建议队伍:钟离(必须一号位)、芙芙、精通雷神、6命芭芭拉。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,推荐使用战斗脚本(周本队原地版),关闭战斗结束拾取物品和万叶拾取,最后根据队伍大致表现,填入合适的战斗超时时间,(周本队原地版)建议80s", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/周本-风魔龙/周本队原地版.txt b/repo/js/周本-风魔龙/周本队原地版.txt deleted file mode 100644 index 1f9ef316..00000000 --- a/repo/js/周本-风魔龙/周本队原地版.txt +++ /dev/null @@ -1,8 +0,0 @@ -钟离 wait(2.4),e(hold) -雷电将军 e -芭芭拉 e -钟离 wait(2.4),e(hold) -芙宁娜 q,e - - - diff --git a/repo/js/周本-鲸鱼/assets/recover.json b/repo/js/周本-鲸鱼/assets/recover.json deleted file mode 100644 index 326ad3c5..00000000 --- a/repo/js/周本-鲸鱼/assets/recover.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "info": { - "name": "未命名路径", - "type": "collect", - "author": "柒叶子", - "version": "1.0", - "description": "前往周本", - "bgiVersion": "0.35.1" - }, - "positions": [ - - { - "id": 1, - "x":1468.0986328125, - "y":1998.05859375 , - "type": "teleport", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - ] -} \ No newline at end of file diff --git a/repo/js/周本-鲸鱼/main.js b/repo/js/周本-鲸鱼/main.js deleted file mode 100644 index 0de851fe..00000000 --- a/repo/js/周本-鲸鱼/main.js +++ /dev/null @@ -1,77 +0,0 @@ -(async function () { -const food = 'yueliang'; - await sleep(1000); -await pathingScript.runFile("assets/recover.json"); -await sleep(5000); -await pathingScript.runFile("assets/tp.json"); -await sleep(1000); -keyDown("w"); -await sleep(2000); -keyUp("w"); -await sleep(1000); -keyPress("F"); -await sleep(2000); -click(1725, 1020);//单人挑战 -await sleep(2000); -click(1725, 1020);//开始挑战 -await sleep(15000); -keyPress("ESCAPE");//点击任意处 -await sleep(2000); -keyPress("1"); -await sleep(1000);//切回钟离 -keyPress("B");//打开背包 -await sleep(2000); -click(863, 51);//选择食物 -await sleep(1000); -click(170, 1020);//筛选 -await sleep(1000); -click(195, 1020);//重置 -await sleep(1000); -click(110, 110);//输入名字 -await sleep(1000); -for (const char of food) { - keyPress(char); - await sleep(500); -} -keyPress("SPACE"); -await sleep(500); -click(490, 1020);//确认筛选 -await sleep(1000); -click(180, 180);//选择第一个食物 -await sleep(1000); -click(1690, 1015);//使用 -await sleep(1000); -keyPress("ESCAPE"); -await sleep(1500); -await dispatcher.runTask(new SoloTask("AutoFight")); -await sleep(30000);//等待柱子碎裂 -keyPress("1"); -await sleep(1000);//切回钟离 - -keyDown("w");//居中大法 -keyDown("d"); -await sleep(12500); -keyUp("d"); -await sleep(12500); -keyUp("w"); -keyDown("s"); -await sleep(25000); -keyUp("s"); -keyDown("w"); -await sleep(7400); -keyUp("w"); - -await sleep(1000); -keyPress("F");//领奖 -await sleep(1000); -click(950, 750);//使用树脂 -await sleep(6000); -click(975, 1000);//退出秘境 -await sleep(1000); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(500); -click(950, 750);//点击确认:避免挑战失败无法退出 -await sleep(3500); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(7500); -})(); diff --git a/repo/js/周本-鲸鱼/manifest.json b/repo/js/周本-鲸鱼/manifest.json deleted file mode 100644 index ede1f00e..00000000 --- a/repo/js/周本-鲸鱼/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "鲸鱼周本刷取", - "version": "1.1", - "description": "建议队伍:钟离(必须一号位)、芙芙、精通雷神、6命芭芭拉。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,推荐使用战斗脚本(周本队原地版),关闭战斗结束拾取物品和万叶拾取,最后根据队伍大致表现,填入合适的战斗超时时间,(周本队原地版)建议260s,此外周本压力较大,会强制使用美味的月亮派,请提前准备", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/周本-鲸鱼/周本队原地版.txt b/repo/js/周本-鲸鱼/周本队原地版.txt deleted file mode 100644 index 1f9ef316..00000000 --- a/repo/js/周本-鲸鱼/周本队原地版.txt +++ /dev/null @@ -1,8 +0,0 @@ -钟离 wait(2.4),e(hold) -雷电将军 e -芭芭拉 e -钟离 wait(2.4),e(hold) -芙宁娜 q,e - - - diff --git a/repo/js/北风的王狼自动刷取/assets/前往狼王.json b/repo/js/周本1-王狼/assets/前往狼王.json similarity index 100% rename from repo/js/北风的王狼自动刷取/assets/前往狼王.json rename to repo/js/周本1-王狼/assets/前往狼王.json diff --git a/repo/js/北风的王狼自动刷取/assets/领取奖励.json b/repo/js/周本1-王狼/assets/领取奖励.json similarity index 100% rename from repo/js/北风的王狼自动刷取/assets/领取奖励.json rename to repo/js/周本1-王狼/assets/领取奖励.json diff --git a/repo/js/北风的王狼自动刷取/main.js b/repo/js/周本1-王狼/main.js similarity index 90% rename from repo/js/北风的王狼自动刷取/main.js rename to repo/js/周本1-王狼/main.js index 6b62ff3f..050c38c4 100644 --- a/repo/js/北风的王狼自动刷取/main.js +++ b/repo/js/周本1-王狼/main.js @@ -1,16 +1,16 @@ -(async function () { -await pathingScript.runFile("assets/前往狼王.json"); -await sleep(1000); -keyPress("F"); -await sleep(13000); -await dispatcher.runTask(new SoloTask("AutoFight")); -await sleep(1000); -await pathingScript.runFile("assets/领取奖励.json"); -keyPress("F"); -await sleep(5000); -click(968, 759);//消耗树脂领取 -await sleep(1000); -click(975, 1000);//点击空白区域 -await sleep(1000); -await genshin.returnMainUi(); -})(); +(async function () { + +await pathingScript.runFile("assets/前往狼王.json"); +await sleep(1000); +keyPress("F"); +await sleep(13000); +await dispatcher.runTask(new SoloTask("AutoFight")); +await sleep(1000); +await pathingScript.runFile("assets/领取奖励.json"); +keyPress("F"); +await sleep(1000); +click(968, 759);//消耗树脂领取 +await sleep(5000); +click(975, 1000);//点击空白区域 +await sleep(1000); +})(); diff --git a/repo/js/北风的王狼自动刷取/manifest.json b/repo/js/周本1-王狼/manifest.json similarity index 66% rename from repo/js/北风的王狼自动刷取/manifest.json rename to repo/js/周本1-王狼/manifest.json index 69fbe314..0afcb85b 100644 --- a/repo/js/北风的王狼自动刷取/manifest.json +++ b/repo/js/周本1-王狼/manifest.json @@ -1,8 +1,8 @@ { "manifest_version": 1, "name": "王狼自动刷取", - "version": "1.1", - "description": "建议钟离、芙芙和优质后台(精通雷神、草神等),自动战斗的超时时间可以多填一点,因为大世界战斗可以自动检测结束", + "version": "2.0", + "description": "建议钟离、芙芙和优质后台(精通雷神、草神等),另外看情况更改自动战斗的超时时间", "authors": [ { "name": "柒叶子", @@ -11,4 +11,4 @@ ], "settings_ui": "settings.json", "main": "main.js" -} +} \ No newline at end of file diff --git a/repo/js/周本1-王狼/周本队原地版q.txt b/repo/js/周本1-王狼/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本1-王狼/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本1-王狼/周本队火神原地版.txt b/repo/js/周本1-王狼/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本1-王狼/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/周本10-仆人/assets/box.png b/repo/js/周本10-仆人/assets/box.png new file mode 100644 index 00000000..521895c4 Binary files /dev/null and b/repo/js/周本10-仆人/assets/box.png differ diff --git a/repo/js/周本10-仆人/assets/recover.json b/repo/js/周本10-仆人/assets/recover.json new file mode 100644 index 00000000..a4e55f13 --- /dev/null +++ b/repo/js/周本10-仆人/assets/recover.json @@ -0,0 +1 @@ +{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]} \ No newline at end of file diff --git a/repo/js/周本-仆人/assets/tp.json b/repo/js/周本10-仆人/assets/tp.json similarity index 100% rename from repo/js/周本-仆人/assets/tp.json rename to repo/js/周本10-仆人/assets/tp.json diff --git a/repo/js/周本-仆人/main.js b/repo/js/周本10-仆人/assets/老版本.js similarity index 85% rename from repo/js/周本-仆人/main.js rename to repo/js/周本10-仆人/assets/老版本.js index 2b6bae2d..1c41c1c5 100644 --- a/repo/js/周本-仆人/main.js +++ b/repo/js/周本10-仆人/assets/老版本.js @@ -1,5 +1,4 @@ (async function () { - const food = 'yueliang'; await sleep(1000); await pathingScript.runFile("assets/recover.json"); @@ -72,11 +71,5 @@ await sleep(1000); click(950, 750);//使用树脂 await sleep(6000); click(975, 1000);//退出秘境 -await sleep(1000); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(500); -click(950, 750);//点击确认:避免挑战失败无法退出 -await sleep(3500); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(7500); +await sleep(10000); })(); diff --git a/repo/js/周本10-仆人/main.js b/repo/js/周本10-仆人/main.js new file mode 100644 index 00000000..c2ec900f --- /dev/null +++ b/repo/js/周本10-仆人/main.js @@ -0,0 +1,211 @@ +(async function () {//仆人周本 + +await eatFood();//嗑药 +//吃料理 +async function eatFood(){ +let foodName = settings.foodName ?? 0; +if(foodName){ +log.info("开始吃菜"); + await sleep(1000); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(1000); +inputText(`${foodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +keyPress("ESCAPE"); +await sleep(1500); +}} + +//征讨之花领奖 +const autoNavigateToReward = async () => { + // 定义识别对象 + const boxIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/box.png")); + const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 + + let advanceNum = 0;//前进次数 + //调整为俯视视野 + middleButtonClick(); + await sleep(800); + moveMouseBy(0, 1030); + await sleep(400); + moveMouseBy(0, 920); + await sleep(400); + moveMouseBy(0, 710); + log.info("开始领奖"); + while (true) { + // 1. 优先检查是否已到达领奖点 + let captureRegion = captureGameRegion(); + let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + // 检测到特点文字则结束!!! + if (rewardResult.text == "接触征讨之花") { + log.info("已到达领奖点,检测到文字: " + rewardResult.text); + return; + } + else if(advanceNum > 80){ + throw new Error('前进时间超时'); + } + // 2. 未到达领奖点,则调整视野 + for(let i = 0; i < 100; i++){ + captureRegion = captureGameRegion(); + let iconRes = captureRegion.Find(boxIconRo); + let climbTextArea = captureRegion.DeriveCrop(1808, 1030, 25, 25); + let climbResult = climbTextArea.find(RecognitionObject.ocrThis); + // 检查是否处于攀爬状态 + if (climbResult.isEmpty()){ + log.info("检侧进入攀爬状态,尝试脱离"); + keyPress("x"); + await sleep(1000); + keyDown("a"); + await sleep(800); + keyUp("a"); + keyDown("w"); + await sleep(800); + keyUp("w"); + } + if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) { + advanceNum++; + log.info(`视野已调正,前进第${advanceNum}次`); + break; + } else { + // 小幅度调整 + if(iconRes.y >= 520) moveMouseBy(0, 920); + let adjustAmount = iconRes.x < 920 ? -20 : 20; + let distanceToCenter = Math.abs(iconRes.x - 920); // 计算与920的距离 + let scaleFactor = Math.max(1, Math.floor(distanceToCenter / 50)); // 根据距离缩放,最小为1 + let adjustAmount2 = iconRes.y < 540 ? scaleFactor : 10; + moveMouseBy(adjustAmount * adjustAmount2, 0); + await sleep(100); + } + if(i > 97) throw new Error('视野调整超时'); + } + // 3. 前进一小步 + keyDown("w"); + await sleep(800); + keyUp("w"); + await sleep(100); // 等待角色移动稳定 + } +} + +//执行战斗并检测结束 +async function autoFightAndEndDetection() { + // 定义两个检测区域 + const region1 = RecognitionObject.ocr(750, 0, 420, 110);//区域一 BOSS名称 + const region2 = RecognitionObject.ocr(840, 935, 230, 40);//区域二 成功倒计时 + const region3 = RecognitionObject.ocr(1690, 230, 75, 350);//区域三 队伍名称 + let challengeTime = 0; + let challengeNum = 0; + //12分钟兜底 + while (challengeTime < 6000) { + // 捕获游戏区域 + let capture = captureGameRegion(); + // 检测两个区域的OCR结果 + let res1 = capture.find(region1); + let res2 = capture.find(region2); + let res3 = capture.find(region3); + let hasText1 = !res1.isEmpty() && res1.text.trim().length > 0; + let hasText2 = !res2.isEmpty() && res2.text.trim().length > 0; + let hasText3 = !res3.isEmpty() && res3.text.trim().length > 0; + // 情况1: 区域1有文字 且 区域2无文字 且 区域3有文字 → 执行AutoFight + if (hasText1 && !hasText2 && hasText3) { + challengeNum++; + await sleep(500);//避免切人冷却,导致角色识别失败 + log.info(`执行第${challengeNum}次战斗`); + challengeTime = challengeTime + 205; + + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况2: 区域2有文字 且 区域1无文字 且 区域3有文字 → 结束循环 + else if (hasText2 && !hasText1 && hasText3) { + log.info("检测到挑战成功"); + break; + } + // 情况3: 区域2无文字区域1无文字区域3有文字 →BOSS二阶段,需要移动触发 + else if (!hasText2 && !hasText1 && hasText3) { + log.info("检测到BOSS进入二阶段"); + keyDown("w"); + await sleep(1000); + keyDown("VK_SHIFT"); + await sleep(200); + keyUp("VK_SHIFT"); + await sleep(200); + keyDown("VK_SHIFT"); + await sleep(200); + keyUp("VK_SHIFT"); + keyUp("w"); + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况4: 三个区域均无文字,可能处于转场动画,尝试点击快进 + else if (!hasText1 && !hasText2 && !hasText3){ + log.info("进入过场动画尝试快进"); + await sleep(400); + click(1765, 55); + await sleep(400); + click(1765, 55); + await sleep(1000); + } + + challengeTime = challengeTime + 1; + // 每次检测间隔100毫秒,避免CPU占用过高 + await sleep(100); + } +} + + + +//通用:前往副本(副本外) +await sleep(1000); +await pathingScript.runFile("assets/recover.json"); +await sleep(5000); +await pathingScript.runFile("assets/tp.json"); +await sleep(1000); +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(1000); +keyPress("F"); +await sleep(2000); +click(1725, 1020);//单人挑战 +await sleep(300); +click(1180, 760);//队伍等级偏低、体力不够可能会出弹窗 +await sleep(2000); +click(1725, 1020);//开始挑战 +await sleep(15000); + +//副本内前往BOSS处 +click(960, 810);//点击任意处 +await sleep(2000); +await eatFood();//嗑药 +keyPress("1"); +await sleep(1000);//切回固定行走位 +keyDown("w"); +await sleep(9200); +keyUp("w"); + +//战斗和领奖 + +await autoFightAndEndDetection();//一直战斗直到检测到结束 +await autoNavigateToReward();//前往地脉之花 + +await sleep(1000); +keyPress("F");//领奖 +await sleep(1000); +click(950, 750);//使用树脂 +await sleep(6000); +click(975, 1000);//退出秘境 +await sleep(10000); + +})(); diff --git a/repo/js/周本10-仆人/manifest.json b/repo/js/周本10-仆人/manifest.json new file mode 100644 index 00000000..a381696e --- /dev/null +++ b/repo/js/周本10-仆人/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "仆人周本自动刷取", + "version": "2.0", + "description": "需0.44.6及以上版本,兼容所有正常队伍及战斗策略,但还是建议在JS设置中选择合适的防御料理(推荐骇浪派)。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,最后根据战斗脚本一次循环的时间,在战斗超时中填入,比如周本原地版q是14s,看情况可以多加一秒,另外搭配一条龙领奖无树脂脚本使用体验更佳哟。演示视频https://www.bilibili.com/video/BV1cpGCz6EWN/?vd_source=9dfaf88af48ecc0ff95a41f1145af7a2。", + "authors": [ + { + "name": "柒叶子", + "link": "https://github.com/511760049" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/周本10-仆人/settings.json b/repo/js/周本10-仆人/settings.json new file mode 100644 index 00000000..d70d6506 --- /dev/null +++ b/repo/js/周本10-仆人/settings.json @@ -0,0 +1,7 @@ +[ + { + "name": "foodName", + "type": "input-text", + "label": "请输入料理的正确名称 " + }, + ] \ No newline at end of file diff --git a/repo/js/周本10-仆人/周本队原地版q.txt b/repo/js/周本10-仆人/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本10-仆人/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本10-仆人/周本队火神原地版.txt b/repo/js/周本10-仆人/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本10-仆人/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/周本2-风魔龙/assets/recover.json b/repo/js/周本2-风魔龙/assets/recover.json new file mode 100644 index 00000000..a4e55f13 --- /dev/null +++ b/repo/js/周本2-风魔龙/assets/recover.json @@ -0,0 +1 @@ +{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]} \ No newline at end of file diff --git a/repo/js/周本-风魔龙/assets/tp.json b/repo/js/周本2-风魔龙/assets/tp.json similarity index 100% rename from repo/js/周本-风魔龙/assets/tp.json rename to repo/js/周本2-风魔龙/assets/tp.json diff --git a/repo/js/周本-风魔龙/main.js b/repo/js/周本2-风魔龙/assets/老版本.js similarity index 75% rename from repo/js/周本-风魔龙/main.js rename to repo/js/周本2-风魔龙/assets/老版本.js index 6fca53ef..9e590903 100644 --- a/repo/js/周本-风魔龙/main.js +++ b/repo/js/周本2-风魔龙/assets/老版本.js @@ -1,4 +1,7 @@ + (async function () { + + await sleep(1000); await pathingScript.runFile("assets/recover.json"); await sleep(5000); @@ -19,6 +22,7 @@ keyDown("w"); await sleep(4000); keyUp("w"); await dispatcher.runTask(new SoloTask("AutoFight")); + await sleep(30000);//等待柱子碎裂 keyPress("1"); await sleep(1000);//切回钟离 @@ -35,11 +39,5 @@ await sleep(1000); click(950, 750);//使用树脂 await sleep(6000); click(975, 1000);//退出秘境 -await sleep(1000); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(500); -click(950, 750);//点击确认:避免挑战失败无法退出 -await sleep(3500); -keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 -await sleep(7500); +await sleep(10000); })(); diff --git a/repo/js/周本2-风魔龙/main.js b/repo/js/周本2-风魔龙/main.js new file mode 100644 index 00000000..2cc609c8 --- /dev/null +++ b/repo/js/周本2-风魔龙/main.js @@ -0,0 +1,83 @@ + +(async function () { + + await sleep(1000); +await pathingScript.runFile("assets/recover.json"); +await sleep(5000); +await pathingScript.runFile("assets/tp.json"); +await sleep(1000); +keyDown("w"); +await sleep(2000); +keyUp("w"); +keyPress("F"); +await sleep(9000); +click(1725, 1020);//单人挑战 +await sleep(2000); +click(1725, 1020);//开始挑战 +await sleep(15000); +keyPress("1"); +await sleep(1000);//切回钟离 +keyDown("w"); +await sleep(4000); +keyUp("w"); + +/** + * 根据两个区域的OCR检测结果执行不同操作的循环函数 + */ +async function autoFightAndEndDetection() { + // 定义两个检测区域 + const region1 = RecognitionObject.ocr(750, 0, 420, 110);//区域一 BOSS名称 + const region2 = RecognitionObject.ocr(840, 935, 230, 40);//区域二 成功倒计时 + const region3 = RecognitionObject.ocr(1690, 230, 75, 350);//区域三 队伍名称 + let challengeTime = 0; + let challengeNum = 0; + //12分钟兜底 + while (challengeTime < 1200) { + // 捕获游戏区域 + let capture = captureGameRegion(); + // 检测两个区域的OCR结果 + let res1 = capture.find(region1); + let res2 = capture.find(region2); + let res3 = capture.find(region3); + let hasText1 = !res1.isEmpty() && res1.text.trim().length > 0; + let hasText2 = !res2.isEmpty() && res2.text.trim().length > 0; + let hasText3 = !res3.isEmpty() && res3.text.trim().length > 0; + // 情况1: 区域1有文字 且 区域2无文字 且 区域3有文字 → 执行AutoFight + if (hasText1 && !hasText2 && hasText3) { + challengeNum++; + log.info(`执行第${challengeNum}次战斗`); + challengeTime = challengeTime + 40; + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况2: 区域2有文字 且 区域1无文字 且 区域3有文字 → 结束循环 + else if (hasText2 && !hasText1 && hasText3) { + log.info("检测到挑战成功"); + break; + } + // 其他情况: 什么都不做 + challengeTime = challengeTime + 1; + // 每次检测间隔500毫秒,避免CPU占用过高 + await sleep(500); + } +} +await autoFightAndEndDetection();//一直战斗直到检测到结束 + +log.info(`等待柱子碎裂`); +await sleep(30000);//等待柱子碎裂 +keyPress("1"); +await sleep(1000);//切回钟离 +log.info(`开始领奖`); +keyDown("w"); +await sleep(5000); +keyUp("w"); +keyDown("s"); +await sleep(1400); +keyUp("s"); +await sleep(1000); +keyPress("F");//领奖 +await sleep(1000); +click(950, 750);//使用树脂 +await sleep(6000); +click(975, 1000);//退出秘境 +await sleep(10000); +})(); diff --git a/repo/js/周本2-风魔龙/manifest.json b/repo/js/周本2-风魔龙/manifest.json new file mode 100644 index 00000000..a45fada5 --- /dev/null +++ b/repo/js/周本2-风魔龙/manifest.json @@ -0,0 +1,15 @@ +{ + "manifest_version": 1, + "name": "风魔龙自动刷取", + "version": "2.0", + "bgi_version": "0.42.0", + "description": "需0.44.6及以上版本,配队刚需芙芙等大范围索敌角色,保证战斗脚本没有任何的转向和移动应该可以正常领取。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,最后根据战斗脚本一次循环的时间,在战斗超时中填入,比如周本原地版q是14s,建议可以比正常单轮时间多个1s,另外搭配一条龙领奖无树脂脚本使用体验更佳哟。演示视频https://www.bilibili.com/video/BV1cpGCz6EWN/?vd_source=9dfaf88af48ecc0ff95a41f1145af7a2。", + "authors": [ + { + "name": "柒叶子", + "link": "https://github.com/511760049" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/周本2-风魔龙/周本队原地版q.txt b/repo/js/周本2-风魔龙/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本2-风魔龙/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本2-风魔龙/周本队火神原地版.txt b/repo/js/周本2-风魔龙/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本2-风魔龙/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/周本3-公子/assets/recover.json b/repo/js/周本3-公子/assets/recover.json new file mode 100644 index 00000000..a4e55f13 --- /dev/null +++ b/repo/js/周本3-公子/assets/recover.json @@ -0,0 +1 @@ +{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]} \ No newline at end of file diff --git a/repo/js/周本-公子/assets/tp.json b/repo/js/周本3-公子/assets/tp.json similarity index 100% rename from repo/js/周本-公子/assets/tp.json rename to repo/js/周本3-公子/assets/tp.json diff --git a/repo/js/周本-公子/main.js b/repo/js/周本3-公子/assets/老版本.js similarity index 99% rename from repo/js/周本-公子/main.js rename to repo/js/周本3-公子/assets/老版本.js index 1984f0d3..8db186ba 100644 --- a/repo/js/周本-公子/main.js +++ b/repo/js/周本3-公子/assets/老版本.js @@ -64,4 +64,5 @@ click(950, 750);//点击确认:避免挑战失败无法退出 await sleep(3500); keyPress("ESCAPE");//退出秘境:避免挑战失败无法退出 await sleep(7500); + })(); diff --git a/repo/js/周本3-公子/main.js b/repo/js/周本3-公子/main.js new file mode 100644 index 00000000..117cc3fa --- /dev/null +++ b/repo/js/周本3-公子/main.js @@ -0,0 +1,164 @@ +(async function () { + +/** + * 根据两个区域的OCR检测结果执行不同操作的循环函数 + */ +async function autoFightAndEndDetection() { + // 定义两个检测区域 + const region1 = RecognitionObject.ocr(750, 0, 420, 110);//区域一 BOSS名称 + const region2 = RecognitionObject.ocr(840, 935, 230, 40);//区域二 成功倒计时 + const region3 = RecognitionObject.ocr(1690, 230, 75, 350);//区域三 队伍名称 + let challengeTime = 0; + let challengeNum = 0; + //12分钟兜底 + while (challengeTime < 1200) { + // 捕获游戏区域 + let capture = captureGameRegion(); + // 检测两个区域的OCR结果 + let res1 = capture.find(region1); + let res2 = capture.find(region2); + let res3 = capture.find(region3); + let hasText1 = !res1.isEmpty() && res1.text.trim().length > 0; + let hasText2 = !res2.isEmpty() && res2.text.trim().length > 0; + let hasText3 = !res3.isEmpty() && res3.text.trim().length > 0; + // 情况1: 区域1有文字 且 区域2无文字 且 区域3有文字 → 执行AutoFight + if (hasText1 && !hasText2 && hasText3) { + keyDown("s"); + await sleep(1800); + keyUp("s"); + challengeNum++; + log.info(`执行第${challengeNum}次战斗`); + challengeTime = challengeTime + 40; + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况2: 区域2有文字 且 区域1无文字 且 区域3有文字 → 结束循环 + else if (hasText2 && !hasText1 && hasText3) { + log.info("检测到挑战成功"); + break; + } + // 情况3: 区域2无文字区域1无文字区域3有文字 →BOSS二阶段,需要移动触发 + else if (!hasText2 && !hasText1 && hasText3) { + log.info("检测到BOSS进入二阶段"); + keyDown("s"); + await sleep(1000); + keyUp("s"); + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 其他情况: 可能处于转场动画,尝试点击快进 + else { + log.info("进入过场动画尝试快进"); + await sleep(400); + click(1765, 55); + await sleep(400); + click(1765, 55); + await sleep(400); + click(1765, 55); + } + + challengeTime = challengeTime + 1; + // 每次检测间隔500毫秒,避免CPU占用过高 + await sleep(500); + } +} + + +//征讨之花领奖(无图标前进检测) +const autoNavigateToReward = async () => { + const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 + let advanceNum = 0; + while (true) { + // 1. 优先检查是否已到达领奖点 + let captureRegion = captureGameRegion(); + let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + // 检测到特点文字则结束!!! + if (rewardResult.text == "接触征讨之花") { + log.info("已到达领奖点,检测到文字: " + rewardResult.text); + return; + } + else if(advanceNum > 30){ + throw new Error('前进时间超时'); + } + // 前进一小步 + keyDown("w"); + await sleep(700); + keyUp("w"); + await sleep(100); // 等待角色移动稳定 + } +} + +//吃料理 +async function eatFood() { +let foodName = settings.foodName ?? 0; +if(foodName){ +log.info("开始吃菜"); +await sleep(1000); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(1000); +inputText(`${foodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +keyPress("ESCAPE"); +await sleep(1500); +}} + + +//通用:前往副本(副本外) +await sleep(1000); +await pathingScript.runFile("assets/recover.json"); +await sleep(5000); +await pathingScript.runFile("assets/tp.json"); +await sleep(1000); +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(1000); +keyPress("F"); +await sleep(2000); +click(1725, 1020);//单人挑战 +await sleep(300); +click(1180, 760);//队伍等级偏低、体力不够可能会出弹窗 +await sleep(2000); +click(1725, 1020);//开始挑战 +await sleep(15000); +keyPress("1"); +await sleep(1000);//切回钟离 + +//副本内前往BOSS处 +keyDown("s"); +await sleep(2400); +keyUp("s"); + +await autoFightAndEndDetection();//一直战斗直到检测到结束 + +keyPress("1"); +await sleep(1000);//切回钟离 +keyDown("s"); +await sleep(2400);//再次校准位置 +keyUp("s"); +await autoNavigateToReward();//前往地脉之花 + + + +await sleep(1000); +keyPress("F");//领奖 +await sleep(1000); +click(950, 750);//使用树脂 +await sleep(6000); +click(975, 1000);//退出秘境 +await sleep(10000); + +})(); diff --git a/repo/js/周本3-公子/manifest.json b/repo/js/周本3-公子/manifest.json new file mode 100644 index 00000000..798cfb1c --- /dev/null +++ b/repo/js/周本3-公子/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "黄金屋自动刷取", + "version": "2.0", + "description": "需0.44.6及以上版本,兼容大部分正常队伍及战斗策略(禁止大幅度转向和移动技能龙王转圈、纳西达转圈、夜兰e……),但还是建议在JS设置中选择合适的防御料理(推荐骇浪派)。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,最后根据战斗脚本一次循环的时间,在战斗超时中填入,比如周本原地版q是14s,建议可以比正常单轮时间多个1s,另外搭配一条龙领奖无树脂脚本使用体验更佳哟。演示视频https://www.bilibili.com/video/BV1cpGCz6EWN/?vd_source=9dfaf88af48ecc0ff95a41f1145af7a2。", + "authors": [ + { + "name": "柒叶子", + "link": "https://github.com/511760049" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/周本3-公子/settings.json b/repo/js/周本3-公子/settings.json new file mode 100644 index 00000000..d70d6506 --- /dev/null +++ b/repo/js/周本3-公子/settings.json @@ -0,0 +1,7 @@ +[ + { + "name": "foodName", + "type": "input-text", + "label": "请输入料理的正确名称 " + }, + ] \ No newline at end of file diff --git a/repo/js/周本3-公子/周本队原地版q.txt b/repo/js/周本3-公子/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本3-公子/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本3-公子/周本队火神原地版.txt b/repo/js/周本3-公子/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本3-公子/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/周本4-若陀/assets/box.png b/repo/js/周本4-若陀/assets/box.png new file mode 100644 index 00000000..521895c4 Binary files /dev/null and b/repo/js/周本4-若陀/assets/box.png differ diff --git a/repo/js/周本4-若陀/assets/recover.json b/repo/js/周本4-若陀/assets/recover.json new file mode 100644 index 00000000..a4e55f13 --- /dev/null +++ b/repo/js/周本4-若陀/assets/recover.json @@ -0,0 +1 @@ +{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]} \ No newline at end of file diff --git a/repo/js/周本-若陀/assets/tp.json b/repo/js/周本4-若陀/assets/tp.json similarity index 100% rename from repo/js/周本-若陀/assets/tp.json rename to repo/js/周本4-若陀/assets/tp.json diff --git a/repo/js/周本-散兵/main.js b/repo/js/周本4-若陀/assets/老版本.js similarity index 90% rename from repo/js/周本-散兵/main.js rename to repo/js/周本4-若陀/assets/老版本.js index 43a0faca..6002e222 100644 --- a/repo/js/周本-散兵/main.js +++ b/repo/js/周本4-若陀/assets/老版本.js @@ -43,17 +43,16 @@ click(1690, 1015);//使用 await sleep(1000); keyPress("ESCAPE"); await sleep(1500); - keyDown("w"); -await sleep(10000); +await sleep(2000); keyUp("w"); -await sleep(7000); +await sleep(10000); keyDown("s"); -await sleep(200); +await sleep(500); keyDown("SHIFT"); -await sleep(300); +await sleep(1000); keyUp("SHIFT"); -await sleep(200); +await sleep(500); keyUp("s"); await dispatcher.runTask(new SoloTask("AutoFight")); keyPress("1"); @@ -62,9 +61,13 @@ keyDown("s"); await sleep(2400);//再次校准位置 keyUp("s"); keyDown("w"); -await sleep(7500); +await sleep(8300); keyUp("w"); await sleep(1000); +keyDown("a"); +await sleep(2200); +keyUp("a"); +await sleep(1000); keyPress("F");//领奖 await sleep(1000); click(950, 750);//使用树脂 diff --git a/repo/js/周本4-若陀/main.js b/repo/js/周本4-若陀/main.js new file mode 100644 index 00000000..43d712c1 --- /dev/null +++ b/repo/js/周本4-若陀/main.js @@ -0,0 +1,209 @@ +(async function () {//坨子 + +//吃料理 +async function eatFood() { +let foodName = settings.foodName ?? 0; +if(foodName){ +log.info("开始吃菜"); +await sleep(1000); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(1000); +inputText(`${foodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +keyPress("ESCAPE"); +await sleep(1500); +}} + +//征讨之花领奖 +const autoNavigateToReward = async () => { + // 定义识别对象 + const boxIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/box.png")); + const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 + + let advanceNum = 0;//前进次数 + //调整为俯视视野 + middleButtonClick(); + await sleep(800); + moveMouseBy(0, 1030); + await sleep(400); + moveMouseBy(0, 920); + await sleep(400); + moveMouseBy(0, 710); + log.info("开始领奖"); + while (true) { + // 1. 优先检查是否已到达领奖点 + let captureRegion = captureGameRegion(); + let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + // 检测到特点文字则结束!!! + if (rewardResult.text == "接触征讨之花") { + log.info("已到达领奖点,检测到文字: " + rewardResult.text); + return; + } + else if(advanceNum > 80){ + throw new Error('前进时间超时'); + } + // 2. 未到达领奖点,则调整视野 + for(let i = 0; i < 100; i++){ + captureRegion = captureGameRegion(); + let iconRes = captureRegion.Find(boxIconRo); + let climbTextArea = captureRegion.DeriveCrop(1808, 1030, 25, 25); + let climbResult = climbTextArea.find(RecognitionObject.ocrThis); + // 检查是否处于攀爬状态 + if (climbResult.isEmpty()){ + log.info("检侧进入攀爬状态,尝试脱离"); + keyPress("x"); + await sleep(1000); + keyDown("a"); + await sleep(800); + keyUp("a"); + keyDown("w"); + await sleep(800); + keyUp("w"); + } + if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) { + advanceNum++; + log.info(`视野已调正,前进第${advanceNum}次`); + break; + } else { + // 小幅度调整 + if(iconRes.y >= 520) moveMouseBy(0, 920); + let adjustAmount = iconRes.x < 920 ? -20 : 20; + let distanceToCenter = Math.abs(iconRes.x - 920); // 计算与920的距离 + let scaleFactor = Math.max(1, Math.floor(distanceToCenter / 50)); // 根据距离缩放,最小为1 + let adjustAmount2 = iconRes.y < 540 ? scaleFactor : 10; + moveMouseBy(adjustAmount * adjustAmount2, 0); + await sleep(100); + } + if(i > 97) throw new Error('视野调整超时'); + } + // 3. 前进一小步 + keyDown("w"); + await sleep(800); + keyUp("w"); + await sleep(100); // 等待角色移动稳定 + } +} + +//执行战斗并检测结束 +async function autoFightAndEndDetection() { + // 定义两个检测区域 + const region1 = RecognitionObject.ocr(750, 0, 420, 110);//区域一 BOSS名称 + const region2 = RecognitionObject.ocr(840, 935, 230, 40);//区域二 成功倒计时 + const region3 = RecognitionObject.ocr(1690, 230, 75, 350);//区域三 队伍名称 + let challengeTime = 0; + let challengeNum = 0; + //12分钟兜底 + while (challengeTime < 6000) { + // 捕获游戏区域 + let capture = captureGameRegion(); + // 检测两个区域的OCR结果 + let res1 = capture.find(region1); + let res2 = capture.find(region2); + let res3 = capture.find(region3); + let hasText1 = !res1.isEmpty() && res1.text.trim().length > 0; + let hasText2 = !res2.isEmpty() && res2.text.trim().length > 0; + let hasText3 = !res3.isEmpty() && res3.text.trim().length > 0; + // 情况1: 区域1有文字 且 区域2无文字 且 区域3有文字 → 执行AutoFight + if (hasText1 && !hasText2 && hasText3) { + challengeNum++; + await sleep(500);//避免切人冷却,导致角色识别失败 + log.info(`执行第${challengeNum}次战斗`); + challengeTime = challengeTime + 205; + + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况2: 区域2有文字 且 区域1无文字 且 区域3有文字 → 结束循环 + else if (hasText2 && !hasText1 && hasText3) { + log.info("检测到挑战成功"); + break; + } + // 情况3: 区域2无文字区域1无文字区域3有文字 →BOSS二阶段,需要移动触发 + else if (!hasText2 && !hasText1 && hasText3) { +/* + log.info("检测到BOSS进入二阶段"); + await dispatcher.runTask(new SoloTask("AutoFight")); +*/ + } + // 情况4: 三个区域均无文字,可能处于转场动画,尝试点击快进 + else if (!hasText1 && !hasText2 && !hasText3){ +/* + log.info("进入过场动画尝试快进"); + await sleep(400); + click(1765, 55); + await sleep(400); + click(1765, 55); +*/ + } + + challengeTime = challengeTime + 1; + // 每次检测间隔100毫秒,避免CPU占用过高 + await sleep(100); + } +} + + +//通用:前往副本(副本外) +await sleep(1000); +await pathingScript.runFile("assets/recover.json"); +await sleep(5000); +await pathingScript.runFile("assets/tp.json"); +await sleep(1000); +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(1000); +keyPress("F"); +await sleep(2000); +click(1725, 1020);//单人挑战 +await sleep(300); +click(1180, 760);//队伍等级偏低、体力不够可能会出弹窗 +await sleep(2000); +click(1725, 1020);//开始挑战 +await sleep(15000); + +//副本内前往BOSS处 +click(960, 810);//点击任意处 +await sleep(2000); +await eatFood();//嗑药 +keyPress("1"); +await sleep(1000);//切回固定行走位 +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(10000); +keyDown("s"); +await sleep(500); +keyDown("SHIFT"); +await sleep(1000); +keyUp("SHIFT"); +await sleep(500); +keyUp("s"); + +//战斗和领奖 +await autoFightAndEndDetection();//一直战斗直到检测到结束 +await autoNavigateToReward();//前往地脉之花 + + +await sleep(1000); +keyPress("F");//领奖 +await sleep(1000); +click(950, 750);//使用树脂 +await sleep(6000); +click(975, 1000);//退出秘境 +await sleep(10000); +})(); diff --git a/repo/js/周本4-若陀/manifest.json b/repo/js/周本4-若陀/manifest.json new file mode 100644 index 00000000..02faf7d1 --- /dev/null +++ b/repo/js/周本4-若陀/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "若陀龙王自动刷取", + "version": "2.0", + "description": "需0.44.6及以上版本,兼容所有正常队伍及战斗策略,但还是建议在JS设置中选择合适的防御料理(推荐骇浪派)。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,最后根据战斗脚本一次循环的时间,在战斗超时中填入,比如周本原地版q是14s,看情况可以多加一秒,另外搭配一条龙领奖无树脂脚本使用体验更佳哟。演示视频https://www.bilibili.com/video/BV1cpGCz6EWN/?vd_source=9dfaf88af48ecc0ff95a41f1145af7a2。", + "authors": [ + { + "name": "柒叶子", + "link": "https://github.com/511760049" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/周本4-若陀/settings.json b/repo/js/周本4-若陀/settings.json new file mode 100644 index 00000000..d70d6506 --- /dev/null +++ b/repo/js/周本4-若陀/settings.json @@ -0,0 +1,7 @@ +[ + { + "name": "foodName", + "type": "input-text", + "label": "请输入料理的正确名称 " + }, + ] \ No newline at end of file diff --git a/repo/js/周本4-若陀/周本队原地版q.txt b/repo/js/周本4-若陀/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本4-若陀/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本4-若陀/周本队火神原地版.txt b/repo/js/周本4-若陀/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本4-若陀/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/周本5-女士/assets/recover.json b/repo/js/周本5-女士/assets/recover.json new file mode 100644 index 00000000..a4e55f13 --- /dev/null +++ b/repo/js/周本5-女士/assets/recover.json @@ -0,0 +1 @@ +{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]} \ No newline at end of file diff --git a/repo/js/周本-女士/assets/tp.json b/repo/js/周本5-女士/assets/tp.json similarity index 100% rename from repo/js/周本-女士/assets/tp.json rename to repo/js/周本5-女士/assets/tp.json diff --git a/repo/js/周本5-女士/main.js b/repo/js/周本5-女士/main.js new file mode 100644 index 00000000..9b93226a --- /dev/null +++ b/repo/js/周本5-女士/main.js @@ -0,0 +1,176 @@ +(async function () {//女士 + +//吃料理 +async function eatFood() { +let foodName = settings.foodName ?? 0; +if(foodName){ +log.info("开始吃菜"); +await sleep(1000); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(1000); +inputText(`${foodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +keyPress("ESCAPE"); +await sleep(1500); +}} + +//征讨之花领奖(无图标前进检测) +const autoNavigateToReward = async () => { + const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 + let advanceNum = 0; + while (true) { + // 1. 优先检查是否已到达领奖点 + let captureRegion = captureGameRegion(); + let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + // 检测到特点文字则结束!!! + if (rewardResult.text == "接触征讨之花") { + log.info("已到达领奖点,检测到文字: " + rewardResult.text); + return; + } + else if(advanceNum > 30){ + throw new Error('前进时间超时'); + } + // 前进一小步 + keyDown("w"); + await sleep(700); + keyUp("w"); + await sleep(100); // 等待角色移动稳定 + } +} + +//执行战斗并检测结束 +async function autoFightAndEndDetection() { + // 定义两个检测区域 + const region1 = RecognitionObject.ocr(750, 0, 420, 110);//区域一 BOSS名称 + const region2 = RecognitionObject.ocr(840, 935, 230, 40);//区域二 成功倒计时 + const region3 = RecognitionObject.ocr(1690, 230, 75, 350);//区域三 队伍名称 + let challengeTime = 0; + let challengeNum = 0; + //12分钟兜底 + while (challengeTime < 6000) { + // 捕获游戏区域 + let capture = captureGameRegion(); + // 检测两个区域的OCR结果 + let res1 = capture.find(region1); + let res2 = capture.find(region2); + let res3 = capture.find(region3); + let hasText1 = !res1.isEmpty() && res1.text.trim().length > 0; + let hasText2 = !res2.isEmpty() && res2.text.trim().length > 0; + let hasText3 = !res3.isEmpty() && res3.text.trim().length > 0; + // 情况1: 区域1有文字 且 区域2无文字 且 区域3有文字 → 执行AutoFight + if (hasText1 && !hasText2 && hasText3) { + challengeNum++; + keyDown("s"); + await sleep(1200); + keyUp("s"); + await sleep(500);//避免切人冷却,导致角色识别失败 + log.info(`执行第${challengeNum}次战斗`); + challengeTime = challengeTime + 205; + + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况2: 区域2有文字 且 区域1无文字 且 区域3有文字 → 结束循环 + else if (hasText2 && !hasText1 && hasText3) { + log.info("检测到挑战成功"); + break; + } + // 情况3: 区域2无文字区域1无文字区域3有文字 →BOSS二阶段,需要移动触发 + else if (!hasText2 && !hasText1 && hasText3) { + log.info("检测到BOSS进入二阶段"); + keyDown("s"); + await sleep(2500); + keyUp("s"); + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况4: 三个区域均无文字,可能处于转场动画,尝试点击快进 + else if (!hasText1 && !hasText2 && !hasText3){ + log.info("进入过场动画尝试快进"); + await sleep(400); + click(1765, 55); + await sleep(400); + click(1765, 55); + } + + challengeTime = challengeTime + 1; + // 每次检测间隔100毫秒,避免CPU占用过高 + await sleep(100); + } +} + + +//通用:前往副本(副本外) +await sleep(1000); +await pathingScript.runFile("assets/recover.json"); +await sleep(5000); +await pathingScript.runFile("assets/tp.json"); +await sleep(1000); +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(1000); +keyPress("F"); +await sleep(2000); +click(1725, 1020);//单人挑战 +await sleep(300); +click(1180, 760);//队伍等级偏低、体力不够可能会出弹窗 +await sleep(2000); +click(1725, 1020);//开始挑战 +await sleep(15000); + +//副本内前往BOSS处 +click(960, 810);//点击任意处 +await sleep(2000); +await eatFood();//嗑药 +keyPress("1"); +await sleep(1000);//切回固定行走位 +keyDown("w"); +await sleep(1500); +keyUp("w"); +await sleep(8500); +keyDown("s"); +await sleep(200); +keyDown("SHIFT"); +await sleep(300); +keyUp("SHIFT"); +await sleep(200); +keyUp("s"); + +//战斗和领奖 +await autoFightAndEndDetection();//一直战斗直到检测到结束 +//走到角落对准身位 +await sleep(4000); +keyDown("s"); +await sleep(4000); +keyUp("s"); + +await sleep(4000); +keyDown("a"); +await sleep(300); +keyUp("a"); +await autoNavigateToReward();//前往地脉之花 + +await sleep(1000); +keyPress("F");//领奖 +await sleep(1000); +click(950, 750);//使用树脂 +await sleep(6000); +click(975, 1000);//退出秘境 +await sleep(10000); + + +})(); diff --git a/repo/js/周本5-女士/manifest.json b/repo/js/周本5-女士/manifest.json new file mode 100644 index 00000000..91b9a0ea --- /dev/null +++ b/repo/js/周本5-女士/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "女士周本刷取", + "version": "2.0", + "description": "需0.44.6及以上版本,兼容大部分正常队伍及战斗策略(禁止大幅度转向和移动技能龙王转圈、纳西达转圈、夜兰e……),但还是建议在JS设置中选择合适的防御料理(推荐骇浪派)。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,最后根据战斗脚本一次循环的时间,在战斗超时中填入,比如周本火神原地版是28s,建议可以比正常单轮时间多个1s,另外搭配一条龙领奖无树脂脚本使用体验更佳哟。演示视频https://www.bilibili.com/video/BV1cpGCz6EWN/?vd_source=9dfaf88af48ecc0ff95a41f1145af7a2。", + "authors": [ + { + "name": "柒叶子", + "link": "https://github.com/511760049" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/周本5-女士/settings.json b/repo/js/周本5-女士/settings.json new file mode 100644 index 00000000..5c910b03 --- /dev/null +++ b/repo/js/周本5-女士/settings.json @@ -0,0 +1,8 @@ +[ + { + "name": "foodName", + "type": "input-text", + "label": "请输入增益料理的正确名称 " + }, + + ] \ No newline at end of file diff --git a/repo/js/周本5-女士/周本队原地版q.txt b/repo/js/周本5-女士/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本5-女士/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本5-女士/周本队火神原地版.txt b/repo/js/周本5-女士/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本5-女士/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/周本6-雷神/assets/recover.json b/repo/js/周本6-雷神/assets/recover.json new file mode 100644 index 00000000..a4e55f13 --- /dev/null +++ b/repo/js/周本6-雷神/assets/recover.json @@ -0,0 +1 @@ +{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]} \ No newline at end of file diff --git a/repo/js/周本-雷神/assets/tp.json b/repo/js/周本6-雷神/assets/tp.json similarity index 100% rename from repo/js/周本-雷神/assets/tp.json rename to repo/js/周本6-雷神/assets/tp.json diff --git a/repo/js/周本6-雷神/main.js b/repo/js/周本6-雷神/main.js new file mode 100644 index 00000000..0b64881f --- /dev/null +++ b/repo/js/周本6-雷神/main.js @@ -0,0 +1,278 @@ +(async function () {//雷神 +//检测角色是否阵亡,并前往吃药复活 +async function resurgenceDetectionAndEatFood() { +const region1 = RecognitionObject.ocr(1170, 780, 75, 35);// 复活料理区域 +const region2 = RecognitionObject.ocr(545, 360, 800, 45);// 料理冷却区域 +keyPress("1"); +await sleep(100); +keyPress("2"); +await sleep(100); +keyPress("3"); +await sleep(100); +keyPress("4"); +await sleep(200); +let capture = captureGameRegion(); +let res1 = capture.find(region1); +let res2 = capture.find(region2); + if (res1.isEmpty()){ + return; + } + else if (!res1.isEmpty() && !res2.isEmpty()) { + log.info("复活料理处于冷却中"); + keyPress("ESCAPE"); + return; + } + else if (!res1.isEmpty() && res2.isEmpty()) { + log.info("检测到阵亡角色……复活吧!我的爱人!!!"); + keyPress("ESCAPE"); + await eatResurgenceFood();//满血复活 + return; + } +} + +//吃料理复活 +async function eatResurgenceFood() { +let recoveryFoodName = settings.recoveryFoodName ?? 0; +let resurgenceFoodName = settings.resurgenceFoodName ?? 0; +const region = RecognitionObject.ocr(800, 200, 315, 32);// 复活对象检测 +const clickPositions = [ + { x: 760, y: 440 }, // 角色1 + { x: 900, y: 440 }, // 角色2 + { x: 1040, y: 440 }, // 角色3 + { x: 1180, y: 440 } // 角色4 +]; +if(resurgenceFoodName && recoveryFoodName){ +log.info("开始吃菜"); +await sleep(500); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(200); +click(110, 110); +await sleep(1000); +inputText(`${resurgenceFoodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +// 使用 for 循环点击每个位置 +for (let i = 0; i < clickPositions.length; i++) { + const position = clickPositions[i]; + click(position.x, position.y); + await sleep(800); + click(1200,770);//确认 + await sleep(800); + let capture = captureGameRegion(); + let res = capture.find(region); + if (res.isEmpty()){ + keyPress("ESCAPE"); + await sleep(1000); + click(170, 1020);//筛选 + await sleep(1000); + click(195, 1020);//重置 + await sleep(1000); + click(110, 110);//输入名字 + await sleep(1000); + inputText(`${recoveryFoodName}`); + await sleep(500); + click(490, 1020);//确认筛选 + await sleep(1000); + click(180, 180);//选择第一个食物 + await sleep(1000); + click(1690, 1015);//使用 + await sleep(500); + click(position.x, position.y); + await sleep(500); + click(1200,770);//吃第一个 + await sleep(500); + click(1200,770);//吃第二个 + await sleep(500); + click(1350,290);//退出 + await sleep(500); + keyPress("ESCAPE"); + await sleep(400); + log.info("我又好了,嘿嘿"); + break; + } + await sleep(1000); + } + } +} + + + +//吃料理 +async function eatFood() { +let foodName = settings.foodName ?? 0; +if(foodName){ +log.info("开始吃菜"); +await sleep(1000); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(1000); +inputText(`${foodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +keyPress("ESCAPE"); +await sleep(1500); +}} + +//征讨之花领奖(无图标前进检测) +const autoNavigateToReward = async () => { + const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 + let advanceNum = 0; + while (true) { + // 1. 优先检查是否已到达领奖点 + let captureRegion = captureGameRegion(); + let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + // 检测到特点文字则结束!!! + if (rewardResult.text == "接触征讨之花") { + log.info("已到达领奖点,检测到文字: " + rewardResult.text); + return; + } + else if(advanceNum > 30){ + throw new Error('前进时间超时'); + } + // 前进一小步 + keyDown("w"); + await sleep(700); + keyUp("w"); + await sleep(100); // 等待角色移动稳定 + } +} + +//执行战斗并检测结束 +async function autoFightAndEndDetection() { + // 定义两个检测区域 + const region1 = RecognitionObject.ocr(750, 0, 420, 110);//区域一 BOSS名称 + const region2 = RecognitionObject.ocr(840, 935, 230, 40);//区域二 成功倒计时 + const region3 = RecognitionObject.ocr(1690, 230, 75, 350);//区域三 队伍名称 + let challengeTime = 0; + let challengeNum = 0; + //12分钟兜底 + while (challengeTime < 6000) { + // 捕获游戏区域 + let capture = captureGameRegion(); + // 检测两个区域的OCR结果 + let res1 = capture.find(region1); + let res2 = capture.find(region2); + let res3 = capture.find(region3); + let hasText1 = !res1.isEmpty() && res1.text.trim().length > 0; + let hasText2 = !res2.isEmpty() && res2.text.trim().length > 0; + let hasText3 = !res3.isEmpty() && res3.text.trim().length > 0; + // 情况1: 区域1有文字 且 区域2无文字 且 区域3有文字 → 执行AutoFight + if (hasText1 && !hasText2 && hasText3) { + await resurgenceDetectionAndEatFood(); + challengeNum++; + keyDown("s"); + await sleep(1800); + keyUp("s"); + await sleep(500);//避免切人冷却,导致角色识别失败 + log.info(`执行第${challengeNum}次战斗`); + challengeTime = challengeTime + 205; + + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况2: 区域2有文字 且 区域1无文字 且 区域3有文字 → 结束循环 + else if (hasText2 && !hasText1 && hasText3) { + log.info("检测到挑战成功"); + break; + } + // 情况3: 区域2无文字区域1无文字区域3有文字 →BOSS二阶段,需要移动触发 + else if (!hasText2 && !hasText1 && hasText3) { + log.info("检测到BOSS进入二阶段"); + keyDown("s"); + await sleep(2500); + keyUp("s"); + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况4: 三个区域均无文字,可能处于转场动画,尝试点击快进 + else if (!hasText1 && !hasText2 && !hasText3){ + log.info("进入过场动画尝试快进"); + await sleep(400); + click(1765, 55); + await sleep(400); + click(1765, 55); + } + + challengeTime = challengeTime + 1; + // 每次检测间隔100毫秒,避免CPU占用过高 + await sleep(100); + } +} + + +//通用:前往副本(副本外) +await sleep(1000); +await pathingScript.runFile("assets/recover.json"); +await sleep(5000); +await pathingScript.runFile("assets/tp.json"); +await sleep(1000); +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(1000); +keyPress("F"); +await sleep(2000); +click(1725, 1020);//单人挑战 +await sleep(300); +click(1180, 760);//队伍等级偏低、体力不够可能会出弹窗 +await sleep(2000); +click(1725, 1020);//开始挑战 +await sleep(15000); + +//副本内前往BOSS处 +click(960, 810);//点击任意处 +await sleep(2000); +await eatFood();//嗑药 +keyPress("1"); +await sleep(1000);//切回固定行走位 + +keyDown("s"); +await sleep(300); +keyDown("SHIFT"); +await sleep(300); +keyUp("SHIFT"); +await sleep(500); +keyUp("s"); + +//战斗和领奖 +await autoFightAndEndDetection();//一直战斗直到检测到结束 +//走到角落对准身位 +keyDown("s"); +await sleep(4000); +keyUp("s"); +await autoNavigateToReward();//前往地脉之花 + +await sleep(1000); +keyPress("F");//领奖 +await sleep(1000); +click(950, 750);//使用树脂 +await sleep(6000); +click(975, 1000);//退出秘境 +await sleep(10000); + + +})(); diff --git a/repo/js/周本6-雷神/manifest.json b/repo/js/周本6-雷神/manifest.json new file mode 100644 index 00000000..d20fca55 --- /dev/null +++ b/repo/js/周本6-雷神/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "雷神周本刷取", + "version": "2.0", + "description": "需0.44.6及以上版本,兼容所有正常队伍及战斗策略(禁止大幅度转向和移动技能龙王转圈、纳西达转圈、夜兰e……),但还是建议在JS设置中选择合适的防御料理(推荐骇浪派),另外最重要的是,没有六命老芭,请一定要选择使用复活料理和恢复料理。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,最后根据战斗脚本一次循环的时间,在战斗超时中填入,比如周本原地版q是14s,建议可以比正常单轮时间多个1s,另外搭配一条龙领奖无树脂脚本使用体验更佳哟。演示视频https://www.bilibili.com/video/BV1cpGCz6EWN/?vd_source=9dfaf88af48ecc0ff95a41f1145af7a2。", + "authors": [ + { + "name": "柒叶子", + "link": "https://github.com/511760049" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/周本6-雷神/settings.json b/repo/js/周本6-雷神/settings.json new file mode 100644 index 00000000..83d53d42 --- /dev/null +++ b/repo/js/周本6-雷神/settings.json @@ -0,0 +1,17 @@ +[ + { + "name": "foodName", + "type": "input-text", + "label": "请输入增益料理的正确名称 " + }, + { + "name": "resurgenceFoodName", + "type": "input-text", + "label": "请输入复活料理的正确名称 " + }, + { + "name": "recoveryFoodName", + "type": "input-text", + "label": "请输入回血料理的正确名称 " + } + ] \ No newline at end of file diff --git a/repo/js/周本6-雷神/周本队原地版q.txt b/repo/js/周本6-雷神/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本6-雷神/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本6-雷神/周本队火神原地版.txt b/repo/js/周本6-雷神/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本6-雷神/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/周本7-散兵/assets/recover.json b/repo/js/周本7-散兵/assets/recover.json new file mode 100644 index 00000000..a4e55f13 --- /dev/null +++ b/repo/js/周本7-散兵/assets/recover.json @@ -0,0 +1 @@ +{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]} \ No newline at end of file diff --git a/repo/js/周本-散兵/assets/tp.json b/repo/js/周本7-散兵/assets/tp.json similarity index 100% rename from repo/js/周本-散兵/assets/tp.json rename to repo/js/周本7-散兵/assets/tp.json diff --git a/repo/js/周本7-散兵/main.js b/repo/js/周本7-散兵/main.js new file mode 100644 index 00000000..3d3a1045 --- /dev/null +++ b/repo/js/周本7-散兵/main.js @@ -0,0 +1,284 @@ +(async function () {//散兵 + +//检测角色是否阵亡,并前往吃药复活 +async function resurgenceDetectionAndEatFood() { +const region1 = RecognitionObject.ocr(1170, 780, 75, 35);// 复活料理区域 +const region2 = RecognitionObject.ocr(545, 360, 800, 45);// 料理冷却区域 +keyPress("1"); +await sleep(100); +keyPress("2"); +await sleep(100); +keyPress("3"); +await sleep(100); +keyPress("4"); +await sleep(200); +let capture = captureGameRegion(); +let res1 = capture.find(region1); +let res2 = capture.find(region2); + if (res1.isEmpty()){ + return; + } + else if (!res1.isEmpty() && !res2.isEmpty()) { + log.info("复活料理处于冷却中"); + keyPress("ESCAPE"); + return; + } + else if (!res1.isEmpty() && res2.isEmpty()) { + log.info("检测到阵亡角色……复活吧!我的爱人!!!"); + keyPress("ESCAPE"); + await eatResurgenceFood();//满血复活 + return; + } +} + +//吃料理复活 +async function eatResurgenceFood() { +let recoveryFoodName = settings.recoveryFoodName ?? 0; +let resurgenceFoodName = settings.resurgenceFoodName ?? 0; +const region = RecognitionObject.ocr(800, 200, 315, 32);// 复活对象检测 +const clickPositions = [ + { x: 760, y: 440 }, // 角色1 + { x: 900, y: 440 }, // 角色2 + { x: 1040, y: 440 }, // 角色3 + { x: 1180, y: 440 } // 角色4 +]; +if(resurgenceFoodName && recoveryFoodName){ +log.info("开始吃菜"); +await sleep(500); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(200); +click(110, 110); +await sleep(1000); +inputText(`${resurgenceFoodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +// 使用 for 循环点击每个位置 +for (let i = 0; i < clickPositions.length; i++) { + const position = clickPositions[i]; + click(position.x, position.y); + await sleep(800); + click(1200,770);//确认 + await sleep(800); + let capture = captureGameRegion(); + let res = capture.find(region); + if (res.isEmpty()){ + keyPress("ESCAPE"); + await sleep(1000); + click(170, 1020);//筛选 + await sleep(1000); + click(195, 1020);//重置 + await sleep(1000); + click(110, 110);//输入名字 + await sleep(1000); + inputText(`${recoveryFoodName}`); + await sleep(500); + click(490, 1020);//确认筛选 + await sleep(1000); + click(180, 180);//选择第一个食物 + await sleep(1000); + click(1690, 1015);//使用 + await sleep(500); + click(position.x, position.y); + await sleep(500); + click(1200,770);//吃第一个 + await sleep(500); + click(1200,770);//吃第二个 + await sleep(500); + click(1350,290);//退出 + await sleep(500); + keyPress("ESCAPE"); + await sleep(400); + log.info("我又好了,嘿嘿"); + break; + } + await sleep(1000); + } + } +} + + + +//吃料理 +async function eatFood() { +let foodName = settings.foodName ?? 0; +if(foodName){ +log.info("开始吃菜"); +await sleep(1000); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(1000); +inputText(`${foodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +keyPress("ESCAPE"); +await sleep(1500); +}} + +//征讨之花领奖(无图标前进检测) +const autoNavigateToReward = async () => { + const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 + let advanceNum = 0; + while (true) { + // 1. 优先检查是否已到达领奖点 + let captureRegion = captureGameRegion(); + let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + // 检测到特点文字则结束!!! + if (rewardResult.text == "接触征讨之花") { + log.info("已到达领奖点,检测到文字: " + rewardResult.text); + return; + } + else if(advanceNum > 30){ + throw new Error('前进时间超时'); + } + // 前进一小步 + keyDown("w"); + await sleep(700); + keyUp("w"); + await sleep(100); // 等待角色移动稳定 + } +} + +//执行战斗并检测结束 +async function autoFightAndEndDetection() { + // 定义两个检测区域 + const region1 = RecognitionObject.ocr(750, 0, 420, 110);//区域一 BOSS名称 + const region2 = RecognitionObject.ocr(840, 935, 230, 40);//区域二 成功倒计时 + const region3 = RecognitionObject.ocr(1690, 230, 75, 350);//区域三 队伍名称 + let challengeTime = 0; + let challengeNum = 0; + //12分钟兜底 + while (challengeTime < 6000) { + // 捕获游戏区域 + let capture = captureGameRegion(); + // 检测两个区域的OCR结果 + let res1 = capture.find(region1); + let res2 = capture.find(region2); + let res3 = capture.find(region3); + let hasText1 = !res1.isEmpty() && res1.text.trim().length > 0; + let hasText2 = !res2.isEmpty() && res2.text.trim().length > 0; + let hasText3 = !res3.isEmpty() && res3.text.trim().length > 0; + // 情况1: 区域1有文字 且 区域2无文字 且 区域3有文字 → 执行AutoFight + if (hasText1 && !hasText2 && hasText3) { + await resurgenceDetectionAndEatFood(); + challengeNum++; + keyDown("s"); + await sleep(1800); + keyUp("s"); + await sleep(500);//避免切人冷却,导致角色识别失败 + log.info(`执行第${challengeNum}次战斗`); + challengeTime = challengeTime + 205; + + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况2: 区域2有文字 且 区域1无文字 且 区域3有文字 → 结束循环 + else if (hasText2 && !hasText1 && hasText3) { + log.info("检测到挑战成功"); + break; + } + // 情况3: 区域2无文字区域1无文字区域3有文字 →BOSS二阶段,需要移动触发 + else if (!hasText2 && !hasText1 && hasText3) { + log.info("检测到BOSS进入二阶段"); + keyDown("s"); + await sleep(2500); + keyUp("s"); + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况4: 三个区域均无文字,可能处于转场动画,尝试点击快进 + else if (!hasText1 && !hasText2 && !hasText3){ + log.info("进入过场动画尝试快进"); + await sleep(400); + click(1765, 55); + await sleep(400); + click(1765, 55); + } + + challengeTime = challengeTime + 1; + // 每次检测间隔100毫秒,避免CPU占用过高 + await sleep(100); + } +} + + +//通用:前往副本(副本外) +await sleep(1000); +await pathingScript.runFile("assets/recover.json"); +await sleep(5000); +await pathingScript.runFile("assets/tp.json"); +await sleep(1000); +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(1000); +keyPress("F"); +await sleep(2000); +click(1725, 1020);//单人挑战 +await sleep(300); +click(1180, 760);//队伍等级偏低、体力不够可能会出弹窗 +await sleep(2000); +click(1725, 1020);//开始挑战 +await sleep(15000); + +//副本内前往BOSS处 +click(960, 810);//点击任意处 +await sleep(2000); +await eatFood();//嗑药 +keyPress("1"); +await sleep(1000);//切回固定行走位 +keyDown("w"); +await sleep(11000); +keyUp("w"); +await sleep(7000); +keyDown("s"); +await sleep(200); +keyDown("SHIFT"); +await sleep(300); +keyUp("SHIFT"); +await sleep(200); +keyUp("s"); + +//战斗和领奖 +await autoFightAndEndDetection();//一直战斗直到检测到结束 +//走到角落对准身位 +keyDown("s"); +await sleep(10000); +keyUp("s"); +await autoNavigateToReward();//前往地脉之花 + +await sleep(1000); +keyPress("F");//领奖 +await sleep(1000); +click(950, 750);//使用树脂 +await sleep(6000); +click(975, 1000);//退出秘境 +await sleep(10000); + + + + +})(); diff --git a/repo/js/周本7-散兵/manifest.json b/repo/js/周本7-散兵/manifest.json new file mode 100644 index 00000000..ea3fb752 --- /dev/null +++ b/repo/js/周本7-散兵/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "散兵周本刷取", + "version": "2.0", + "description": "需0.44.6及以上版本,兼容所有正常队伍及战斗策略(禁止大幅度转向和移动技能龙王转圈、纳西达转圈、夜兰e……),但还是建议在JS设置中选择合适的防御料理(推荐骇浪派),另外最重要的是,没有六命老芭,请一定要选择使用复活料理和恢复料理。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,最后根据战斗脚本一次循环的时间,在战斗超时中填入,比如周本原地版q是14s,建议可以比正常单轮时间多个1s,另外搭配一条龙领奖无树脂脚本使用体验更佳哟。演示视频https://www.bilibili.com/video/BV1cpGCz6EWN/?vd_source=9dfaf88af48ecc0ff95a41f1145af7a2。", + "authors": [ + { + "name": "柒叶子", + "link": "https://github.com/511760049" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/周本7-散兵/settings.json b/repo/js/周本7-散兵/settings.json new file mode 100644 index 00000000..83d53d42 --- /dev/null +++ b/repo/js/周本7-散兵/settings.json @@ -0,0 +1,17 @@ +[ + { + "name": "foodName", + "type": "input-text", + "label": "请输入增益料理的正确名称 " + }, + { + "name": "resurgenceFoodName", + "type": "input-text", + "label": "请输入复活料理的正确名称 " + }, + { + "name": "recoveryFoodName", + "type": "input-text", + "label": "请输入回血料理的正确名称 " + } + ] \ No newline at end of file diff --git a/repo/js/周本7-散兵/周本队原地版q.txt b/repo/js/周本7-散兵/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本7-散兵/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本7-散兵/周本队火神原地版.txt b/repo/js/周本7-散兵/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本7-散兵/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/周本8-草龙/assets/box.png b/repo/js/周本8-草龙/assets/box.png new file mode 100644 index 00000000..521895c4 Binary files /dev/null and b/repo/js/周本8-草龙/assets/box.png differ diff --git a/repo/js/周本8-草龙/assets/recover.json b/repo/js/周本8-草龙/assets/recover.json new file mode 100644 index 00000000..a4e55f13 --- /dev/null +++ b/repo/js/周本8-草龙/assets/recover.json @@ -0,0 +1 @@ +{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]} \ No newline at end of file diff --git a/repo/js/周本-草龙/assets/tp.json b/repo/js/周本8-草龙/assets/tp.json similarity index 100% rename from repo/js/周本-草龙/assets/tp.json rename to repo/js/周本8-草龙/assets/tp.json diff --git a/repo/js/周本8-草龙/main.js b/repo/js/周本8-草龙/main.js new file mode 100644 index 00000000..d398316c --- /dev/null +++ b/repo/js/周本8-草龙/main.js @@ -0,0 +1,212 @@ +(async function () {//草龙 + +//吃料理 +async function eatFood() { +let foodName = settings.foodName ?? 0; +if(foodName){ +log.info("开始吃菜"); +await sleep(1000); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(1000); +inputText(`${foodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +keyPress("ESCAPE"); +await sleep(1500); +}} + +//征讨之花领奖 +const autoNavigateToReward = async () => { + // 定义识别对象 + const boxIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/box.png")); + const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 + + let advanceNum = 0;//前进次数 + //调整为俯视视野 + middleButtonClick(); + await sleep(800); + moveMouseBy(0, 1030); + await sleep(400); + moveMouseBy(0, 920); + await sleep(400); + moveMouseBy(0, 710); + log.info("开始领奖"); + while (true) { + // 1. 优先检查是否已到达领奖点 + let captureRegion = captureGameRegion(); + let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + // 检测到特点文字则结束!!! + if (rewardResult.text == "接触征讨之花") { + log.info("已到达领奖点,检测到文字: " + rewardResult.text); + return; + } + else if(advanceNum > 80){ + throw new Error('前进时间超时'); + } + // 2. 未到达领奖点,则调整视野 + for(let i = 0; i < 100; i++){ + captureRegion = captureGameRegion(); + let iconRes = captureRegion.Find(boxIconRo); + let climbTextArea = captureRegion.DeriveCrop(1808, 1030, 25, 25); + let climbResult = climbTextArea.find(RecognitionObject.ocrThis); + // 检查是否处于攀爬状态 + if (climbResult.isEmpty()){ + log.info("检侧进入攀爬状态,尝试脱离"); + keyPress("x"); + await sleep(1000); + keyDown("a"); + await sleep(800); + keyUp("a"); + keyDown("w"); + await sleep(800); + keyUp("w"); + } + if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) { + advanceNum++; + log.info(`视野已调正,前进第${advanceNum}次`); + break; + } else { + // 小幅度调整 + if(iconRes.y >= 520) moveMouseBy(0, 920); + let adjustAmount = iconRes.x < 920 ? -20 : 20; + let distanceToCenter = Math.abs(iconRes.x - 920); // 计算与920的距离 + let scaleFactor = Math.max(1, Math.floor(distanceToCenter / 50)); // 根据距离缩放,最小为1 + let adjustAmount2 = iconRes.y < 540 ? scaleFactor : 10; + moveMouseBy(adjustAmount * adjustAmount2, 0); + await sleep(100); + } + if(i > 97) throw new Error('视野调整超时'); + } + // 3. 前进一小步 + keyDown("w"); + await sleep(800); + keyUp("w"); + await sleep(100); // 等待角色移动稳定 + } +} + +//执行战斗并检测结束 +async function autoFightAndEndDetection() { + // 定义两个检测区域 + const region1 = RecognitionObject.ocr(750, 0, 420, 110);//区域一 BOSS名称 + const region2 = RecognitionObject.ocr(840, 935, 230, 40);//区域二 成功倒计时 + const region3 = RecognitionObject.ocr(1690, 230, 75, 350);//区域三 队伍名称 + let challengeTime = 0; + let challengeNum = 0; + //12分钟兜底 + while (challengeTime < 6000) { + // 捕获游戏区域 + let capture = captureGameRegion(); + // 检测两个区域的OCR结果 + let res1 = capture.find(region1); + let res2 = capture.find(region2); + let res3 = capture.find(region3); + let hasText1 = !res1.isEmpty() && res1.text.trim().length > 0; + let hasText2 = !res2.isEmpty() && res2.text.trim().length > 0; + let hasText3 = !res3.isEmpty() && res3.text.trim().length > 0; + // 情况1: 区域1有文字 且 区域2无文字 且 区域3有文字 → 执行AutoFight + if (hasText1 && !hasText2 && hasText3) { + challengeNum++; + await sleep(500);//避免切人冷却,导致角色识别失败 + log.info(`执行第${challengeNum}次战斗`); + challengeTime = challengeTime + 205; + + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况2: 区域2有文字 且 区域1无文字 且 区域3有文字 → 结束循环 + else if (hasText2 && !hasText1 && hasText3) { + log.info("检测到挑战成功"); + break; + } + // 情况3: 区域2无文字区域1无文字区域3有文字 →BOSS二阶段,需要移动触发 + else if (!hasText2 && !hasText1 && hasText3) { + log.info("检测到BOSS进入二阶段"); + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况4: 三个区域均无文字,可能处于转场动画,尝试点击快进 + else if (!hasText1 && !hasText2 && !hasText3){ + + log.info("进入过场动画尝试快进"); + await sleep(400); + click(1765, 55); + await sleep(400); + click(1765, 55); + } + + challengeTime = challengeTime + 1; + // 每次检测间隔100毫秒,避免CPU占用过高 + await sleep(100); + } +} + + +//通用:前往副本(副本外) +await sleep(1000); +await pathingScript.runFile("assets/recover.json"); +await sleep(5000); +await pathingScript.runFile("assets/tp.json"); +await sleep(1000); +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(1000); +keyPress("F"); +await sleep(2000); +click(1725, 1020);//单人挑战 +await sleep(300); +click(1180, 760);//队伍等级偏低、体力不够可能会出弹窗 +await sleep(2000); +click(1725, 1020);//开始挑战 +await sleep(15000); + +//副本内前往BOSS处 +click(960, 810);//点击任意处 +await sleep(2000); +await eatFood();//嗑药 +keyPress("1"); +await sleep(1000);//切回固定行走位 +keyDown("w"); +await sleep(8500); +keyUp("w"); +await sleep(6500); +keyDown("e"); +await sleep(1000);//钟离开盾 +keyUp("e"); +keyDown("a"); +await sleep(2000); +keyUp("a"); +keyDown("w"); +await sleep(3500); +keyUp("w"); +keyDown("d"); +await sleep(3500); +keyUp("d"); + +//战斗和领奖 +await autoFightAndEndDetection();//一直战斗直到检测到结束 +await autoNavigateToReward();//前往地脉之花 + +await sleep(1000); +keyPress("F");//领奖 +await sleep(1000); +click(950, 750);//使用树脂 +await sleep(6000); +click(975, 1000);//退出秘境 +await sleep(10000); + + +})(); diff --git a/repo/js/周本8-草龙/manifest.json b/repo/js/周本8-草龙/manifest.json new file mode 100644 index 00000000..0fc80a6a --- /dev/null +++ b/repo/js/周本8-草龙/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "阿佩普周本刷取", + "version": "2.0", + "description": "需0.44.6及以上版本,兼容所有正常队伍及战斗策略,但还是建议在JS设置中选择合适的防御料理(推荐骇浪派)。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,最后根据战斗脚本一次循环的时间,在战斗超时中填入,比如周本火神原地版是28s,建议可以比正常单轮时间多个1s,另外搭配一条龙领奖无树脂脚本使用体验更佳哟。演示视频https://www.bilibili.com/video/BV1cpGCz6EWN/?vd_source=9dfaf88af48ecc0ff95a41f1145af7a2。", + "authors": [ + { + "name": "柒叶子", + "link": "https://github.com/511760049" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/周本8-草龙/settings.json b/repo/js/周本8-草龙/settings.json new file mode 100644 index 00000000..d70d6506 --- /dev/null +++ b/repo/js/周本8-草龙/settings.json @@ -0,0 +1,7 @@ +[ + { + "name": "foodName", + "type": "input-text", + "label": "请输入料理的正确名称 " + }, + ] \ No newline at end of file diff --git a/repo/js/周本8-草龙/周本队原地版q.txt b/repo/js/周本8-草龙/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本8-草龙/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本8-草龙/周本队火神原地版.txt b/repo/js/周本8-草龙/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本8-草龙/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/周本9-鲸鱼/assets/box.png b/repo/js/周本9-鲸鱼/assets/box.png new file mode 100644 index 00000000..521895c4 Binary files /dev/null and b/repo/js/周本9-鲸鱼/assets/box.png differ diff --git a/repo/js/周本9-鲸鱼/assets/recover.json b/repo/js/周本9-鲸鱼/assets/recover.json new file mode 100644 index 00000000..a4e55f13 --- /dev/null +++ b/repo/js/周本9-鲸鱼/assets/recover.json @@ -0,0 +1 @@ +{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]} \ No newline at end of file diff --git a/repo/js/周本-鲸鱼/assets/tp.json b/repo/js/周本9-鲸鱼/assets/tp.json similarity index 100% rename from repo/js/周本-鲸鱼/assets/tp.json rename to repo/js/周本9-鲸鱼/assets/tp.json diff --git a/repo/js/周本9-鲸鱼/main.js b/repo/js/周本9-鲸鱼/main.js new file mode 100644 index 00000000..58d888d4 --- /dev/null +++ b/repo/js/周本9-鲸鱼/main.js @@ -0,0 +1,194 @@ +(async function () {//鲸鱼周本 + +//吃料理 +async function eatFood() { +let foodName = settings.foodName ?? 0; +if(foodName){ +log.info("开始吃菜"); +await sleep(1000); +keyPress("B");//打开背包 +await sleep(2000); +click(863, 51);//选择食物 +await sleep(1000); +click(170, 1020);//筛选 +await sleep(1000); +click(195, 1020);//重置 +await sleep(1000); +click(110, 110);//输入名字 +await sleep(1000); +inputText(`${foodName}`); +await sleep(500); +click(490, 1020);//确认筛选 +await sleep(1000); +click(180, 180);//选择第一个食物 +await sleep(1000); +click(1690, 1015);//使用 +await sleep(1000); +keyPress("ESCAPE"); +await sleep(1500); +}} + +//征讨之花领奖 +const autoNavigateToReward = async () => { + // 定义识别对象 + const boxIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/box.png")); + const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 + + let advanceNum = 0;//前进次数 + //调整为俯视视野 + middleButtonClick(); + await sleep(800); + moveMouseBy(0, 1030); + await sleep(400); + moveMouseBy(0, 920); + await sleep(400); + moveMouseBy(0, 710); + log.info("开始领奖"); + while (true) { + // 1. 优先检查是否已到达领奖点 + let captureRegion = captureGameRegion(); + let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + // 检测到特点文字则结束!!! + if (rewardResult.text == "接触征讨之花") { + log.info("已到达领奖点,检测到文字: " + rewardResult.text); + return; + } + else if(advanceNum > 80){ + throw new Error('前进时间超时'); + } + // 2. 未到达领奖点,则调整视野 + for(let i = 0; i < 100; i++){ + captureRegion = captureGameRegion(); + let iconRes = captureRegion.Find(boxIconRo); + let climbTextArea = captureRegion.DeriveCrop(1808, 1030, 25, 25); + let climbResult = climbTextArea.find(RecognitionObject.ocrThis); + // 检查是否处于攀爬状态 + if (climbResult.isEmpty()){ + log.info("检侧进入攀爬状态,尝试脱离"); + keyPress("x"); + await sleep(1000); + keyDown("a"); + await sleep(800); + keyUp("a"); + keyDown("w"); + await sleep(800); + keyUp("w"); + } + if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) { + advanceNum++; + log.info(`视野已调正,前进第${advanceNum}次`); + break; + } else { + // 小幅度调整 + if(iconRes.y >= 520) moveMouseBy(0, 920); + let adjustAmount = iconRes.x < 920 ? -20 : 20; + let distanceToCenter = Math.abs(iconRes.x - 920); // 计算与920的距离 + let scaleFactor = Math.max(1, Math.floor(distanceToCenter / 50)); // 根据距离缩放,最小为1 + let adjustAmount2 = iconRes.y < 540 ? scaleFactor : 10; + moveMouseBy(adjustAmount * adjustAmount2, 0); + await sleep(100); + } + if(i > 97) throw new Error('视野调整超时'); + } + // 3. 前进一小步 + keyDown("w"); + await sleep(800); + keyUp("w"); + await sleep(100); // 等待角色移动稳定 + } +} + +//执行战斗并检测结束 +async function autoFightAndEndDetection() { + // 定义两个检测区域 + const region1 = RecognitionObject.ocr(750, 0, 420, 110);//区域一 BOSS名称 + const region2 = RecognitionObject.ocr(840, 935, 230, 40);//区域二 成功倒计时 + const region3 = RecognitionObject.ocr(1690, 230, 75, 350);//区域三 队伍名称 + let challengeTime = 0; + let challengeNum = 0; + //12分钟兜底 + while (challengeTime < 6000) { + // 捕获游戏区域 + let capture = captureGameRegion(); + // 检测两个区域的OCR结果 + let res1 = capture.find(region1); + let res2 = capture.find(region2); + let res3 = capture.find(region3); + let hasText1 = !res1.isEmpty() && res1.text.trim().length > 0; + let hasText2 = !res2.isEmpty() && res2.text.trim().length > 0; + let hasText3 = !res3.isEmpty() && res3.text.trim().length > 0; + // 情况1: 区域1有文字 且 区域2无文字 且 区域3有文字 → 执行AutoFight + if (hasText1 && !hasText2 && hasText3) { + challengeNum++; + await sleep(500);//避免切人冷却,导致角色识别失败 + log.info(`执行第${challengeNum}次战斗`); + challengeTime = challengeTime + 205; + + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况2: 区域2有文字 且 区域1无文字 且 区域3有文字 → 结束循环 + else if (hasText2 && !hasText1 && hasText3) { + log.info("检测到挑战成功"); + break; + } + // 情况3: 区域2无文字区域1无文字区域3有文字 →BOSS二阶段,需要移动触发 + else if (!hasText2 && !hasText1 && hasText3) { + log.info("检测到BOSS进入二阶段"); + await dispatcher.runTask(new SoloTask("AutoFight")); + } + // 情况4: 三个区域均无文字,可能处于转场动画,尝试点击快进 + else if (!hasText1 && !hasText2 && !hasText3){ + log.info("进入过场动画尝试快进"); + await sleep(400); + click(1765, 55); + await sleep(400); + click(1765, 55); + } + + challengeTime = challengeTime + 1; + // 每次检测间隔100毫秒,避免CPU占用过高 + await sleep(100); + } +} + + +//通用:前往副本(副本外) +await sleep(1000); +await pathingScript.runFile("assets/recover.json"); +await sleep(5000); +await pathingScript.runFile("assets/tp.json"); +await sleep(1000); +keyDown("w"); +await sleep(2000); +keyUp("w"); +await sleep(1000); +keyPress("F"); +await sleep(2000); +click(1725, 1020);//单人挑战 +await sleep(300); +click(1180, 760);//队伍等级偏低、体力不够可能会出弹窗 +await sleep(2000); +click(1725, 1020);//开始挑战 +await sleep(15000); + +//副本内前往BOSS处 +click(960, 810);//点击任意处 +await sleep(2000); +await eatFood();//嗑药 +keyPress("1"); +await sleep(1000);//切回固定行走位 + +//战斗和领奖 +await autoFightAndEndDetection();//一直战斗直到检测到结束 +await autoNavigateToReward();//前往地脉之花 + +await sleep(1000); +keyPress("F");//领奖 +await sleep(1000); +click(950, 750);//使用树脂 +await sleep(6000); +click(975, 1000);//退出秘境 +await sleep(10000); + +})(); diff --git a/repo/js/周本9-鲸鱼/manifest.json b/repo/js/周本9-鲸鱼/manifest.json new file mode 100644 index 00000000..3eb8fb6b --- /dev/null +++ b/repo/js/周本9-鲸鱼/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "鲸鱼周本刷取", + "version": "2.0", + "description": "需0.44.6及以上版本,兼容所有正常队伍及战斗策略,但还是建议在JS设置中选择合适的防御料理(推荐骇浪派)。脚本需要在调度器设置里开启路径追踪行走配置,选择切换的队伍,打开允许在JsScript中使用,打开战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,最后根据战斗脚本一次循环的时间,在战斗超时中填入,比如周本原地版q是14s,建议可以比正常单轮时间多个1s,另外搭配一条龙领奖无树脂脚本使用体验更佳哟。演示视频https://www.bilibili.com/video/BV1cpGCz6EWN/?vd_source=9dfaf88af48ecc0ff95a41f1145af7a2。", + "authors": [ + { + "name": "柒叶子", + "link": "https://github.com/511760049" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} diff --git a/repo/js/周本9-鲸鱼/settings.json b/repo/js/周本9-鲸鱼/settings.json new file mode 100644 index 00000000..d70d6506 --- /dev/null +++ b/repo/js/周本9-鲸鱼/settings.json @@ -0,0 +1,7 @@ +[ + { + "name": "foodName", + "type": "input-text", + "label": "请输入料理的正确名称 " + }, + ] \ No newline at end of file diff --git a/repo/js/周本9-鲸鱼/周本队原地版q.txt b/repo/js/周本9-鲸鱼/周本队原地版q.txt new file mode 100644 index 00000000..328ca16c --- /dev/null +++ b/repo/js/周本9-鲸鱼/周本队原地版q.txt @@ -0,0 +1,9 @@ +钟离 wait(0.2),e(hold) +芙宁娜 e,q +雷神 e +芭芭拉 e,q,attack(4) + + + + + diff --git a/repo/js/周本9-鲸鱼/周本队火神原地版.txt b/repo/js/周本9-鲸鱼/周本队火神原地版.txt new file mode 100644 index 00000000..6579d72b --- /dev/null +++ b/repo/js/周本9-鲸鱼/周本队火神原地版.txt @@ -0,0 +1,9 @@ +钟离 e(hold) +芙宁娜 q,e +玛薇卡 e +芭芭拉 e,attack(5.5) +钟离 e(hold) +芭芭拉 e,attack(10) + + + diff --git a/repo/js/苍晶螺采集地面(8个)/main.js b/repo/js/苍晶螺采集地面(8个)/main.js deleted file mode 100644 index 9158a77d..00000000 --- a/repo/js/苍晶螺采集地面(8个)/main.js +++ /dev/null @@ -1,218 +0,0 @@ -(async function () { - -await genshin.returnMainUi(); - -dispatcher.addTimer(new RealtimeTimer("AutoPick")); - -//传送1地上 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(550, 510);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); - - -//采集1/3 -keyDown("w"); -await sleep(15000); -keyUp("w"); -keyDown("d"); -await sleep(6500); -keyUp("d"); -keyDown("w"); -await sleep(1000); -keyUp("w"); -keyDown("VK_LCONTROL"); -await sleep(4000); -keyUp("VK_LCONTROL"); -await sleep(2000); -leftButtonClick(); -await sleep(4000); -keyDown("d"); -await sleep(1200); -keyUp("d"); -keyDown("w"); -await sleep(11500); -keyUp("w"); -keyDown("a"); -await sleep(3000); -keyUp("a"); -keyDown("w"); -await sleep(10000); -keyUp("w"); - -//传送2地上 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(625, 590);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); -//采集2/4 -keyDown("a"); -await sleep(1700); -keyUp("a"); -keyDown("d"); -await sleep(900); -keyUp("d"); -keyDown("w"); -await sleep(7000); -keyUp("w"); -keyDown("a"); -await sleep(1200); -keyUp("a"); -keyDown("w"); -await sleep(4000); -keyUp("w"); -keyDown("d"); -await sleep(1000); -keyUp("d"); -keyDown("a"); -await sleep(2300); -keyUp("a"); - -//传送2地上 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(625, 590);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); - -//采集3/2 -keyDown("a"); -await sleep(1700); -keyUp("a"); -keyDown("d"); -await sleep(900); -keyUp("d"); -keyDown("w"); -await sleep(7000); -keyUp("w"); -keyDown("a"); -await sleep(1200); -keyUp("a"); -keyDown("w"); -await sleep(2000); -keyUp("w"); -keyDown("a"); -await sleep(1500); -keyUp("a"); -keyDown("w"); -await sleep(8000); -keyUp("w"); -keyDown("d"); -await sleep(2000); -keyUp("d"); -keyDown("w"); -await sleep(3500); -keyUp("w"); -keyDown("d"); -await sleep(3200); -keyUp("d"); -keyDown("s"); -await sleep(3500); -keyUp("s"); - -//传送2地上 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(625, 590);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); -//采集4/2 -keyDown("a"); -await sleep(900); -keyUp("a"); -keyDown("s"); -await sleep(2000); -keyUp("s"); -keyDown("a"); -await sleep(3700); -keyUp("a"); -keyDown("w"); -await sleep(4000); -keyUp("w"); -keyDown("a"); -await sleep(900); -keyUp("a"); - -})(); diff --git a/repo/js/苍晶螺采集地面(8个)/manifest.json b/repo/js/苍晶螺采集地面(8个)/manifest.json deleted file mode 100644 index aa1bd825..00000000 --- a/repo/js/苍晶螺采集地面(8个)/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "苍晶螺拾取模板", - "version": "1.0", - "description": "在安眠处进行采集,未完成任务不要选择。请使用芭芭拉行走,其他少女也可以,另外带上双风,并确保传送点附近没有任何标注", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/苍晶螺采集水下(33个)/main.js b/repo/js/苍晶螺采集水下(33个)/main.js deleted file mode 100644 index 86bc971b..00000000 --- a/repo/js/苍晶螺采集水下(33个)/main.js +++ /dev/null @@ -1,492 +0,0 @@ -(async function () { - -await genshin.returnMainUi(); - -dispatcher.addTimer(new RealtimeTimer("AutoPick")); - -//传送7 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(750, 910);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); - -//采集9/5 -keyDown("d"); -await sleep(3000); -keyUp("d"); -keyDown("s"); -await sleep(3500); -keyUp("s"); -keyDown("VK_SPACE"); -await sleep(1500); -keyUp("VK_SPACE"); -keyDown("s"); -await sleep(6000); -keyUp("s"); -keyDown("d"); -await sleep(3000); -keyUp("d"); -keyDown("s"); -await sleep(12000); -keyUp("s"); -keyDown("a"); -await sleep(7000); -keyUp("a"); -keyDown("VK_SPACE"); -await sleep(1500); -keyUp("VK_SPACE"); - -keyDown("VK_LCONTROL"); -await sleep(3000); -keyUp("VK_LCONTROL"); -keyDown("s"); -await sleep(4000); -keyUp("s"); -keyDown("a"); -await sleep(3500); -keyUp("a"); - -//传送7 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(750, 910);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); - - -//采集8/4 -keyDown("VK_LCONTROL"); -await sleep(2500); -keyUp("VK_LCONTROL"); -keyDown("w"); -await sleep(2000); -keyUp("w"); -keyDown("a"); -await sleep(7000); -keyUp("a"); -keyDown("w"); -await sleep(29500); -keyUp("w"); -keyDown("VK_SPACE"); -await sleep(2000); -keyUp("VK_SPACE"); -keyDown("a"); -await sleep(2000); -keyUp("a"); -keyDown("VK_LCONTROL"); -await sleep(2500); -keyUp("VK_LCONTROL"); - - - - -//传送5 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(1350, 690);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); - - -//采集6/4 -keyDown("a"); -await sleep(3000); -keyDown("s"); -await sleep(5000); -keyUp("a"); -keyUp("s"); - -keyDown("d"); -await sleep(3500); -keyUp("d"); -keyDown("w"); -await sleep(4000); -keyUp("w"); -keyDown("VK_LCONTROL"); -await sleep(2500); -keyUp("VK_LCONTROL"); - -keyDown("w"); -keyDown("d"); -await sleep(7000); -keyUp("d"); -keyUp("w"); -keyDown("d"); -await sleep(3500); -keyUp("d"); -keyDown("VK_LCONTROL"); -await sleep(4000); -keyUp("VK_LCONTROL"); -keyDown("s"); -await sleep(2000); -keyUp("s"); - - - - -//传送3 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(1385, 850);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); - - -//采集5/5 -keyDown("d"); -await sleep(3000); -keyUp("d"); - -keyDown("a"); -await sleep(5000); -keyUp("a"); - -keyDown("w"); -await sleep(5000); -keyUp("w"); - -keyDown("VK_LCONTROL"); -await sleep(2000); -keyUp("VK_LCONTROL"); -keyDown("w"); -keyDown("a"); -await sleep(8500); -keyUp("w"); -keyUp("a"); -keyDown("VK_LCONTROL"); -await sleep(2000); -keyUp("VK_LCONTROL"); -keyDown("w"); -await sleep(8000); -keyUp("w"); - - - - - - - -//传送1 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(1050, 960);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); - - -//采集1/3 - -keyDown("a");//左转向 -await sleep(1000); -keyUp("a"); -await sleep(500); -keyPress("ESCAPE"); -await sleep(1500); -keyPress("ESCAPE"); -await sleep(1000); - -await sleep(400); - -keyDown("w"); - -keyDown("a"); -await sleep(1000); -keyUp("a"); -await sleep(15500); -keyUp("w");//1 -await sleep(1000); -keyDown("s"); -await sleep(8000); -keyUp("s"); -keyDown("VK_SPACE"); -await sleep(7000); -keyUp("VK_SPACE"); -keyPress("VK_MBUTTON"); -await sleep(1000); - -keyDown("s");//后转向 -await sleep(1000); -keyUp("s"); -await sleep(500); -keyPress("ESCAPE"); -await sleep(1500); -keyPress("ESCAPE"); -await sleep(1000); - -keyDown("d"); -await sleep(9000); -keyUp("d");//2 -await sleep(500); -keyDown("w"); -await sleep(4000);//2 -keyUp("w"); -keyDown("a"); -await sleep(500); -keyUp("a"); -keyDown("w"); -await sleep(3000); -keyUp("w"); -keyDown("d"); -await sleep(1000); -keyUp("d"); -keyDown("w"); -await sleep(3500); -keyUp("w");//3 - -//传送1 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(1050, 960);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); - - - -//采集2/5 -keyDown("d"); -await sleep(1000); -keyUp("d"); -await sleep(500); -keyPress("ESCAPE"); -await sleep(1500); -keyPress("ESCAPE"); -await sleep(1000); -//leftButtonClick(); -keyDown("d");// -await sleep(7500); -keyUp("d"); -keyDown("VK_LCONTROL"); -keyDown("w"); -await sleep(7000); -keyUp("VK_LCONTROL"); -await sleep(4000); -keyUp("w"); -//keyPress("e"); -await sleep(500); -keyDown("a"); -keyDown("VK_LCONTROL"); -await sleep(5500); -keyUp("VK_LCONTROL"); -keyUp("a"); -keyDown("w"); -await sleep(1500); -keyUp("w"); -keyDown("d"); -await sleep(6500); -keyUp("d"); - - -//传送2 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(975, 1025);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); - -//采集3/3 -keyDown("w"); -await sleep(22000); -keyUp("w"); -keyDown("a");//左转向 -await sleep(1000); -keyUp("a"); -await sleep(500); -keyPress("ESCAPE"); -await sleep(1500); -keyPress("ESCAPE"); -await sleep(1000); -keyDown("w"); -await sleep(6500); -keyUp("w");//1 -keyDown("VK_LCONTROL");//1,2 -await sleep(6000); -keyUp("VK_LCONTROL"); -keyDown("d"); -await sleep(4000); -keyUp("d");//3 - - -//传送2 -await sleep(1000); -keyPress("M"); -await sleep(1500); -click(1841, 1015);//地图选择 -await sleep(1000); -click(1460, 350);//枫丹 -await sleep(1000); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 441);//放大地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(48, 636);//缩小地图 -await sleep(500); -click(975, 1025);//点击传送点 -await sleep(500); -click(1707, 1010);//确认 -await sleep(8000); -//采集4/2 -keyDown("w"); -await sleep(16500); -keyUp("w"); -keyDown("VK_LCONTROL"); -await sleep(9000); -keyUp("VK_LCONTROL"); -keyDown("a");//左转向 -await sleep(5000); -keyUp("a");//1,2 - - -})(); diff --git a/repo/js/苍晶螺采集水下(33个)/manifest.json b/repo/js/苍晶螺采集水下(33个)/manifest.json deleted file mode 100644 index dcdfa2e8..00000000 --- a/repo/js/苍晶螺采集水下(33个)/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "manifest_version": 1, - "name": "苍晶螺拾取模板", - "version": "1.0", - "description": "尽量不要使用成年体型,有极少数地方可能导致位置偏移,另外队伍请使用双风,并确保传送点附近没有任何标注,最后拾取效果可能不太好,将就用吧", - "authors": [ - { - "name": "柒叶子", - "link": "https://github.com/511760049" - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} diff --git a/repo/js/首领讨伐一条龙/main.js b/repo/js/首领讨伐一条龙/main.js index 4d0354f9..af8c6dc1 100644 --- a/repo/js/首领讨伐一条龙/main.js +++ b/repo/js/首领讨伐一条龙/main.js @@ -8,65 +8,76 @@ const boxIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/ const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 let advanceNum = 0;//前进次数 +//征讨之花领奖 const autoNavigateToReward = async () => { + // 定义识别对象 + const boxIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/box.png")); + const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测 + + let advanceNum = 0;//前进次数 + //调整为俯视视野 middleButtonClick(); - await sleep(1000); - moveMouseBy(0, 1030);//调整为俯视视野 - await sleep(500); - moveMouseBy(0, 920);//调整为俯视视野 - await sleep(500); - moveMouseBy(0, 710);//调整为俯视视野 + await sleep(800); + moveMouseBy(0, 1030); + await sleep(400); + moveMouseBy(0, 920); + await sleep(400); + moveMouseBy(0, 710); + log.info("开始领奖"); while (true) { // 1. 优先检查是否已到达领奖点 let captureRegion = captureGameRegion(); let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50); - let ocrResults = rewardTextArea.findMulti(RecognitionObject.ocrThis); - - // 仅检测到文字则结束!!! - if (ocrResults.count > 0 && ocrResults[0].text.trim().length > 0) { - log.info("已到达领奖点,检测到文字: " + ocrResults[0].text); + let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis); + // 检测到特点文字则结束!!! + if (rewardResult.text == "接触征讨之花") { + log.info("已到达领奖点,检测到文字: " + rewardResult.text); return; } else if(advanceNum > 80){ throw new Error('前进时间超时'); } // 2. 未到达领奖点,则调整视野 - await adjustViewForReward(); - + for(let i = 0; i < 100; i++){ + captureRegion = captureGameRegion(); + let iconRes = captureRegion.Find(boxIconRo); + let climbTextArea = captureRegion.DeriveCrop(1808, 1030, 25, 25); + let climbResult = climbTextArea.find(RecognitionObject.ocrThis); + // 检查是否处于攀爬状态 + if (climbResult.isEmpty()){ + log.info("检侧进入攀爬状态,尝试脱离"); + keyPress("x"); + await sleep(1000); + keyDown("a"); + await sleep(800); + keyUp("a"); + keyDown("w"); + await sleep(800); + keyUp("w"); + } + if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) { + advanceNum++; + log.info(`视野已调正,前进第${advanceNum}次`); + break; + } else { + // 小幅度调整 + if(iconRes.y >= 520) moveMouseBy(0, 920); + let adjustAmount = iconRes.x < 920 ? -20 : 20; + let distanceToCenter = Math.abs(iconRes.x - 920); // 计算与920的距离 + let scaleFactor = Math.max(1, Math.floor(distanceToCenter / 50)); // 根据距离缩放,最小为1 + let adjustAmount2 = iconRes.y < 540 ? scaleFactor : 10; + moveMouseBy(adjustAmount * adjustAmount2, 0); + await sleep(100); + } + if(i > 97) throw new Error('视野调整超时'); + } // 3. 前进一小步 keyDown("w"); await sleep(800); keyUp("w"); await sleep(100); // 等待角色移动稳定 } -}; - -/** - * 调整视野直到图标位于正前方 - */ -const adjustViewForReward = async () => { - - - - for(let i = 0; i < 100; i++){ - let captureRegion = captureGameRegion(); - let iconRes = captureRegion.Find(boxIconRo); - - if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) { - advanceNum++; - log.info(`视野已调正,前进第${advanceNum}次`); - return; - } else { - // 小幅度调整 - let adjustAmount = iconRes.x < 920 ? -20 : 20; - let adjustAmount2 = iconRes.y < 540 ? 1 : 10; - moveMouseBy(adjustAmount*adjustAmount2, 0); - await sleep(100); - } - } - -throw new Error('视野调整超时'); -}; +} //主流程 @@ -120,9 +131,7 @@ await pathingScript.runFile(`assets/${challengeName}前往.json`); await keyMouseScript.runFile(`assets/${challengeName}前往键鼠.json`); await dispatcher.runTask(new SoloTask("AutoFight")); } - -log.info(`等待一会儿,避免钟离柱子害人`); -await sleep(10000); +await sleep(1000); log.info(`第${i+1}次领奖`); await autoNavigateToReward();//前往地脉之花 //await pathingScript.runFile(`assets/${challengeName}领奖.json`); diff --git a/repo/js/首领讨伐一条龙/manifest.json b/repo/js/首领讨伐一条龙/manifest.json index 98411e57..7cc2400b 100644 --- a/repo/js/首领讨伐一条龙/manifest.json +++ b/repo/js/首领讨伐一条龙/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "首领连续讨伐", - "version": "1.3", + "version": "1.4", "description": "请看一看readme文件", "authors": [ { diff --git a/repo/js/首领讨伐一条龙/readme.txt b/repo/js/首领讨伐一条龙/readme.txt index 003e8368..ab37555f 100644 --- a/repo/js/首领讨伐一条龙/readme.txt +++ b/repo/js/首领讨伐一条龙/readme.txt @@ -3,5 +3,5 @@ 机制BOSS:无相之雷、无相之水、无相之火、无相之草、深罪浸礼者、灵觉隐修的迷者…… 此外「冰风组曲」分为「歌裴莉娅的葬送」荒(蓝)与「科培琉司的劫罚」芒(金),不要选错了。 3、由于一些 boss 的特殊性,不能选择原地连续挑战,比如「冰风组曲」和纯水精灵。 -4、另外很多行走脚本,是基于键鼠录制制作的,只能选择钟离作为行走位,并保证队伍中没有任何速度加成。(想解决这个问题,只能靠大家一起找鸭蛋催一下分层地图了) +4、另外很多行走脚本,是基于键鼠录制制作的,只能选择钟离作为行走位,并保证队伍中没有任何速度加成,没有的话,只能自己单独录制前往的键鼠脚本了。(想解决这个问题,只能靠大家一起找鸭蛋催一下分层地图了) 5、最后讲一下调度器中的设置,打开地图追踪行走配置,打开允许在JsScript中使用,选择切换的队伍,选择行走位(钟离),打开战斗配置,打开覆盖JS中的自动战斗配置,选择战斗策略,关闭战斗结束拾取物品和万叶拾取,不要打开更快的检查结束,战斗超时可以设置长一点,比如240s。