JS : 等待至指定时间点 1.2 (#1318)
Some checks failed
Build repo.json / build (18.x) (push) Has been cancelled
Build repo.json / upload (push) Has been cancelled

* Delete repo/js/等待到指定时间 directory

* js : 等待至指定时间点 1.2

1.每5分钟报告一次剩余时间
2.改善描述
This commit is contained in:
this-Fish
2025-07-10 09:29:56 +08:00
committed by GitHub
parent 6ab2a6a475
commit 1a17792d7f
7 changed files with 139 additions and 94 deletions

View 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
**请务必设置目标时间点,否则脚本不会执行!**

View File

@@ -0,0 +1,79 @@
(async function () {
/**
* 计算从「现在」到下一次指定时分的毫秒差
*
* @param {number} validatedHours 小时023
* @param {number} validatedMinutes 分钟059
* @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}`);
}
})();

View 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"
}

View File

@@ -0,0 +1,100 @@
[
{
"name": "specifyHours",
"type": "select",
"label": "设置目标时间点(24小时制)\n请设置脚本继续执行的具体时间\n示例\n小时4\n分钟30\n脚本会等待至凌晨4点30分\n\n小时",
"options": [
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23"
]
},
{
"name": "specifyMinutes",
"type": "select",
"label": "分钟",
"options": [
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"40",
"41",
"42",
"43",
"44",
"45",
"46",
"47",
"48",
"49",
"50",
"51",
"52",
"53",
"54",
"55",
"56",
"57",
"58",
"59"
]
}
]