mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-16 03:33:25 +08:00
fix(js): 修复美景音乐播放器概率走歪导致无法结算 (#2587)
This commit is contained in:
@@ -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 |
|
||||
|
||||
### ❗ 注意事项
|
||||
|
||||
|
||||
@@ -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": "",
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "千星奇域·每周经验刷取(回放通关版)",
|
||||
"version": "0.1.6",
|
||||
"version": "0.1.7",
|
||||
"bgi_version": "0.53.0",
|
||||
"description": "千星奇域·每周经验刷取(回放通关版)",
|
||||
"authors": [
|
||||
|
||||
@@ -77,6 +77,12 @@
|
||||
"label": "忽略每日单个关卡通关上限",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"type": "checkbox",
|
||||
"name": "closeStageDialog",
|
||||
"label": "执行通关回放前关闭游戏说明对话框",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"type": "checkbox",
|
||||
"name": "goToTeyvat",
|
||||
|
||||
Reference in New Issue
Block a user