# 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` + `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。