Skip to content

响应配置与目标排查 ​

完整契约见响应系统。项目 Skill 镜像的相对链接不可用时,读取项目根下 docs/sdk/systems/ResponseSystem.md。

配置前先确定三组对象 ​

  • 原事件:ResponseContext.Attacker / Defender。它们描述引发响应的主动方与被动方,不等于附加效果自身的 Caster/Target。
  • 挂载:Response.Host 是单位,Owner 是提供响应的单位、技能或 Buff。成本由 Host 支付。
  • 附加效果:Caster 来自 Owner 的执行上下文。单位/技能响应通常是宿主;Buff 响应可能是 Buff 施加者。先确认对象身份,再决定是否使用 TargetLocation.Caster。

默认目标是事件另一方 ​

Location附加效果根节点默认目标
AttackerResponseContext.Defender
Defender(默认)ResponseContext.Attacker

Defender 不等于“给自己执行”。受击反伤可以保留默认目标;单位直接挂载的受击自疗、死亡自我复活应显式选择 Caster,需要单位时同时设置 TargetType.Unit。Buff 自疗则先核对宿主与施加者。不要为了修正自疗目标,把正常的被动方响应改到主动方侧。

响应附加效果由 Owner 创建,携带 effect.Shared.ResponseContext。原伤害等来源在 IncomingContext,不要假定附加效果继承原树的 Caster、主目标或祖先节点。数值公式读取原事件不会自动改变当前效果目标。

死亡响应的特殊点 ​

  • Location = Defender 响应 Host 自身死亡;Location = Attacker 响应 Host 作为 Killer 击杀单位。两侧含义与其他响应一致,不得静默改成另一侧;不支持的配置应明确报错。
  • Defender 为死亡单位;Attacker 为 Killer ?? Unit。IncomingContext 是死亡单位,不是致死伤害效果。
  • 无击杀者时不触发主动方响应;Attacker 的回退只用于目标解析。明确由单位击杀自己时,该宿主分别满足两侧条件。
  • 无击杀者的 Kill() 会回退自己,所以它不能单独验证有击杀者的死亡复活链。两个路径都测,并确认实际复活目标。
  • 延迟与复活节点都可显式选择 Caster;单位必须保留到延迟结束。Revive 恢复存活状态,不自动补生命值。

诊断顺序 ​

  1. 查源 JSON、有效继承值和生成代码。枚举用 "Caster"、"Unit"、"Defender" 等名称字符串,不用底层数字。// Value = 1、// TargetType = 1 表示生成时省略赋值,不能算配置成功;修源数据再生成。
  2. 核对实际挂载的 Host/Owner、Location、激活状态、Validators、Chance 与 Cost。
  3. 分别记录响应上下文双方与效果的 Caster、DefaultTarget、Target;用对象身份确认,不只比较位置或显示名。
  4. 检查附加效果是否执行及目标是谁。LogExecutionFailure=true 无输出不证明没执行,对活单位执行复活可以成功且无变化。
  5. 运行期才出现的问题按behavior-troubleshoot收集事件、调用栈及当前局证据。把已确认事实与临时绕法分开,避免把“没看到预期结果”写成框架不派发响应。