Files

147 lines
6.3 KiB
JavaScript
Raw Permalink 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 () {
try {
setGameMetrics(1920, 1080, 1)
await genshin.returnMainUi();
let enable = settings.enable;
let ore = settings.ore;
if (!enable) {
throw new Error("请配置好脚本配置!");
}
if (!ore) {
throw new Error("不是吧,哥们,你配置好了吗?用什么矿石啊?");
}
// 读取状态数据,如果文件不存在则创建默认状态
let statusData = { isPlaced: false, collectionTime: 0 };
try {
const statusContent = file.readTextSync("status.json");
if (statusContent) {
statusData = JSON.parse(statusContent);
}
} catch (err) {
log.info("未找到状态文件或文件格式错误,创建默认状态");
await file.WriteTextSync("status.json", JSON.stringify(statusData, null, 2));
}
// 根据当前状态决定操作类型
const isPlaced = statusData.isPlaced;
const now = new Date().getTime();
const operationType = isPlaced ? "收集" : "放置";
log.info(`当前动作: ${operationType}`);
log.info("传送至枫丹冒险家协会锚点");
await genshin.tp(4509, 3631);
await sleep(1000);
if (!isPlaced) {
// 放置操作
log.info("放置晶蝶诱捕装置");
keyPress("B");
await sleep(1000);
let backpackTitle = captureGameRegion();
let resList = backpackTitle.findMulti(RecognitionObject.ocr(130, 0, 200, 50));
for (let i = 0; i < resList.count; i++) {
let res = resList[i];
if (!res.text.includes("小道")) {
log.info("点击小道具栏");
click(1060, 40);
await sleep(1000);
}
}
let crystalflyTrap = captureGameRegion().find(RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/icon/晶蝶诱捕装置.png")))
if (crystalflyTrap) {
log.info("选择晶蝶诱捕装置");
crystalflyTrap.click();
await sleep(1000);
log.info("点击放置");
click(1700, 1010);
} else {
log.error("背包内未找到晶蝶诱捕装置,请检查背包内是否拥有该道具!");
throw new Error("背包内未找到晶蝶诱捕装置");
}
await genshin.returnMainUi();
await sleep(1000);
let captureRegion = captureGameRegion();
let resList2 = captureRegion.findMulti(RecognitionObject.ocr(1210, 510, 210, 50));
for (let i = 0; i < resList2.count; i++) {
let res = resList2[i];
if (!res.text.includes("晶蝶") || !res.text.includes("诱捕") || !res.text.includes("装置")) {
log.error("当前光标不是晶蝶诱捕装置");
throw new Error("当前光标不是晶蝶诱捕装置");
}
}
log.info("添加矿石");
keyPress("F");
await sleep(1000);
let oreIcon = captureGameRegion().find(RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/icon/${ore}.png`)))
if (oreIcon) {
let oreCount = captureGameRegion().find(RecognitionObject.ocr(oreIcon.x - 20, 240, 90, 30));
if (oreCount.text < 30) {
log.error(`${ore}数量不足30个`);
throw new Error(`${ore}数量不足30个`);
}
log.info(`选择${ore}`);
oreIcon.click();
await sleep(200);
log.info("数量拉满");
click(460, 1010);
await sleep(200);
log.info("启动!");
click(1750, 1020);
await sleep(200);
log.info("启动!!!");
click(1200, 750);
await sleep(200);
await genshin.returnMainUi();
} else {
log.error(`未找到${ore},请检查背包内是否拥有该矿石!`);
throw new Error(`未找到${ore}`);
}
// 更新状态信息
log.info(`当前时间: ${new Date().toLocaleString()}`);
let collectionTime = new Date().getTime() + 7 * 24 * 60 * 60 * 1000;
log.info(`领取时间: ${new Date(collectionTime).toLocaleString()}`);
// 使用JSON格式保存状态
statusData.isPlaced = true;
statusData.collectionTime = collectionTime;
await file.WriteTextSync("status.json", JSON.stringify(statusData, null, 2));
log.info("状态保存成功");
} else {
// 收集操作
log.info(`读取领取时间成功`);
const readableTime = new Date(statusData.collectionTime).toLocaleString();
log.info(`领取时间: ${readableTime}`);
if (now < statusData.collectionTime) {
log.error("还没到领取时间");
throw new Error(`还没到领取时间,领取时间: ${readableTime}`);
}
let captureRegion = captureGameRegion();
let resList = captureRegion.findMulti(RecognitionObject.ocr(1210, 510, 210, 50));
for (let i = 0; i < resList.count; i++) {
let res = resList[i];
if (!res.text.includes("晶蝶") || !res.text.includes("诱捕") || !res.text.includes("装置")) {
log.error("当前光标不是晶蝶诱捕装置");
throw new Error("当前光标不是晶蝶诱捕装置");
}
}
log.info("收获晶蝶");
keyPress("F");
// 更新状态
statusData.isPlaced = false;
statusData.collectionTime = 0;
await file.WriteTextSync("status.json", JSON.stringify(statusData, null, 2));
await sleep(3000);
keyPress("VK_ESCAPE");
}
} catch (e) {
log.error(`执行脚本时出错:${e}`, e.message);
}
})();