Files
bettergi-scripts-list/repo/js/首领讨伐一条龙/main.js
2025-04-20 23:53:40 +08:00

132 lines
4.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(async function () {
let challengeNum= settings.challengeNum ?? 1;//挑战次数
let challengeName = settings.challengeName ?? 0;//挑战首领名称
let resinNum = settings.resinNum ?? 0;//使用树脂数量
let samePlace = settings.samePlace ?? 1;//是否原地连续挑战
if(challengeName =="纯水精灵" || challengeName =="歌裴莉娅的葬送" ||challengeName =="科培琉司的劫罚") samePlace = 1;//这些 boss 挑战后不会原地刷新
const boxIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/box.png"));
const rewardTextRo = RecognitionObject.Ocr(1210, 515, 200, 50);//领奖区域检测
let advanceNum = 0;//前进次数
const autoNavigateToReward = async () => {
middleButtonClick();
await sleep(1000);
moveMouseBy(0, 1030);//调整为俯视视野
await sleep(500);
moveMouseBy(0, 920);//调整为俯视视野
await sleep(500);
moveMouseBy(0, 710);//调整为俯视视野
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);
return;
}
else if(advanceNum > 80){
throw new Error('前进时间超时');
}
// 2. 未到达领奖点,则调整视野
await adjustViewForReward();
// 3. 前进一小步
keyDown("w");
await sleep(900);
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('视野调整超时');
};
//主流程
if(!settings.confirm) throw new Error('请阅读使用说明后在调度器中调用JS脚本并设置好相关参数');
if(challengeName){
//使用树脂
if (resinNum){
await genshin.returnMainUi();
keyPress("M");//打开地图
await sleep(1200);
click(2476/2, 96/2);// 点击添加体力
await sleep(600);
click(1660/2, 950/2)// 选择脆弱树脂
await sleep(600);
click(2350/2, 1550/2);// 点击使用
await sleep(600);
for (let i = 1; i < resinNum; ++i) {
click(2586/2, 1296/2);// 点击使用数量
await sleep(600);
}
}
click(2350/2, 1550/2);// 点击使用
await sleep(600);
click(1920/2, 1500/2);// 点击空白处
await sleep(600);
keyPress("VK_ESCAPE");//关闭地图
}
if(samePlace == "YES" ) log.info(`已启用原地连续挑战模式`);
log.info(`前往第1次恢复状态`);
await pathingScript.runFile("assets/recover.json");//回复状态
log.info(`前往第1次讨伐${challengeName}`);
await pathingScript.runFile(`assets/${challengeName}前往.json`);
await keyMouseScript.runFile(`assets/${challengeName}前往键鼠.json`);
for (let i = 0;i < challengeNum; i++) {
await sleep(1000);
if(samePlace == 1&& i > 0){
log.info(`前往第${i+1}次恢复状态`);
await pathingScript.runFile("assets/recover.json");//回复状态
log.info(`前往第${i+1}次讨伐${challengeName}`);
await pathingScript.runFile(`assets/${challengeName}前往.json`);
await keyMouseScript.runFile(`assets/${challengeName}前往键鼠.json`);
}
log.info(`开始第${i+1}次战斗`);
await dispatcher.runTask(new SoloTask("AutoFight"));
log.info(`等待一会儿,避免钟离柱子害人`);
await sleep(10000);
log.info(`${i+1}次领奖`);
await autoNavigateToReward();//前往地脉之花
//await pathingScript.runFile(`assets/${challengeName}领奖.json`);
await sleep(600);
keyPress("F");
await sleep(800);
click(968, 759);//消耗树脂领取
await sleep(3000);
click(975, 1000);//点击空白区域
await sleep(5000);//等待 boss 刷新
}
await pathingScript.runFile("assets/recover.json");//回复状态
log.info(`首领讨伐结束`);
})();