Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 33 additions & 5 deletions libs/gw2_analytics/src/gw2_analytics/rotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -957,9 +957,9 @@ def add_instant(source: int, skill_id: int, time_ms: int, icd: int = 50) -> None
add_instant(owner, 12658, event.time_ms)
# Spiteful Spirit (29560) - EI has two finders:
# 1. DamageCastFinder: disabled when effect data exists
# (UsingDisableWithEffectData)
# 2. EffectCastFinder for UnholyBurst: triggers on effect with
# DesertShroud/related hit checks
# (UsingDisableWithEffectData)
# 2. EffectCastFinder for UnholyBurst: triggers on effect
# with DesertShroud/related hit checks
elif isinstance(event, DamageEvent) and event.skill_id == 29560:
source_is_necro = (
not professions or professions.get(event.source_agent_id) is Profession.NECROMANCER
Expand All @@ -974,7 +974,7 @@ def add_instant(source: int, skill_id: int, time_ms: int, icd: int = 50) -> None
)

if has_unholy_burst_in_fight:
# EI disables DamageCastFinder when effect data exists (UsingDisableWithEffectData)
# EI disables DamageCastFinder when effect data exists
# Let the EffectCastFinder handle it via UnholyBurst effect events
continue
# No UnholyBurst effect data in fight: use DamageCastFinder
Expand Down Expand Up @@ -1189,7 +1189,35 @@ def add_instant(source: int, skill_id: int, time_ms: int, icd: int = 50) -> None
base_skill = _BASE_SKILL_BY_ENHANCED_EFFECT.get(event.guid)
if base_skill is not None and (caster, base_skill) in active:
continue
if event.guid != "C4E8DD3234E0C647993857940ED79AC1" or not any(
# Spiteful Spirit (29560) via UnholyBurst effect (EffectCastFinder path)
# EI's EffectCastFinder for Spiteful Spirit triggers on UnholyBurst effect
# with DesertShroud and related hit checks
if event.guid == "C4E8DD3234E0C647993857940ED79AC1":
# DesertShroud check: no DesertShroud buff removal within 50ms
desert_shroud_removal = any(
isinstance(other, BoonApplyEvent)
and other.kind == "remove_all"
and other.skill_id == 40052 # DesertShroudBuff
and other.source_agent_id == caster
and abs(other.time_ms - event.time_ms) < 50
for other in nearby_events(event.time_ms, 50)
)
if desert_shroud_removal:
continue

# Related hit check: no UnholyBurst hit from same caster within 10ms
related_hit = any(
isinstance(other, DamageEvent)
and other.source_agent_id == caster
and other.skill_id == 38767 # UnholyBurst
and abs(other.time_ms - event.time_ms) < 10
for other in nearby_events(event.time_ms, 10)
)
if related_hit:
continue

add_instant(caster, effect_skill_id, event.time_ms)
elif event.guid != "C4E8DD3234E0C647993857940ED79AC1" or not any(
isinstance(other, DamageEvent)
and other.source_agent_id == caster
and other.skill_id == 38767
Expand Down
Loading