Skip to content
This repository was archived by the owner on Oct 11, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
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
4 changes: 2 additions & 2 deletions libs/gw2_analytics/src/gw2_analytics/buff_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ def process( # noqa: PLR0912, PLR0915
(
i
for i, stack_id in enumerate(target_tracker.stack_ids)
if event.stack_id and stack_id == event.stack_id
if event.stack_id is not None and stack_id == event.stack_id
),
None,
)
Expand All @@ -446,7 +446,7 @@ def process( # noqa: PLR0912, PLR0915
(
i
for i, stack_id in enumerate(target_tracker.stack_ids)
if event.stack_id and stack_id == event.stack_id
if event.stack_id is not None and stack_id == event.stack_id
),
0,
)
Expand Down
1 change: 1 addition & 0 deletions libs/gw2_analytics/src/gw2_analytics/ei_compare.py
Original file line number Diff line number Diff line change
Expand Up @@ -808,6 +808,7 @@ def player_agent_ids(agent: Agent, slice_lo: int = 0, slice_hi: int = 0) -> set[
agent_id_by_instance={
agent.instance_id: agent.id for agent in fight.agents if agent.instance_id
},
squad_agent_ids={agent.id for agent in fight.agents if agent.is_player},
)
has_downed_buff_applies = any(
isinstance(event, BoonApplyEvent) and event.kind == "apply" and event.skill_id == 770
Expand Down
14 changes: 8 additions & 6 deletions libs/gw2_analytics/src/gw2_analytics/rotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,7 @@ def build_skill_rotation( # noqa: PLR0912, PLR0915
elite_specs: Mapping[int, EliteSpec] | None = None,
agent_id_by_instance: Mapping[int, int] | None = None,
ownership_resolver: Callable[[int, int], int | None] | None = None,
squad_agent_ids: Collection[int] = (),
) -> list[SkillCast]:
"""Return completed, clipped casts ordered by fight-relative start time.

Expand Down Expand Up @@ -997,12 +998,13 @@ def add_instant(source: int, skill_id: int, time_ms: int, icd: int = 50) -> None
elif (isinstance(event, HealingEvent) and event.skill_id in _HEALING_CASTS) or (
isinstance(event, MissileEvent) and event.skill_id in _MISSILE_CASTS
):
if (
isinstance(event, HealingEvent)
and event.skill_id in _HEALING_CASTS_SQUAD_ONLY
and not event.src_is_peer
):
continue
if isinstance(event, HealingEvent) and event.skill_id in _HEALING_CASTS_SQUAD_ONLY:
# EI EXTHealingCastFinder: only book if caster is in squad.
# If squad set is available, require membership; else fall back to src_is_peer.
if squad_agent_ids and event.source_agent_id not in squad_agent_ids:
continue
if not squad_agent_ids and not event.src_is_peer:
continue
add_instant(
event.source_agent_id,
event.skill_id,
Expand Down
4 changes: 2 additions & 2 deletions libs/gw2_evtc_parser/src/gw2_evtc_parser/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -840,7 +840,7 @@ def parse_events(source: BinaryIO | bytes) -> Iterator[Event]: # noqa: PLR0912,
if _ev_buff != 0 and value == 0 and buff_dmg < 0
else 0
)
src_is_peer = bool(is_offcycle & 0x80) or not bool(is_offcycle & 0xC0)
src_is_peer = bool(is_offcycle & 0x80)
if magnitude > 0 and src_is_peer:
yield HealingEvent(
time_ms=time_ms,
Expand All @@ -852,7 +852,7 @@ def parse_events(source: BinaryIO | bytes) -> Iterator[Event]: # noqa: PLR0912,
iff=_iff & 0xFF,
src_master_instid=src_master_inst,
dst_master_instid=dst_master_inst,
src_is_peer=bool(is_offcycle & 0x80),
src_is_peer=True,
)
continue
if is_statechange == 6:
Expand Down
2 changes: 2 additions & 0 deletions libs/gw2_evtc_parser/tests/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -1040,6 +1040,7 @@ def test_parse_events_2025_healing_extension_combat_round_trips() -> None:
13980,
is_statechange=49,
pad=0x9C9B3C99,
is_offcycle=0x80,
),
_build_event_record_2025(
43_500,
Expand All @@ -1050,6 +1051,7 @@ def test_parse_events_2025_healing_extension_combat_round_trips() -> None:
is_statechange=49,
is_shields=1,
pad=0x9C9B3C99,
is_offcycle=0x80,
),
],
)
Expand Down
Loading