mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-20 04:10:00 +08:00
修了个bug (#1680)
This commit is contained in:
@@ -97,10 +97,18 @@
|
||||
|
||||
|
||||
## 六、更新日志
|
||||
### 2025.08.21
|
||||
|
||||
### 2025.08.23 V0.3
|
||||
|
||||
* fix 修复奖励未领取成功,提前传送的bug
|
||||
* fix 修复奖励未领取成功,仍然会计数已完成的bug
|
||||
* update 改了一下boss列表展示的排版
|
||||
|
||||
### 2025.08.21
|
||||
|
||||
* fix 截图资源未释放
|
||||
* update 地图追踪文件 【从别的大佬那里偷来的】
|
||||
### 2025.08.21
|
||||
|
||||
### 2025.08.21 V0.1
|
||||
|
||||
* 初版发布
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
eval(file.readTextSync("reward.js"));
|
||||
(async function () {
|
||||
try {
|
||||
/**
|
||||
@@ -48,23 +49,41 @@
|
||||
* @param {boolean} returnToStatueAfterEachRound - 是否在每次讨伐后回到七天神像。
|
||||
*/
|
||||
async function runMain() {
|
||||
|
||||
eval(file.readTextSync("reward.js"));
|
||||
|
||||
// --- 打印所有Boss的剩余次数 ---
|
||||
for (let i = 0; i < config.length; i++) {
|
||||
log.info(`🎵${config[i]["name"]} - 剩余: ${config[i]["remainingCount"]}/${config[i]["totalCount"]}, 队伍: ${config[i]["team"]}`);
|
||||
//BGI的遮罩日志是12行
|
||||
if (i % 11 === 0 && i > 0) {
|
||||
log.info("⌛️5秒后显示下一页");
|
||||
await sleep(5000);
|
||||
if (i % 10 === 0) {
|
||||
let currentPage = Math.floor(i / 10) + 1;
|
||||
log.info(`--- 当前boss队列 (第 ${currentPage} 页) ---`);
|
||||
}
|
||||
};
|
||||
|
||||
log.info(`🎵${i + 1}.${config[i]["name"]} - 剩余: ${config[i]["remainingCount"]}/${config[i]["totalCount"]}, 队伍: ${config[i]["team"]}`);
|
||||
|
||||
const isEndOfPage = (i + 1) % 10 === 0;
|
||||
const isLastItem = i === config.length - 1;
|
||||
|
||||
if (isEndOfPage || isLastItem) {
|
||||
// 补齐空行到10行
|
||||
const linesToPad = 10 - (i - (Math.floor(i / 10) * 10) + 1);
|
||||
for (let p = 0; p < linesToPad; p++) {
|
||||
log.info("");
|
||||
}
|
||||
|
||||
if (isEndOfPage && !isLastItem) {
|
||||
let currentPage = Math.floor((i + 1) / 10);
|
||||
log.info(`⌛️当前第 ${currentPage} 页结束,5秒后显示下一页`);
|
||||
await sleep(5000);
|
||||
} else if (isLastItem) {
|
||||
log.info(`🔚列表显示完毕,5秒后继续`);
|
||||
await sleep(5000);
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
let isClaimFailed = false;
|
||||
// --- 遍历Boss列表 ---
|
||||
for (const boss of config) {
|
||||
let goToBoss = true;
|
||||
let isClaimFailed = false;
|
||||
const returnToStatueAfterEachRound = boss.returnToStatueAfterEachRound
|
||||
|
||||
// --- 检查体力是否足够 ---
|
||||
@@ -91,12 +110,8 @@
|
||||
break; // --- 体力不足,停止讨伐 ---
|
||||
}
|
||||
|
||||
log.info(`🪧` +
|
||||
`当前进度:讨伐『${boss.name}』,` +
|
||||
`第${round}/${boss.remainingCount}次,` +
|
||||
`使用队伍:${boss.team},` +
|
||||
`每轮后回七天神像:${returnToStatueAfterEachRound ? '是' : '否'}`);
|
||||
|
||||
log.info(`📢当前进度:讨伐『${boss.name}』,第${round}/${boss.remainingCount}次`);
|
||||
log.info(`使用队伍:${boss.team},每轮回七天神像:${returnToStatueAfterEachRound ? '是' : '否'}`);
|
||||
|
||||
for (let attempt = 1; attempt <= 2; attempt++) {
|
||||
//体力不足和战斗成功后无需重试
|
||||
@@ -112,16 +127,18 @@
|
||||
log.info(`⚔️开始第 ${attempt} 次讨伐尝试`);
|
||||
await dispatcher.runTask(new SoloTask("AutoFight"));
|
||||
await autoNavigateToReward();
|
||||
await takeReward(isClaimFailed);
|
||||
isClaimFailed = await takeReward(isClaimFailed);
|
||||
battleSuccess = true;
|
||||
goToBoss = false;
|
||||
// === 更新 讨伐完成次数 与 剩余讨伐次数 ===
|
||||
boss.remainingCount--;
|
||||
boss.completedCount++;
|
||||
if (!isClaimFailed) {
|
||||
boss.remainingCount--;
|
||||
boss.completedCount++;
|
||||
};
|
||||
break;
|
||||
|
||||
} catch (error) {
|
||||
log.error(`❌讨伐『${boss.name}』失败,error: ${error}`);
|
||||
log.error(`❌讨伐『${boss.name}』失败: ${error}`);
|
||||
battleSuccess = false;
|
||||
continue;
|
||||
};
|
||||
@@ -140,7 +157,7 @@
|
||||
goToBoss = true;
|
||||
};
|
||||
|
||||
if (!goToBoss && boss.remainingCount > 0) {
|
||||
if (!goToBoss && boss.remainingCount > 0 && !isClaimFailed) {
|
||||
if (["歌裴莉娅的葬送", "科培琉司的劫罚", "纯水精灵"].includes(boss.name)) {
|
||||
await pathingScript.runFile(`assets/Pathing/${boss.name}战斗后快速前往.json`);
|
||||
} else {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "批量讨伐角色养成材料BOSS",
|
||||
"version": "0.1",
|
||||
"version": "0.3",
|
||||
"description": "一次性配置多个角色材料的boss,体力不足时保存进度,每次运行时断点续打。\n\n感谢boss地图追踪作者:@柒叶子@Tool_tingsu,\n\n感谢 @柒叶子【首领讨伐一条龙 - 首领连续讨伐】的地脉花寻路的代码实现 \n\n感谢@wjdsg @Tool_tingsu【纪行周常-10个boss一条龙】循环讨伐的代码实现",
|
||||
"authors": [
|
||||
{
|
||||
|
||||
@@ -79,43 +79,52 @@ async function autoNavigateToReward() {
|
||||
async function takeReward(isClaimFailed) {
|
||||
try {
|
||||
const mainUiRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/mainUi.png"));
|
||||
while (true) {
|
||||
for (let attempt = 1; attempt <= 100; attempt++) {
|
||||
log.debug(`尝试领取奖励,第${attempt}次`);
|
||||
captureRegion = captureGameRegion();
|
||||
|
||||
// 点击F领取Boss地脉花
|
||||
log.debug("尝试接触征讨之花");
|
||||
let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50);
|
||||
let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis);
|
||||
if (rewardResult.text === "接触征讨之花" && isClaimFailed == false) {
|
||||
keyPress("F");
|
||||
await sleep(1000);
|
||||
captureRegion = captureGameRegion();
|
||||
}
|
||||
|
||||
// 使用脆弱树脂领取奖励
|
||||
let useTextArea = captureRegion.DeriveCrop(850, 740, 250, 35);
|
||||
let useResult = useTextArea.find(RecognitionObject.ocrThis);
|
||||
log.debug("领取奖励检测到文字: " + useResult.text);
|
||||
if (useResult.text.includes("补充")) {
|
||||
log.info("脆弱树脂不足,跳过领取");
|
||||
click(1345, 300);
|
||||
await sleep(1000);
|
||||
captureRegion = captureGameRegion();
|
||||
isClaimFailed = true;
|
||||
}
|
||||
else if (useResult.text.includes("使用")) {
|
||||
log.info("使用脆弱树脂领取奖励");
|
||||
click(useResult.x, useResult.y);
|
||||
captureRegion = captureGameRegion();
|
||||
await sleep(3000);
|
||||
}
|
||||
|
||||
// 关闭奖励界面
|
||||
let closeRewardUi = captureRegion.DeriveCrop(860, 970, 200, 28);
|
||||
let closeResult = closeRewardUi.find(RecognitionObject.ocrThis);
|
||||
log.debug("底部检测到文字: " + closeResult.text);
|
||||
if (closeResult.text.includes("点击")){
|
||||
click(975, 1000);//点击空白区域
|
||||
await sleep(1000);
|
||||
captureRegion = captureGameRegion();
|
||||
}
|
||||
|
||||
// 检查是否回到主界面
|
||||
let inMainUi = captureRegion.Find(mainUiRo);
|
||||
if (inMainUi.x > 0) {
|
||||
if (inMainUi.x > 0 && !useResult.text.includes("树脂")) {
|
||||
log.debug("回到主界面");
|
||||
return isClaimFailed;
|
||||
}
|
||||
captureRegion.Dispose();
|
||||
@@ -125,8 +134,9 @@ async function takeReward(isClaimFailed) {
|
||||
await sleep(500);
|
||||
|
||||
}
|
||||
throw new Error('领取奖励超时');
|
||||
} catch (error) {
|
||||
log.error(`领取奖励失败,error: ${error}`);
|
||||
log.error(`领取奖励失败: ${error}`);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user