Initial import of IC.Rebuild

This commit is contained in:
2026-10-13 22:55:05 +08:00
commit 16d61f7a5e
87 changed files with 17054 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
# 状态与原生标识核对
日期: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 缺少原生签名和网络布局依据,继续保持不可用。