D2R Pixel Bot架构解析:基于像素识别的暗黑破坏神2重制版自动化框架
【免费下载链接】bottyD2R Pixel Bot项目地址: https://gitcode.com/gh_mirrors/bo/botty
D2R Pixel Bot是一个专为《暗黑破坏神2重制版》设计的高级像素级自动化框架,采用模块化架构和状态机设计模式实现游戏内复杂任务的自主执行。该项目通过图像识别、路径规划算法和角色控制系统,为技术开发者和高级用户提供了完整的自动化解决方案。
核心架构设计原理
多线程监控与状态机引擎
D2R Pixel Bot采用三层监控架构确保系统稳定性。主状态机在src/bot.py中实现,基于transitions库构建,管理游戏流程的完整生命周期:
# 状态机定义示例 self._states=['initialization','hero_selection', 'town', 'pindle', 'shenk', 'trav', 'nihlathak', 'arcane', 'diablo'] self._transitions = [ { 'trigger': 'init', 'source': 'initialization', 'dest': '=','before': "on_init"}, { 'trigger': 'select_character', 'source': 'initialization', 'dest': 'hero_selection', 'before': "on_select_character"}, { 'trigger': 'start_from_town', 'source': ['initialization', 'hero_selection'], 'dest': 'town', 'before': "on_start_from_town"}, # ... 更多状态转换 ]系统同时运行三个独立线程:死亡监控(death_manager.py)、生命值监控(health_manager.py)和主机器人线程。这种设计确保了当监控系统检测到玩家死亡或紧急撤退时,主线程能够被安全终止并重启,保持系统鲁棒性。
坐标系统与图像处理框架
项目实现了多层次的坐标转换系统,支持不同参考系的精确定位:
- Monitor坐标:以主显示器左上角为原点
- Screen坐标:针对单显示器设置的屏幕坐标系
- Absolute坐标:以屏幕中心(角色脚点)为原点
- Relative坐标:相对于模板匹配位置的相对坐标
坐标系统转换在src/screen.py中实现,通过convert_screen_to_monitor()、convert_abs_to_screen()等方法提供灵活的坐标映射,支持精确的鼠标移动和UI交互。
图像识别与模板匹配算法
模板匹配引擎实现
src/template_finder.py模块实现了基于OpenCV的多模板匹配系统。系统支持灰度匹配、颜色匹配和最佳匹配策略:
def search( ref: str | np.ndarray | list[str], inp_img: np.ndarray, threshold: float = 0.68, roi: list[float] = None, use_grayscale: bool = False, color_match: list = False, best_match: bool = False ) -> TemplateMatch匹配算法采用归一化相关系数匹配法(TM_CCOEFF_NORMED),通过预加载的模板图像库(存储在assets/templates/目录下)实现快速场景识别。系统维护一个模板缓存字典,避免重复加载相同模板,提高匹配效率。
图形调试器与视觉验证
图形调试器(F10热键激活)提供实时视觉反馈,验证图像识别准确性:
调试器显示代码逻辑与游戏场景的实时关联,蓝色圆圈标识检测到的模板匹配位置,红色圆圈标记应拾取的物品。控制台输出每个匹配项的置信度分数,帮助开发者优化阈值参数。
路径规划与导航系统
基于节点的动态路径算法
src/pather.py实现了基于图论的路径规划系统,使用预定义节点和相对坐标进行导航:
class Pather: def __init__(self): self._nodes = { # A5 town 0: {'A5_TOWN_0': (27, 249), 'A5_TOWN_1': (-92, -137), 'A5_TOWN_11': (-313, -177)}, 1: {'A5_TOWN_0': (-311, 191), 'A5_TOWN_1': (-429, -194), 'A5_TOWN_0.5': (478, 233), 'A5_TOWN_11': (-651, -231)}, # ... 更多节点定义 } self._paths = { (Location.A5_TOWN_START, Location.A5_PINDLE_START): [0, 1, 2, 3, 4], (Location.A5_PINDLE_END, Location.A5_TOWN_START): [4, 3, 2, 1, 0], # ... 路径映射 }系统支持动态路径适应,通过adapt_path()方法允许运行时调整节点序列。traverse_nodes()方法实现节点间移动,支持强制传送和移动优化。
复杂区域路径拓扑
针对暗黑破坏神2的复杂地形,系统建立了详细的区域拓扑图:
上图展示了混沌避难所(Chaos Sanctuary)的多层路径拓扑,包含A1、A2、B1、B2、C1等区域的节点连接关系。绿色、红色、蓝色箭头标记不同路径段,节点编号(如614、612)代表关键区域位置。
角色控制系统与技能管理
抽象角色接口设计
src/char/i_char.py定义了统一的角色接口IChar,所有具体角色类都继承此接口:
class IChar: def __init__(self, skill_hotkeys: dict): self.skill_hotkeys = skill_hotkeys def pre_buff(self): """角色预增益技能执行""" pass def pre_move(self): """移动前准备动作""" pass def move(self, pos_monitor: tuple[float, float], force_tp: bool = False, force_move: bool = False): """移动到指定位置""" pass def kill_pindle(self) -> bool: """击杀皮叔的特定实现""" pass多角色构建支持
系统支持多种角色构建,每种都有专门的技能序列和战斗策略:
法师系列(src/char/sorceress/):
LightSorc:闪电法师,配置连锁闪电为主攻技能BlizzSorc:暴风雪法师,冰系法术循环NovaSorc:新星法师,范围电系攻击HydraSorc:九头蛇法师,远程火力压制
近战角色:
Hammerdin:锤子圣骑士,自动维持祝福之锤和神圣之盾Trapsin:陷阱刺客,自动布置死亡陷阱和心灵爆震Necro:召唤死灵,自动复活怪物和施放诅咒技能
每个角色类实现特定的攻击模式、防御策略和资源管理逻辑,通过配置系统(config/params.ini)进行参数调优。
物品管理与BNIP过滤系统
增强型物品解析器
BNIP(Botty NIP)是Njaguar's Item Parser的扩展版本,在src/bnip/目录下实现。系统支持完整的物品属性识别:
; BNIP过滤规则示例 [ItemRules] Quality = Unique, Set Class = Amulet, Ring RequiredLevel <= 80 [allres] >= 30 ; 全抗性过滤新增功能包括:
- 毒伤原始值读取(
[poisonmindam]、[poisonmaxdam]) - 全抗性属性支持(
[allres]) - 唯一/套装物品名称识别(
[idname]) - Discord通知抑制(
@[type] == ring)
智能拾取与库存管理
src/item/pickit.py实现地面物品检测和拾取逻辑。系统使用OCR技术识别物品文本,结合模板匹配验证物品类型。拾取决策基于BNIP规则和优先级系统:
def pick_up_items(self, char: IChar) -> bool: """执行物品拾取逻辑""" items, img = self._locate_items() for item in items: if self._should_pickup(item): result = self._pick_up_item(char, item) # 处理拾取结果模板系统与资源管理
多分辨率模板支持
项目包含完整的模板库,支持不同游戏区域和UI元素的精确识别:
上图展示尼拉塞克巢穴的复杂地形识别模板,包含石柱、火炬、传送点等关键视觉特征。系统通过预定义的模板图像实现环境识别和路径规划。
动态模板加载机制
template_finder.py实现智能模板缓存和匹配优化。系统根据当前游戏场景动态加载相关模板,减少内存占用并提高匹配速度:
@staticmethod def stored_templates() -> dict[Template]: """返回缓存的模板字典""" return _stored_templates def get_template(key): """获取或加载模板图像""" if key not in _stored_templates: # 从文件系统加载模板 template_img = load_template(key) _stored_templates[key] = Template(key, template_img) return _stored_templates[key]配置系统与扩展接口
分层配置架构
系统采用灵活的配置管理方案,支持默认配置覆盖和用户自定义:
config/params.ini:主运行参数设置config/shop.ini:商店交互配置config/game.ini:游戏特定参数custom.ini:用户偏好覆盖(可选)
配置系统在src/config.py中实现,支持INI格式解析和类型安全访问:
class Config: def __new__(cls): if not hasattr(cls, 'instance'): cls.instance = super(Config, cls).__new__(cls) cls.instance.load_data() return cls.instance def _select_val(self, section: str, key: str = None): """安全获取配置值""" # 实现配置值读取和类型转换角色构建扩展接口
开发者可以通过继承IChar接口实现新的角色类型:
class CustomCharacter(IChar): def __init__(self): super().__init__() # 自定义技能配置 self.skill_hotkeys = { 'left': SkillName.ATTACK, 'right': SkillName.DEFENSE } def pre_buff(self): """自定义预增益逻辑""" self._select_skill('battle_orders', 'right') self._select_skill('shout', 'left') def kill_pindle(self) -> bool: """自定义BOSS战斗策略""" return self._generic_attack_sequence( default_target_abs=(0, 0), min_duration=Config().char["atk_len_pindle"] )性能优化与调试工具
实时监控与日志系统
src/logger.py实现分级日志系统,支持控制台输出和文件记录。src/game_stats.py跟踪运行统计信息,包括游戏时长、死亡次数、拾取物品等。
图形调试器提供实时视觉反馈,帮助开发者:
- 验证模板匹配准确性
- 调试路径规划算法
- 优化物品识别阈值
- 监控角色状态和资源管理
内存与性能优化
系统采用多项性能优化策略:
- 模板图像延迟加载和缓存
- 图像处理操作的ROI(感兴趣区域)裁剪
- 多线程监控的最小化CPU占用
- 定期内存清理和资源释放
部署与开发工作流
环境配置与依赖管理
项目使用Conda环境管理Python依赖,通过environment.yml定义完整的环境配置:
name: botty channels: - conda-forge - defaults dependencies: - python=3.10 - numpy - opencv - pillow - keyboard - transitions - mss - pywin32测试框架与持续集成
test/目录包含完整的自动化测试套件,支持单元测试和集成测试:
# 运行所有测试 pytest -s -v # 运行特定测试模块 pytest test/smoke_test.py pytest test/nip/test_transpile.py测试框架模拟游戏环境,验证核心功能如物品识别、路径规划和战斗逻辑。
高级功能实现细节
混沌避难所自动化策略
src/run/diablo.py实现了混沌避难所的完整自动化流程,包含封印检测、BOSS战斗和路径优化:
def _sealdance(self, seal_opentemplates: list[str], seal_closedtemplates: list[str], seal_layout: str, seal_node: str) -> bool: """执行封印开启序列""" # 检测封印状态 # 执行特定攻击模式 # 处理封印开启后的怪物刷新系统支持多种布局检测和动态适应,确保在不同游戏种子下的稳定性。
物品转换与宝石升级系统
src/transmute/模块实现赫拉迪克方块物品转换功能,支持宝石升级和物品合成:
def run_transmutes(self, force=False) -> None: """执行物品转换流程""" if self.should_transmute() or force: self.open_cube() self.transmute() self.close_cube() self.stash_all_items()系统智能管理库存空间,优先使用共享储物箱,支持批量转换操作。
安全性与错误处理
异常恢复机制
系统实现多层错误恢复策略:
- 游戏崩溃检测和自动重启
- 角色死亡监控和自动恢复
- 路径规划失败的回退逻辑
- 物品识别错误的容错处理
资源管理与状态持久化
src/game_recovery.py处理游戏异常状态,包括:
- 网络断开连接恢复
- 游戏客户端崩溃重启
- 角色卡死检测和修复
- 状态持久化和恢复
D2R Pixel Bot通过其模块化架构、精确的图像识别系统和灵活的配置管理,为《暗黑破坏神2重制版》提供了工业级的自动化解决方案。项目的开源特性允许开发者深度定制和扩展,满足不同游戏风格和自动化需求。
【免费下载链接】bottyD2R Pixel Bot项目地址: https://gitcode.com/gh_mirrors/bo/botty
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考