Skip to content
AmzGrainRainPublic

About

穿越火线交易所抢货机

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

CFHelper

穿越火线工具合集。项目是 Windows 桌面端 C++23 自动化工具集合,UI 基于 Dear ImGui + Win32 + DirectX 11,输入模拟依赖虚拟 HID 驱动,部分工具使用 Tesseract OCR。

免责声明

本项目仅供学习交流使用。使用者应自行遵守适用的法律法规、游戏规则和服务条款,并承担因使用本项目产生的一切责任。

工具列表

combination

step_recorder

使用

  1. 从 GitHub Actions 下载构建产物。
  2. 解压后进入 hid_driver 目录安装虚拟键鼠驱动。
  3. 以管理员权限运行对应工具。

鸣谢

虚拟键鼠驱动

开发简介

  • 这是 Windows-only 项目;默认面向 MSVC、CMake、vcpkg、x64-windows-static。
  • 主要可执行 target 名是 TradeHelper、AdventureAssistant、SuperMouseConnector、StepRecorder、VirtualInputTest、Experiment。
  • 业务改动通常从对应目录的 MainWindow.* 和 MyWorker.* 入手。
  • UI 主循环和 DX11 初始化在每个应用的 Main.cpp,全局渲染状态和单例在 Global.*。
  • 坐标选择逻辑在 MouseHook.* + OverviewWindow.*,自动化动作在 VirtualInput.hpp。
  • OCR 逻辑集中在 custom/utils/Utils.* 的 RecognizeNumber、ScreenCapture、GetScreenTexture。
  • 运行可执行文件前需要输出目录下存在 hid_driver/;OCR 工具还需要 tesseract_traineddata/。
  • 不要把 thirdparty/imgui 当业务代码改,除非明确是在升级 ImGui。

目录地图

.
├─ CMakeLists.txt                 # 顶层构建、全局选项、子目录注册
├─ functions.cmake                # 复制资源、管理员权限 manifest 等 CMake helper
├─ includes/                      # 跨应用公共头/实现
│  ├─ Worker.hpp                  # 可中断后台线程基类
│  ├─ VirtualInput.hpp            # 虚拟 HID 驱动 DLL 封装
│  ├─ Hotkey.hpp/.cpp             # Win32 热键注册/派发
│  ├─ LowLevelMouseHook.hpp       # 低级鼠标钩子,用于侧键热键
│  ├─ Logger.hpp                  # ImGui 日志列表用的内存 logger
│  └─ Debug.*                     # _DEBUG 下输出/弹窗调试
├─ custom/
│  └─ utils/                      # OCR、截图、屏幕纹理、随机数、暗色模式
├─ src/
│  ├─ trade_helper/               # 交易所扫货助手
│  ├─ adventure_assistant/        # 探险模式助手
│  ├─ super_mouse_connector/      # 连点器
│  ├─ step_recorder/              # 脚本化键鼠回放
│  └─ virtual_input_test/         # 虚拟输入驱动手工测试
├─ misc/
│  ├─ fonts/                      # 输出时复制到 fonts/
│  ├─ hid_driver/                 # 输出时复制到 hid_driver/
│  └─ tesseract_traineddata/      # OCR 训练数据,输出时复制到 tesseract_traineddata/
├─ thirdparty/imgui/              # vendored Dear ImGui
└─ .github/workflows/             # Windows x64 static CI 构建

构建环境

推荐环境:

  • PowerShell 7.5.2+
  • Visual Studio 2022 / MSVC,支持 C++23
  • CMake 4.0+
  • vcpkg,CI 当前使用 2025.06.13
  • Windows x64

安装依赖:

vcpkg install leptonica:x64-windows-static
vcpkg install tesseract:x64-windows-static
vcpkg install directxtk:x64-windows-static

配置:

$env:VCPKG_ROOT = "C:\path\to\vcpkg"

