From 4d99404879d87d2e18b1441cb271babac771cfc2 Mon Sep 17 00:00:00 2001 From: Bread Grocery Date: Wed, 14 Jan 2026 23:48:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8D=83=E6=98=9F=E5=A5=87=E5=9F=9F?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E7=94=A8=E6=88=B7=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=20(#2680)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libs/@bettergi+utils.js | 27 +++++++++++-------- .../libs/constants/regions.js | 5 ++++ .../libs/constants/store.js | 25 ++++++++++------- .../libs/workflows/daily.js | 2 +- .../libs/workflows/weekly.js | 2 +- .../MiliastraExperiencePlayback/manifest.json | 2 +- 6 files changed, 40 insertions(+), 23 deletions(-) diff --git a/repo/js/MiliastraExperiencePlayback/libs/@bettergi+utils.js b/repo/js/MiliastraExperiencePlayback/libs/@bettergi+utils.js index e763e775e..84122da2a 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/@bettergi+utils.js +++ b/repo/js/MiliastraExperiencePlayback/libs/@bettergi+utils.js @@ -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` 目录下)中。 diff --git a/repo/js/MiliastraExperiencePlayback/libs/constants/regions.js b/repo/js/MiliastraExperiencePlayback/libs/constants/regions.js index 2bb77b1b8..ee63ad629 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/constants/regions.js +++ b/repo/js/MiliastraExperiencePlayback/libs/constants/regions.js @@ -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, }; diff --git a/repo/js/MiliastraExperiencePlayback/libs/constants/store.js b/repo/js/MiliastraExperiencePlayback/libs/constants/store.js index ce452bfcc..82f3a12c7 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/constants/store.js +++ b/repo/js/MiliastraExperiencePlayback/libs/constants/store.js @@ -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 }; diff --git a/repo/js/MiliastraExperiencePlayback/libs/workflows/daily.js b/repo/js/MiliastraExperiencePlayback/libs/workflows/daily.js index adb1fad67..0500dec2f 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/workflows/daily.js +++ b/repo/js/MiliastraExperiencePlayback/libs/workflows/daily.js @@ -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); //! 游玩关卡 diff --git a/repo/js/MiliastraExperiencePlayback/libs/workflows/weekly.js b/repo/js/MiliastraExperiencePlayback/libs/workflows/weekly.js index 669e91f57..b223594dc 100644 --- a/repo/js/MiliastraExperiencePlayback/libs/workflows/weekly.js +++ b/repo/js/MiliastraExperiencePlayback/libs/workflows/weekly.js @@ -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(); //! 进入房间 diff --git a/repo/js/MiliastraExperiencePlayback/manifest.json b/repo/js/MiliastraExperiencePlayback/manifest.json index 14f9dc031..8a0b25dbd 100644 --- a/repo/js/MiliastraExperiencePlayback/manifest.json +++ b/repo/js/MiliastraExperiencePlayback/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "千星奇域·每周经验刷取(回放通关版)", - "version": "0.1.8", + "version": "0.1.9", "bgi_version": "0.54.0", "description": "千星奇域·每周经验刷取(回放通关版)", "authors": [