2.9 KiB
14 原生目标圈与距离修复
版本:0.1.4。客户端:国际服 2026.09.15.0000.0000。
用户确认两个问题:画面目标圈没有变大,技能距离也没有增加;并明确要求修改游戏原生圈,不接受额外叠加圈。
距离路径
0.1.2—0.1.3 只在 GetActionInRangeOrLoS 中临时增加目标半径,漏掉 IsActionTargetInRange 的前置路径。
本机原生 IsActionTargetInRange 位于 RVA 0x8EE490,在 0x8EE51E 调用 GetActionRange,然后将结果与 ActionManager 内的缓存距离比较。因此仅影响最终半径读取,不能覆盖前置距离判断。
0.1.4 在 IsActionTargetInRange 与 GetActionInRangeOrLoS 两个检查范围内,对普通技能的有效距离补上编号 14 的增量,数学上相当于增加目标判定半径。作用域按线程隔离;未知技能、位移技能、负数及零范围不补偿。不直接改写缓存距离或物理半径。
13 和 14 共用一个 GetActionRange Hook,分别计算自己的增量,避免两个独立 Hook 互相覆盖。共享资源按引用计数释放;关闭任意一个模块不停止另一个,释放失败时禁止再次挂接。
原生圈路径
从本机可执行文件中的 gl_target 资源路径向使用方追踪:
- vfx/common/eff/gl_target1.avfx 和 gl_target2.avfx 是目标圈资源。
- 资源路径表起点 RVA 0x28A3640,gl_target1 位于第 105 项。
- 对应资源句柄表起点 RVA 0x2A8F5B0。
- 资源选择函数 RVA 0x3938A0,被原生圈更新函数调用。
- 原生圈更新函数通过 unwind 链确认完整入口为 RVA 0x7B5430;签名在本机唯一匹配。
- 0x7B5829 通过对象虚表的 GetRadius 槽读取半径,并且 adjustByTransformation=false,用于后续圈尺寸计算。
0.1.4 仅在此原生圈更新函数的同步调用范围内增加显示半径,并排除本地角色。其他线程、突进、碰撞及范围外读取仍返回原值。没有绘制 ImGui 叠加圈,没有修改游戏资源文件或永久写入对象半径。
原生圈更新 Hook 按本次审计版本限制启用。关闭模块后停止半径补偿,下一次游戏原生更新读取原始半径。
诊断与验证
面板显示前置检查、最终检查、距离补偿、原生圈更新、绘制半径补偿五项计数,以区分入口未触发与已触发但实际效果不符。
Release 构建通过,0 警告、0 错误;40 项离线测试通过。覆盖两条距离作用域、位移排除、原生圈作用域、跨线程隔离、异常退出恢复、13 和 14 的共享生命周期及清理失败处理。
静态反汇编和离线测试不代替游戏内验收。待复测:关闭 13 和 16,单开 14,增量设为 1;观察原生目标圈与普通近战技能距离,再确认关闭后恢复以及猛攻落点不受影响。不要只用猛攻验证普通技能的距离增量,14 明确排除位移技能的距离补偿。