JS : 等待至指定时间点 1.2 (#1318)
* Delete repo/js/等待到指定时间 directory * js : 等待至指定时间点 1.2 1.每5分钟报告一次剩余时间 2.改善描述
This commit is contained in:
43
repo/js/waitUntilSpecifiedTime/README.md
Normal file
43
repo/js/waitUntilSpecifiedTime/README.md
Normal file
@@ -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)
|
||||
|
||||
**请务必设置目标时间点,否则脚本不会执行!**
|
||||
79
repo/js/waitUntilSpecifiedTime/main.js
Normal file
79
repo/js/waitUntilSpecifiedTime/main.js
Normal file
@@ -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}`);
|
||||
}
|
||||
})();
|
||||
16
repo/js/waitUntilSpecifiedTime/manifest.json
Normal file
16
repo/js/waitUntilSpecifiedTime/manifest.json
Normal file
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
@@ -1,22 +0,0 @@
|
||||
# 等待到指定时间
|
||||
|
||||
---
|
||||
|
||||
## 一、使用方法及配置建议
|
||||
|
||||
1. 在配置组中点击 **+ 添加**,搜索并选择「等待到指定时间.js」后加入该组。
|
||||
|
||||
2. 在配置组界面中,对该脚本点击右键,选择 **修改 js 脚本自定义配置**,设置停止运行时间。
|
||||
- 请务必先设置停止运行时间,否则脚本不会正常运行。
|
||||
|
||||
---
|
||||
|
||||
## 二、注意事项
|
||||
|
||||
- 运行时间必须早于停止运行时间,否则无法正常触发。
|
||||
- 若设置的停止运行时间已过(即早于当前时间),系统会自动等待至次日相同时间再执行。
|
||||
- 示例:
|
||||
- 当前时间:4:00
|
||||
- 停止运行时间:3:55
|
||||
- 则实际等待:23 小时 55 分后触发
|
||||
|
||||
@@ -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 毫秒
|
||||
})();
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user