24小时挂机刷宝 暗黑2重制版Botty像素机器人怎么调参数
【免费下载链接】bottyD2R Pixel Bot项目地址: https://gitcode.com/gh_mirrors/bo/botty
Botty 是一个跑在《暗黑破坏神2重制版》(D2R) 上的像素级自动刷宝机器人:它只靠截图做模板匹配和 OCR,把回城、捡物、开打、进图串成固定路线循环。适合想挂着 Pindle/Eldritch/Shenk 这类地狱难度任务、又愿意自己改 ini 文件的玩家。
项目速览
我实际跑下来,它的边界很清楚:
- 只做视觉层:匹配 NPC、怪物、UI 模板,OCR 读地面物品名,不读游戏内存、不改游戏文件。
- 路线是清单制:
run_trav、run_pindle、run_eldritch、run_eldritch_shenk、run_nihlathak(要传送)、run_arcane(要传送)、run_diablo(仅锤丁)。 - 职业覆盖有限但够用:光法/暴风雪/新星/死灵法、锤丁、野蛮人、陷阱暗、死灵法师都有实现,深度不一。
- 带恢复机制:超时、卡死、死亡会自动回城或重启 D2R,不用人盯着。
- 不做多开,也不承诺 720p 以外的窗口效果,它只按 720p 窗口标定的模板干活。
和"按键宏"比,区别在于它能看到画面:
| 维度 | Botty | 普通按键宏 |
|---|---|---|
| 导航方式 | 模板匹配节点 + 画面校验 | 固定坐标连点 |
| 地面物品 | 图像 + OCR 读名字再过滤 | 一律捡或一律不捡 |
| 掉线恢复 | 自动重启进程重进游戏 | 需要手动重开 |
| 画面漂移容忍 | 相似度阈值内可恢复 | 坐标偏一点就全乱 |
F10 打开的图形调试窗口,用来验证你的画面设置下模板分数是否稳定在 0.9 以上,以及丢地上的物品能不能被读出来。
5分钟跑通第一条路线
⚙️ 前置条件:D2R 必须是英文语言,720p 窗口。启动后聚焦游戏窗口按 F9 让它自动改图形设置(关掉 HDR、GeForce Experience 之类的增强程序,否则会干扰识别)。
git clone https://gitcode.com/gh_mirrors/bo/botty cd bottyconda env create -f environment.yml conda activate botty python src/main.py游戏停在人选界面,选中你要跑的角色,按 F11 开始,F12 随时强制停止。
config/params.ini里第一次只动两处,[routes]的order和[char]的type。默认order=run_pindle, run_eldritch_shenk、type=light_sorc,如果你就是光法,这两行不用改:
[routes] order=run_pindle [char] type=light_sorc我一般先只留一条路线跑,确认捡物正常、能顺利回城,再加第二条。参数不确定就建一个config/custom.ini只写要覆盖的字段,升级版本时不用来回搬改动。
原理速写:它凭什么"看见"游戏
纯视觉是有意的取舍。机器人每帧截图,拿assets/templates/里预制的 NPC、怪物、UI 模板去匹配;地面物品先靠图像圈出,再用 OCR 读出名字,交给 BNIP 解析器过滤。代价是游戏语言必须是英文、窗口必须 720p、亮度要固定,任何外部图形增强都会让分数掉下去。收益是它跟游戏内部实现零耦合,D2R 更新只要模板还认得,流程就能继续跑。
寻路不靠硬编码坐标。每张图的路径节点是提前录制生成的(assets/templates/下有对应文件夹),机器人走到一个节点后拿当前画面反向校验位置,所以画面小幅度偏移也能恢复。这也是"卡在原地转圈"时值得先查assets/templates/是否完整的原因。
Chaos Sanctuary 的节点布局示例,这类复杂室内图全靠节点图走,不靠猜。
状态机 + 三条线程。src/main.py启动后开三个线程:死亡监控、血量监控、状态机本体。前两者任何一条判定死亡或撤退(chicken),状态机线程就被杀掉重来,所以它摔死一次能自己爬起来。具体动作藏在各个 manager 里:pather.py管寻路、npc_manager.py管对话、物品识别单独一套。状态流转图在development.md里有完整版本。
状态机的状态和跳转关系,卡住时对照它判断机器人停在哪个环节。
坐标系分四层。Monitor / Screen / Absolute(角色脚下)/ Relative(相对某个模板)。排查"点到怪没点到"这类问题时,先看日志里的坐标属于哪一层,再决定是模板偏移还是窗口偏移。
实战调参:常见场景对照表
参数都在config/params.ini。按我踩过的坑排个序:
打 boss 磨时间。现象:Shenk 或 Pindle 战前摇太长,一局拖到 6 分钟以上。动作:把对应的atk_len_pindle(默认 3.0)、atk_len_shenk(默认 4.0)加 0.5~1.0;锤丁的atk_len_*按 README 注释,trav/shenk 可以给到 8~12。
频繁鸡跑(自动撤退)。现象:chicken默认 0.35,佣兵一挨打就撤退,整局白跑。动作:先把take_health_potion(默认 0.8)往下降到 0.7 左右,让药水提前顶上;确认稳定后再把chicken提到 0.4。追求稳定可以开safer_routines=1,代价是每局多花一点时间。
识别分数上不去。现象:调试窗口里模板分数低于 0.9。动作:重新按 F9 走一遍自动设置,关闭一切外部图形增强,必要时手动微调亮度。这是"物品识别不准"最常见的原因,优先于动任何 ini 参数。
走路职业误捡垃圾。现象:野蛮人/死灵法师走位过程中顺手捡了一路不需要的东西。动作:enable_no_pickup=1,开局会输入/nopickup,只在按show_items时允许拾取。
背包节奏。现象:捡物后长时间不回去整理,后面几局地面越来越满。动作:runs_per_stash默认 4,意思是每 4 局强制回城一次,配合runs_per_repair=0(只在需要时修理)够用。
翻车自救
| 现象 | 原因 | 动作 |
|---|---|---|
| 模板分数 <0.9 | 亮度/分辨率/语言不对 | 重跑 F9 自动设置,确认英文 + 720p 窗口 |
| 寻路原地打转 | 节点模板缺失或窗口位置漂移 | 检查assets/templates/完整性,重新聚焦游戏窗口 |
| 卡死无响应 | 单局超过max_game_length_s(默认 380 秒) | 开restart_d2r_when_stuck=1让它自己重启 D2R |
| 捡了一地垃圾 | 走路职业没开反误捡 | enable_no_pickup=1 |
Nihlathak 区域的场景模板,run_nihlathak依赖传送,这类模板识别失败基本等于寻路失败。
去哪读源码
src/main.py:入口,三个线程在这里拉起来,想看懂"谁负责复活机器人"从这里开始。src/bot.py:状态机主体,每个状态跳转都在这里,逻辑很薄,细节都委托给 manager。src/char/:各职业实现,新加 build 要继承IChar,文件命名和params.ini里的type一一对应。config/default.bnip:默认捡物规则,BNIP 是 NIP 的扩展版,支持[allres]、[idname]这类新标签;自己放一个.nip进config/bnip/就会顶掉默认文件。
下一步
先只跑一条run_pindle,开info_screenshots=1观察 20 局再动参数,比一次改十个值快得多。请遵守游戏条款与服务器规则合理使用本工具,账号风险自负。
【免费下载链接】bottyD2R Pixel Bot项目地址: https://gitcode.com/gh_mirrors/bo/botty
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考