From 85f3ef17d96c4e9fe7b86256375ccb07a61698d3 Mon Sep 17 00:00:00 2001 From: g0shu <58014602+g0shu@users.noreply.github.com> Date: Sat, 5 Aug 2023 06:53:06 +0300 Subject: [PATCH] oopsy: add IsImmune to OopsyData (#5750) --- types/data.d.ts | 1 + ui/oopsyraidsy/damage_tracker.ts | 7 +++++++ ui/oopsyraidsy/player_state_tracker.ts | 15 +++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/types/data.d.ts b/types/data.d.ts index ba81e92fc5..ca4672ed9f 100644 --- a/types/data.d.ts +++ b/types/data.d.ts @@ -50,6 +50,7 @@ export interface OopsyData { role: Role; party: PartyTracker; inCombat: boolean; + IsImmune: (x?: string) => boolean; ShortName: (x?: string) => string; IsPlayerId: (x?: string) => boolean; DamageFromMatches: (matches: NetMatches['Ability']) => number; diff --git a/ui/oopsyraidsy/damage_tracker.ts b/ui/oopsyraidsy/damage_tracker.ts index 89e5a60102..c554e687a4 100644 --- a/ui/oopsyraidsy/damage_tracker.ts +++ b/ui/oopsyraidsy/damage_tracker.ts @@ -159,6 +159,13 @@ export class DamageTracker { role: this.role, party: this.playerStateTracker.partyTracker, inCombat: this.inCombat, + IsImmune: (targetId?: string) => { + // 52 = hallowed, 199 = holmgang, 32A = living, 32B = walking, 72C = bolide + const invulnIds = ['52', '199', '32A', '32B', '72C']; + if (this.playerStateTracker.HasEffect(targetId, invulnIds)) + return true; + return false; + }, ShortName: (name?: string) => ShortNamify(name, this.options.PlayerNicks), IsPlayerId: IsPlayerId, DamageFromMatches: (matches: NetMatches['Ability']) => UnscrambleDamage(matches?.damage), diff --git a/ui/oopsyraidsy/player_state_tracker.ts b/ui/oopsyraidsy/player_state_tracker.ts index eb8f6b5136..24a7c31b7c 100644 --- a/ui/oopsyraidsy/player_state_tracker.ts +++ b/ui/oopsyraidsy/player_state_tracker.ts @@ -388,6 +388,21 @@ export class PlayerStateTracker { delete this.trackedEffectMap[targetId]?.[effectId]; } + HasEffect(targetId: string | undefined, effectId: string | string[] | undefined): boolean { + if (targetId === undefined || effectId === undefined) + return false; + if (typeof effectId === 'string') { + if (this.trackedEffectMap[targetId]?.[effectId]) + return true; + } else { + for (const effect of effectId) { + if (this.trackedEffectMap[targetId]?.[effect]) + return true; + } + } + return false; + } + OnDeathReason(timestamp: number, reason: OopsyDeathReason): void { const targetId = reason.id; if (!targetId || !IsPlayerId(targetId))