2aebc37115
Cone/SpecialSlam damage lands at its visual contact via ConeContactPending (knob 32, 0=legacy; early-flush + resolve re-validate; death + BOTH class-swap paths drop armed pendings — fixes the shipped melee death-strand in the same stroke). Zones: [GhostField] Caster/Radius/NextTick + ZoneTelegraphSystem (Geyser latch contract on InterpolationTick; rim = true radius; arm grows, persistent phase drains). Cone cues latch to contact (FireStartRaw, C14); TuningConfig.Defaults() fallback at client cue sites (release-build timing fix). G4: SaturationMath ally-FX degrade (living-enemy census, solo-exempt; enemy telegraphs structurally exempt) + CombatStressDebug + overlay saturation rows. Reviews wf_98bf1268 (13 confirmed folded) / wf_9757d214 (5 confirmed fixed). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
23 lines
1.5 KiB
C#
23 lines
1.5 KiB
C#
using Unity.Entities;
|
|
|
|
namespace ProjectM.Simulation
|
|
{
|
|
/// <summary>07-21 G6 (socket honesty, design review wf_98bf1268): SERVER-ONLY scheduled Cone-socket cleave —
|
|
/// the <see cref="MeleeCleavePending"/> schedule-and-consume idiom applied to the SpecialSlam (Cone archetype)
|
|
/// socket, so its damage lands at the animation's visual contact instead of the fire tick. Stamped by
|
|
/// AbilityFireSystem when a Cone socket fires (ResolveTick = fire + TuningConfig.ConeContactTicks; knob 0 =
|
|
/// legacy immediate, no stamp), fired on a wrap-safe elapsed compare from LIVE state (cast-turn steers the
|
|
/// cone until contact; stats re-folded at resolve), CONSUMED by zeroing. A still-armed pending is FLUSHED
|
|
/// (fired early) before a recast overwrites it. Cleared on death (PlayerDeathStateSystem — an armed pending
|
|
/// must never fire from the respawn position) and by the dev SetClass swap (socket identity changes).
|
|
/// At resolve the socket is re-validated (bounds + still a Cone Spark) — consume-drop on mismatch.
|
|
/// Not replicated; client contact cues are presentation-side (CombatFeedbackSystem). Baked zeroed.</summary>
|
|
public struct ConeContactPending : IComponentData
|
|
{
|
|
/// <summary>NonZero tick the armed cone's slam lands; 0 = nothing pending.</summary>
|
|
public uint ResolveTick;
|
|
/// <summary>Socket index (0..SocketId.Count-1) of the ARMED cast — stats/aim re-read live at resolve.</summary>
|
|
public byte Socket;
|
|
}
|
|
}
|