js,自动狗粮pro 1.5.0 (#1255)

加入激活路线相关
This commit is contained in:
mno
2025-07-01 20:38:44 +08:00
committed by GitHub
parent 90285642b3
commit f314ec3f2c
11 changed files with 463 additions and 533 deletions

View File

@@ -1,18 +1,28 @@
const DEFAULT_OCR_TIMEOUT_SECONDS = 10;
const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
// 初始化变量并赋予默认值
let lastRunDate = "未知"; // 默认值
let lastEndTime = new Date(); // 默认值为当前时间
let lastRunRoute = "未知"; // 默认值
let records = new Array(7).fill("");
let finished = false;
const accountName = settings.accountName || "默认账户";
let version = "default";
let runnedToday = false;
//预处理
const minIntervalTime = settings.minIntervalTime || "5";
const waitTimePeriod = settings.waitTimePeriod || "4:05-4:45";
const friendshipPartyName = settings.friendshipPartyName || "好感";
const grindPartyName = settings.grindPartyName || "狗粮";
const operationType = settings.operationType || "不卡时间ab交替运行";
const runActivatePath = settings.runActivatePath || false;
let enemyType = "无";
(async function () {
//伪造js结束记录
await fakeLog("自动狗粮重制版", true, true, 0);
//预处理
const minIntervalTime = settings.minIntervalTime || "5";
const waitTimePeriod = settings.waitTimePeriod || "4:05-4:45";
const friendshipPartyName = settings.friendshipPartyName || "好感";
const grindPartyName = settings.grindPartyName || "狗粮";
const operationType = settings.operationType || "不卡时间ab交替运行";
let enemyType = "无";
//处理操作模式信息
switch (operationType) {
case "盗宝团好感卡时间":
@@ -44,8 +54,6 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
//处理记录文件路径
// 获取子文件夹路径
const accountName = settings.accountName || "默认账户";
// Windows文件名非法字符列表
const illegalCharacters = /[\\/:*?"<>|]/;
// Windows保留设备名称列表
@@ -139,12 +147,6 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
// 异步读取文件内容
const content = await file.readText(recordFilePath);
// 初始化变量并赋予默认值
let lastRunDate = "未知"; // 默认值
let lastEndTime = new Date(); // 默认值为当前时间
let lastRunRoute = "未知"; // 默认值
let records = new Array(7).fill("");
// 按行分割内容
const lines = content.split('\n');
let recordIndex = 0;
@@ -173,6 +175,10 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
lastRunRoute = line.substring("上次运行路线:".length).trim();
}
if (line.startsWith("上次运行是否完成:t")) {
finished = true;
}
if (line.startsWith("日期") && recordIndex < records.length) {
records[recordIndex] = line.trim(); // 直接使用 line.trim()
recordIndex++;
@@ -183,7 +189,8 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
log.info(`上次运行完成日期: ${lastRunDate}`);
log.info(`上次狗粮开始时间: ${lastEndTime.toISOString()}`);
log.info(`上次运行路线: ${lastRunRoute}`);
let version = "default";
log.info(`上次运行是否完成: ${finished}`);
try {
// 读取 manifest.json 文件的内容
@@ -216,9 +223,9 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
const timeDifference = now - lastRunMidnight;
// 如果当前时间减去 lastRunMidnight 小于 24 小时24 * 60 * 60 * 1000 毫秒),则终止狗粮程序运行
let runnedToday = false;
if (timeDifference < 24 * 60 * 60 * 1000) {
log.info("今日已经运行过狗粮路线,跳过运行狗粮程序");
log.info("今日已经运行过狗粮路线");
runnedToday = true;
}
@@ -236,40 +243,43 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
today.setHours(0, 0, 0, 0); // 将时间设置为当天的午夜
// 创建等待时间段的开始时间和结束时间的 Date 对象
const waitStartTime = new Date(today);
let waitStartTime = new Date(today);
waitStartTime.setHours(startHour, startMinute, 0, 0);
const waitEndTime = new Date(today);
let waitEndTime = new Date(today);
waitEndTime.setHours(endHour, endMinute, 0, 0);
// 新增变量,初始值为 true用于标识今天跑的路线
let runRouteA = true;
let runRouteA = lastRunRoute === "A";
log.info(`卡时间时间段为${waitStartTime.toTimeString()}-${waitEndTime.toTimeString()}`);
// 获取当前时间
const timeNow = new Date();
// 检查 endTime 是否晚于当天的结束时间
if (endTime > waitEndTime) {
// 如果 endTime 晚于当天的结束时间,则将其改为当天的开始时间
endTime = new Date(waitStartTime);
// 同时将 runRouteA 改为 false今天运行B路线
runRouteA = false;
}
// 检查 lastRunRoute 是否为 "B"
if (lastRunRoute === "B" && operationType !== "不卡时间ab交替运行") {
// 如果 lastRunRoute 为 "B",则将 endTime 改为当天的开始时间
endTime = new Date(waitStartTime);
// 同时将 runRouteA 改为 true
if (!runnedToday || !runActivatePath) {
runRouteA = true;
}
// 检查 endTime 是否晚于当天的结束时间
if (endTime > waitEndTime) {
// 如果 endTime 晚于当天的结束时间,则将其改为当天的开始时间
endTime = new Date(waitStartTime);
// 同时将 runRouteA 改为 false今天运行B路线
runRouteA = false;
}
if (operationType === "不卡时间ab交替运行") {
// 定义 1970-01-01T20:00:00.000Z 的时间对象
const epochTime = new Date('1970-01-01T20:00:00.000Z');
// 检查 lastRunRoute 是否为 "B"
if (lastRunRoute === "B" && operationType !== "不卡时间ab交替运行") {
// 如果 lastRunRoute 为 "B",则将 endTime 改为当天的开始时间
endTime = new Date(waitStartTime);
// 同时将 runRouteA 改为 true
runRouteA = true;
}
// 根据当前时间与 1970-01-01T20:00:00.000Z 的天数差的奇偶性给布尔变量 runRouteA 赋值
runRouteA = Math.floor((now - epochTime) / (24 * 60 * 60 * 1000)) % 2 === 0;
if (operationType === "不卡时间ab交替运行") {
// 定义 1970-01-01T20:00:00.000Z 的时间对象
const epochTime = new Date('1970-01-01T20:00:00.000Z');
// 根据当前时间与 1970-01-01T20:00:00.000Z 的天数差的奇偶性给布尔变量 runRouteA 赋值
runRouteA = Math.floor((now - epochTime) / (24 * 60 * 60 * 1000)) % 2 === 0;
}
}
// 启用自动拾取的实时任务
@@ -332,7 +342,7 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
//更新运行数据
refresh: {
if (runnedToday) {
if ((runnedToday && finished) || (runnedToday && runActivatePath)) {
break refresh;
}
// 获取当前日期和时间
@@ -363,7 +373,7 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
const result1 = await decomposeArtifacts(settings.keep4Star, settings.doDecompose);
artifacts: {
if (runnedToday) {
if (runnedToday && finished) {
break artifacts;
}
@@ -391,11 +401,10 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
}
records[0] = `日期:${lastRunDate},运行路线${lastRunRoute},狗粮经验${artifactExperienceDiff},摩拉${moraDiff}`;
if (runArtifactsResult) {
//修改文件内容
log.info('尝试修改记录文件');
await writeRecordFile(lastRunDate, lastEndTime, lastRunRoute, records, `records/${accountName}.txt`, version);
log.info('修改记录文件');
await writeRecordFile(lastRunDate, lastEndTime, lastRunRoute, records, `records/${accountName}.txt`, version, true);
}
}
@@ -431,13 +440,14 @@ const DEFAULT_FIGHT_TIMEOUT_SECONDS = 120;
})();
// 异步函数,用于将变量内容写回到文件
async function writeRecordFile(lastRunDate, lastEndTime, lastRunRoute, records, recordFilePath, version) {
async function writeRecordFile(lastRunDate, lastEndTime, lastRunRoute, records, recordFilePath, version, finished) {
try {
// 构造要写入文件的内容
const content = [
`上次运行完成日期: ${lastRunDate}`,
`上次结束时间: ${lastEndTime.toISOString()}`,
`上次运行路线: ${lastRunRoute}`,
`上次运行是否完成: ${finished}`,
`js版本: ${version}`,
"历史收益:"
].concat(records).join('\n');
@@ -475,6 +485,7 @@ async function runArtifactsPaths(runRouteA, grindPartyName, useABE) {
const filePathEnding = `assets/${ArtifactsPath}/${folderName}/02收尾`;
const filePathExtra = `assets/${ArtifactsPath}/${folderName}/03额外`;
const filePathPreparation = `assets/${ArtifactsPath}/${folderName}/00准备`;
const filePathActivate = `assets/${ArtifactsPath}/${folderName}/-1激活`;
// 将每组路线的逻辑抽取为公用函数
async function runPathGroups(filePathDir, subTaskName) {
@@ -502,12 +513,22 @@ async function runArtifactsPaths(runRouteA, grindPartyName, useABE) {
await sleep(10); // 假设 sleep 是一个异步函数,休眠 10 毫秒
} catch (error) {
log.error(`发生错误: ${error}`);
return false; // 终止循环
throw new Error("任务被取消");
}
await fakeLog(fileName, false, false, 0);
}
}
//运行激活路线
if (settings.runActivatePath && !runnedToday) {
await runPathGroups(filePathActivate, "激活");
}
if (!((runnedToday && finished) || (runnedToday && runActivatePath))) {
//修改文件内容
log.info('修改记录文件');
await writeRecordFile(lastRunDate, lastEndTime, lastRunRoute, records, `records/${accountName}.txt`, version, false);
}
// 运行准备路线(关闭拾取)
dispatcher.ClearAllTriggers();
await runPathGroups(filePathPreparation, "准备");