Botty宝石镶嵌自动化:flawless到perfect宝石的转译流程全解
【免费下载链接】bottyD2R Pixel Bot项目地址: https://gitcode.com/gh_mirrors/bo/botty
Botty是一款面向《暗黑破坏神2:重制版》(D2R)的开源像素机器人,其中最实用的功能之一就是宝石镶嵌自动化(宝石转译 transmute):它会自动把仓库(Stash)里的 3 颗 flawless(无暇)宝石放入赫拉迪克方块,一键转译成 1 颗 perfect(完美)宝石,再把结果按优先级放回仓库,全程无需人工操作。本文带你从零看懂这套宝石转译流程:如何配置、如何触发、机器人是如何"认出"宝石的,以及整个流程的每一步细节。
一、先搞懂:宝石转译在 Botty 里是怎么触发的
Botty 的宝石转译不是独立程序,而是嵌在刷图主循环里的一个自动步骤:每当角色回城把战利品存入仓库后,机器人会检查"距上次转译是否已满 X 局",满足条件就自动执行转译。
核心调度逻辑在 src/bot.py 中,存完物品后紧接着调用:
self._transmute.run_transmutes(force=False)也就是说:先存仓库 → 再转宝石,这也是为什么转译流程强依赖仓库空间(下文会讲优先级放回策略)。
二、转译开关:params.ini 里只需 3 行配置
所有配置集中在 config/params.ini 的[transmute]区块,官方默认值如下:
| 参数 | 默认值 | 作用 |
|---|---|---|
transmute | flawless | 决定转哪种宝石,可填chipped、flawed、standard、flawless的任意组合 |
stash_destination | 3,2,1,0 | 转译产物放回仓库的页签优先级(3 页装满再放 2,0 为个人页) |
transmute_every_x_game | 20 | 每隔多少局执行一次转译,设为 0 或留空则关闭 |
💡升级链条:D2R 的方块规则是"3 颗同级宝石 = 1 颗高一级的宝石"。所以想一条龙把 chipped 磨到 perfect,只需在transmute里依次写上各级,机器人就会按chipped → flawed → standard → flawless → perfect的梯度逐级转译(各级的对应关系定义在 src/transmute/transmute.py 中)。
三、自动转译的 6 步流程全解
完整执行逻辑在 src/transmute/transmute.py 的run_transmutes/_run_gem_transmutes方法中,可拆成 6 个阶段:
1️⃣ 扫描 4 个仓库页,建立宝石地图
inspect_stash会逐一切换 4 个仓库页签,对每格做模板匹配,把"哪一页、哪一行哪一列有什么宝石"记录到内存模型 src/transmute/stash.py 中。仓库从此变成一个"宝石坐标表"。
2️⃣ 智能凑 3 颗:SimpleGemPicking 算法
魔方必须同种 3 颗才能升级,凑不齐就得跨页找。src/transmute/gem_picking.py 里的SimpleGemPicking会给每种宝石按"分布均衡度"打分,优先把最分散、最凑不齐的先凑出来,避免出现"某页只剩 2 颗、白白浪费"的尴尬。它的取批逻辑有完整的单元测试覆盖,见 test/transmute/gem_picking_test.py。
3️⃣ 安全校验:先确认方块是空的
check_cube_empty会打开赫拉迪克方块,扫描 3×4 共 12 格是否全空。只要检测到方块里有残留物品,本轮直接跳过转译——这是防止把宝石"喂"进脏方块导致损耗的关键保护。
4️⃣ 循环:取 3 颗 → 丢进方块 → 点击转译 → 取结果
每一批次的动作序列:
- 从仓库页
pick_from_stash_at取出 3 颗目标宝石(Ctrl+点击精准拾取) open_cube打开方块- 把 3 颗宝石依次丢入
- 点击方块中央的转译按钮(
transmute()) - 到方块固定格子
pick_from_cube_at(2, 3)把产出的上一级宝石取回背包
🔁 背包里凑满 3 颗就再转一次,直到仓库里的目标宝石耗尽。
5️⃣ 产物按优先级放回仓库
转译产物(比如 perfect 宝石)不会留在背包里。put_back_all_gems会按stash_destination配置的页签优先级(默认 3→2→1→0)依次放回,某页满了自动切换下一页。
6️⃣ 收尾与日志
一轮结束输出Finished flawless gem transmute日志,并记录本次执行的局数,供下次transmute_every_x_game判断。
四、机器人是怎么"认出"宝石的?
答案:纯视觉模板匹配,不读任何游戏内存。
每种宝石在 assets/templates/inventory/ 下都有一张 25×29 像素左右的小模板图,例如:
- 无瑕黄玉:inventory_topaz_flawless.png
- 完美黄玉:inventory_topaz_perfect.png
- 赫拉迪克方块图标:horadric_cube.png
- 方块转译按钮:cube_transmute_btn.png
机器人用模板匹配引擎(src/template_finder.py)在截图里逐格比对,匹配阈值 0.91。因此游戏分辨率、亮度设置必须与模板采集时一致(官方要求 D2R 英文版 + 720p),这也是 README 中强调先用"图形调试器"(F10)验证设置的原因。
五、想单独跑一次转译?用自带脚本即可
不需要刷 20 局等触发条件——src/gem_transmute.py 提供了独立入口:
- 运行
python src/gem_transmute.py - 把 D2R 窗口停在城镇/仓库界面,按F11启动转译
- 按F12结束
它和主流程走的是同一套Transmute类,行为完全一致,非常适合手动清理一次存量宝石。
六、新手配置建议(避坑清单)
- ✅ 默认
transmute=flawless即可,只负责"无瑕 → 完美"这最后一步 - ✅ 保持
stash_destination默认值,别把 personal 页(0)放前面,会挤占你的随身物品 - ⚠️ 仓库页里预先放的其他物品不要紧,但方块本身必须清空一次,机器人会自行检查
- ⚠️
transmute_every_x_game设太小(如 1)会频繁打断刷图节奏,建议 10~20 - ❌ 不要在转译进行中去操作鼠标键盘,视觉机器人对界面错位很敏感
总结
Botty 的宝石镶嵌自动化用"模板匹配识别 + 智能凑批算法 + 优先级回仓"三板斧,把繁琐的手工转译变成了后台任务:你只管让它刷图,flawless 到 perfect 的宝石升级它会每 20 局悄悄替你完成。想动手试试,只需改好 config/params.ini 里的[transmute]区块,然后按 F11 出发吧!🎮
【免费下载链接】bottyD2R Pixel Bot项目地址: https://gitcode.com/gh_mirrors/bo/botty
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考