Files
IC.Rebuild/diagnostics/2026-10-10-first-live-test.md

65 lines
3.8 KiB
Markdown
Raw Permalink 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.
# 首轮实测与 0.1.1 修复
客户端:国际服 `2026.09.15.0000.0000`。ffxiv_dx11.exe SHA256:`5BBC501DD5C7F22FD61A11D08C25356041D878DB7CD83203ADAE393E4DFACC44`。
## 用户反馈
- 测试 1 通过;保持原反馈,不扩展成所有参数和场景均通过。
- 最大加速度开启后无法行走。
- 目标圈大小开启后客户端崩溃。
- Opcode 记录在插件窗口可见,但没有导出文件。
配置文件中编号 1 与 14 的参数均为 0,所以不能据此认定非零移速增量或非零目标圈增量已通过验证。日志确认插件成功加载。
## 目标圈崩溃
证据来自 `dalamud_appcrash_20261010_231418_146_9584.log`:异常码 E0434352,HRESULT 80131509。调用链为游戏 JobPool 工作线程 → 目标圈回调 → GameContext.Ready → ObjectTable.LocalPlayer。
Dalamud ObjectTable 的索引访问调用 ThreadSafety.AssertMainThread。旧版 Ready 在原生工作线程直接访问该服务,导致托管异常越过原生回调边界。
0.1.1 将角色有效性、本地地址、PVP 状态、减速状态和迷宫信息放入不可变帧快照,仅在 Framework.Update 读取游戏服务。原生回调读取快照;超过 500 ms 未刷新时停用修改。配置参数和 Timeline 名单也发布为不可变快照。技能距离的 Excel 数据在启用时准备,不在原生回调读取。
目标圈回调使用 SDK GetRadius 委托,并在托管计算失败时保留原始返回值。修复通过离线回归,游戏内复测待完成。
## 最大加速度
在用户当前客户端磁盘文件中,历史签名唯一匹配 RVA `0x182BB20`。只读反汇编确认:
- `0x14182BB26` 检查 `[rcx+0x3C]` 活动状态。
- `0x14182BB38` 读取 `[rcx+0x20]` 控制器。
- `0x14182BB6A` 读取 `[rbx+0x44]` 运动状态。
- `0x14182BC5F` 和 `0x14182BD41` 将计算结果写回 `[rbx+0x44]`。
- 该函数通过控制器 `+0x3E0` 访问所属对象。
旧版 finally 写回调用前值,会覆盖原生计算结果;初始值为 0 时会把更新结果反复清零。0.1.1 删除这一恢复行为,仅对当前活动的本地角色控制器预置值,保留原函数最终结果。角色受减速状态影响时不预置。字段适配限定为本次审计版本,其他版本拒绝启用。
回归测试模拟初始 0、预置 100、原函数输出 6,确认返回后仍为 6;另覆盖其他对象、不活动、减速和 NaN 情况。实际行走、停止与加速效果仍待复测。
只读审计工具:`Tools/NativeAudit`;不访问进程内存或修改游戏文件。
## Opcode 检查
已读取插件配置目录中的 opcodes.json。当前版本包含 28 个上行名称、73 个下行名称,对应 28 个上行数值及 90 个下行数值。同方向内没有 Opcode 冲突,值均在 ushort 范围。
部分映射:
| 名称 | 十进制 Opcode |
| --- | --- |
| UP_UpdatePositionHandler | 920 |
| UP_UpdatePositionInstance | 411 |
| UP_PingReq | 838 |
| UP_EventStart | 181 |
| DOWN_ActorCast | 354 |
| DOWN_Effect | 787 |
| DOWN_EventStart | 737 |
当前版本没有 DOWN_PingRsp 映射,因此不能期待现有映射直接完成 Ping 响应关联。
这份文件是名称映射,不是用户本轮交互的抓包记录。用户确认没有导出,崩溃后旧版内存记录不可恢复;未对实际上下行序列作无依据判断。
## 记录保存
0.1.1 默认开启每 5 秒保存一次最近 2048 条记录的选项,可在网络面板关闭。文件位于插件配置目录,名称为 capture 加会话时间和随机标识,避免新会话覆盖旧会话。后台写临时文件后原子替换,不在原生回调写盘。
`/icr export` 可手动导出为 packets.jsonl;也可指定文件名。定时保存仍是滚动快照,不是无限完整日志,崩溃前最后一个保存周期可能丢失。实时数据仍仅有元数据,PayloadComplete=false。