cmake `
  -B build `
  -DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake `
  -DVCPKG_TARGET_TRIPLET=x64-windows-static `
  -DVCPKG_MANIFEST_MODE=OFF `
  -DCMAKE_BUILD_TYPE=Release `
  -G "Visual Studio 17 2022" `
  -A x64

构建:

cmake --build build --target ALL_BUILD --config Release

构建单个目标:

cmake --build build --target TradeHelper --config Release
cmake --build build --target AdventureAssistant --config Release
cmake --build build --target SuperMouseConnector --config Release
cmake --build build --target StepRecorder --config Release
cmake --build build --target VirtualInputTest --config Release

Visual Studio 的 CMakeSettings.json 也提供了 Ninja 的 x64-Debug 和 x64-Release 配置,但里面的 vcpkg 路径是本机路径,换机器时通常需要改成自己的路径或直接使用上面的命令行配置。

CMake 约定

  • 顶层 CMakeLists.txt 默认设置 VCPKG_TARGET_TRIPLET=x64-windows-static,关闭共享库,启用 /utf-8、WIN32_LEAN_AND_MEAN、NOMINMAX。
  • functions.cmake 提供:
    • RUN_AS_ADMIN(target):给可执行文件加 requireAdministrator manifest。
    • COPY_FONTS(target):复制 misc/fonts 到输出目录。
    • COPY_HID_DRIVER(target):复制 misc/hid_driver 到输出目录。
    • COPY_OCR_TRAINED_DATA(target):复制 misc/tesseract_traineddata 到输出目录。
  • Release 下各主应用使用 WIN32 子系统并通过 /ENTRY:mainCRTStartup 隐藏控制台;Debug 下保留控制台,便于 Debug::Print。

运行前置条件

应用启动时会静态初始化 Global::virtual_input = VirtualInput::New()。这意味着运行主程序会立刻检查虚拟 HID 驱动:

  • 当前工作目录下必须有 hid_driver/ddhid60400.dll。
  • 系统服务 ddhid60400 必须已安装并运行。
  • 主应用通过 manifest 要求管理员权限。

OCR 相关工具还需要:

  • 输出目录下存在 tesseract_traineddata/numbers.traineddata。
  • Global::tess.Init("./tesseract_traineddata", "numbers", tesseract::OEM_LSTM_ONLY) 成功。

如果只是改代码或编译,不需要安装驱动;如果要运行 TradeHelper、AdventureAssistant、SuperMouseConnector、StepRecorder 或 VirtualInputTest,需要先安装驱动。

架构与运行模型

每个主应用基本遵循同一模式:

  1. Main.cpp 注册 Win32 窗口类,创建隐藏宿主窗口,初始化 DX11 和 ImGui。
  2. Global.* 保存 DX11 对象、窗口句柄、字体、业务单例和可选 OCR/热键状态。
  3. MainWindow.* 绘制主要 UI,收集用户参数,触发后台 worker。
  4. MyWorker.* 继承 Worker,在后台线程里执行自动化流程。
  5. Worker::SleepFor(ms) 用 Win32 event 实现可中断 sleep;后台循环不要直接长时间 Sleep,否则停止按钮会不灵敏。
  6. VirtualInput 封装 ddhid60400.dll 的鼠标、键盘、滚轮、相对移动、绝对移动和字符输入函数。
  7. Logger 保存最近 300 条消息,供 ImGui 列表显示。

应用模块说明

TradeHelper

目录:src/trade_helper/

  • MainWindow.*:设置搜索按钮、OCR 区域、购买按钮、复选框、最终购买按钮、失败提示按钮、价格上限和购买数量。
  • OverviewWindow.*:全屏截图预览,辅助用户点击选点;设置 OCR 区域时会绘制矩形预览框。
  • MouseHook.*:安装低级鼠标钩子,捕获下一次左键释放坐标。
  • MyWorker.*:倒计时后激活 穿越火线 窗口,循环搜索、OCR 识别价格、比较最高价、购买、确认、处理失败弹窗。
  • Global.*:初始化 VirtualInput、MyWorker、Logger、tesseract::TessBaseAPI 和 DX11 渲染对象。

AdventureAssistant

目录:src/adventure_assistant/

  • MainWindow.*:设置 BOSS 卡位置、召唤按钮位置、延迟参数、爆裂技能、蹭卡模式、极速模式和游戏内悬浮窗。
  • OverviewWindow.* + MouseHook.*:复用选点思路。
  • MyWorker.*:倒计时后激活游戏窗口,按参数执行召唤、换弹、射击、释放技能、等待击杀和冷却。
  • Global.*:与 TradeHelper 类似,也包含 OCR 对象,虽然当前核心流程主要是点击和等待。

SuperMouseConnector

目录:src/super_mouse_connector/

  • MainWindow.*:设置点击按键、按下抬起时间、点击间隔、抖动/随机化和热键。
  • MyWorker.*:循环发送按下/抬起事件,间隔可抖动或随机化。
  • Global.*:初始化 VirtualInput、Hotkey、MyWorker、Logger。
  • LowLevelMouseHook.hpp:在选择鼠标侧键作为热键时使用。

StepRecorder

目录:src/step_recorder/

  • MainWindow.hpp:定义 OPCode、Command、Coord、OPCode2String 和脚本文件读写接口。
  • MainWindow.cpp:提供脚本新建、打开、保存、另存为、添加/删除指令和热键设置 UI。
  • MyWorker.cpp:遍历 MainWindow::GetCommandList(),把每条 OPCode 映射到 VirtualInput 动作。
  • 脚本格式:每行 opcode整数,参数;坐标参数写作 x|y;延时和滚轮参数是整数;无参数指令写 NULL;空行和 # 开头的行会被忽略。

常见改动入口

  • 改某个工具的界面:先改对应 src/<tool>/MainWindow.hpp/.cpp。
  • 改某个工具的自动化流程:改对应 src/<tool>/MyWorker.hpp/.cpp。
  • 改屏幕选点/全屏预览:看 trade_helper 或 adventure_assistant 的 MouseHook.*、OverviewWindow.*。
  • 改 OCR:看 custom/utils/Utils.* 和对应应用的 Tesseract 初始化。
  • 改虚拟输入:看 includes/VirtualInput.hpp,注意 PressCharacterKey 注释要求不要传小写字符。
  • 改热键:看 includes/Hotkey.*、includes/LowLevelMouseHook.hpp,以及连点器/步骤记录器里的热键弹窗。
  • 新增工具:在 src/new_tool/ 复制一个接近的应用骨架,改 project()、Global::ApplicationName、MainWindow、MyWorker,再在顶层 CMakeLists.txt 加 add_subdirectory(src/new_tool)。

开发注意事项

  • 坐标都是屏幕坐标,流程依赖当前分辨率、DPI、游戏窗口状态和前台窗口。
  • 主应用创建窗口时启用 DPI awareness,并使用 Global::MainScale 缩放 ImGui 尺寸。
  • io.IniFilename = nullptr,ImGui 不持久化布局。
  • Global.* 里有静态单例初始化,新增全局对象时要考虑初始化顺序,尤其不要在 hwnd 创建前依赖有效窗口句柄。
  • 后台线程需要能被 Stop() 快速打断;长等待优先用 WORKER_SLEEP 或 Worker::SleepFor。
  • Logger 不是严格线程安全结构,现有代码从 worker 写、UI 读;大改并发模型时需要补同步。
  • Debug::Print 和 Debug::MessageBox 只在 _DEBUG 下有效。
  • GetScreenTexture 返回的 ID3D11ShaderResourceView* 需要调用方在替换或隐藏窗口时 Release()。
  • 修改脚本 OPCode 时,要同步更新 OPCode2String、String2OPCode、MyWorker 的 switch、保存/加载参数逻辑和 UI 参数编辑逻辑。
  • 修改 CMake target 名会影响 CI artifact 路径和 README 构建命令。

验证清单

至少执行:

cmake --build build --target <TargetName> --config Debug
cmake --build build --target <TargetName> --config Release

涉及 OCR 时检查:

  • 输出目录存在 tesseract_traineddata/numbers.traineddata。
  • OCR 预览区域能显示截图纹理。
  • RecognizeNumber 返回失败时业务流程能安全继续。

涉及输入模拟时检查:

  • 输出目录存在 hid_driver/。
  • 驱动已安装且 VirtualInput::IsDriverInstalled() 为真。
  • 程序以管理员权限运行。
  • 停止按钮或热键能在等待过程中打断 worker。

涉及 CI/发布时检查:

  • .github/workflows/build-x64-windows-static.yml 仍能生成四个主 artifact。
  • Release 输出目录包含 fonts/、hid_driver/,OCR 工具还包含 tesseract_traineddata/。

About

穿越火线交易所抢货机

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages