diff --git a/repo/js/铁匠铺/README.md b/repo/js/铁匠铺/README.md index 841a7f500..1c86f17b5 100644 --- a/repo/js/铁匠铺/README.md +++ b/repo/js/铁匠铺/README.md @@ -5,12 +5,15 @@ > **重要提示:请在使用前仔细阅读以下内容** ### 使用风险 + 本脚本为开源学习项目,仅限个人学习使用,**禁止用于商业用途或任何违反游戏条款的行为**。滥用可能导致游戏账号封禁,开发者不承担任何直接或间接责任。 ### 责任限制 + 本脚本按"现状"提供,不承诺兼容性、安全性或功能完整性。因使用本脚本导致的账号、数据、设备等任何损失,开发者概不负责。 ### 禁止条款 + 严禁对本脚本进行逆向工程、恶意篡改或用于外挂等非法用途。如游戏运营商提出要求,开发者保留随时停止维护的权利。 **使用本脚本即表示您已阅读、理解并同意上述所有条款。** @@ -18,12 +21,13 @@ ## 📞 联系与反馈 如有任何建议或问题,欢迎通过以下方式联系: -📧 QQ:1765137214 +📧 QQ:1765137214(本人已退游,欢迎后续来者优化/更新) --- ## ✨ 功能介绍 -适用于原神 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 @@ Q:OCR识别矿石数量不准确怎么办? ## 📜 更新日志 +### 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.00523(2025-05-23) + - 新增仅领取锻造 - 优化点击逻辑 - 修复锻造点击次数超过 3 次的 bug ### 2.0(2025-05-22) + - 新增矿石不足时自动选择备用矿石 ### 1.40521(2025-05-21) + - 新增矿石未能识别时自动选择备用矿石 ### 1.4(2025-05-20) + - 新增通知功能 ### 1.3(2025-05-15) + - 修复选择"萃凝晶"时无法识别的问题 - 仓库内新增标签 ### 1.2(2025-05-12) + - 修复选择"萃凝晶"时无法识别的 bug ### 1.1(2025-05-01) + - 优化矿石选取方式,改用识图模式 --- -**最后更新**:2026 年 01 月 11 日 +**最后更新**:2026 年 04 月 28 日 **维护者**:@呱呱z > 💡 提示:建议定期检查更新以获取最佳体验和最新功能 - diff --git a/repo/js/铁匠铺/main.js b/repo/js/铁匠铺/main.js index 5dd97bb9d..896dc8307 100644 --- a/repo/js/铁匠铺/main.js +++ b/repo/js/铁匠铺/main.js @@ -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, { diff --git a/repo/js/铁匠铺/manifest.json b/repo/js/铁匠铺/manifest.json index d7441b803..a97a7b56c 100644 --- a/repo/js/铁匠铺/manifest.json +++ b/repo/js/铁匠铺/manifest.json @@ -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": [ diff --git a/repo/js/铁匠铺/settings.json b/repo/js/铁匠铺/settings.json index ec99c58ca..12338ac68 100644 --- a/repo/js/铁匠铺/settings.json +++ b/repo/js/铁匠铺/settings.json @@ -25,7 +25,12 @@ "须弥铁匠铺", "枫丹铁匠铺", "纳塔铁匠铺", - "挪德卡莱铁匠铺" + "挪德卡莱铁匠铺" //新增时,此处记着添加【,】标点符 + /*新增示例: + + "冰国铁匠铺"//注意与录制路径的文件名一致 + +*/ ], "default": "蒙德铁匠铺" }, @@ -90,5 +95,22 @@ "4" ], "default": "4" - } + } //新增时,此处记着添加【,】标点符 + /*新增示例 + + { + "name": "新矿石英文", + "type": "select", + "label": "新矿石", + "options": [//排序可选数 + "0", + "1", + "2", + "3", + "4" + ], + "default": "5"//初始设置排序。新增矿物时,上方旧矿物也需要调整排序可选数,保持与矿石类型数量一致 + } + + */ ] \ No newline at end of file