☰
Botty宝石镶嵌自动化:flawless到perfect宝石的转译流程全解
2026/9/25 1:20:07 网站建设 项目流程

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]区块,官方默认值如下:

参数默认值作用
transmuteflawless决定转哪种宝石,可填chipped、flawed、standard、flawless的任意组合
stash_destination3,2,1,0转译产物放回仓库的页签优先级(3 页装满再放 2,0 为个人页)
transmute_every_x_game20每隔多少局执行一次转译,设为 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 颗 → 丢进方块 → 点击转译 → 取结果

每一批次的动作序列:

  1. 从仓库页pick_from_stash_at取出 3 颗目标宝石(Ctrl+点击精准拾取)
  2. open_cube打开方块
  3. 把 3 颗宝石依次丢入
  4. 点击方块中央的转译按钮(transmute())
  5. 到方块固定格子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 提供了独立入口:

  1. 运行python src/gem_transmute.py
  2. 把 D2R 窗口停在城镇/仓库界面,按F11启动转译
  3. 按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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询