CombatEvent record
Discriminated event raised by ICombatEvents. Always fires on the main (Unity) thread.
public abstract record CombatEventPublic Members
Section titled “Public Members”| name | description |
|---|---|
| TimestampMs { get; set; } | |
| record BuffChanged | A buff on an entity was applied, refreshed, or removed by a LIVE delta. Buffs already present when the entity appeared arrive once, together, in EntityBuffsSeeded — see BuffChangeKind for how their later deltas are reported. |
| record DamageDealt | Damage or healing was dealt between two entities. |
| record EntityAttributesChanged | One entity’s numeric attributes changed in ONE wire packet (AoiSyncDelta attr collection, an appear, or the local player’s enter-scene sheet). Raised for PLAYER entities only, AFTER every value has reached GetAttributes — so a subscriber that reads the sheet on this event already sees the change (late-never-stale). TimestampMs is the packet’s own receive stamp, the same clock its sibling BuffChanged events carry, so a consumer may join the two streams on TimestampMs without a clock conversion (rDPS sheet track, 2026-09-05 spec § 6.1). Carries only the scalar attrs stored in that packet; HP/name/team/skills ride their own events and are not repeated here. |
| record EntityBuffsSeeded | An entity’s COMPLETE buff set arrived as one snapshot — an AOI appear (SyncNearEntities``Entity.buff_infos) or the local player’s EnterScene entity (spec-from-talent-buffs, 2026-09-26). Snapshot semantics: Buffs REPLACES whatever the consumer held for TargetId — buffs it held that are not listed are gone, listed ones are current. Raised once per snapshot — including an empty snapshot when a set WAS held for the entity (so a consumer can clear); an empty snapshot for an entity with nothing held (a mob/NPC appearing buff-less) raises nothing — and INSTEAD of per-buff BuffChanged events: a town crowd of 30 players × ~120 buffs is 30 events, not thousands. Live changes afterwards arrive as per-buff BuffChanged events exactly as before. By the time this event fires, BuffsFor already returns the new set. A snapshot the client could not decode completely is skipped (no event, held set untouched). |
| record EntityStateChanged | An entity’s client-side actor/controller state machine entered a new state Stellar names on ActorState (2026-07-28 entity-state-death-signal spec). This is the client’s OWN death/break signal — read from its state machine, not inferred from HP reaching zero or a damage packet’s death flag — so it fires for scripted kills that never zero the target’s HP. Riding this existing event channel (rather than a new ICombatLookup/ICombatEvents member) is deliberate: it keeps every combat service interface under the STELLAR0005 8-member ceiling. |
| record EntitySummonAppeared | A summon/pet entity entered AOI (SyncNearEntities.appear) carrying a resolvable owner attribution. Fired once per appear, only when the entity’s AttrCollection carries AttrTopSummonerId or AttrSummonerId — most appearing entities (players, unowned mobs) carry neither and never raise this event. Useful as an early, wind-up-free timestamp anchor for a caster’s summon-based action (e.g. a Battle Imagine cast) that is otherwise only observable once the summon lands its first hit. |
| record SkillUsed | A skill was cast or progressed through a phase by the identified caster. |
| record SpecChanged | The value GetSubProfession returns for an entity changed (spec-from-talent-buffs, 2026-09-26). Raised exactly once per REAL change of that value, whether it came from a talent root buff or from cast inference — never for a no-op re-resolution. Holding the previous spec across a same-class swap gap (the root buff removed before the new one arrives) is not a change, so Smite → gap → Lifebind raises ONE event, Smite → Lifebind; a gap that outlives 10 s drops the talent spec and raises one if the reported value changes. A class change (attr 220) with no root buff of the new class yet DOES raise one (old spec → the new class’s cast-derived spec, or 0). Changes are evaluated on the main-thread drain, never while a wire packet is mid-ingest, so the whole-packet net change is reported (a class swap delivering attr 220 and the new talent set together raises one event, not an intermediate old→0→new pair). Not raised when a scene change resets every spec to 0; specs re-announce (0 → spec) as entities reappear. Rides the existing ICombatEvents stream so no combat service interface gains a member. |
See Also
Section titled “See Also”- namespace Stellar.Abstractions.Domain