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

3.7 KiB
Raw Permalink Blame History

猛攻与全职业位移名单修复

版本: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;名称来自映射表,不能仅凭元数据验证具体包体含义或动作结果。