DBVictory机器人
DBVictory游戏的中间人代理机器人程序,通过MCP(模型上下文协议)通过Claude Code控制。具有DLL注入功能,用于实时生物跟踪、游戏内定位、自动治疗/抛光和实时电子仪表板。
特性
- MITM代理 --使用XTEA加密密钥拦截和解密所有游戏流量
- DLL注入 --通过以下方式直接从游戏内存中读取生物战斗列表
std::map走树 - 游戏内定位 --电话
Game::attack()在内部,红色的瞄准方块出现在游戏中 - 实时仪表板 --带有WebSocket的Electron+Next.js应用程序每100ms更新一次,显示玩家统计数据、生物、数据包计数和动作控制
- 自动化操作 --在后台运行的可插拔Python脚本(治疗、抛光、进食、定位)
- 完整游戏状态 --解析服务器数据包中的生命值、法力值、等级、位置、生物和短信
- Claude代码控制 --通过MCP工具执行自然语言命令(行走、攻击、使用项目)
- HP从DLL读取 --直接从游戏内存中读取玩家健康状况,以实现快速、可靠的治疗触发
- 死亡生物过滤 --自动从游戏状态中过滤掉0%的生命值生物
运作原理
- 游戏客户端(
dbvStart.exe)通常连接到87.98.220.215 - 机器人修补客户端的内存,以重定向流量通过
127.0.0.1 - 本地代理拦截登录/游戏流量,提取XTEA加密密钥,并按需注入数据包
- DLL被注入到游戏进程中,以读取生物数据并启用游戏内定位
- Claude Code向MCP服务器发送命令,MCP服务器将命令转换为游戏数据包
建筑
You (Claude Code)
│
│ MCP protocol (tools: walk, attack, say...)
▼
mcp_server.py ──────────────────────────────┐
│ │
├── proxy.py ◄──► Game Client ◄──► Game Server
│ │ │
│ │ decrypts │
│ │ via crypto.py │
│ │ │
│ ▼ │
│ protocol.py │
│ │ │
│ ▼ │
│ game_state.py │
│ ▲ │
│ │ │
├── dll_bridge.py ◄────┤ named pipe ◄── dbvbot.dll (injected)
│ │ │
├── actions/*.py │ ├── hooks XTEA encrypt
│ (eat, attack, │ ├── walks creature map tree
│ sniff, heal) │ ├── calls Game::attack()
│ │ └── sends data to Python
│ │
└── dashboard_api.py ──┤──► dashboard/ (Electron + Next.js)
│
bot.py (BotContext — what actions use)自动化操作
该机器人支持可插拔的后台操作——Python脚本 actions/ 连接时持续运行的文件夹。每个动作都有一个 async def run(bot) 入口点。
| 动作 | 描述 |
|---|---|
| 自动定位 | 使用DLL内部瞄准最近的活怪物 Game::attack() 呼叫(100ms循环) |
| 食物 | 使用热键式包装每10秒吃一次食物(红火腿)——适用于任何背包/插槽 |
| power_up | 只有当HP低于99%时,才会每1秒“通电”进行治疗 |
| 速度up | 在不匆忙的情况下“加速”——通过玩家图标位掩码检测匆忙 |
| power_down | 每1秒说一次“断电”以取消治疗效果 |
| auto_rune | 每秒对当前目标生物使用符文3165 |
| 洞穴机器人 | 使用实时小地图可视化记录和回放导航路径 |
| packet_sniffer | 捕获所有客户端到服务器的数据包 sniff_log.txt 用于协议分析 |
| item_id_spy | 调试工具:当您使用或查看项目时,在游戏状态栏中显示“项目Id:XXXXX” |
| full_light | 修补游戏客户端以完全跳过黑暗覆盖 |
可以从仪表板UI或通过MCP工具打开/关闭操作。启用的操作在机器人连接时自动启动。
编写自定义操作
创建一个 .py 文件在 actions/ 带着一个 async def run(bot) 功能:
"""Eat food every 10 seconds. Uses hotkey-style packet — works from any backpack/slot."""
import sys, os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from protocol import build_use_item_packet
FOOD_ID = 3583 # red ham on DBVictory
INTERVAL = 10
async def run(bot):
while True:
if bot.is_connected:
pkt = build_use_item_packet(0xFFFF, 0, 0, FOOD_ID, 0, 0)
await bot.inject_to_server(pkt)
await bot.sleep(INTERVAL)这 bot 对象提供:
bot.use_item_in_container(item_id, container, slot) # use item from backpack
bot.use_item_on_map(x, y, z, item_id, stack_pos) # use item on ground
bot.say(text) # send chat message
bot.walk(direction, steps, delay) # walk in a direction
bot.inject_to_server(packet) # send raw packet
bot.sleep(seconds) # async sleep
bot.is_connected # connection status
bot.hp / bot.max_hp / bot.mana # player stats
bot.position # (x, y, z)
bot.creatures # nearby creatures
bot.log(msg) # log to stderr仪表盘
Electron仪表板提供对机器人状态的实时可见性:
- 身份徽章 --MCP、游戏登录、DLL注入、DLL桥连接状态
- 球员数据 --标高、HP/Mana柱、位置坐标
- 生物列表 --附近生物的生命值百分比
- 数据包计数器 --服务器和客户端数据包计数
- 动作控制 --直接从UI中切换、查看日志和删除操作
仪表板通过WebSocket连接(ws://127.0.0.1:8090)对于100毫秒的更新间隔,使用HTTP API(http://127.0.0.1:8089)对于动作突变。
DLL注入系统
注入的DLL(dll/dbvbot.dll)提供了仅通过代理无法实现的功能:
- 生物地图树漫步 --阅读
std::map每100ms直接从内存中提取红黑树,用于O(log n)生物查找 - 游戏内定位 --电话
Game::attack()通过WndProc钩子从游戏线程中,使红色目标方块以本机方式显示 - XTEA密钥提取 --挂接XTEA加密函数以捕获会话加密密钥
- HP阅读 --直接从游戏内存中读取玩家健康状况
DLL和Python之间的通信通过命名管道进行(\\.\pipe\dbvbot).这 dll_bridge 操作作为始终在线的内部服务运行。
构建
需要MinGW-w64(32位),因为dbvStart.exe是32位的:
cd dll && make可用的MCP命令
运动
- 走 --沿某个方向移动(n/s/e/w/ne/se/sw/nw)
- 高速 步行 --朝一个方向不停地走
- 停止 --停止行走
- 转 --面向一个主要方向
战斗
- 攻击 --通过ID攻击生物
- 跟随 --按ID追踪生物
- set_fight_modes --设置进攻/平衡/防守,追逐/站立,PvP/安全
交互
- 说 --发送聊天消息
- 使用项目 --在地图位置使用项目
- move_item --在位置之间移动项目
- look_at --检查瓷砖或物品
行动
- list_actions --显示所有具有ON/OFF/运行状态和源预览的操作
- 切换_操作 --启用/禁用操作
- remove_action --删除动作脚本
- restart_action --重新加载并重新启动正在运行的操作
洞穴机器人
- 开始记录 --开始记录导航航路点
- 停止记录 --停止录制并保存到磁盘
- list_记录 --列出所有已保存的录音
- 播放记录 --回放已保存的录制(带可选循环)
- 停止回放 --停止洞穴机器人播放
- 删除记录 --删除已保存的录制
效用
- 获取状态 --检查连接状态和数据包统计信息
- send_ping --Ping游戏服务器
- 登出 --断开与服务器的连接
设置
需求
- Python 3.10+
- Windows(内存修补和DLL注入所需)
- DBVictory游戏客户端(
dbvStart.exe) - MinGW-w64 32位(用于DLL编译)
再进行
pip install pymem mcp websockets用法
重要提示: Claude Code必须以管理员身份运行才能进行内存修补。
- 以管理员身份启动Claude Code --右键单击终端,“以管理员身份运行”
- 启动游戏客户端 --打开
dbvStart.exe,在登录屏幕上等待(尚未登录) - 请克劳德
start_bot--修补内存,启动代理(等待登录最多2分钟) - 通过游戏客户端登录 --代理拦截连接并提取加密密钥
- 控制你的性格 --给Claude自然语言命令或启用自动操作
项目结构
dbv_exp/
├── mcp_server.py ★ Main entry point — MCP server for Claude Code
├── proxy.py Network MITM proxy (XTEA decrypt/encrypt)
├── protocol.py OT protocol packet parser
├── crypto.py XTEA encryption implementation
├── bot.py BotContext class for actions
├── game_state.py Live game state (HP, creatures, position)
├── patcher.py Patches game client memory
├── inject.py DLL injector (LoadLibrary via CreateRemoteThread)
├── dll_bridge.py Python ↔ DLL named pipe communication
├── dashboard_api.py REST + WebSocket API for dashboard
│
├── dll/
│ ├── dbvbot.cpp Injected DLL (creature scan, Game::attack, XTEA hook)
│ └── dbvbot.dll Compiled DLL
│
├── actions/
│ ├── dll_bridge.py Always-on DLL bridge service
│ ├── auto_targeting.py Auto-target nearest monster via Game::attack()
│ ├── eat_food.py Periodic food consumption
│ ├── power_up.py Healing when HP < 99%
│ ├── speed_up.py Haste buff with icon bitmask detection
│ ├── auto_rune.py Auto-rune on targeted creature
│ ├── cavebot.py Navigation recording and playback
│ ├── full_light.py Darkness overlay patch
│ ├── power_down.py Cancel healing buff
│ ├── packet_sniffer.py Packet capture to file
│ └── item_id_spy.py Item ID debug display
│
├── dashboard/
│ ├── app/ Next.js pages (React UI)
│ ├── lib/ Shared utilities
│ └── electron/ Electron wrapper (desktop app)
│
├── cavebot.py Cavebot engine (recording, actions map, minimap)
├── recordings/ Saved cavebot navigation recordings
├── docs/ Research notes and analysis
├── offsets.json Centralized game offsets (DLL reads via pipe)
└── bot_settings.json Persisted action settings更新日志
DLL崩溃安全性和稳定性
- 添加修复12:在Game::攻击之前进行预验证,以防止Lua损坏
- 在地图不稳定后添加延迟攻击重试,将冷却时间减少到500毫秒
- 添加地图稳定性检测(修复11)、碰撞报告技能、动作更新
- 添加VEH崩溃恢复,洞穴机器人地板/取消行走支持,修复远用物品保存
- 修复cavebot双偏移bug,添加DLL崩溃安全,仪表板改进
洞穴机器人
- 添加cavebot v1:录制、播放、小地图和仪表板UI
- 为洞穴机器人添加基于序列的小地图可视化
- 为cavebot build_actions_map添加单元测试(62个测试)
- 为cavebot和代理序列仪表板添加互动程序更新验证
- 向cavebot use_item节点添加自包含的预行走
- 修复楼层变化检测、事件驱动洞穴机器人、代理重置可靠性
- 添加比较分组视图,删除楼层不匹配跳过
- 使用DLL位置进行录制,将循环睡眠时间减少到1ms
- 将DLL扫描和网桥轮询速率提高到60 FPS
- 添加AOE拼写动作,减少重试次数,修复航路点删除,颜色代码回放日志
- 添加PZ检测、跳楼、取消步行重组、不可达怪物处理、双重使用项目
行动与战斗
- 添加auto_targeting(通过游戏::攻击距离最近的怪物)
- 添加auto_rune操作和build_use_on_creature_packet
- 添加auto_senzu操作:当HP\<40%时使用senzu bean(8465)
- 通过PLAYER_ICONS添加带有匆忙检测的speed_up操作
- 通过代码补丁添加全光动作(跳过黑暗覆盖)
- 添加AOE法术动作(当附近有2个以上怪物时施放区域法术)
- 仅当HP低于99%时才启动投射电源
- 瞄准最近的生物,将动作日志添加到仪表板
DLL和目标
- 通过游戏::attack+sendAttackCreature实现游戏内目标定位
- 将VirtualQuery扫描替换为直接生物地图树遍历,添加WndProc钩子
- 使dll_bridge始终处于内部服务状态,添加4个仪表板状态徽章
- 从DLL内存中读取HP,提高数据包扫描和代理可靠性
- 从游戏状态中过滤掉死亡生物(0%生命值)
基础设施和代码质量
- 将游戏常量合并到constants.py中
- 将OTCv8源代码交叉引用注释添加到constants.py
- 用基于列表的注册表替换脆弱的回调链
- 在start_bot上自动关闭游戏连接并重建DLL
- 代码审查修复:删除重影模式、保护树行走、路径遍历修复
- 修复proxy.py中的中继循环中断缩进
仪表盘
- 添加带有实时操作控件的Electron+Next.js仪表板
- 添加WebSocket仪表板,修复玩家位置跟踪
- 添加游戏状态解析、仪表板玩家统计、机器人重置和热重新加载
- 将cavebot比较视图截图添加到文档和README中
- 将洞穴机器人小地图截图添加到README
安全与审查
- 修复完整代码库安全和质量审核中的36个问题
- 从完整的代码库审查中修复20个代码质量、维护和性能问题
洞穴机器人TODO
洞穴机器人是第一个工作版本,但尚未完全功能:
漏洞
- \[x\] 梯子换地板故障 --已修复:double use_item为需要2次点击的梯子/门发送两次数据包
- \[x\] 一些航路点随机重试 --已修复:将MAX_RETRIES从5减少到2,以实现快速故障
- \[x\] 停在无法瞄准的怪物身上 --已修复:无法触及的怪物保持目标,但不会暂停洞穴机器人
- \[x\] PZ区假暂停 --已修复:PZ检测解析“保护区”服务器消息,跳过PZ中的暂停
- \[x\] 航路点移除中断 -修复:URL-解码录制名称,双击guard,在API调用中encodeURIComponent
- \[x\] 未处理已取消的路径 --已修复:cancel_walks不接受重试尝试,逃逸阈值降至2
计划的功能
- \[x\] 基于序列的极小图可视化 --与其在每层楼(Z层)显示一张地图,不如根据楼层过渡将记录拆分为连续的“帧”。每次玩家进入一个楼层,一个新的序列/帧都会从一张新的地图开始。例如:Z=6时的序列1显示了初始巡逻,Z=7时的序列2显示了地下段,Z=6处的序列3显示了干净地图上的返回路径。这可以防止重叠的回溯线,使调试变得不可能——每一帧只显示该楼层上连续分段的航路点和动作
- \[x\] 将最大重试次数减少到1-2次 --完成:MAX_RETRIES从5减少到2
- \[ \] Z不匹配时的跳楼 --被添加然后被还原;如果玩家处于错误的Z级别,请跳到与当前楼层匹配的第一个节点
- \[ \] 门自动打开脚本 --要么是捕捉门互动的智能录制,要么是当玩家走进门时自动打开门的背景动作
- \[x\] 智能瞄准(诱饵模式) --完成:诱饵不停地行走航路点,让怪物攻击并跟随,在换地板前战斗,处理身体障碍物
- \[x\] 以诱饵暴徒数量为目标 --完成:可配置lure_count,加上lure_timeout(8s),如果未达到计数,则使用更少的暴徒进行战斗
- \[ \] 自动攻击优先考虑最低HP --自动瞄准应该优先选择生命值百分比最低的怪物来首先完成受伤的目标
- \[ \] 行动优先级排序 --允许按执行顺序对循环操作脚本进行优先级排序,并在仪表板中进行拖放重新排序
- \[ \] Cavebot预览搜索 --在洞穴机器人小地图预览中进行文本搜索,以查找特定的航路点、动作或节点标签
- \[ \] 取消选择时自动重定向 --当用户手动取消选择怪物并启用自动瞄准时,再次重新瞄准同一生物
- \[x\] AOE对暴徒群施咒 --完成:aoe_spell.py在范围内有2个以上怪物时施放“内焰”
- \[ \] 怪物战斗策略 --战斗时与怪物保持1平方距离的移动和攻击行为
- \[ \] 实物使用支持 --洞穴机器人导航过程中的铲子、绳索和其他可用物品
- \[ \] 地形测试 --验证并修复门、梯子和其他交互式地图对象的播放
- \[x\] 拼写旋转 --已完成:auto_rune_and_spell.py处理战斗中符文+法术的使用
- \[ \] 战利品拾取 --打开尸体,把战利品移到背包里
- \[ \] 死亡处理 --检测死亡、暂停行动、重生后恢复
锦上添花
- \[ \] 智能航路点到行动图优化器 --基于怪物产卵位置将原始记录路径转换为优化动作图的算法。分析哪些图块具有最高的怪物密度,删除冗余的回溯,并生成一条高效的巡逻路线,通过优先考虑高产卵区域和尽量减少在空走廊中的空闲行走,最大限度地提高每分钟的死亡率
- \[ \] 反机器人/智能应答器 --检测和响应反机器人检查或转基因互动的自动化系统
