diff --git a/repo/js/MiliastraExperiencePlayback/README.md b/repo/js/MiliastraExperiencePlayback/README.md index 7c22614bc..82ebc2760 100644 --- a/repo/js/MiliastraExperiencePlayback/README.md +++ b/repo/js/MiliastraExperiencePlayback/README.md @@ -29,22 +29,23 @@ ### 🛠️ 脚本配置 -| 配置项 | 描述 | 备注 | 默认值 | -| ---------------------- | ---------------------------- | ------------------------------------------------------------------ | ---------------------------------------------- | -| room | 奇域关卡关键词或关卡GUID | | 20031486040 | -| playbacks | 通关回放文件池 | 逗号分隔,随机抽取,自行录制拷贝到assets/playbacks | 美景音乐播放器结算.json | -| expPerAttempt | 每次通关获取的经验值 | 如果勾选删除关卡存档,每个成就加额外50经验值 | 20 | -| deleteStageSave | 删除关卡存档 | 可重复达成成就,获取更多经验值 | false | -| deleteStageSaveKeyword | 删除关卡存档关键字 | 关卡存档视图中的[关卡]列 | 音乐播放 | -| expWeeklyLimit | 每周可获取的经验值上限 | | 4000 | -| force | 忽略本周经验值已达上限 | | false | -| thisAttempts | 指定通关次数 | 0表示自动判断 | 0 | -| dailyEnabled | 执行每日通关任务 | 完后会领取纪游经验、日活奖励 | false | -| dailyRooms | 每日奇域关卡关键词或关卡GUID | 逗号分隔 | 24429042323,28644538672 | -| dailyPlaybacks | 每日通关回放文件随机池 | 同一关卡逗号分隔,不同关卡分号分隔,自行录制拷贝到assets/playbacks | 通关回放1.json,通关回放2.json;40秒按1通关.json | -| dailyLimit | 每日单个关卡通关上限 | | 1 | -| dailyForce | 忽略每日单个关卡通关上限 | | false | -| goToTeyvat | 完成后返回提瓦特大陆 | | true | +| 配置项 | 描述 | 备注 | 默认值 | +| ---------------------- | -------------------------------- | ------------------------------------------------------------------ | ---------------------------------------------- | +| room | 奇域关卡关键词或关卡GUID | | 20031486040 | +| playbacks | 通关回放文件池 | 逗号分隔,随机抽取,自行录制拷贝到assets/playbacks | 美景音乐播放器结算.json | +| expPerAttempt | 每次通关获取的经验值 | 如果勾选删除关卡存档,每个成就加额外50经验值 | 20 | +| deleteStageSave | 删除关卡存档 | 可重复达成成就,获取更多经验值 | false | +| deleteStageSaveKeyword | 删除关卡存档关键字 | 关卡存档视图中的[关卡]列 | 音乐播放 | +| expWeeklyLimit | 每周可获取的经验值上限 | | 4000 | +| force | 忽略本周经验值已达上限 | | false | +| thisAttempts | 指定通关次数 | 0表示自动判断 | 0 | +| dailyEnabled | 执行每日通关任务 | 完后会领取纪游经验、日活奖励 | false | +| dailyRooms | 每日奇域关卡关键词或关卡GUID | 逗号分隔 | 24429042323,28644538672 | +| dailyPlaybacks | 每日通关回放文件随机池 | 同一关卡逗号分隔,不同关卡分号分隔,自行录制拷贝到assets/playbacks | 通关回放1.json,通关回放2.json;40秒按1通关.json | +| dailyLimit | 每日单个关卡通关上限 | | 1 | +| dailyForce | 忽略每日单个关卡通关上限 | | false | +| closeStageDialog | 执行通关回放前关闭游戏说明对话框 | 使用通关回放录像自行关闭,则禁用 | true | +| goToTeyvat | 完成后返回提瓦特大陆 | | true | ### ❗ 注意事项 diff --git a/repo/js/MiliastraExperiencePlayback/assets/playbacks/美景音乐播放器结算.json b/repo/js/MiliastraExperiencePlayback/assets/playbacks/美景音乐播放器结算.json index 094d2767f..76aaa2ac7 100644 --- a/repo/js/MiliastraExperiencePlayback/assets/playbacks/美景音乐播放器结算.json +++ b/repo/js/MiliastraExperiencePlayback/assets/playbacks/美景音乐播放器结算.json @@ -1,14 +1,33 @@ { "macroEvents": [ - { "type": 0, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 1094 }, - { "type": 1, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 4578 }, - { "type": 0, "keyCode": 87, "mouseX": 0, "mouseY": 0, "time": 5438 }, - { "type": 1, "keyCode": 87, "mouseX": 0, "mouseY": 0, "time": 10750 }, + { "type": 0, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 1250 }, + { "type": 1, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 1312 }, - { "type": 0, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 11781 }, - { "type": 1, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 11891 }, - { "type": 0, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 12781 }, - { "type": 1, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 12891 } + { "type": 0, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 2484 }, + { "type": 1, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 4140 }, + { "type": 0, "keyCode": 87, "mouseX": 0, "mouseY": 0, "time": 4343 }, + { "type": 1, "keyCode": 87, "mouseX": 0, "mouseY": 0, "time": 5484 }, + { "type": 0, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 5515 }, + { "type": 1, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 6640 }, + { "type": 0, "keyCode": 87, "mouseX": 0, "mouseY": 0, "time": 7265 }, + { "type": 1, "keyCode": 87, "mouseX": 0, "mouseY": 0, "time": 8140 }, + { "type": 0, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 8218 }, + { "type": 0, "keyCode": 87, "mouseX": 0, "mouseY": 0, "time": 8672 }, + { "type": 1, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 8797 }, + { "type": 0, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 9203 }, + { "type": 1, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 9875 }, + { "type": 0, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 10297 }, + { "type": 1, "keyCode": 68, "mouseX": 0, "mouseY": 0, "time": 10718 }, + { "type": 0, "keyCode": 65, "mouseX": 0, "mouseY": 0, "time": 11047 }, + { "type": 1, "keyCode": 65, "mouseX": 0, "mouseY": 0, "time": 11250 }, + { "type": 1, "keyCode": 87, "mouseX": 0, "mouseY": 0, "time": 11703 }, + + { "type": 0, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 12562 }, + { "type": 1, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 12718 }, + { "type": 0, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 13000 }, + { "type": 1, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 13172 }, + { "type": 0, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 13437 }, + { "type": 1, "keyCode": 70, "mouseX": 0, "mouseY": 0, "time": 13562 } ], "info": { "name": "", diff --git a/repo/js/MiliastraExperiencePlayback/main.js b/repo/js/MiliastraExperiencePlayback/main.js index 81ca16c2e..3ad8729d2 100644 --- a/repo/js/MiliastraExperiencePlayback/main.js +++ b/repo/js/MiliastraExperiencePlayback/main.js @@ -358,6 +358,7 @@ var userConfig = { }, []), dailyLimit: Math.max(1, Number(settings.dailyLimit || "1")), dailyForce: settings.dailyForce ?? false, + closeStageDialog: settings.closeStageDialog ?? true, goToTeyvat: settings.goToTeyvat ?? true }; //! 脚本数据存储 @@ -371,20 +372,26 @@ var store = useStoreWithDefaults("data", { // src/modules/regions.ts //! 通用:查找确认按钮 var findConfirmBtn = () => { - return findTextWithinBounds("确认", 480, 720, 960, 145); + const txt = findTextWithinBounds("确认", 480, 720, 960, 145); + txt?.drawSelf("group_text"); + return txt; }; //! 通用:查找标题文字 var findHeaderTitle = (title, contains) => { - return findTextWithinBounds(title, 0, 0, 300, 95, { contains }); + const txt = findTextWithinBounds(title, 0, 0, 300, 95, { contains }); + txt?.drawSelf("group_text"); + return txt; }; //! 通用:查找底部按钮文字 var findBottomBtnText = (text, contains) => { - return findTextWithinBounds(text, 0, 980, 1920, 100, { contains }); + const txt = findTextWithinBounds(text, 0, 980, 1920, 100, { contains }); + txt?.drawSelf("group_text"); + return txt; }; //! 通用:查找关闭对话框按钮 var findCloseDialog = () => { const img = "assets/UI_BtnIcon_Close.png"; - const iro = findImageWithinBounds(img, 410, 160, 1100, 660, { useMask: true, threshold: 0.8 }); + const iro = findImageWithinBounds(img, 410, 160, 1100, 660, { useMask: true, threshold: 0.7 }); iro?.drawSelf("group_img"); return iro; }; @@ -858,14 +865,16 @@ var playStage = async (playbacks) => { return; } //! 关闭游戏说明对话框 - await assertRegionDisappearing( - findCloseDialog, - "关闭游戏说明对话框超时", - () => { - findCloseDialog()?.click(); - }, - { maxAttempts: 10, retryInterval: 500 } - ); + if (userConfig.closeStageDialog) { + await assertRegionDisappearing( + findCloseDialog, + "关闭游戏说明对话框超时", + () => { + findCloseDialog()?.click(); + }, + { maxAttempts: 10, retryInterval: 500 } + ); + } //! 执行随机通关回放文件 await execStagePlayback(playbacks); await sleep(3e3); @@ -1132,8 +1141,8 @@ var execWeeklyTask = async () => { //! 创建进度追踪器 const tracker = new ProgressTracker(attempts); //! 迭代尝试 - try { - for (let i = 0; i < attempts; i++) { + for (let i = 0; i < attempts; i++) { + try { tracker.print(`开始本周第 ${store.weekly.attempts + 1} 次奇域挑战...`); //! 删除关卡存档 await deleteStageSave(); @@ -1152,13 +1161,13 @@ var execWeeklyTask = async () => { break; } } + } catch (err) { + //! 发生主机异常(如:任务取消异常等),无法再继续执行 + if (isHostException(err)) throw err; + //! 发生脚本流程异常,尝试退出关卡(如果在关卡中) + await exitStage(); + log.error("脚本执行出错: {error}", getErrorMessage(err)); } - } catch (err) { - //! 发生主机异常(如:任务取消异常等),无法再继续执行 - if (isHostException(err)) throw err; - //! 发生脚本流程异常,尝试退出关卡(如果在关卡中) - await exitStage(); - log.error("脚本执行出错: {error}", getErrorMessage(err)); } await genshin.returnMainUi(); }; diff --git a/repo/js/MiliastraExperiencePlayback/manifest.json b/repo/js/MiliastraExperiencePlayback/manifest.json index fdcd695d2..619712747 100644 --- a/repo/js/MiliastraExperiencePlayback/manifest.json +++ b/repo/js/MiliastraExperiencePlayback/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "千星奇域·每周经验刷取(回放通关版)", - "version": "0.1.6", + "version": "0.1.7", "bgi_version": "0.53.0", "description": "千星奇域·每周经验刷取(回放通关版)", "authors": [ diff --git a/repo/js/MiliastraExperiencePlayback/settings.json b/repo/js/MiliastraExperiencePlayback/settings.json index 405192d1c..5bc12687f 100644 --- a/repo/js/MiliastraExperiencePlayback/settings.json +++ b/repo/js/MiliastraExperiencePlayback/settings.json @@ -77,6 +77,12 @@ "label": "忽略每日单个关卡通关上限", "default": false }, + { + "type": "checkbox", + "name": "closeStageDialog", + "label": "执行通关回放前关闭游戏说明对话框", + "default": true + }, { "type": "checkbox", "name": "goToTeyvat",