# CFramework 面向 **SPT-AKI 3.11.3**(Escape From Tarkov 单机版)的外部辅助程序(External Cheat)。 以 ImGui + DX11 透明 Overlay 渲染,通过外部内存读写实现 ESP、自瞄、压枪等功能。 本项目最初发布于 UnknownCheats,作者已对开发失去兴趣,故公开源码,供研究、分析、学习与调查使用。 > 注意:本项目面向**单机离线版 SPT**,与官方 Tarkov 无关。 --- ## 功能特性 ### ESP(玩家 / 环境) | 功能 | 说明 | 状态 | | --- | --- | --- | | 玩家 ESP | PMC / SCAV / BOSS / 玩家SCAV / 特殊SCAV 区分着色 | ✅ | | 方框 / 填充方框 | 支持两种方框样式(`g_ESP_BoxStyle`) | ✅ | | 骨骼 | 基于 PlayerBones 关节链(Head / Neck / Ribcage / Pelvis 等) | ✅ | | 血条 / 距离 / 名称 | 玩家头顶信息 | ✅ | | 连线 | 屏幕中心到目标连线 | ✅ | | 物资 ESP | 稀有物资标记(名称 + 距离,`g_ESP_MaxItemDistance` 可调) | ✅ | | 尸体 ESP | 尸体标记 | ✅ | | 撤离点 ESP | 开启 / 未开启撤离点分色(绿 / 橙) | ✅ | | 手雷 ESP | 投掷物轨迹标记 + 屏幕顶部 `[ WARNING ] Grenade!!` 警告 | ✅ | | 最大距离 | `g_ESP_MaxDistance`(默认 500m) | ✅ | ### 自瞄(AimBot) - 两种模式: - **Mouse 模式(默认)**:`SendInput` 模拟鼠标移动,无需偏移,稳定可靠; - **Memory 模式**:直接写 `MovementContext::Rotation`,需用菜单 [Rot Debug] 在实机上校准偏移(`Offset.h` 中 `MovementContext::Rotation`,默认 `0x58 -> 0x27C`)。 - 参数:FOV 半径、自适应平滑(0-100)、灵敏度倍率、单帧最大移动、最大锁定距离(m)、骨骼选择(Head / Neck / Body)。 - 目标过滤:PMC / SCAV / BOSS 独立开关、忽略血量判定。 - **强制开启(免按键)**:勾选后无需按键,自瞄直接生效(用于按键检测失效的环境)。 - 显示 FOV 圈、目标连线(调试用)。 - 触发键:按住 **鼠标右键(ADS)** 或 **左键(射击)** 时生效;`F9` 作为键盘兜底触发键(`Config.h` 中 `g_AimKey0/1/2` 可改)。 ### 压枪(Recoil Control) - 射击期间按固定间隔向下补偿鼠标(宏式)。 - `Strength`:每次下拉的鼠标单位;`Interval`:下拉间隔 [ms]。 ### Misc | 功能 | 说明 | | --- | --- | | 无限耐力 | 锁定 `Physical` 耐力值(含手部耐力) | | 无跌落伤害 | 修改跌落伤害倍率 | | 无摇摆 | 清空 `MotionEffector.SwayFactors` | | 无后座(内存) | 直接改写 `ShotEffector` / 武器后座参数(与宏式压枪不同,纯内存) | | 无故障 / 卡弹 | 屏蔽卡壳 / 供弹故障 / 不发火 / 滑套未复位 | | 串流隐藏 | 直播 / 录屏防暴露 | | 准星 | 屏幕中心自定义准星(大小 / 样式可选) | ### 菜单 - 打开 / 关闭:**INSERT**(`Config.h` 中 `g_MenuKey` 可改) - 菜单已中文化:左侧图标导航栏 + 右侧设置面板,共 4 页 —— **自瞄 / 视觉 / 功能 / 设置**。 --- ## 构建 - 环境:**Visual Studio 2022**(MSVC v143),x64。 - 所有第三方库(ImGui、DirectXTK SimpleMath、FreeType、nlohmann/json 等)已包含在仓库内,**无需额外安装**,直接打开 `CFramework.sln` 选择 **Release x64** 构建即可。 - 首次构建参考:[Visual Studio C++ 安装指南](https://learn.microsoft.com/ja-jp/cpp/build/vscpp-step-0-installation?view=msvc-170) 输出:`x64\Release\CFramework.exe` 运行前提:先启动 SPT-AKI 3.11.3 客户端(进程名为 `EscapeFromTarkov`),再以管理员身份运行 `CFramework.exe`。 程序通过窗口标题附加进程并创建覆盖层;若附加失败返回码 `1`,Overlay 初始化失败返回码 `2`。 ## 当前数据架构(2026-08 重构) - `CGame` 的 GameWorld / Camera 状态由动态数据线程统一刷新,并在内部用互斥锁保护。 - 动态玩家、相机矩阵和手雷数据发布为不可变 `DynamicWorldSnapshot`;撤离点和物资发布为 `StaticWorldSnapshot`。 - ESP 与 Aim 目标选择只消费 Snapshot,不在渲染阶段直接 RPM。真正的 Memory Aim / 功能 override 仍通过独立写入路径执行。 - `RegisteredPlayers` 按 `IPlayer` 处理,并区分完整 `EFT.Player` 与 `ObservedPlayerView` 两种布局。ObservedPlayer 无法从当前 dump 可靠确认的 Profile/Health/Role 字段不会强行套用。 - 后台线程不直接读取 ImGui 绑定的普通 `g_*` 变量;渲染线程通过 `WorkerConfigSnapshot` 发布所需配置。 - 玩家、物资、手雷列表使用运行时长度 + 上限校验的批量读取,不再使用固定 `address[64]` / `address[2048]` 缓冲。 - 工作线程可 join;退出时先停止并等待后台线程,再恢复功能写入和关闭进程句柄。 详细变更与验证结果见 [`REFACTOR_NOTES.md`](REFACTOR_NOTES.md)。 ## 已知问题 - 当前包是在 Linux 容器中做源码级重构,环境没有 Visual Studio 2022 / Windows SDK,因此没有执行真正的 MSVC Release x64 链接构建。核心重构源文件已用 Clang + Windows API 测试桩做 `-fsyntax-only` 验证;最终仍建议在 VS2022 中执行一次 `Release x64` 全量构建。 - `ObservedPlayerView` 的昵称、Role、实时 Health 等字段在当前 dump 中仍是混淆字段;本次实现采取保守降级显示,不猜测未知字段语义。 - 主 Overlay 仍跟随 VSync/显示器刷新率;`UpdateFeatures()` 是渲染线程写功能路径,后续如果需要进一步降低 CPU/RPM,可以单独给写功能增加节流/脏标记。 ## 项目结构 ``` CFramework/ ├── CFramework.sln / .vcxproj # VS 解决方案 ├── CFramework/ │ ├── main.cpp # 入口:附加进程、初始化 Overlay、字体、后台线程 │ ├── Cheat/ # 功能实现 │ │ ├── Aim.cpp # 自瞄 + 压枪(Mouse / Memory) │ │ ├── Visual.cpp # ESP 渲染(玩家/物资/撤离点/手雷) │ │ ├── Features.cpp # 耐力/跌落/摇摆/后座/故障 override │ │ ├── Menu.cpp # ImGui 菜单(中文) │ │ ├── Render.cpp / UpdateList.cpp │ │ └── SDK/ # 游戏对象封装 │ │ ├── CPlayer / CExfil / CItem │ │ └── GameSDK/ # Offset.h(全部偏移)、Struct.h │ └── Framework/ # 可复用框架 │ ├── Memory/ # 外部内存读写(ReadChain 等) │ ├── Overlay/ # DX11 透明覆盖层 │ ├── Input/ # 输入处理 │ ├── ImGui/ # 内置 ImGui + DX11/Win32 后端 + 字体 │ ├── Config/ # 全局配置(Config.h 中 g_* 全局变量) │ └── Libs/ # FreeType / SimpleMath / nlohmann ├── build_index.py / query_index.py # IL2CPP dump 索引工具(见下) ├── dump_index.db # 生成的索引库 ├── DUMP_INDEX.md # 索引工具使用文档 └── LICENSE # MIT ``` ## 配套工具:IL2CPP dump 索引 `dump.txt` 是 Unispect v0.2.4.0 生成的 IL2CPP 类布局 dump(15.8 万行 / 7MB), 配套脚本将其流式解析为 SQLite 索引(`dump_index.db`,含 FTS5 全文索引),毫秒级检索类型 / 字段 / 偏移,替代对原始文本的暴力搜索。 ```powershell # 构建索引(默认输入 F:\desktop\Release\dump.txt) python build_index.py # 自定义路径 python build_index.py D:\other\dump.txt D:\other\dump_index.db # 查询统计 / 检索 python query_index.py stats python query_index.py find Player.FirearmController ``` 详细用法见 [DUMP_INDEX.md](DUMP_INDEX.md)。 --- ## 免责声明 本项目仅用于**学习、研究、教育**目的。作者(Neko64V)对因使用本软件造成的任何直接或间接损失不承担任何责任,请勿将其用于任何非法用途。 ## 致谢与依赖 - [ImGui](https://github.com/ocornut/imgui) — 界面框架(内置,含 DX11 / Win32 后端与 FreeType 渲染) - [Microsoft DirectXTK (SimpleMath)](https://github.com/microsoft/DirectXTK) — 数学库 - FreeType — 字体渲染 - [nlohmann/json](https://github.com/nlohmann/json) — JSON 解析 - Font Awesome 6 — 菜单图标 - 字体:Roboto(内置压缩字体)+ 微软雅黑(`C:\Windows\Fonts\msyh.ttc`,CJK 中文 fallback) ## License [MIT](LICENSE) © 2024 Neko64V