替你跑24小时暗黑2刷宝:Botty图像识别机器人从首次跑通到进阶调优
【免费下载链接】bottyD2R Pixel Bot项目地址: https://gitcode.com/gh_mirrors/bo/botty
Botty 是一个为《暗黑破坏神2:重制版》(D2R)做的图像识别自动化脚本:它用眼睛看屏幕,自己认路、打 Boss、按捡物规则收装备,然后循环往复。这篇文章按顺序讲清楚四件事:它能干什么、怎么第一次跑起来、哪几个参数值得调、哪些坑要避开。读完你应该能独立跑通一个刷宝循环,并且知道它出问题时该查哪里。
先知道它"会什么",再决定跑什么
Botty 不靠录制的固定坐标。走位、杀怪、捡物、回城,全部是实时对游戏画面做模板匹配和 OCR(光学字符识别)读出来的。机器人核心是一台状态机:角色在"选人界面 → 城镇 → 各副本 → 回城"之间循环,死亡或血量告急时,监控线程会立刻把流程拉回来重开。
你可以交给它的活大致包括:
- 多条刷宝线路轮换:崔凡克、品度、奥金尼(可附带先杀 Shenk)、尼拉塞克、神秘避难所、混沌庇护所(迪亚波罗)。后三条要求角色会传送,迪亚波罗线只支持祝福之锤圣骑士。
- 按规则捡物:内置一份 NIP 格式的捡物清单,符文、药水、三把 Uber 钥匙、精华都在里面,地面出现就捡。
- 自动后勤:回城、整理背包、存仓库、收金币、把无瑕宝石转化为完美宝石。
- 保命逻辑:血量低于设定比例自动出城,按阈值喝药,佣兵也照看。
匹配时它会用一张随仓库提供的 HUD 遮罩把底部界面区域挡掉,避免血条、技能栏干扰识别。
三个前置条件,一个都不能省
- 游戏语言必须是英语。物品名靠 OCR 读出来,换成其他语言整条捡物链都会失效。
- 用720p 窗口模式。启动后按自动设置热键会替你写入这项。
- 别让任何外部程序碰画面:HDR、GeForce 体验之类的覆盖层全部关掉。亮度偏移哪怕一两个像素,模板匹配分数就可能掉到阈值以下。
缺了其中任何一条,症状几乎都长得一样:机器人"看不见"路、捡不到东西、或者原地站着不动。
从克隆到按下 F11:第一次跑通
先装好 miniconda(安装时勾选把 conda 加入 PATH)和 git,然后在终端里执行:
git clone https://gitcode.com/gh_mirrors/bo/botty cd botty conda env create environment.yml conda activate botty python src/main.py不想从源码跑,也可以下载预编译的 release 包,在 botty 目录里直接启动main.exe——注意选 .rar 那个文件。
按 F11 之前,把 D2R 放到正确状态:游戏开着,停在选人界面,选中你要用的角色。bot 接管后会自动把角色带入你在配置里设定的难度和第三、四、五幕。
四个热键记一下:
| 热键 | 作用 |
|---|---|
| F9 | 自动调整 D2R 图形与游戏设置 |
| F10 | 打开图形调试器 |
| F11 | 启动 / 恢复 botty |
| F12 | 强制停止 botty |
第一次跑,先按 F9 把设置写入,再按 F11。另外留意:第一场游戏 botty 会自动输入/nopickup,这是为了防止赶路时误捡垃圾,等"显示物品"生效后才开始捡。
用 F10 验证设置:最值的30秒
启动后按 F10 打开图形调试器,一个近乎全黑的窗口。开一局游戏走到第五幕,看两样东西:
- 画面上出现蓝色圆圈、控制台打印出模板匹配分数,说明图形设置合格;
- 往地上丢几种不同的物品,调试窗口会给出黑色底的名字标签,命中捡物清单的物品会带红色圆圈。
你希望捡的物品,分数应该明显高于 0.9。分数偏低就回头检查亮度、分辨率和覆盖层,别急着怀疑代码。
这30秒能省掉后面几小时的"它为什么不工作"。
params.ini 里真正要动的三处
配置都在 config 目录,核心是 params.ini,每个参数带注释,README 里有完整参数表。第一次跑只需要动三处。
一、跑哪些线路,[routes]下的顺序就是路线列表:
[routes] order=run_pindle, run_eldritch_shenk [general] difficulty=hellrandomize_runs=1可以打乱顺序。
二、build 和保命线,[char]段:
[char] type=light_sorc casting_frames=10 chicken=0.35 take_health_potion=0.8casting_frames按你的 FCR(施法帧率)查表填写,填错会导致技能释放节奏漂移,虚拟机上通常还要再加一两帧。chicken是回城线,血量低于该比例就出城;take_health_potion是喝药阈值。
三、攻击节奏,atk_len_xxx系列控制每个 Boss 处攻击多久,默认值先照用,野蛮人打崔凡克和 Shenk 往往要拉到 8–12。
怕升级版本后要重填一遍:在 config 里建custom.ini,只写你要覆盖的值,新版本直接拷这一个文件就行。
; custom.ini - 只覆盖两个参数 [general] name=MyBot [routes] order=run_pindle, run_eldritch_shenk捡物规则:收益由它决定
仓库里的 BNIP 是 Njaguar Item Parser(NIP)的扩展版,语法基本兼容 NIP。config 目录下的默认捡物文件里已经有符文、药水、Uber 钥匙、精华等成百上千条现成规则,照用即可。有四个点值得知道:
- 把自己的
.nip文件放进config/nip,放进去之后默认清单即被停用,所以你要的规则都要写全。 - BNIP 新增
[allres]检查全抗性,比如[type] == amulet && [quality] == unique # [allres] == 30可以捡到马衣;[idname]直接匹配暗金/套装名,如[idname] == thestoneofjordan捡 SoJ,但这条要求物品已鉴定。 - 毒伤不再换算,直接读原始值:
[poisonmindam] == 5就是"附加5点毒伤"。 - 规则前加
@,捡到该物品时不发 Discord 通知,比如@[type] == ring。
跑起来之后,最常踩的四个坑
线路要传送,角色却没有。run_nihlathak、run_arcane、run_diablo都依赖传送。走路角色记得把跳跃热键配好。
cs_town_visits目前是坏的。项目文档明确说先保持 0,别好奇去开。
出事了不知道原因。三个开关:info_screenshots=1(默认开)会在卡住、回城、超时、背包满时各存一张带时间戳的截图;pickit_screenshots=1记录每次地面捡物识别;max_consecutive_fails决定连续失败几次后停止开新游戏。截图目录涨得快,隔段时间清一次。
卡死不自动恢复。把restart_d2r_when_stuck设为 1,botty 会在崩溃或状态无法恢复时尝试重启 D2R,默认是 0。
另外记住:每条线路的路径都是 assets/templates 里预录的模板节点,地图里那些编号的蓝点就是路径点。节点识别失败时,第一件事永远是开 F10 看分数,而不是改代码。
第一次24小时挂机前的检查单
先调三处配置:break_length_m和max_runtime_before_break_m设置"每跑 Y 分钟休息 X 分钟",适合长时间无人值守; hardcore 或高价值号把safer_routines=1,用速度换一层防御动作;配好 Discord webhook 到custom_message_hook,botty 会每discord_status_count局发一次状态,回城时也会提醒。日志太多就把logg_lvl从 debug 调低。
出门挂机前,按这个清单过一遍:
- 语言英语、720p 窗口、无 HDR 和覆盖层
- F9 已写入设置,F10 能看到蓝圈且关键模板分数高于 0.9
type和各技能热键与角色实际绑定一致order里的线路都满足传送条件(或角色本来就能传送)- 前两三局有人看着:能走完路线、能捡到东西、能回城存仓库
五条都过,就可以交给它自己跑了。之后你只需要盯 Discord 的状态消息和截图目录——哪里出了问题,截图已经替你存好了。
【免费下载链接】bottyD2R Pixel Bot项目地址: https://gitcode.com/gh_mirrors/bo/botty
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考