JS脚本:打牌一条龙支持 CD 管理 (#965)
* Update manifest.json * Update main.js * Add files via upload
This commit is contained in:
1
repo/js/七圣召唤七日历练全自动/assets/weekly.txt
Normal file
1
repo/js/七圣召唤七日历练全自动/assets/weekly.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
2025-05-02T03:24:01.736Z
|
||||||
@@ -35,10 +35,140 @@ async function switchCardTeam(Name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
(async function () {
|
(async function () {
|
||||||
|
|
||||||
|
|
||||||
// 存储挑战玩家信息
|
// 存储挑战玩家信息
|
||||||
let textArray = [];
|
let textArray = [];
|
||||||
let skipNum = 0;
|
let skipNum = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断任务是否已刷新
|
||||||
|
* @param {string} filePath - 存储最后完成时间的文件路径
|
||||||
|
* @param {object} options - 配置选项
|
||||||
|
* @param {string} [options.refreshType] - 刷新类型: 'hourly'|'daily'|'weekly'|'monthly'|'custom'
|
||||||
|
* @param {number} [options.customHours] - 自定义小时数(用于'custom'类型)
|
||||||
|
* @param {number} [options.dailyHour=4] - 每日刷新的小时(0-23)
|
||||||
|
* @param {number} [options.weeklyDay=1] - 每周刷新的星期(0-6, 0是周日)
|
||||||
|
* @param {number} [options.weeklyHour=4] - 每周刷新的小时(0-23)
|
||||||
|
* @param {number} [options.monthlyDay=1] - 每月刷新的日期(1-31)
|
||||||
|
* @param {number} [options.monthlyHour=4] - 每月刷新的小时(0-23)
|
||||||
|
* @returns {Promise<boolean>} - 是否已刷新
|
||||||
|
*/
|
||||||
|
async function isTaskRefreshed(filePath, options = {}) {
|
||||||
|
const {
|
||||||
|
refreshType = 'hourly', // 默认每小时刷新
|
||||||
|
customHours = 24, // 自定义刷新小时数默认24
|
||||||
|
dailyHour = 4, // 每日刷新默认凌晨4点
|
||||||
|
weeklyDay = 1, // 每周刷新默认周一(0是周日)
|
||||||
|
weeklyHour = 4, // 每周刷新默认凌晨4点
|
||||||
|
monthlyDay = 1, // 每月刷新默认第1天
|
||||||
|
monthlyHour = 4 // 每月刷新默认凌晨4点
|
||||||
|
} = options;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 读取文件内容
|
||||||
|
let content = await file.readText(filePath);
|
||||||
|
const lastTime = new Date(content);
|
||||||
|
const nowTime = new Date();
|
||||||
|
|
||||||
|
|
||||||
|
let shouldRefresh = false;
|
||||||
|
|
||||||
|
|
||||||
|
switch (refreshType) {
|
||||||
|
case 'hourly': // 每小时刷新
|
||||||
|
shouldRefresh = (nowTime - lastTime) >= 3600 * 1000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'daily': // 每天固定时间刷新
|
||||||
|
// 检查是否已经过了当天的刷新时间
|
||||||
|
const todayRefresh = new Date(nowTime);
|
||||||
|
todayRefresh.setHours(dailyHour, 0, 0, 0);
|
||||||
|
|
||||||
|
// 如果当前时间已经过了今天的刷新时间,检查上次完成时间是否在今天刷新之前
|
||||||
|
if (nowTime >= todayRefresh) {
|
||||||
|
shouldRefresh = lastTime < todayRefresh;
|
||||||
|
} else {
|
||||||
|
// 否则检查上次完成时间是否在昨天刷新之前
|
||||||
|
const yesterdayRefresh = new Date(todayRefresh);
|
||||||
|
yesterdayRefresh.setDate(yesterdayRefresh.getDate() - 1);
|
||||||
|
shouldRefresh = lastTime < yesterdayRefresh;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'weekly': // 每周固定时间刷新
|
||||||
|
// 获取本周的刷新时间
|
||||||
|
const thisWeekRefresh = new Date(nowTime);
|
||||||
|
// 计算与本周指定星期几的差值
|
||||||
|
const dayDiff = (thisWeekRefresh.getDay() - weeklyDay + 7) % 7;
|
||||||
|
thisWeekRefresh.setDate(thisWeekRefresh.getDate() - dayDiff);
|
||||||
|
thisWeekRefresh.setHours(weeklyHour, 0, 0, 0);
|
||||||
|
|
||||||
|
// 如果当前时间已经过了本周的刷新时间
|
||||||
|
if (nowTime >= thisWeekRefresh) {
|
||||||
|
shouldRefresh = lastTime < thisWeekRefresh;
|
||||||
|
} else {
|
||||||
|
// 否则检查上次完成时间是否在上周刷新之前
|
||||||
|
const lastWeekRefresh = new Date(thisWeekRefresh);
|
||||||
|
lastWeekRefresh.setDate(lastWeekRefresh.getDate() - 7);
|
||||||
|
shouldRefresh = lastTime < lastWeekRefresh;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'monthly': // 每月固定时间刷新
|
||||||
|
// 获取本月的刷新时间
|
||||||
|
const thisMonthRefresh = new Date(nowTime);
|
||||||
|
// 设置为本月指定日期的凌晨
|
||||||
|
thisMonthRefresh.setDate(monthlyDay);
|
||||||
|
thisMonthRefresh.setHours(monthlyHour, 0, 0, 0);
|
||||||
|
|
||||||
|
// 如果当前时间已经过了本月的刷新时间
|
||||||
|
if (nowTime >= thisMonthRefresh) {
|
||||||
|
shouldRefresh = lastTime < thisMonthRefresh;
|
||||||
|
} else {
|
||||||
|
// 否则检查上次完成时间是否在上月刷新之前
|
||||||
|
const lastMonthRefresh = new Date(thisMonthRefresh);
|
||||||
|
lastMonthRefresh.setMonth(lastMonthRefresh.getMonth() - 1);
|
||||||
|
shouldRefresh = lastTime < lastMonthRefresh;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'custom': // 自定义小时数刷新
|
||||||
|
shouldRefresh = (nowTime - lastTime) >= customHours * 3600 * 1000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Error(`未知的刷新类型: ${refreshType}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果文件内容无效或不存在,视为需要刷新
|
||||||
|
if (!content || isNaN(lastTime.getTime())) {
|
||||||
|
await file.writeText(filePath, '');
|
||||||
|
shouldRefresh = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shouldRefresh) {
|
||||||
|
notification.send(`任务已经刷新,执行脚本`);
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
notification.send(`任务未刷新,跳过脚本`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
// 如果文件不存在,创建新文件并返回true(视为需要刷新)
|
||||||
|
const createResult = await file.writeText(filePath, '');
|
||||||
|
if (createResult) {
|
||||||
|
log.info("创建新文件成功");
|
||||||
|
await isTaskRefreshed(filePath, options = {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//检查挑战结果 await checkChallengeResults();
|
//检查挑战结果 await checkChallengeResults();
|
||||||
async function checkChallengeResults() {
|
async function checkChallengeResults() {
|
||||||
const region1 = RecognitionObject.ocr(785, 890, 340, 82); // 对话区域
|
const region1 = RecognitionObject.ocr(785, 890, 340, 82); // 对话区域
|
||||||
@@ -465,19 +595,9 @@ async function gotoTable6() {
|
|||||||
await sleep(500);
|
await sleep(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function openMap() {
|
async function main() {
|
||||||
await gotoTavern();
|
|
||||||
keyDown("w");
|
|
||||||
await sleep(2000);
|
|
||||||
keyUp("w");
|
|
||||||
keyDown("d");
|
|
||||||
await sleep(5000);
|
|
||||||
keyUp("d");
|
|
||||||
await sleep(700);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//主流程
|
//主流程
|
||||||
|
const nowTime = new Date();
|
||||||
log.info(`前往猫尾酒馆`);
|
log.info(`前往猫尾酒馆`);
|
||||||
await gotoTavern();
|
await gotoTavern();
|
||||||
await captureAndStoreTexts();
|
await captureAndStoreTexts();
|
||||||
@@ -493,11 +613,23 @@ for (let i = 0; i < 20; i++) {
|
|||||||
await searchAndClickTexts();
|
await searchAndClickTexts();
|
||||||
}
|
}
|
||||||
await genshin.returnMainUi();
|
await genshin.returnMainUi();
|
||||||
await sleep(500);
|
await captureAndStoreTexts();
|
||||||
keyPress("F6");
|
notification.send(`打牌结束、剩余挑战人数:${textArray.length}`);
|
||||||
await sleep(1000);
|
// 更新最后完成时间
|
||||||
click(300, 370); //点击七日历练
|
if(textArray.length === 0) await file.writeText("assets/weekly.txt", nowTime.toISOString());
|
||||||
await sleep(1000);
|
|
||||||
log.info(`打牌结束`);
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if( await isTaskRefreshed("assets/weekly.txt", {
|
||||||
|
refreshType: 'weekly',
|
||||||
|
weeklyDay: 1, // 周一
|
||||||
|
weeklyHour: 4 // 凌晨4点
|
||||||
|
})){
|
||||||
|
await main();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "打牌一条龙",
|
"name": "打牌一条龙",
|
||||||
"version": "1.9.2",
|
"version": "1.9.3",
|
||||||
"description": "只靠一个牌组的话,胜率还是太低了,所以有没有既简单又强势的卡组推荐下呢?",
|
"description": "已添加 CD 管理,执行完后会检测是否全部挑战成功,之后会记录本次时间进入CD,如果想要重置请前往assets/weekly.txt中删除内容",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "柒叶子",
|
"name": "柒叶子",
|
||||||
|
|||||||
Reference in New Issue
Block a user