Files
this-Fish 69706bf711 部份腳本-增加指定星期几运行 (#2796)
* 尘歌壶一条龙-增加指定星期几运行

* -增加指定星期几运行(多選)

* 纪行周常-10个boss一条龙-增加指定星期几运行

* 纪行周常-10个boss一条龙-增加指定星期几运行
2026-01-28 15:34:38 +08:00

182 lines
6.4 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.
// 识图资料
const confirmRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/confirm.png"));
const CondensedResin = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/Condensed_Resin.png"));
const Clear = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/Clear.png"));
// 读取配置文件
let location = settings.location;
/**
* 根据星期配置判断是否运行脚本
* @param {Array} weekSelection - 用户选择的星期数组
* @returns {boolean} 是否符合运行条件
*/
function shouldRunByWeekConfig(weekSelection) {
const weekDays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
// 检查配置是否为空
if (!Array.isArray(weekSelection) || weekSelection.length === 0) {
return false;
}
// 取得调整后的星期0-60=星期日)
const getAdjustedDayOfWeek = () => {
const now = new Date();
let dayOfWeek = now.getDay(); // 0-6
const hours = now.getHours();
// 凌晨 00:00~04:00 视为前一天
if (hours < 4) {
dayOfWeek = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},视为前一天(${weekDays[dayOfWeek]}`);
} else {
log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},使用当天(${weekDays[dayOfWeek]}`);
}
return dayOfWeek;
};
const adjustedDayOfWeek = getAdjustedDayOfWeek();
const currentChineseDay = weekDays[adjustedDayOfWeek];
// 检查是否在允许的星期范围内
const shouldRun = weekSelection.includes(currentChineseDay);
return shouldRun;
}
// 执行路径
async function AutoPath(locationName) {
try {
let filePath = `assets/Pathing/${locationName}.json`;
await pathingScript.runFile(filePath);
return true;
} catch (error) {
log.error(`执行 ${locationName} 路径时发生错误`);
log.error(error.message);
}
return false;
}
// 合成浓缩树脂
async function condensedResin() {
let captureRegion = captureGameRegion();
// 记录是否找到合成台
let Alchemy = false;
let retryCount = 0;
const maxRetries = 2; // 最大重试次数
while (!Alchemy && retryCount <= maxRetries) {
// 对整个区域进行 OCR
let resList = captureRegion.findMulti(RecognitionObject.ocrThis);
captureRegion.dispose();
for (let i = 0; i < resList.count; i++) {
if (resList[i].text.includes("合成")) {
// 找到合成台,点击合成台
log.info("寻找合成台成功,开始与合成台交互");
keyDown("VK_MENU");// Alt
await sleep(1000);
click(resList[i].x + 30, resList[i].y + 30); // 点击合成台选项
await sleep(1000);
click(resList[i].x + 30, resList[i].y + 30); // 跳过合成台对话
await sleep(1500);
keyUp("VK_MENU");// Alt
await sleep(1000);
const ro0 = captureGameRegion();
let Resin0 = ro0.find(Clear);
ro0.dispose();
if (Resin0.isExist()) {
log.info("筛选中,先取消筛选");
await sleep(750);
Resin0.click();
await sleep(750);
}
// 图像识别浓缩树脂
const ro1 = captureGameRegion();
let Resin = ro1.find(CondensedResin);
ro1.dispose();
if (Resin.isExist()) {
Resin.click();
log.info("找到浓缩树脂,开始合成体力");
await sleep(750);
const ro2 = captureGameRegion();
let confirm = ro2.find(confirmRo);
ro2.dispose();
if (confirm.isExist()) {
confirm.click(); // 点击合成
await sleep(3000);
click(975, 900); // 点击确认,关闭合成成功资料
log.info("已完成合成浓缩树脂");
}
} else {
log.warn("未能识别到浓缩树脂,不合成");
}
await sleep(1000);
click(1845, 50); // 关闭页面
await sleep(2000);
Alchemy = true;
break; // 找到合成台后跳出循环
}
}
if (!Alchemy) {
retryCount++;
if (retryCount <= maxRetries) {
log.warn(`未找到合成台,进行第 (${retryCount}/${maxRetries}) 次重试`);
await sleep(1500);
// 重新尝试路径执行
try {
await AutoPath(location);
await sleep(1000);
captureRegion = captureGameRegion(); // 刷新捕获区域
} catch (error) {
log.error(`路径重试失败: ${error.message}`);
}
}
}
}
if (!Alchemy) {
log.error(`连续${maxRetries}次未能找到合成台,中止任务`);
}
return Alchemy;
}
(async function () {
// 检查配置是否存在
if (!Object.keys(settings).includes("execute_Week")) {
log.error("首次运行前请编辑JS脚本自定义配置");
return;
}
// 检查是否应该运行
const executeWeek = Array.from(settings.execute_Week || []);
if (!shouldRunByWeekConfig(executeWeek)) {
log.info(`交互或拾取:"不运行"`);
return;
}
//main/======================================================================================
setGameMetrics(1920, 1080, 1)
await genshin.returnMainUi();
try {
if (!location) {
location = "蒙德合成台";
log.info(`未设置传送位置,默认前往 ${location}...`);
}
log.info(`正在前往 ${location} 合成浓缩树脂`);
await AutoPath(location);
await sleep(1000);
log.info("寻找合成台");
await condensedResin();
await sleep(1000);
await genshin.returnMainUi();
return;
} catch (e) {
log.error("传送失败,请检查设置");
return;
}
})();