CFramework/REFACTOR_NOTES.md

73 lines
3.8 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.

# 2026-08 External Data-Layer Refactor
本次修改以当前 `CFramework` 外部框架为基础,没有重新迁移 Overlay / ImGui / Camera / Transform。目标是修复共享状态竞争、固定数组越界和新版本 `IPlayer` 布局差异,并让渲染/目标选择与目标进程读取解耦。
## 已完成
1. **CGame 状态同步**
- GameWorld / LocalGameWorld / FPS Camera / ViewMatrix 统一由 `CGame::Refresh()` 刷新。
- 内部状态使用 mutex,消费者通过 `GameStateSnapshot` 读取一致副本。
- 移除渲染线程每帧调用 `InitAddress()` 的行为。
2. **不可变世界快照**
- 新增 `DynamicWorldSnapshot`:本地玩家、远端玩家、Camera/ViewMatrix、Grenade。
- 新增 `StaticWorldSnapshot`:Exfil、Item。
- 使用 `shared_ptr<const ...>` + `atomic_load/atomic_store` 发布,消费者不会看到构建到一半的容器。
3. **ESP / Aim 数据读取解耦**
- `RenderESP()` 不再直接 RPM,也不再调用 Player Update/Health/Bone。
- Aim 目标筛选和骨骼选择只读取动态快照。
- Memory Aim 与 Misc override 继续保留为明确的写入路径。
4. **玩家类型适配**
- 新增 `CPlayerKind::{EftPlayer, ObservedPlayer}`。
- 完整玩家使用当前 dump 中的 `Player + 0x618 Profile`、`+0x660 HealthController`、`+0x6E8 PlayerBones` 等链。
- ObservedPlayer 使用当前 dump 可确认的 `+0x60 PlayerBones`、`+0x68 PlayerBody`、`+0xB8 Transform`、`+0x100 Side`。
- 对 dump 未确认的 Observed Profile/Health/Role 不做猜测。
5. **列表越界修复**
- 移除固定 `CGameObjectList::address[64]` 和 Item `address[2048]` 读取方式。
- Managed List/Array 使用实际 count/length + hard limit + `TryReadVector`。
- 当前 hard limit:Player 512、Item 8192、Grenade 256、Exfil 32。
6. **Memory API 加固**
- 增加 `IsUserAddress`、`TryRead`、`TryWrite`、`TryReadBuffer`、`TryReadVector`。
- `ReadChain` 增加地址校验。
- 修复旧 `ReadWString` 返回临时缓冲地址的问题。
- `DetachProcess()` 会关闭并清空句柄/PID/Base。
7. **Worker 配置同步**
- `g_*` 仍保留为 ImGui 绑定配置。
- 渲染线程通过 `UpdateWorkerConfigFromUi()` 发布 `WorkerConfigSnapshot`。
- 后台列表线程仅读取该受锁保护的配置副本,不与 UI 裸共享普通 bool/float。
8. **退出生命周期**
- 动态/静态数据线程不再 detach。
- Overlay 退出后设置原子 `process_active=false`,join 两个线程,再 Reset overrides / Destroy overlay / Detach process。
9. **其他边界修复**
- Exfil 名称读取增加地址、长度和缓冲区限制,并修复 status 未正确缓存的问题。
- Unity Transform、Camera、Managed Array/List 等常用裸偏移集中到 `Offset.h`。
- `min` 调用改为显式 `std::min`,降低 Windows 宏依赖。
- README 移除源码中不存在的“子弹追踪(只读)已完成”声明。
## 验证
在当前容器里对以下核心文件执行了 Clang C++17 `-fsyntax-only` 静态语法验证(Windows API 使用最小测试桩;内置 UTF-16 字体头仅在临时测试副本中转换编码):
- `Cheat/UpdateList.cpp`
- `Cheat/Visual.cpp`
- `Cheat/Aim.cpp`
- `Cheat/Features.cpp`
- `Cheat/Menu.cpp`
- `Cheat/SDK/GameSDK/GameSDK.cpp`
- `Cheat/SDK/CPlayer/CPlayer.cpp`
- `Cheat/SDK/CExfil/CExfil.cpp`
- `Cheat/SDK/CItem/CItem.cpp`
- `Cheat/Render.cpp`
- `Framework/Memory/Memory.cpp`(仅有测试桩下的 `NULL -> DWORD` 警告)
以上文件均通过语法检查。
当前环境没有 Visual Studio 2022、MSVC v143、Windows SDK 和 DX11/DWM 链接环境,因此**没有声称已经完成真实 Windows Release 链接/运行验证**。建议拿到包后第一步在 VS2022 中执行 `Release | x64` 全量 Rebuild,并根据实际 SPT/EFT build 对照最新 dump 校验根指针和版本敏感 offset。