添加【新增示例】,以便于用户自定义添加矿石可选项 (#3165)

1. README文件新增【自定义扩展】模块;
    2. 文件内增新增 矿物/路线【新增示例】,以便于后续自定义增添矿物。
This commit is contained in:
呱呱z
2026-04-30 08:52:19 +08:00
committed by GitHub
parent 56b9f4e8ed
commit fd9e3b2516
4 changed files with 247 additions and 103 deletions

View File

@@ -5,12 +5,15 @@
> **重要提示:请在使用前仔细阅读以下内容**
### 使用风险
本脚本为开源学习项目,仅限个人学习使用,**禁止用于商业用途或任何违反游戏条款的行为**。滥用可能导致游戏账号封禁,开发者不承担任何直接或间接责任。
### 责任限制
本脚本按"现状"提供,不承诺兼容性、安全性或功能完整性。因使用本脚本导致的账号、数据、设备等任何损失,开发者概不负责。
### 禁止条款
严禁对本脚本进行逆向工程、恶意篡改或用于外挂等非法用途。如游戏运营商提出要求,开发者保留随时停止维护的权利。
**使用本脚本即表示您已阅读、理解并同意上述所有条款。**
@@ -18,12 +21,13 @@
## 📞 联系与反馈
如有任何建议或问题,欢迎通过以下方式联系:
📧 QQ1765137214
📧 QQ1765137214(本人已退游,欢迎后续来者优化/更新)
---
## ✨ 功能介绍
适用于原神 5.6
适用于原神 5.6
BGI 0.48.2 版本
本脚本能够自动前往指定铁匠铺,通过智能图像识别技术自动选择或按预设优先级锻造魔矿:
@@ -45,33 +49,37 @@ BGI 0.48.2 版本
## 🚀 快速开始
### 1. 安装脚本
将本脚本添加至 BGI 脚本调度器。
### 2. 配置参数
右键点击脚本,选择"编辑 JS 配置"或直接修改 `settings.json` 文件:
```json
{
"smithyName": "枫丹铁匠铺",
"CondessenceCrystal": "萃凝晶",
"CrystalChunk": "水晶块",
"AmethystLump": "紫晶块",
"RainbowdropCrystal": "虹滴晶",
"notice": true,
"forgedOrNot": "是",
"model": "模式一"
"smithyName": "枫丹铁匠铺",
"CondessenceCrystal": "萃凝晶",
"CrystalChunk": "水晶块",
"AmethystLump": "紫晶块",
"RainbowdropCrystal": "虹滴晶",
"notice": true,
"forgedOrNot": "是",
"model": "模式一"
}
```
### 3. 矿石配置说明
**默认支持矿石**
- 水晶块
- 紫晶块
- 萃凝晶
- 虹滴晶
**矿石优先级说明**
- 每种矿石的优先级可在 `settings.json` 中配置,数值范围为 `0-4`
- **优先级为 0**:表示不使用该矿石,脚本会自动排除。
- **优先级为 1-4**:数值越小,优先级越高。
@@ -81,10 +89,10 @@ BGI 0.48.2 版本
### 🔧 锻造模式
| 模式 | 描述 |
|------|------|
| 模式 | 描述 |
| ------------------ | ------------------------------------------------------------------------------------------------ |
| **模式一(自动)** | 自动识别背包中数量最多的矿石进行锻造,识别失败时自动切换到手动优先级模式(可能存在数量识别错误) |
| **模式二(手动)** | 按照用户配置的优先级顺序,依次尝试主选及备选矿石 |
| **模式二(手动)** | 按照用户配置的优先级顺序,依次尝试主选及备选矿石 |
### 🎯 特殊功能
@@ -99,13 +107,61 @@ BGI 0.48.2 版本
1. **环境要求**确保游戏分辨率、BGI 版本与脚本要求一致
2. **窗口状态**:运行脚本时请保持游戏窗口处于前台且未被遮挡
3. **权限设置**:确保已授予脚本必要的系统权限
3. **权限设置**:部分模块由于使用了快捷键,请确保快捷键为默认值。例如纳塔铁匠铺以及仅领取锻造前检查,使用地图快捷键"M";模式一矿物识别部分,使用背包快捷键"B"。因为模式一调用了OCR数字识别部分可能出现错误
4. **矿石优先级配置**:请确保至少有一种矿石的优先级大于 0否则脚本将停止运行并提示错误。
4. **权限设置**:部分模块由于使用了快捷键,请确保快捷键为默认值。例如纳塔铁匠铺以及仅领取锻造前检查,使用地图快捷键"M";模式一矿物识别部分,使用背包快捷键"B"。因为模式一调用了OCR数字识别部分可能出现错误
5. **矿石优先级配置**:请确保至少有一种矿石的优先级大于 0否则脚本将停止运行并提示错误。
## 📋 自定义扩展:添加新矿石与铁匠铺
本脚本支持用户自定义添加新的矿石种类和铁匠铺路线。请严格按照以下步骤操作。
---
### 🔧 添加新矿石
#### 1. 添加锻造界面图片
- 截图【锻造界面】中矿石右上角的小图标,建议尺寸 21×21 像素。
- 保存为 PNG 格式,放在 `assets/Picture/` 目录下。
- 文件名建议使用英文且不含标点和空格,例如:`NewOre.png`
#### 2. 添加背包界面图片
- 截图【背包界面】中对应矿石的图标,建议尺寸 75×75 像素。
- 保存为 PNG 格式,放在 `assets/RecognitionObject/ItemImage/` 目录下。
- 文件名同样建议使用英文且不含标点和空格,例如:`NewOre.png`
#### 3. 修改 main.js 文件
`main.js` 文件顶部,依次在以下区域添加新矿石信息
- 【用户配置】
- 【OreChineseMap】
- 【orePriorityConfig】
- 【nicknameOrder 】
- 【ingredientImageMap】
- 【背包界面物品图标】
额外的,部分区域的新增需要添加【,】符号
### 4. 添加矿石信息进setting.json文件
`setting.json`文件末尾,根据【新增示例】添加新矿。
## 🔧 添加铁匠铺路线
### 1. 录制路径
1. 使用路径录制工具录制前往铁匠铺的路径
2. 保存为 JSON 文件,命名格式:`【地区名】铁匠铺.json`,如:`冰国铁匠铺.png`
3. 放在 `assets/assets/Pathing` 目录下
### 2. 添加路线信息进setting.json文件
`setting.json`文件,找到【铁匠铺地区选择(默认:蒙德铁匠铺)】,根据【新增示例】添加信息。
## ❓ 常见问题
Q脚本运行后无反应
**A**:请按以下步骤排查:
1. 检查游戏分辨率是否符合要求
2. 确认 BGI 版本是否为 0.48.2 或更高
3. 验证脚本配置是否正确
@@ -121,67 +177,86 @@ QOCR识别矿石数量不准确怎么办
## 📜 更新日志
### 2.4.2`(2026-04-28)`
- **新增**
1. README文件新增【自定义扩展】模块
2. 文件内增新增 矿物/路线【新增示例】,以便于后续自定义增添矿物。
### 2.4.1`(2026-01-11)`
- **修复**
1. 对话界面点击锻造图标失败,卡住的问题
1. 对话界面点击锻造图标失败,卡住的问题
### 2.4.0`(2025-11-29)`
- **优化**:纳塔铁匠铺路线可能出现跑过头的问题
- **新增**
1. 支持月国铁匠铺,矿石虹滴晶的使用
2. 重构全新的矿石使用排序方式
3. 选择矿石排序为0时可以排除对应矿石
1. 支持月国铁匠铺,矿石虹滴晶的使用
2. 重构全新的矿石使用排序方式
3. 选择矿石排序为0时可以排除对应矿石
### 2.3.1`(2025-08-30)`
- **修复**
1. 模式一识别开启通知时,发送通知报错
2. 模式一背包界面不退出的问题
1. 模式一识别开启通知时,发送通知报错
2. 模式一背包界面不退出的问题
### 2.3.0`(2025-08-28)`
- **修复**:枫丹铁匠铺跑过头导致失败的问题
- **优化**:仅领取锻造时,先检测大地图左上角是否有【锻造奖励】图标
- **新增**
1. 模式选择(默认模式一)
- 模式一:自动识别背包中数量最多的矿石锻造,失败自动切换到手动优先级(可能存在数量识别错误)
- 模式二:手动优先级,依次尝试主选及备选矿石
2. 支持纳塔铁匠铺
1. 模式选择(默认模式一)
- 模式一:自动识别背包中数量最多的矿石锻造,失败自动切换到手动优先级(可能存在数量识别错误)
- 模式二:手动优先级,依次尝试主选及备选矿石
2. 支持纳塔铁匠铺
### 2.2.1`(2025-08-03)`
- 加快锻造速度
- 优化通知逻辑,减少通知被吞概率
### 2.1
- 使用新版版本号
- 5.7 提高了锻造上限,锻造次数由 3 改为 4
### 2.005232025-05-23
- 新增仅领取锻造
- 优化点击逻辑
- 修复锻造点击次数超过 3 次的 bug
### 2.02025-05-22
- 新增矿石不足时自动选择备用矿石
### 1.405212025-05-21
- 新增矿石未能识别时自动选择备用矿石
### 1.42025-05-20
- 新增通知功能
### 1.32025-05-15
- 修复选择"萃凝晶"时无法识别的问题
- 仓库内新增标签
### 1.22025-05-12
- 修复选择"萃凝晶"时无法识别的 bug
### 1.12025-05-01
- 优化矿石选取方式,改用识图模式
---
**最后更新**2026 年 0111
**最后更新**2026 年 0428
**维护者**@呱呱z
> 💡 提示:建议定期检查更新以获取最佳体验和最新功能

View File

@@ -1,40 +1,103 @@
/*********************** 配置与常量 ***********************/
// 用户配置
let notice = settings.notice ?? false; // 通知状态
let forgedOrNot = (settings.forgedOrNot && settings.forgedOrNot.trim() !== "") ? settings.forgedOrNot : "是"; // 是否锻造
let model = settings.model || "模式一"; // 模式选择
let smithyName = settings.smithyName ?? "枫丹铁匠铺"; // 铁匠铺地区
let CondessenceCrystal = settings.CondessenceCrystal ?? "1"; // 萃凝晶
let CrystalChunk = settings.CrystalChunk ?? "2"; // 水晶块
let AmethystLump = settings.AmethystLump ?? "3"; // 紫晶块
let RainbowdropCrystal = settings.RainbowdropCrystal ?? "4"; // 虹滴晶
/*
*新增示例:
let 【新矿石英文】 = settings.【新矿石英文】 ?? "【5】"; // 新矿石
*/
let notice = settings.notice ?? false; // 通知状态
let forgedOrNot = (settings.forgedOrNot && settings.forgedOrNot.trim() !== "") ? settings.forgedOrNot : "是"; // 是否锻造
let model = settings.model || "模式一"; // 模式选择
// 矿石图像与中文名称映射
const ingredientImageMap = {
萃凝晶: "assets/Picture/CondessenceCrystal.png",
水晶块: "assets/Picture/CrystalChunk.png",
紫晶块: "assets/Picture/AmethystLump.png",
虹滴晶: "assets/Picture/RainbowdropCrystal.png",
星银矿石: "assets/Picture/Starsilver.png",
白铁块: "assets/Picture/WhiteIronChunk.png",
铁块: "assets/Picture/IronChunk.png",
};
const OreChineseMap = {
萃凝晶: "萃凝晶",
水晶块: "水晶块",
紫晶块: "紫晶块",
虹滴晶: "虹滴晶",
/*新增示例:
新矿石: "新矿石",
*/
星银矿石: "星银矿石",
白铁块: "白铁块",
铁块: "铁块",
};
// 定义优先级配置和昵称顺序。读取 settings.json 里的矿石优先级配置,转为数字
const orePriorityConfig = {
"萃凝晶": Number(CondessenceCrystal) ?? 0,
"水晶块": Number(CrystalChunk) ?? 0,
"紫晶块": Number(AmethystLump) ?? 0,
"虹滴晶": Number(RainbowdropCrystal) ?? 0//新增时,此处记着添加【,】标点符
/*
新增示例:
"【新矿石】": Number(【新矿石英文】) ?? 0
*/
};
//定义昵称顺序,用于优先级相同时的排序。
const nicknameOrder = ["萃凝晶", "水晶块", "紫晶块", "虹滴晶"];
//锻造界面物品图标
const ingredientImageMap = {
萃凝晶: "assets/Picture/CondessenceCrystal.png",
水晶块: "assets/Picture/CrystalChunk.png",
紫晶块: "assets/Picture/AmethystLump.png",
虹滴晶: "assets/Picture/RainbowdropCrystal.png",
/*新增示例:
【新矿石】: "assets/Picture/【新矿石英文】.png",
*/
星银矿石: "assets/Picture/Starsilver.png",
白铁块: "assets/Picture/WhiteIronChunk.png",
铁块: "assets/Picture/IronChunk.png",
};
//背包界面物品图标
const CondessenceCrystalRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/ItemImage/CondessenceCrystal.png"),
115, 115, 1300, 955
); // 【萃凝晶】
const CrystalChunkRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/ItemImage/CrystalChunk.png"),
115, 115, 1300, 955
); // 【水晶块】
const AmethystLumpRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/ItemImage/AmethystLump.png"),
115, 115, 1300, 955
); // 【紫晶块】
const RainbowdropCrystalRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/ItemImage/RainbowdropCrystal.png"),
115, 115, 1300, 955
); // 【虹滴晶】
/*新增示例:
const 【新矿石英文】Ro = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/ItemImage/【新矿石英文】.png"),
115, 115, 1300, 955
); // 【新矿石】
*/
const smithyMap = {
"蒙德铁匠铺": { x: -869, y: 2278, country: "蒙德" },
"璃月铁匠铺": { x: 267, y: -665, country: "璃月" },
@@ -42,9 +105,15 @@ const smithyMap = {
"须弥铁匠铺": { x: 2786, y: -503, country: "须弥" },
"枫丹铁匠铺": { x: 4507, y: 3630, country: "枫丹" },
"纳塔铁匠铺": { x: 9085, y: -1964, country: "纳塔" },
"挪德卡莱铁匠铺": { x: 9458, y: 1660, country: "挪德卡莱" }
"挪德卡莱铁匠铺": { x: 9458, y: 1660, country: "挪德卡莱" }//新增时,此处记着添加【,】标点符
/*新增示例:
"冰国铁匠铺": { x: , y: , country: "冰国" }//x,y坐标为录制路径时传送点的坐标country为铁匠铺所属国家名称
*/
};
// 模板识别对象
//游戏界面
const InventoryInterFaceRo = RecognitionObject.TemplateMatch(
@@ -65,6 +134,35 @@ const ForgingInterFaceRo = RecognitionObject.TemplateMatch(
); // 锻造界面图标
//对话框图标
const ForgeRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/DialogueInterface/Forge.png"),
1260, 300, 600, 600
); // 对话框中的锻造图标
//综合性图标
const ConfirmDeployButtonRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/Icon/ConfirmDeployButton.png"),
0, 870, 1920, 210
); // 确定按钮
const ClaimAllRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/Icon/全部领取.png"),
0, 900, 1920, 180
);
//地图界面图标
const MapRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/icon/右上角巨诗.png"),
945, 20, 975, 50
); // 地图右上角【识别用】图标
const MapForgeRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/icon/MapForge.png"),
0, 0, 400, 625
); // 地图左上角【锻造】图标
//锻造界面物品图标-未使用这部分代码
const CondessenceCrystalForgeRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/Picture/CondessenceCrystal.png"),
@@ -85,62 +183,6 @@ const RainbowdropCrystalForgeRo = RecognitionObject.TemplateMatch(
//背包界面物品图标
const CondessenceCrystalRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/ItemImage/CondessenceCrystal.png"),
115, 115, 1300, 955
); // 【萃凝晶】
const CrystalChunkRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/ItemImage/CrystalChunk.png"),
115, 115, 1300, 955
); // 【水晶块】
const AmethystLumpRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/ItemImage/AmethystLump.png"),
115, 115, 1300, 955
); // 【紫晶块】
const RainbowdropCrystalRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/ItemImage/RainbowdropCrystal.png"),
115, 115, 1300, 955
); // 【虹滴晶】
//对话框图标
const ForgeRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/DialogueInterface/Forge.png"),
1260, 300, 600, 600
); // 对话框中的锻造图标
//图标
const ConfirmDeployButtonRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/Icon/ConfirmDeployButton.png"),
0, 870, 1920, 210
); // 确定按钮
const ClaimAllRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/Icon/全部领取.png"),
0, 900, 1920, 180
);
//地图界面图标
const MapRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/icon/右上角巨诗.png"),
945, 20, 975, 50
); // 地图右上角【识别用】图标
const MapForgeRo = RecognitionObject.TemplateMatch(
file.ReadImageMatSync("Assets/RecognitionObject/icon/MapForge.png"),
0, 0, 400, 625
); // 地图左上角【锻造】图标
// 定义优先级配置和昵称顺序。读取 settings.json 里的矿石优先级配置,转为数字
const orePriorityConfig = {
"萃凝晶": Number(CondessenceCrystal) ?? 0,
"水晶块": Number(CrystalChunk) ?? 0,
"紫晶块": Number(AmethystLump) ?? 0,
"虹滴晶": Number(RainbowdropCrystal) ?? 0
};
//定义昵称顺序,用于优先级相同时的排序。
const nicknameOrder = ["萃凝晶", "水晶块", "紫晶块", "虹滴晶"];
@@ -451,7 +493,12 @@ async function getMaxOreType() {
{ name: "水晶块", ro: CrystalChunkRo },
{ name: "紫晶块", ro: AmethystLumpRo },
{ name: "萃凝晶", ro: CondessenceCrystalRo },
{ name: "虹滴晶", ro: RainbowdropCrystalRo }
{ name: "虹滴晶", ro: RainbowdropCrystalRo }//新增时,此处记着添加【,】标点符
/*新增示例:
{ name: "【新矿石】", ro: 【新矿石英文】Ro }
*/
];
// 定义日志收集对象
@@ -690,7 +737,7 @@ async function forgeOre(smithyName, maxOre = null) {
interval: 500,
postClickDelay: 1000,
singleAttempt: true
})) {
})) {
await sleep(1000);
await click(960, 1042);
await findAndInteract(ForgeRo, {

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "自动锻造魔矿(识图版)",
"version": "2.4.1",
"version": "2.4.2",
"bgi_version": "0.48.2",
"description": "自动选择铁匠铺和使用矿物去锻造精锻矿。\n \n使用前请阅读“readme”文件以获取更多详细信息。 \n---更新说明--- \n- 请查阅readme",
"tags": [

View File

@@ -25,7 +25,12 @@
"须弥铁匠铺",
"枫丹铁匠铺",
"纳塔铁匠铺",
"挪德卡莱铁匠铺"
"挪德卡莱铁匠铺" //新增时,此处记着添加【,】标点符
/*
"冰国铁匠铺"//注意与录制路径的文件名一致
*/
],
"default": "蒙德铁匠铺"
},
@@ -90,5 +95,22 @@
"4"
],
"default": "4"
}
} //新增时,此处记着添加【,】标点符
/*
{
"name": "新矿石英文",
"type": "select",
"label": "新矿石",
"options": [//排序可选数
"0",
"1",
"2",
"3",
"4"
],
"default": "5"//初始设置排序。新增矿物时,上方旧矿物也需要调整排序可选数,保持与矿石类型数量一致
}
*/
]