feat: 千星奇域支持多用户模式 (#2680)

This commit is contained in:
Bread Grocery
2026-01-14 23:48:16 +08:00
committed by GitHub
parent bd4fc241fe
commit 4d99404879
6 changed files with 40 additions and 23 deletions

View File

@@ -1,6 +1,6 @@
import { __name } from "./rolldown-runtime.js";
//#region node_modules/.pnpm/@bettergi+utils@0.1.25/node_modules/@bettergi/utils/dist/workflow.js
//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/workflow.js
/** 默认最大重试次数 */
const defaultMaxAttempts = 5;
/** 默认重试间隔(毫秒) */
@@ -61,7 +61,7 @@ const waitForRegionDisappear = async (regionProvider, retryAction, options) => {
};
//#endregion
//#region node_modules/.pnpm/@bettergi+utils@0.1.25/node_modules/@bettergi/utils/dist/asserts.js
//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/asserts.js
/**
* 断言某个区域即将出现,否则抛出异常
* @param regionProvider 返回区域的函数
@@ -85,7 +85,7 @@ const assertRegionDisappearing = async (regionProvider, message, retryAction, op
};
//#endregion
//#region node_modules/.pnpm/@bettergi+utils@0.1.25/node_modules/@bettergi/utils/dist/exception.js
//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/exception.js
/**
* 获取错误信息字符串
* @param err 异常对象
@@ -104,7 +104,7 @@ const isHostException = (err) => {
};
//#endregion
//#region node_modules/.pnpm/@bettergi+utils@0.1.25/node_modules/@bettergi/utils/dist/mouse.js
//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/mouse.js
/** 使用回放脚本模拟滚动 */
const simulateScroll = async (wheelDelta, times) => {
const script = {
@@ -144,7 +144,7 @@ const mouseScrollDownLines = (lines, lineHeight = 175) => {
};
//#endregion
//#region node_modules/.pnpm/@bettergi+utils@0.1.25/node_modules/@bettergi/utils/dist/ocr.js
//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/ocr.js
/**
* 在指定区域内搜索图片
* @param image 图片路径 或 图片Mat
@@ -269,9 +269,14 @@ const findWithinListView = async (condition, listView, retryOptions, sampling, t
);
if (targetRegion?.isExist()) {
const { item1, item2 } = targetRegion.convertPositionToGameCaptureRegion(0, 0);
const scale = genshin.width / 1920;
const [x$1, y$1] = [
Math.floor(scale <= 1 ? item1 : item1 / scale),
Math.floor(scale <= 1 ? item2 : item2 / scale),
];
Object.assign(targetRegion, {
x: item1,
y: item2,
x: x$1,
y: y$1,
});
return targetRegion;
}
@@ -312,7 +317,7 @@ const findTextWithinListView = async (
};
//#endregion
//#region node_modules/.pnpm/@bettergi+utils@0.1.25/node_modules/@bettergi/utils/dist/misc.js
//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/misc.js
/**
* 深度合并多个对象
* @param objects 多个对象
@@ -330,7 +335,7 @@ const deepMerge = (...objects) => {
};
//#endregion
//#region node_modules/.pnpm/@bettergi+utils@0.1.25/node_modules/@bettergi/utils/dist/time.js
//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/time.js
/**
* 获取下一个含当日凌晨4点的时间
*/
@@ -388,7 +393,7 @@ const formatDurationAsReadable = (duration) => {
};
//#endregion
//#region node_modules/.pnpm/@bettergi+utils@0.1.25/node_modules/@bettergi/utils/dist/progress.js
//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/progress.js
/** 进度追踪器 */
var ProgressTracker = class {
total = 0;
@@ -461,7 +466,7 @@ var ProgressTracker = class {
};
//#endregion
//#region node_modules/.pnpm/@bettergi+utils@0.1.25/node_modules/@bettergi/utils/dist/store.js
//#region node_modules/.pnpm/@bettergi+utils@0.1.27/node_modules/@bettergi/utils/dist/store.js
/**
* 创建一个持久化存储对象,用于管理应用状态数据
* 该函数会创建一个代理对象对该对象的所有属性的修改都会自动同步到相应的JSON文件脚本的 `store` 目录下)中。

View File

@@ -37,6 +37,10 @@ const findCloseDialog = () => {
const clickToContinue = () => {
click(900, 1050);
};
//! 查找UID文本
const findUidText = () => {
return findTextWithinBounds("UID", 1620, 1050, 300, 30, { contains: true });
};
//! 查找元素视野按钮(判断处于大世界条件一)
const findElementViewBtn = () => {
const iro = findImageWithinBounds("assets/UI_BtnIcon_ElementView.png", 0, 0, 500, 80, {
@@ -256,4 +260,5 @@ export {
findSearchWonderlandThrottleMsg,
findSkipLevelUpMsg,
findStageEscBtn,
findUidText,
};

View File

@@ -1,16 +1,23 @@
import { __name } from "../rolldown-runtime.js";
import { getNextDay4AM, getNextMonday4AM, useStoreWithDefaults } from "../@bettergi+utils.js";
import { findUidText } from "./regions.js";
//#region src/constants/store.ts
//! 脚本数据存储
const store = useStoreWithDefaults("data", {
weekly: {
expGained: 0,
attempts: 0,
},
daily: { attempts: 0 },
nextWeek: getNextMonday4AM().getTime(),
nextDay: getNextDay4AM().getTime(),
});
const store = (() => {
const uid = findUidText()?.text.replace(/\D/g, "");
if (!uid) throw new Error("创建用户数据存储失败: 无法识别UID");
return useStoreWithDefaults(uid, {
uid,
weekly: {
expGained: 0,
attempts: 0,
},
daily: { attempts: 0 },
nextWeek: getNextMonday4AM().getTime(),
nextDay: getNextDay4AM().getTime(),
});
})();
//#endregion
export { store };

View File

@@ -63,7 +63,7 @@ const execDailyTask = async () => {
for (const room of userConfig.dailyRooms) {
//! 离开当前所在房间(如果存在)
await leaveRoom();
tracker.print(`开始当日第 ${store.daily.attempts + 1} 次奇域挑战...`);
tracker.print(`开始 ${store.uid} 当日第 ${store.daily.attempts + 1} 次奇域挑战...`);
//! 进入房间
await enterRoom(room);
//! 游玩关卡

View File

@@ -50,7 +50,7 @@ const execWeeklyTask = async () => {
//! 迭代尝试
for (let i = 0; i < attempts; i++)
try {
tracker.print(`开始本周第 ${store.weekly.attempts + 1} 次奇域挑战...`);
tracker.print(`开始 ${store.uid} 本周第 ${store.weekly.attempts + 1} 次奇域挑战...`);
//! 删除关卡存档
await deleteStageSave();
//! 进入房间

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "千星奇域·每周经验刷取(回放通关版)",
"version": "0.1.8",
"version": "0.1.9",
"bgi_version": "0.54.0",
"description": "千星奇域·每周经验刷取(回放通关版)",
"authors": [