CFramework/README.md

148 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`。
## 已知问题
- **CPU 占用偏高**:原版遗留问题,二次开发中已部分缓解但未根治。
- 已改善:实体 / 撤离点 / 物资列表刷新线程已降频(500ms ~ 5s 间隔轮询,见 `UpdateList.cpp`);主渲染循环开启了 VSync(`Present(1, 0)`),不会无限空转。
- 仍存在:主循环没有独立帧率上限,VSync 下跟着显示器刷新率跑(144Hz 屏即 144 FPS);每一帧都全量执行 `UpdateFeatures()`(耐力 / 跌落 / 摇摆 / 后座 / 故障五组 override 的内存读链 + 写入)、子弹追踪快照和 ESP 遍历渲染,没有脏标记或事件驱动缓存。高刷新率屏幕上占用依然明显。
- 需要进一步优化时,可从给主循环加帧率上限(如 60 FPS + `sleep_for`)或给 `UpdateFeatures` 加每 N 帧执行一次入手。
## 项目结构
```
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