铁匠铺js——2.2.1优化 (#1454)

* 2.2.1更新


### 2.2.1(2025.08.03)

-   加快锻造速度
-   优化通知逻辑,减少通知被吞概率

* Update main.js
This commit is contained in:
呱呱z
2025-08-03 02:46:36 +08:00
committed by GitHub
parent 6904fa2098
commit 37a6de176e
3 changed files with 64 additions and 37 deletions

View File

@@ -1,8 +1,8 @@
// ==UserScript== // ==UserScript==
// @name 自动锻造魔矿脚本 // @name 自动锻造魔矿脚本
// @version 2.00523 // @version 2.2.1
// @description 自动前往铁匠铺并锻造魔矿,通过识图模式自动选择矿石 // @description 自动前往铁匠铺并锻造魔矿,通过识图模式自动选择矿石
// @author 呱呱 z // @author 呱呱z
// @match 原神版本5.6BGI 版本0.45.1 // @match 原神版本5.6BGI 版本0.45.1
// ==/UserScript== // ==/UserScript==
@@ -54,16 +54,25 @@
本脚本目前处于测试阶段,欢迎反馈问题至 QQ1765137214。 本脚本目前处于测试阶段,欢迎反馈问题至 QQ1765137214。
## 更新日志 ## 更新日志
### 2.2.12025.08.03
- 加快锻造速度
- 优化通知逻辑,减少通知被吞概率
### 2.1 ### 2.1
- 使用新版版本号 - 使用新版版本号
- 5.7 提高了锻造上限,因此使用锻造次数从3改成了4 - 5.7 提高了锻造上限,因此使用锻造次数从 3 改成了 4
### 2.005232025.05.23 ### 2.005232025.05.23
- 新增仅领取锻造 - 新增仅领取锻造
- 优化点击逻辑 - 优化点击逻辑
- 修复点击锻造的次数超过3次的bug - 修复点击锻造的次数超过 3 次的 bug
### 2.02025.05.22 ### 2.02025.05.22
- 新增矿石不足时自动选择备用选矿 - 新增矿石不足时自动选择备用选矿
### 1.405212025.05.21 ### 1.405212025.05.21

View File

@@ -144,12 +144,12 @@ async function tryForgeOre(oreType, skipCheckOres = []) {
if (imageResult) { if (imageResult) {
found = true; found = true;
imageResult.click(); imageResult.click();
await sleep(1000); await sleep(100);
if (notice) { // if (notice) {
notification.send(`找到矿石: ${OreChineseMap[oreType]}`); // notification.send(`找到矿石: ${OreChineseMap[oreType]}`);
} else { // } else {
log.info(`找到矿石: ${OreChineseMap[oreType]}`); log.info(`找到矿石: ${OreChineseMap[oreType]}`);
} // }
determineOre(oreType); determineOre(oreType);
// 点击“开始锻造”按钮并进行OCR识别 // 点击“开始锻造”按钮并进行OCR识别
@@ -162,20 +162,22 @@ async function tryForgeOre(oreType, skipCheckOres = []) {
ConfirmButton.click(); ConfirmButton.click();
clickAttempts++; clickAttempts++;
} }
await sleep(1500); await sleep(200);
let ocrResults = captureGameRegion().find( let ocrResults = captureGameRegion().find(
RecognitionObject.ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height) RecognitionObject.ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height)
); );
if (ocrResults) { if (ocrResults) {
log.info(`${ocrResults.text}`); // log.info(`${ocrResults.text}`);
if (ocrResults.text.includes("今日已无法锻造")) { if (ocrResults.text.includes("今日已无法锻造")) {
if (notice) { if (notice) {
notification.send("检测到 今日已无法锻造 停止脚本"); notification.send("检测到 今日已无法锻造 结束锻造");
} else { } else {
log.info("检测到 今日已无法锻造 停止脚本"); log.info("检测到 今日已无法锻造 结束锻造");
} }
await click(960, 800); await sleep(100);
await sleep(1000); await click(960, 1042);
await sleep(200);
await click(960, 1042);// 多次点击结束弹窗
return true; // 终止锻造流程 return true; // 终止锻造流程
} }
else if (ocrResults.text.includes("材料不足")) { else if (ocrResults.text.includes("材料不足")) {
@@ -185,12 +187,20 @@ async function tryForgeOre(oreType, skipCheckOres = []) {
log.info("检测到 材料不足 跳过当前矿物。请检查背包,及时补充矿物。"); log.info("检测到 材料不足 跳过当前矿物。请检查背包,及时补充矿物。");
} }
clickAttempts--; // 出现材料不足时减去一次点击计数 clickAttempts--; // 出现材料不足时减去一次点击计数
await click(960, 800); await sleep(100);
await sleep(1000); await click(960, 1042);
await sleep(200);
await click(960, 1042);// 多次点击结束弹窗
return false; // 跳过当前矿石 return false; // 跳过当前矿石
} }
} }
if (clickAttempts === 4) { if (clickAttempts === 4) {
await sleep(1000);
if (notice) {
notification.send("锻造已完成");
} else {
log.info("锻造已完成");
}
return true; // 达到点击上限,终止锻造流程 return true; // 达到点击上限,终止锻造流程
} }
} }
@@ -270,13 +280,11 @@ async function forgeOre(smithyName) {
let ClaimAll = captureGameRegion().find(ClaimAllRo); let ClaimAll = captureGameRegion().find(ClaimAllRo);
if (ClaimAll.isExist()) { if (ClaimAll.isExist()) {
ClaimAll.click(); ClaimAll.click();
await sleep(1000); await sleep(500);
let ConfirmButton = captureGameRegion().find(ConfirmDeployButtonRo); let ConfirmButton = captureGameRegion().find(ConfirmDeployButtonRo);
if (ConfirmButton.isExist()) { if (ConfirmButton.isExist()) {
ConfirmButton.click(); ConfirmButton.click();
if (ocrResults.text.includes("配方")) { await sleep(500);
ocrResults.click();
}
await click(220, 150); await click(220, 150);
await sleep(1000); // 点击进入锻造界面 await sleep(1000); // 点击进入锻造界面
} else { } else {
@@ -301,14 +309,17 @@ async function forgeOre(smithyName) {
} }
} }
// 退出锻造前判断配方,如果出现“锻造队列”则点击 // 退出锻造前判断配方,点击“锻造队列”,再次确认使用的矿物已经锻造结果
const ocrRegionAfter = { x: 185, y: 125, width: 670 - 185, height: 175 - 125 }; const ocrRegionAfter = { x: 185, y: 125, width: 670 - 185, height: 175 - 125 };
let ocrResultsAfter = captureGameRegion().find( let ocrResultsAfter = captureGameRegion().find(
RecognitionObject.ocr(ocrRegionAfter.x, ocrRegionAfter.y, ocrRegionAfter.width, ocrRegionAfter.height) RecognitionObject.ocr(ocrRegionAfter.x, ocrRegionAfter.y, ocrRegionAfter.width, ocrRegionAfter.height)
); );
if (ocrResultsAfter.text.includes("锻造队列")) { if (ocrResultsAfter.text.includes("锻造队列")) {
await sleep(1000);//等待僵直
ocrResultsAfter.click(); ocrResultsAfter.click();
await sleep(1000); await sleep(200);
ocrResultsAfter.click();
await sleep(500);
} }
break; // 退出锻造界面检测循环 break; // 退出锻造界面检测循环
} }
@@ -317,7 +328,7 @@ async function forgeOre(smithyName) {
log.error("经过多次尝试,未能进入锻造界面"); log.error("经过多次尝试,未能进入锻造界面");
} }
} else { } else {
log.info("未能找到对话界面锻造图标,无法进入锻造流程"); log.error("未能找到对话界面锻造图标,无法进入锻造流程");
} }
// 退出锻造界面并返回主界面 // 退出锻造界面并返回主界面
@@ -337,16 +348,23 @@ async function forgeOre(smithyName) {
await genshin.returnMainUi(); await genshin.returnMainUi();
if (notice) { if (notice) {
notification.send("自动锻造矿石脚本开始"); notification.send("自动锻造矿石脚本开始");
} else {
log.info("自动锻造矿石脚本开始");
} }
await autoSmithy(smithyName); await autoSmithy(smithyName);
await forgeOre(smithyName); await forgeOre(smithyName);
await genshin.returnMainUi(); await genshin.returnMainUi();
// 后退两步 //后退两步
{ keyDown("S"); await sleep(1000); keyUp("S"); await sleep(1000); } { keyDown("S"); await sleep(1000); keyUp("S"); await sleep(1000); }
if (notice) { //if (notice) {
notification.send("自动锻造矿石脚本结束"); // notification.send("自动锻造矿石脚本结束");
} //}
//else {
log.info("自动锻造矿石脚本结束");
//}
})(); })();

View File

@@ -1,9 +1,9 @@
{ {
"manifest_version": 1, "manifest_version": 1,
"name": "自动锻造魔矿(识图版)", "name": "自动锻造魔矿(识图版)",
"version": "2.2", "version": "2.2.1",
"bgi_version": "0.44.0", "bgi_version": "0.44.0",
"description": "自动选择铁匠铺和使用矿物去锻造精锻矿。\n新增功能:仅领取锻造 - 允许用户仅领取已完成的锻造物品,而不进行新的锻造。\n \n使用前请阅读“readme”文件以获取更多详细信息。 \n---更新说明--- \n- 请查阅readme", "description": "自动选择铁匠铺和使用矿物去锻造精锻矿。\n \n使用前请阅读“readme”文件以获取更多详细信息。 \n---更新说明--- \n- 请查阅readme",
"tags": [ "tags": [
"铁匠铺", "铁匠铺",
"锻造", "锻造",