Files
IC.Rebuild/diagnostics/2026-10-10-onslaught.md
T

47 lines
3.7 KiB
Markdown
Raw 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.2。目标客户端:国际服 2026.09.15.0000.0000。
用户反馈:16 开启后位移仍存在,14 增加后突进停在目标圈外。两种现象均使用战士猛攻测试。用户随后要求把所有带位移的技能加入 16 的名单。
## 名单与位移拦截
原配置的 BlockedTimelines 为空、BlockListed=true,因此旧实现开启 16 时不屏蔽任何技能。新版从动作表选择 IsPlayerAction=true 且 AffectsPosition=true 的所有条目,通过 AnimationEnd 建立名单。
本机动作表结果:79 个技能条目,58 个不同 Timeline,均有有效的 16 位映射。包含 PvE、PvP 及仍保留在动作表中的历史条目;不宣称每个条目都仍可从技能栏使用。数据明细见 `movement-skills-2026.09.15.json`。
| 技能 | 动作 ID | Timeline | 位移标记 |
| --- | --- | --- | --- |
| 猛攻 PvE | 7386 | 5189 | true |
| 猛攻 PvP | 29079 | 12244 | true |
首次加载当前客户端版本时自动补全名单,模式切为仅屏蔽名单内,所有模块仍默认关闭。相同版本后续加载保留用户编辑;可点击“加入全部位移技能”重新补全。相同 Timeline 对应的多个技能会联动。
保留三种明确模式:全部本地技能位移、仅屏蔽名单内、仅放行名单内。名单模式下空名单不屏蔽;另提供技能 ID 转换、技能名展示与最近位移命中统计。
## 原生路径核对
旧 NoActionMove 签名唯一匹配 RVA 0x1821FC0,是一个转发函数。它调用共用位移初始化函数 RVA 0x1822510。新版对共用入口建立经唯一性检查的签名,覆盖从其他转发路径进入的同类请求。
共用入口的参数对应控制器、位移类型、目标、起点、朝向及元数据;控制器 +0x3E0 为所属对象。拦截限定本地角色,未就绪或无效元数据时放行。
下层 RVA 0x180A370 的 0x14180A5A9、0x14180A5B0 分别读取元数据字节 2、3,0x14180A5B7 读取 word [data]。旧代码把前四字节全部作为 Timeline,会把标志位混入编号。新版按低 16 位读取编号,单独显示两个标志字节。
函数参数、偏移和签名限于本次审计版本。运行中的猛攻是否进入该入口、是否被成功屏蔽,仍需用界面的本地调用及拦截计数确认。
## 目标半径与落点
旧实现全局增加 GetRadius 的返回值,既影响目标,也影响自身和其他调用方。GetActionInRangeOrLoS 在本机 RVA 0x8DD220,明确读取目标与自身半径并参与距离计算;这种全局修改也会影响其他使用半径的移动或碰撞流程。
新版仅在本地角色的普通技能距离检查中,对正在检查的目标增加半径。使用线程局部作用域;自身、其他对象、未知技能和 AffectsPosition=true 的技能不加值。离开距离检查后立即恢复作用域,其他工作线程不继承。
因此 14 不再修改显示目标圈、碰撞半径或突进落点,也不给猛攻本身增加目标半径。13 的技能距离设置独立保留。热栏颜色等其他缓存显示是否同步仍待游戏内观察。
## 测试与记录
Release 构建通过,0 警告、0 错误;32 项离线测试通过。新增覆盖位移编号与标志分离、三种名单模式、本地对象限制、半径作用域、线程隔离、异常恢复和玩家技能目录筛选。
游戏内复测未完成,不把名单完整性等同于所有位移路径均已拦截。
已读取新生成的自动保存 JSONL,实际包含 2048 条上下行元数据,客户端版本匹配且 PayloadComplete 均为 false。聚合结果见 `capture-summary-second-test.json`;名称来自映射表,不能仅凭元数据验证具体包体含义或动作结果。