diff --git a/repo/js/waitUntilSpecifiedTime/README.md b/repo/js/waitUntilSpecifiedTime/README.md new file mode 100644 index 00000000..407149e7 --- /dev/null +++ b/repo/js/waitUntilSpecifiedTime/README.md @@ -0,0 +1,43 @@ +# 等待到指定时间点 + +--- + +## 一、功能说明 + +**等待至目标时间点,而非等待设置时长!** + +本脚本的唯一任务是等待至指定时间点: +- 在目标时间前保持等待状态 +- 到达目标时间后自动结束任务 +- 让后面的任务在您设置的特定时间后才开始运行。 + +**定时报告剩余时间** +- 脚本会每5分钟自动报告一次剩余等待时间 +- 让您随时掌握脚本进度 + +--- + +## 二、使用方法 + +1. 添加脚本到配置组 +2. 右键脚本 → 修改自定义配置 +3. 设置目标时间点 + +### 示例说明 + +| 当前时间 | 设置目标时间 | 等待结果 | +|----------|--------------|----------| +| 3:00 | 4:00 | 等待1小时 | +| 4:30 | 4:00 | 等待23.5小时(次日4:00)| + +--- + +## 三、注意事项 + +- 目标时间早于当前时间 → 自动等待到次日 +- 示例: + - 当前时间:4:00 + - 目标时间:3:55 + - 等待:23小时55分钟(次日3:55) + +**请务必设置目标时间点,否则脚本不会执行!** \ No newline at end of file diff --git a/repo/js/waitUntilSpecifiedTime/main.js b/repo/js/waitUntilSpecifiedTime/main.js new file mode 100644 index 00000000..da89596c --- /dev/null +++ b/repo/js/waitUntilSpecifiedTime/main.js @@ -0,0 +1,79 @@ +(async function () { + /** + * 计算从「现在」到下一次指定时分的毫秒差 + * + * @param {number} validatedHours 小时(0–23) + * @param {number} validatedMinutes 分钟(0–59) + * @returns {number} 下一次指定时分与目前时间的毫秒差 + */ + function getTimeUntilNextTime(validatedHours, validatedMinutes) { + const now = new Date(); + const nextTime = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate(), + validatedHours, validatedMinutes, 0, 0 + ); + + // 如果当前时间已经到达或超过今天指定的时刻,就把 nextTime 设为明天的同一时间 + if (now >= nextTime) { + nextTime.setDate(nextTime.getDate() + 1); + } + + return nextTime - now; + } + + setGameMetrics(1920, 1080, 2); + // 启用自动拾取的实时任务 + dispatcher.addTimer(new RealtimeTimer("AutoPick")); + // 启用自动剧情的实时任务 + dispatcher.addTimer(new RealtimeTimer("AutoSkip")); + + // 读取参数 + let specifyHours = Number(settings.specifyHours); + let specifyMinutes = Number(settings.specifyMinutes); + + if (isNaN(specifyHours) || isNaN(specifyMinutes)) { + log.warn(`⚠️请先设置目标时间点⚠️\n + ⚠️⚠️请先设置目标时间点⚠️⚠️\n + ⚠️⚠️⚠️请先设置目标时间点⚠️⚠️⚠️\n`); + } else { + + log.info(`--------------- 将等待至 ${specifyHours}:${specifyMinutes} ---------------`) + + // 计算相差时间(毫秒) + const timeUntilNextTime = getTimeUntilNextTime(specifyHours, specifyMinutes); + const hours = Math.floor(timeUntilNextTime / 3600000); + const minutes = Math.floor((timeUntilNextTime % 3600000) / 60000); + log.info(`距离目标时间 ${specifyHours}:${specifyMinutes},还有 ${hours} 小时 ${minutes} 分钟`); + + // 每5分钟报告一次剩余时间 + const reportInterval = 5 * 60 * 1000; // 5分钟(毫秒) + let remainingTime = timeUntilNextTime; + + while (remainingTime > reportInterval) { + // 等待5分钟或剩余时间(取较小值) + const waitTime = Math.min(reportInterval, remainingTime); + await sleep(waitTime); + + // 更新剩余时间 + remainingTime -= waitTime; + + // 计算剩余小时和分钟 + const remainHours = Math.floor(remainingTime / 3600000); + const remainMinutes = Math.floor((remainingTime % 3600000) / 60000); + + // 报告剩余时间 + log.info(`距离目标时间 ${specifyHours}:${specifyMinutes},还有 ${remainHours} 小时 ${remainMinutes} 分钟`); + } + + // 等待最后剩余的时间(不足5分钟) + if (remainingTime > 0) { + await sleep(remainingTime); + } + + // 多等待5秒 + // await sleep(5000); + log.info(`时间已到!当前时间为 ${specifyHours}:${specifyMinutes}`); + } +})(); \ No newline at end of file diff --git a/repo/js/waitUntilSpecifiedTime/manifest.json b/repo/js/waitUntilSpecifiedTime/manifest.json new file mode 100644 index 00000000..69902125 --- /dev/null +++ b/repo/js/waitUntilSpecifiedTime/manifest.json @@ -0,0 +1,16 @@ +{ + "manifest_version": 1, + "name": "等待到指定时间点", + "version": "1.2", + "bgi_version": "0.42.0", + "description": "等待到指定时间:\n脚本将暂停所有操作,直至到达您设置的特定时间(24小时制)后結束等待,让后面的任务在您设置的特定时间后才开始运行。\n例如:设置04:00会让脚本等到凌晨4点再继续执行\n使用时务必先设置目标时间,否则脚本不会正常运行\n详见README.md", + "authors": [ + { + "name": "蜜柑魚", + "link": "https://github.com/this-Fish" + } + ], + "settings_ui": "settings.json", + "main": "main.js" + } + \ No newline at end of file diff --git a/repo/js/等待到指定时间/settings.json b/repo/js/waitUntilSpecifiedTime/settings.json similarity index 86% rename from repo/js/等待到指定时间/settings.json rename to repo/js/waitUntilSpecifiedTime/settings.json index cbac8e64..1405f97d 100644 --- a/repo/js/等待到指定时间/settings.json +++ b/repo/js/waitUntilSpecifiedTime/settings.json @@ -2,7 +2,7 @@ { "name": "specifyHours", "type": "select", - "label": "设置停止运行的时间(24小时制)\n请同时设置“小时”和“分钟”,否则该配置不会生效。\n\n小时", + "label": "设置目标时间点(24小时制)\n请设置脚本继续执行的具体时间\n示例:\n小时:4\n分钟:30\n脚本会等待至凌晨4点30分\n\n小时", "options": [ "0", "1", diff --git a/repo/js/等待到指定时间/README.md b/repo/js/等待到指定时间/README.md deleted file mode 100644 index b626a902..00000000 --- a/repo/js/等待到指定时间/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# 等待到指定时间 - ---- - -## 一、使用方法及配置建议 - -1. 在配置组中点击 **+ 添加**,搜索并选择「等待到指定时间.js」后加入该组。 - -2. 在配置组界面中,对该脚本点击右键,选择 **修改 js 脚本自定义配置**,设置停止运行时间。 - - 请务必先设置停止运行时间,否则脚本不会正常运行。 - ---- - -## 二、注意事项 - -- 运行时间必须早于停止运行时间,否则无法正常触发。 -- 若设置的停止运行时间已过(即早于当前时间),系统会自动等待至次日相同时间再执行。 -- 示例: - - 当前时间:4:00 - - 停止运行时间:3:55 - - 则实际等待:23 小时 55 分后触发 - diff --git a/repo/js/等待到指定时间/main.js b/repo/js/等待到指定时间/main.js deleted file mode 100644 index 5f91fb31..00000000 --- a/repo/js/等待到指定时间/main.js +++ /dev/null @@ -1,55 +0,0 @@ -(async function () { - /** - * 計算從「現在」到下一次指定時分的毫秒差 - * - * @param {number} validatedHours 小時(0–23) - * @param {number} validatedMinutes 分鐘(0–59) - * @returns {number} 下一次指定時分與目前時間的毫秒差 - */ - function getTimeUntilNextTime(validatedHours, validatedMinutes) { - const now = new Date(); - const nextTime = new Date( - now.getFullYear(), - now.getMonth(), - now.getDate(), - validatedHours, validatedMinutes, 0, 0 - ); - - // 如果目前時間已經到達或超過今天指定的時刻,就把 nextTime 設為明天的同一時間 - if (now >= nextTime) { - nextTime.setDate(nextTime.getDate() + 1); - } - - return nextTime - now; - } - - setGameMetrics(1920, 1080, 2); - // 启用自动拾取的实时任务 - dispatcher.addTimer(new RealtimeTimer("AutoPick")); - // 启用自动剧情的实时任务 - dispatcher.addTimer(new RealtimeTimer("AutoSkip")); - - // 讀取參數 - let specifyHours = Number(settings.specifyHours); - let specifyMinutes = Number(settings.specifyMinutes); - - if (isNaN(specifyHours) || isNaN(specifyMinutes)) { - log.warn(`⚠️先請设置停止运行的时间⚠️\n - ⚠️⚠️先請设置停止运行的时间⚠️⚠️\n - ⚠️⚠️⚠️先請设置停止运行的时间⚠️⚠️⚠️\n`); - } else { - - log.info(`---------------将等待至 ${specifyHours}:${specifyMinutes} ---------------`) - - // 計算相差時間微秒 - const timeUntilNextTime = getTimeUntilNextTime(specifyHours, specifyMinutes); - log.info(`等待 ${Math.floor((timeUntilNextTime / 60000 / 60))} 小时 ${(timeUntilNextTime / 60000 % 60).toFixed(0)} 分 ,直至 ${specifyHours} : ${specifyMinutes}`); - // 多等待10秒 - await sleep(timeUntilNextTime + 10000); - log.info(`时间到了!现在是 ${specifyHours}:${specifyMinutes}`); - } - - //1秒 = 1000 毫秒 - //10秒 = 10000 毫秒 - //1分鐘 = 60000 毫秒 -})(); \ No newline at end of file diff --git a/repo/js/等待到指定时间/manifest.json b/repo/js/等待到指定时间/manifest.json deleted file mode 100644 index 4be6d495..00000000 --- a/repo/js/等待到指定时间/manifest.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "manifest_version": 1, - "name": "等待到指定时间", - "version": "1.1", - "bgi_version": "0.42.0", - "description": "等待到指定时间:\n可用于等到第二天4点执行其他任务\n使用时務必先設定停止運行時間,否則腳本不會正常運行\n詳見README.md", - "authors": [ - { - "name": "蜜柑魚", - "link": "https://github.com/this-Fish" - } - ], - "settings_ui": "settings.json", - "main": "main.js" - } - \ No newline at end of file