Files
IC.Rebuild/diagnostics/2026-10-11-id-audit.md

5.8 KiB
Raw Permalink Blame History

状态与原生标识核对

日期:2026 年 10 月 11 日。客户端:国际服 2026.09.15.0000.0000。修订版本:0.1.3。

各功能的判断依据

编号 标识或判断来源 本轮结果
1 和 2 本地玩家 StatusId,用于减速保护 旧 37 项存在;补入当前数据中三个新的玩家 Heavy 状态,现为 40 项
3 原生 Permission 检查编号 96—99 属于 Permission 行号;1001 等为该函数特殊分支编号,不是 StatusId
4 本地对象地址及击退参数 不依赖状态名单;本轮未进行实际击退验收
5 掉落标志位掩码 不属于技能或状态 ID
6 原生掉落检查返回值 不依赖状态名单;实际效果仍待验证
7 本地角色的指定强制坐标移动入口 不按状态 ID 筛选,不删除状态;不能据此宣称解除所有眩晕、禁锢或控制
8 旧版 StatusId 名单 发现 6 项与原注释分组不符;新版仍没有启用状态屏蔽
10 和 11 深层迷宫类型、层数和 TerritoryType 行号 1108 为 Eureka Orthos、1290 为 Pilgrim's Traverse,均为用途 31
13 Action 行号、位移属性和例外技能 已核对四个例外 ID 及 Guardian 29066,均为技能 ID
14 距离检查中的目标对象地址和 Action 位移属性 不通过状态 ID 改圈;保留 0.1.2 的作用域限制
16 Action.AnimationEnd 映射的 16 位 Timeline,加独立标志字节 保留 0.1.2 的全职业位移名单与共用入口修复
17 和 18 ActionType、ActionId、冷却组索引 天地人 6 个 ActionId 均匹配;同步函数的 57 是零起始冷却组索引
19 ActionId 与咏唱时长 技能编号与浮点时长分别处理,不属于状态名单
20 PVP 场景及动画锁浮点值 不按技能或状态 ID 筛选
36 和 37 方向、版本、ushort Opcode 网络消息类型标识,与上述 ID 空间分开

旧状态名单的问题

核对本机 Status 表的 Name、Description、LockMovement、LockControl 和 LockActions 后发现:

ID 原分组 当前名称与含义 处理
142 滑冰 Stun,眩晕 从已审候选排除
149 滑冰 Stun,眩晕 从已审候选排除
2538 方向命令 Strong of Shield,减伤及反射相关 从已审候选排除
2539 方向命令 Stronger Together,减伤及反射相关 从已审候选排除
2540 方向命令 Freezing Up,持续移动以避免冻结的机制状态 从已审候选排除
2541 方向命令 不浄の侵食,倒计时后转为强制远离的前置状态 从已审候选排除

这是当前数据与原注释分组不符,不代表这些 ID 曾在某个历史版本一定对应另一种状态。旧候选仍单独保留用于审计,已审候选保留 38 项;没有因此启用编号 8。

当前 SDK 中 StatusManager 含 60 个状态条目,每个客户端 Status 为 16 字节,StatusId 字段为 ushort。Owner 字段可能为空。不能把原资料中网络包的 30 条、12 字节条目直接用作客户端状态结构,也不能只修改总容量后就认为完成适配。

减速保护

旧 37 个条目在本机数据中都存在。按当前 Status 名称与说明发现三项新的玩家加重状态:5044、5175、5356,说明均为移动速度降低,已加入保护集合。

630 的说明是 Chocobo speed is reduced,归属陆行鸟,不自动纳入这份玩家状态补充。此检查不宣称覆盖全部未来状态。

重度减速并不一定设置 LockMovement。当前的 Heavy、Leaden 等条目该标志为 false,因此无法只依赖一个通用锁定标志实现完整减速识别。

名称模糊匹配也不适合自动建立屏蔽名单:例如 Fearless 和 Honeyed Charms 不等于恐惧或魅惑控制。StatusAudit 的名称检索仅用于产生审核候选,不会用于运行时自动删除状态。

强制移动入口

原签名在本机唯一命中 RVA 0x194AEC3 的调用,目标为 RVA 0x90BA80。调用方在栈参数位置写入 float,目标函数也以 movss 读取第五参数,因此将旧 int 声明修正为 float。返回寄存器透传行为保持,未凭这一调用方忽略返回值就假定所有调用都没有返回值。

该入口接受角色、坐标、浮点运动参数和选项结构;没有直接查 StatusId。运行时仅比较本地角色地址并拦截这条路径。它可能承载不止魅惑或恐惧一种强制移动,不应宣称为所有控制状态的通用解除器。已增加当前审计版本限制及界面说明。

Permission 与冷却组

移动权限签名匹配 RVA 0xE16130,调用 RVA 0x835B50 取得数据。后者传入表号 0x14A;本机 root.exl 将该表号映射为 Permission。

复唱同步签名匹配 RVA 0x8EF260。第二参数传给 RVA 0x8E8300,在该函数中作为 int 组索引计算 RecastDetail 地址;第三参数与结构中的动作编号比较。已将参数明确命名为 manager、recastGroup、actionId、maximum,保留原返回值。

本机 Action 表确认:2259、18805 为 Ten,2261、18806 为 Chi,2263、18807 为 Jin。它们的 Timeline 分别为 233、234、235,不能将 Timeline 当作 ActionId 使用。

文件和验证

  • status-id-audit-2026.09.15.json:状态名称、说明和标志核对数据。
  • action-id-audit-2026.09.15.json:结印及距离例外技能核对数据。
  • Core/StatusCatalog.cs:旧候选、已审候选及减速保护分开保存。
  • Core/NativeIds.cs:Permission 编号、技能 ID、冷却组索引分开命名。
  • Tools/StatusAudit、Tools/NativeAudit:本机游戏数据和磁盘可执行文件只读审计。

0.1.3 的原生参数声明调整及新增减速保护仍待游戏内复测。编号 8 缺少原生签名和网络布局依据,继续保持不可用。