444 lines
13 KiB
JavaScript
444 lines
13 KiB
JavaScript
(async function () {
|
||
const startTime = Date.now(); //记录启动时间
|
||
|
||
setGameMetrics(1920, 1080, 1); // 设置游戏运行的分辨率和缩放
|
||
//基础延迟
|
||
let delay = settings.delay || 2000;
|
||
//定义合成台and凯瑟琳的选择路径
|
||
let hct_filePath = settings.hsc_selectValue || "枫丹合成台";
|
||
let ksl_filePath = settings.ksl_selectValue || "枫丹凯瑟琳";
|
||
|
||
|
||
async function hct_AutoPath(locationName) {
|
||
log.info(`即将前往 ${locationName}`);
|
||
try {
|
||
let filePath = `assets/合成台位置/${locationName}.json`;
|
||
await pathingScript.runFile(filePath);
|
||
} catch (error) {
|
||
log.error(`执行 ${locationName} 路径时发生错误`);
|
||
}
|
||
log.info(`已到达 ${locationName}`);
|
||
}
|
||
|
||
async function ksl_AutoPath(locationName) {
|
||
log.info(`即将前往 ${locationName}`);
|
||
try {
|
||
let filePath = `assets/凯瑟琳位置/${locationName}.json`;
|
||
await pathingScript.runFile(filePath);
|
||
} catch (error) {
|
||
log.error(`执行 ${locationName} 路径时发生错误`);
|
||
}
|
||
log.info(`已到达 ${locationName}`);
|
||
}
|
||
|
||
async function prt_AutoPath(locationName) {
|
||
log.info(`即将前往 ${locationName}`);
|
||
try {
|
||
let filePath = `assets/烹饪台位置/${locationName}.json`;
|
||
await pathingScript.runFile(filePath);
|
||
} catch (error) {
|
||
log.error(`执行 ${locationName} 路径时发生错误`);
|
||
}
|
||
log.info(`已到达 ${locationName}`);
|
||
}
|
||
|
||
|
||
// 领取邮件
|
||
keyPress("Escape");
|
||
await sleep(1500);
|
||
click(50, 605);
|
||
await sleep(1500);
|
||
click(150, 1015);
|
||
await sleep(1000);
|
||
click(150, 1015);
|
||
await sleep(1000);
|
||
keyPress("Escape");
|
||
await sleep(1000);
|
||
keyPress("Escape");
|
||
log.info("已完成 领取邮件");
|
||
await sleep(delay);
|
||
|
||
|
||
// 设置世界权限
|
||
let domainName = settings.domainName;
|
||
if (domainName != "默认当前") {
|
||
keyPress("VK_F2")
|
||
await sleep(1000);
|
||
click(160, 1020); // 点击世界权限
|
||
await sleep(1000);
|
||
switch (domainName) {
|
||
case "不允许加入":
|
||
click(330, 870);
|
||
log.info("权限设置为 不允许加入");
|
||
break;
|
||
case "直接加入":
|
||
click(330, 920);
|
||
log.info("权限设置为 直接加入");
|
||
break;
|
||
case "确认后可加入":
|
||
click(330, 970);
|
||
log.info("权限设置为 确认后可加入");
|
||
break;
|
||
default:
|
||
click(330, 870); // 为空不允许
|
||
log.info("锁门");
|
||
await sleep(2000);
|
||
keyPress("Escape");
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
// 前往_合成台
|
||
await hct_AutoPath(hct_filePath);
|
||
await sleep(1000);
|
||
|
||
|
||
// 合成浓缩树脂
|
||
keyPress("F");
|
||
await sleep(2000);
|
||
click(960, 540);
|
||
await sleep(1000);
|
||
click(960, 540);
|
||
await sleep(1000);
|
||
click(1750, 1010); //点击合成
|
||
await sleep(5000);
|
||
keyPress("Escape");
|
||
await sleep(1000);
|
||
keyPress("Escape"); // 确保完全退出合成
|
||
log.info("已完成 合成浓缩树脂");
|
||
await sleep(delay);
|
||
|
||
|
||
// 自动秘境
|
||
if (settings.autoInstance == "是" | settings.autoInstance == undefined) {
|
||
while (true) {
|
||
try {
|
||
await dispatcher.runTask(new SoloTask("AutoDomain"));
|
||
await sleep(500);
|
||
break;
|
||
} catch (ex) {
|
||
if (ex.message.includes("检测到复苏界面")) {
|
||
log.info("复活后,继续执行自动秘境。");
|
||
continue;
|
||
}
|
||
else {
|
||
// 如果不包含 "检测到复苏界面",则继续抛出异常
|
||
throw ex;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
// 分解狗粮
|
||
if (settings.decomposeDogFood == "是" | settings.decomposeDogFood == undefined) {
|
||
keyPress("B");
|
||
await sleep(1000);
|
||
click(670, 40);
|
||
await sleep(1000);
|
||
click(660, 1010);
|
||
await sleep(1000);
|
||
click(300, 1020);
|
||
await sleep(500);
|
||
click(300, 380);
|
||
await sleep(50);
|
||
click(300, 300);
|
||
await sleep(50);
|
||
click(300, 220);
|
||
await sleep(50);
|
||
click(300, 150);
|
||
await sleep(500);
|
||
click(340, 1010);
|
||
await sleep(800);
|
||
click(1740, 1020);
|
||
await sleep(800);
|
||
click(1180, 750);
|
||
await sleep(800);
|
||
click(950, 800);
|
||
await sleep(800);
|
||
keyPress("Escape");
|
||
await sleep(1000);
|
||
keyPress("Escape");
|
||
log.info("已完成 分解狗粮");
|
||
await sleep(1000);
|
||
}
|
||
|
||
|
||
// 前往_凯瑟琳
|
||
await ksl_AutoPath(ksl_filePath);
|
||
await sleep(1000);
|
||
|
||
|
||
// 领取历练点
|
||
keyPress("F1");
|
||
await sleep(2000);
|
||
click(290, 345);
|
||
await sleep(1000);
|
||
click(1550, 755);
|
||
await sleep(1000);
|
||
click(1550, 755);
|
||
await sleep(1500);
|
||
// click(1670, 235);
|
||
keyPress("Escape");
|
||
log.info("已完成 领取历练点");
|
||
await sleep(delay);
|
||
|
||
|
||
// 领取每日委托奖励
|
||
keyPress("F");
|
||
log.info("按下F键");
|
||
await sleep(1000);
|
||
click(960, 540);
|
||
await sleep(1000);
|
||
click(1380, 425);// 点击坐标(1380, 425)(领取「每日委托」奖励)
|
||
await sleep(1000);
|
||
click(960, 540);
|
||
await sleep(2000);
|
||
click(960, 960);// 点击坐标(960, 960)(关闭奖励弹出页面)
|
||
log.info("已完成 领取每日委托奖励");
|
||
await sleep(delay);
|
||
|
||
|
||
// 重新探索派遣
|
||
keyPress("F");
|
||
await sleep(1800);
|
||
click(960, 540);
|
||
await sleep(1000);
|
||
click(1400, 580);
|
||
await sleep(1000);
|
||
click(160, 1010);
|
||
await sleep(1000);
|
||
click(1160, 1020);
|
||
await sleep(1000);
|
||
keyPress("Escape");
|
||
log.info("已完成 重新探索派遣");
|
||
await sleep(delay);
|
||
|
||
|
||
// 领取纪行奖励
|
||
keyPress("F4");
|
||
await sleep(1500);
|
||
click(960, 50);
|
||
await sleep(1000);
|
||
click(1720, 980);
|
||
await sleep(2000);
|
||
click(860, 50);
|
||
await sleep(1000);
|
||
click(1720, 980);
|
||
await sleep(1000);
|
||
keyPress("Escape");
|
||
await sleep(1000);
|
||
keyPress("Escape");
|
||
log.info("已完成 领取纪行奖励");
|
||
await sleep(delay);
|
||
|
||
|
||
// 前往_凯瑟琳
|
||
await genshin.tp(4515, 3630);
|
||
await sleep(1000);
|
||
|
||
|
||
//切换至抓晶蝶队伍
|
||
if (settings.catchButterfly == "是" | settings.catchButterfly == undefined) {
|
||
keyPress("L");
|
||
await sleep(3000);
|
||
click(75, 1020);
|
||
await sleep(200);
|
||
click(700, 115);
|
||
await sleep(200);
|
||
click(700, 115);
|
||
await sleep(300);
|
||
click(75, 200);
|
||
await sleep(800);
|
||
click(75, 1020);
|
||
await sleep(800);
|
||
let tempVar = settings.number || 5;
|
||
if (tempVar < 9) { // 向右点击
|
||
for (let i = 1; i < tempVar; i++) {
|
||
click(1850, 540);
|
||
await sleep(50);
|
||
}
|
||
} else { // 向左点击
|
||
tempVar = 16 - tempVar
|
||
for (let i = 0; i < tempVar; i++) {
|
||
click(75, 540);
|
||
await sleep(50);
|
||
}
|
||
}
|
||
click(1555, 1020);
|
||
await sleep(1000);
|
||
keyPress("Escape");
|
||
log.info("已切换至第" + settings.number || 5 + "队");
|
||
await sleep(delay);
|
||
}
|
||
|
||
//切换角色
|
||
keyPress("1");
|
||
log.info("已切换至第1个角色");
|
||
|
||
|
||
// 进入尘歌壶
|
||
keyPress("B");
|
||
await sleep(1000);
|
||
click(1060, 50);
|
||
await sleep(500);
|
||
click(770, 180);
|
||
await sleep(300);
|
||
click(1690, 1010);
|
||
await sleep(1000);
|
||
keyPress("F");
|
||
await sleep(10000);
|
||
log.info("已完成 进入尘歌壶");
|
||
|
||
|
||
// 如果延迟时间大于3000ms 执行防止加载卡岩
|
||
if (delay > 3000) {
|
||
await sleep(3000);
|
||
log.info("当前基础延迟大于{time},已等待防止加载卡岩", "3000ms");
|
||
}
|
||
|
||
|
||
// 尘歌壶找阿圆
|
||
(async function () {
|
||
// 绘绮庭路径
|
||
const pathingA = async function () {
|
||
keyDown("S"); // 按下 S 键
|
||
await sleep(500); // 等待 500ms
|
||
keyUp("S"); // 松开 S 键
|
||
await sleep(500); // 等待 500ms
|
||
keyDown("S"); // 按下 S 键
|
||
keyDown("A"); // 按下 A 键
|
||
await sleep(2100); // 等待 2100ms
|
||
keyUp("S"); // 松开 S 键
|
||
keyUp("A"); // 松开 A 键
|
||
log.info("绮庭路径执行完毕");
|
||
};
|
||
// 妙香林路径
|
||
const pathingB = async function () {
|
||
keyDown("D"); // 按下 D 键
|
||
await sleep(1500); // 等待 1500ms
|
||
keyUp("D"); // 松开 D 键
|
||
log.info("妙香林路径执行完毕");
|
||
};
|
||
// 黛翠峰&罗浮洞路径
|
||
const pathingC = async function () {
|
||
keyDown("D"); // 按下 D 键
|
||
await sleep(500); // 等待 500ms
|
||
keyUp("D"); // 松开 D 键
|
||
log.info("黛翠峰&罗浮洞路径执行完毕");
|
||
};
|
||
// 清琼岛路径
|
||
const pathingD = async function () {
|
||
keyDown("D");
|
||
await sleep(500);
|
||
keyUp("D");
|
||
log.info("清琼岛路径执行完毕");
|
||
};
|
||
|
||
// 读取用户设置
|
||
let path = settings.path !== undefined ? settings.path : ''; // 使用设置的路径
|
||
log.debug(`path: ${path}`);
|
||
|
||
|
||
// 根据选择的路径执行相应操作,默认执行路径A(绘绮庭路径)
|
||
if (path === '绘绮庭') {
|
||
log.info('开始执行绮庭路径');
|
||
await pathingA(); // 执行绘绮庭路径
|
||
} else if (path === '妙香林') {
|
||
log.info('开始执行妙香林路径');
|
||
await pathingB(); // 执行妙香林路径
|
||
} else if (path === '黛翠峰&罗浮洞') {
|
||
log.info('开始执行黛翠峰&罗浮洞路径');
|
||
await pathingC(); // 执行黛翠峰or罗浮洞路径
|
||
} else if (path === '清琼岛') {
|
||
log.info('开始执行清琼岛路径');
|
||
await pathingD(); // 执行清琼岛路径
|
||
} else {
|
||
log.info('未选择有效路径,执行默认路径D(清琼岛)');
|
||
await pathingD(); // 默认执行路径A(清琼岛)
|
||
}
|
||
|
||
})();
|
||
|
||
|
||
//领取洞天宝钱和好感度
|
||
await sleep(1000);
|
||
keyPress("F");
|
||
await sleep(2000);
|
||
click(1370, 420);
|
||
await sleep(1500);
|
||
click(1370, 420);
|
||
|
||
await sleep(800);
|
||
click(1800, 710); //领取好感
|
||
await sleep(200);
|
||
click(1345, 300); //点击x
|
||
await sleep(200);
|
||
click(1080, 960); //领取洞天宝钱
|
||
await sleep(200);
|
||
click(1345, 300); //点击x
|
||
|
||
await sleep(500);
|
||
click(1865, 44); //点击右上角x退出
|
||
await sleep(3000);
|
||
click(1300, 800);
|
||
await sleep(1000);
|
||
click(1300, 800);
|
||
log.info("已完成 领取洞天宝钱和好感");
|
||
await sleep(3000);
|
||
|
||
|
||
//抓晶蝶
|
||
if (settings.catchButterfly == "是" | settings.catchButterfly == undefined) {
|
||
dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true })); // 启用自动拾取的实时任务
|
||
log.info('开始捕捉晶蝶,请在队伍中务必携带{zyyy},使用成男/成女角色', '早柚/瑶瑶');
|
||
async function captureCrystalfly(locationName, x, y, num) {
|
||
log.info('前往 {name}', locationName);
|
||
await genshin.tp(x, y);
|
||
await sleep(1000);
|
||
log.info('尝试捕捉晶蝶, {num}只', num);
|
||
let filePath = `assets/晶蝶位置/${locationName}.json`;
|
||
await keyMouseScript.runFile(filePath);
|
||
}
|
||
await captureCrystalfly('枫丹-塔拉塔海谷', 4328, 3960, 4);
|
||
await captureCrystalfly('枫丹-枫丹廷区', 4822, 3628, 3);
|
||
await captureCrystalfly('枫丹-苍白的遗荣', 4188, 2992, 2);
|
||
await captureCrystalfly('枫丹-幽林雾道', 3376, 3290, 2);
|
||
await captureCrystalfly('枫丹-卡布狄斯堡遗迹上方', 3554, 3024, 4);
|
||
await captureCrystalfly('枫丹-卡布狄斯堡遗迹下方_优化', 3374, 2699, 3);
|
||
await captureCrystalfly('枫丹-莫尔泰区', 3810, 2334, 2);
|
||
await captureCrystalfly('枫丹-特别温暖的地方', 4790, 2520, 3);
|
||
|
||
await captureCrystalfly('须弥-化城郭左侧', 2699, -767, 2);
|
||
await captureCrystalfly('须弥-下风蚀地', 4452, -2456, 3);
|
||
dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": false })); // 关闭自动拾取的实时任务
|
||
}
|
||
|
||
const endTime = Date.now();
|
||
const totalTimeInSeconds = (endTime - startTime) / 1000;
|
||
const minutes = Math.floor(totalTimeInSeconds / 60);
|
||
const seconds = totalTimeInSeconds % 60;
|
||
const formattedTime = `${minutes}分${seconds.toFixed(0).padStart(2, '0')}秒`;
|
||
log.info(`已完成总耗时: ${formattedTime}`);
|
||
await sleep(2000);
|
||
log.info("已完成 所有内容 结束-Tzi");
|
||
await sleep(2000);
|
||
|
||
// 结束游戏
|
||
if (settings.exitGame == "是" | settings.exitGame == undefined) {
|
||
for (let i = 0; i < 5; i++) {
|
||
log.info('即将在 {num}s 后退出', 5 - i + "s");
|
||
await sleep(1000);
|
||
}
|
||
keyDown("MENU");
|
||
keyDown("F4");
|
||
await sleep(50);
|
||
keyUp("MENU");
|
||
keyUp("F4");
|
||
}
|
||
|
||
|
||
})();
|