mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-15 03:23:22 +08:00
* 尘歌壶一条龙-增加指定星期几运行 * -增加指定星期几运行(多選) * 纪行周常-10个boss一条龙-增加指定星期几运行 * 纪行周常-10个boss一条龙-增加指定星期几运行
182 lines
6.4 KiB
JavaScript
182 lines
6.4 KiB
JavaScript
// 识图资料
|
||
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-6,0=星期日)
|
||
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;
|
||
}
|
||
})(); |