65 lines
3.8 KiB
Markdown
65 lines
3.8 KiB
Markdown
# 首轮实测与 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。
|