Proc 查询状态适配与玩家近距激活证明

2026-09-20。本批把实时 CoreSim 状态接到已验证的 ProcTargetQuery 接口,补上场景近距激活输入。不是完整原版世界查询交付:角色表目前仍只登记已绑定战斗单位,完整非敌方/物件列表、矩阵与原版 LOS 后端仍缺,生产查询明确拒绝不完整 universe。

构造覆盖保持 1099/1419;273 阻塞、47 缺基础定义/创建等级。TYPE201/204 未提前开放,全武器目标继续。

状态适配

SimProcQueryWorld 从实际 CoreSim 读取 enabled、visible、targetable、可选 Active/native state、当前 HP、阵营、类型闭包、主人及拥有玩家关系。它不把格式化 UI 数值当输入,也不按整数单位 ID 排序生成候选列表。

  • Alive 使用 native state 不是 5/6;技能自身的目标 HP 检查仍是独立条件。
  • invincible 不自动等于不可选:floor(HP)<=1 才进入对应保护;健康且非 FLEE 的单位仍可通过。
  • FLEE 所需 AI 事实、宠物可攻击和非角色物件字段由真实世界后端提供;缺失时抛出明确缺口。
  • MIMICIDLE 来自已有独立命名状态事实,不根据 AI 枚举猜测。
  • 坐标、局部几何和 LOS 是必须绑定的 INativeProcQuerySpace;未接 Godot physics 作为原版替代,也没有未知 LOS→clear 回退。
  • Query 使用保存的原式角色顺序。角色 UniverseComplete 或物件列表完整性未满足时返回 proc_scene_universe_incomplete,而不是查询已知子集后冒充全场景结果。

组合核心测试使用明确的空间夹具,检查有序筛选、+5 LOS 端点、遮挡拒绝、未知激活拒绝和生命/HP不同门。这些空间夹具不当作真实地图遮挡验证。

近距激活的确定性证明

原 540140 在主观察者阶段后,还逐个处理玩家距离。因而玩家距离本身满足原激活范围时,即使主观察者/其他技能强制条件尚未完整生产,也可确定 Active=true。

NativeUnitActivation.ProveActiveFromPlayers 调用现有原数值核,只保留这个充分条件:

玩家距离/已知强制条件证明激活 -> true
证明不成立 -> null(未知),不是 false

使用原 GLOBALS 与当前 RULES 的 UNIT_LIGHT_FADE、ACTIVERANGEMOD,当前 stat44,ALWAYSACTIVE、BOSS_CHAMPION/类型、已知 native state 和已知活跃 master。距离沿已验证 NativeRayMath 算法计算,先去掉 Y 再取长度。

这不会宣布远处单位不活跃,也没有猜测缺失的主观察者、角色技能管理器、完整 AI LOD 等字段。没有实际场景注册时不提供证明。ALWAYSACTIVE 在已知场景内不依赖是否找到地图范围配置。

Godot 的 _sync_native_scene_flags 调用该证明;即使 visible/enabled 的 stamp 未变,移动仍会重算。因此近处变远后不会保留过时的 Active=true,回到近处又可重新确定。

实际验证

  • 1723 条核心断言通过,包含新适配器和激活边界测试。
  • 356 项相关 Python 回归通过;C# 构建零警告/错误,coresimlint 通过。
  • 实际 ECHO PASS headless 场景探针通过:近处 active 已知;移到 60 单位外后变未知;移回后重新确定;隐藏、禁用、targetable、无敌低血、状态16及保存/恢复仍通过。
  • 角色注册完整性仍为 false,没有为了通过测试把它改成 true。

日志:build/proc_query_adapter_core.log、proc_query_adapter_world.log、proc_query_adapter_regression.log。代码:core_sim/SimProcQueryWorld.cs、NativeUnitActivation.cs、core_sim.io/F2SceneActivation.cs、CoreSimBridge.SceneQuery.cs、tl2_monster_combat.gd。

没有视觉资源修改;headless 结果不证明视觉等价。按 godot-master 保持核心数据、世界输入与显示层分离。

下一段与保护

接下来需要完整场景字符/物件登记和真实原版遮挡上下文,随后将其接到 FROM TARGET 的随机选目标与技能事件执行。当前适配器本身不能作为 Stormclaw 已自动施放的证据。

main 原地工作,未提交、未 attach 原版游戏。默认 warp_autosave.json SHA256 保持 9840fe858b6e311c73f8c2d4ed49912d59d71365f6278392811730e012d32a7f。