diff --git a/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/assets/run_record.json b/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/assets/run_record.json new file mode 100644 index 000000000..9c01df1ba --- /dev/null +++ b/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/assets/run_record.json @@ -0,0 +1,4 @@ +{ + "alreadyRunCount": 0, + "nextRefreshTime": 1768939200000 +} \ No newline at end of file diff --git a/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/main.js b/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/main.js index 64cd90c16..08db5fd19 100644 --- a/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/main.js +++ b/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/main.js @@ -147,6 +147,43 @@ } } + // 获取下一个凌晨 4 点 (UTC+8) 的时间戳 + function getNextRefreshTimestamp() { + const OFFSET = 8 * 60 * 60 * 1000; // UTC+8 偏移量 + let now = new Date(); + + // 计算当前的 UTC+8 时间 + let utc8Now = new Date(now.getTime() + OFFSET); + + // 构造今日 UTC+8 的凌晨 4 点 + let refresh = new Date(utc8Now); + refresh.setUTCHours(REFRESH_HOUR, 0, 0, 0); + + // 如果当前时间已经过了今天的 4 点,则刷新时间定在明天 4 点 + if (utc8Now.getTime() >= refresh.getTime()) { + refresh.setUTCDate(refresh.getUTCDate() + 1); + } + + // 转回标准时间戳存储 + return refresh.getTime() - OFFSET; + } + + // 读取运行记录 + function readRecord() { + try { + let content = file.readTextSync(RECORD_PATH); + return JSON.parse(content); + } catch (e) { + // 防止文件损坏导致报错 + return { alreadyRunCount: 0, nextRefreshTime: getNextRefreshTimestamp() }; + } + } + + // 写入运行记录 + function saveRecord(record) { + file.writeText(RECORD_PATH, JSON.stringify(record, null, 2)); + } + // 好感核心函数 async function AutoFriendship(runTimes, statueTimes, getMeatMode, delayTime, startTime, ocrTimeout) { for (let i = 0; i < runTimes; i++) { @@ -184,6 +221,8 @@ if (ocrStatus) { log.info(`当前次数:${i + 1}/${runTimes}`); + record.alreadyRunCount++; + saveRecord(record); // 开启急速拾取 dispatcher.addTimer(new RealtimeTimer("AutoPick", { @@ -285,7 +324,6 @@ log.info(message); await sleep(500); } - log.info('兽肉好感开始...'); // 切换队伍 if (!!settings.partyName) { @@ -306,6 +344,30 @@ } const startTime = Date.now(); - await AutoFriendship(runTimes, statueTimes, getMeatMode, delayTime, startTime, ocrTimeout); + // 运行记录相关参数,时区为UTC+8 + const RECORD_PATH = "assets/run_record.json"; + const REFRESH_HOUR = 4; + let record = readRecord(); + // 1. 检查是否超过刷新时间 + if (startTime >= record.nextRefreshTime) { + log.info(">> 检测到已过刷新时间,重置运行次数..."); + record.alreadyRunCount = 0; + record.nextRefreshTime = getNextRefreshTimestamp(); + } + + // 2. 计算需要运行的次数 + // 逻辑:如果没过刷新时间且 >= runTimes 则跳过;如果 < 则运行差值;如果超过了(上面已重置)则运行目标次数 + let timesToRun = runTimes - record.alreadyRunCount; + + if (timesToRun <= 0) { + log.info(`>> 今日已完成 ${record.alreadyRunCount} 次,无需运行。`); + saveRecord(record); // 更新一下可能的刷新时间戳 + return; + } else { + log.info(`>> 今日已完成 ${record.alreadyRunCount} 次,还需运行 ${timesToRun} 次`); + } + + log.info('兽肉好感开始...'); + await AutoFriendship(timesToRun, statueTimes, getMeatMode, delayTime, startTime, ocrTimeout); })(); \ No newline at end of file diff --git a/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/manifest.json b/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/manifest.json index 68b4cad7f..692fd64af 100644 --- a/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/manifest.json +++ b/repo/js/AutoFriendshipEvilBaresItsFangsGetRawMeat/manifest.json @@ -1,18 +1,22 @@ { "manifest_version": 1, "name": "兽肉好感:自动好感度&刷两只鳄鱼兽肉&卡时间", - "version": "1.4.2", + "version": "1.4.3", "bgi_version": "0.44.6", - "tags": ["好感", "兽肉", "突发事件"], + "tags": [ + "好感", + "兽肉", + "突发事件" + ], "description": "通过突发事件:张牙舞爪的恶党刷兽肉,并顺带获取好感度(好感度超过10次后不再获取),请使用满员好感度队伍,并为全体队伍角色配置相应的战斗策略", "authors": [ { - "name": "起个名字好难的喵", - "links":"https://github.com/MisakaAldrich" + "name": "起个名字好难的喵", + "links": "https://github.com/MisakaAldrich" }, { "name": "柒叶子", - "links":"https://github.com/5117600049" + "links": "https://github.com/5117600049" } ], "settings_ui": "settings.json",