From 6132cb6e94e94da6348a43387ab1df8e4b837425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aveline=20Esti=C3=A9?= Date: Mon, 18 Mar 2024 21:05:51 +0100 Subject: [PATCH 01/17] add guide subsection to selfhealtiminggraph --- .../modules/features/DeathStrikeTiming.tsx | 1 + .../modules/features/SelfHealTimingGraph.jsx | 62 ++++++++++++------- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/analysis/retail/deathknight/blood/modules/features/DeathStrikeTiming.tsx b/src/analysis/retail/deathknight/blood/modules/features/DeathStrikeTiming.tsx index 55519f47fdb..fb298ec2304 100644 --- a/src/analysis/retail/deathknight/blood/modules/features/DeathStrikeTiming.tsx +++ b/src/analysis/retail/deathknight/blood/modules/features/DeathStrikeTiming.tsx @@ -8,6 +8,7 @@ class DeathStrikeTiming extends SelfHealTimingGraph { this.selfHealSpell = SPELLS.DEATH_STRIKE_HEAL; this.tabTitle = 'Death Strike Timing'; this.tabURL = 'death-strike-timings'; + this.tabEnabled = false; } } diff --git a/src/parser/shared/modules/features/SelfHealTimingGraph.jsx b/src/parser/shared/modules/features/SelfHealTimingGraph.jsx index efdb4d518dc..2f4f06de4cb 100644 --- a/src/parser/shared/modules/features/SelfHealTimingGraph.jsx +++ b/src/parser/shared/modules/features/SelfHealTimingGraph.jsx @@ -1,6 +1,7 @@ import SPELLS from 'common/SPELLS'; import { Panel } from 'interface'; import { SpellLink } from 'interface'; +import { SubSection } from 'interface/guide'; import Analyzer, { SELECTED_PLAYER } from 'parser/core/Analyzer'; import Events from 'parser/core/Events'; import BaseChart, { formatTime } from 'parser/ui/BaseChart'; @@ -19,6 +20,7 @@ class SelfHealTimingGraph extends Analyzer { selfHealSpell = SPELLS.HEALTHSTONE; tabTitle = 'Selheal Timing'; tabURL = 'selfheal-timings'; + tabEnabled = true; constructor(options) { super(options); @@ -188,27 +190,45 @@ class SelfHealTimingGraph extends Analyzer { } tab() { - return { - title: this.tabTitle, - url: this.tabURL, - render: () => ( - - This plot shows you your casts relative to - your Health Points to help you improve your{' '} - timings. -
- Improving those timings by selfhealing at low health and the correct time will remove - a lot of pressure from your healers. - - } - > - {this.plot} -
- ), - }; + if (this.tabEnabled) { + return { + title: this.tabTitle, + url: this.tabURL, + render: () => ( + + This plot shows you your casts relative + to your Health Points to help you improve your{' '} + timings. +
+ Improving those timings by selfhealing at low health and the correct time will + remove a lot of pressure from your healers. + + } + > + {this.plot} +
+ ), + }; + } + } + + get guideSubsection() { + return ( + + <> + This plot shows you your casts relative to + your Health Points to help you improve your {' '} + timings. +
+ Improving those timings by selfhealing at low health and the correct time will remove a + lot of pressure from your healers. + + {this.plot} +
+ ); } } From a73e129c8c5d32f492fba4262ec5e5faac4f505c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aveline=20Esti=C3=A9?= Date: Mon, 18 Mar 2024 21:06:41 +0100 Subject: [PATCH 02/17] add subsection to runicpowerdetails --- .../modules/runicpower/RunicPowerDetails.tsx | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/analysis/retail/deathknight/blood/modules/runicpower/RunicPowerDetails.tsx b/src/analysis/retail/deathknight/blood/modules/runicpower/RunicPowerDetails.tsx index 1cbda3d7cea..8bc73c5b834 100644 --- a/src/analysis/retail/deathknight/blood/modules/runicpower/RunicPowerDetails.tsx +++ b/src/analysis/retail/deathknight/blood/modules/runicpower/RunicPowerDetails.tsx @@ -1,7 +1,7 @@ import { defineMessage, t, Trans } from '@lingui/macro'; import { formatPercentage } from 'common/format'; import RESOURCE_TYPES from 'game/RESOURCE_TYPES'; -import { Panel } from 'interface'; +// import { Panel } from 'interface'; import Analyzer from 'parser/core/Analyzer'; import { NumberThreshold, ThresholdStyle, When } from 'parser/core/ParseResults'; import ResourceBreakdown from 'parser/shared/modules/resources/resourcetracker/ResourceBreakdown'; @@ -10,6 +10,7 @@ import Statistic from 'parser/ui/Statistic'; import STATISTIC_ORDER from 'parser/ui/STATISTIC_ORDER'; import RunicPowerTracker from './RunicPowerTracker'; +import { SubSection } from 'interface/guide'; class RunicPowerDetails extends Analyzer { static dependencies = { @@ -96,16 +97,12 @@ class RunicPowerDetails extends Analyzer { ); } - tab() { - return { - title: 'Runic Power usage', - url: 'runic-power-usage', - render: () => ( - - - - ), - }; + get guideSubsection() { + return ( + + + + ); } } From 495fd7fa788c9d9f14e373d14a158336f307a089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aveline=20Esti=C3=A9?= Date: Mon, 18 Mar 2024 21:07:13 +0100 Subject: [PATCH 03/17] adjust guide display --- .../retail/deathknight/blood/CONFIG.tsx | 11 ++-- .../deathknight/blood/modules/guide/index.tsx | 51 ++++++++++++++++++- .../spells/DeathStrike/DeathStrikeSection.tsx | 6 +-- 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/src/analysis/retail/deathknight/blood/CONFIG.tsx b/src/analysis/retail/deathknight/blood/CONFIG.tsx index fcf5473aa1c..e4d6c1039c8 100644 --- a/src/analysis/retail/deathknight/blood/CONFIG.tsx +++ b/src/analysis/retail/deathknight/blood/CONFIG.tsx @@ -12,7 +12,7 @@ const config: Config = { contributors: [Yajinni, joshinator], expansion: Expansion.Dragonflight, // The WoW client patch this spec was last updated. - patchCompatibility: '10.0.7', + patchCompatibility: '10.2.5', isPartial: true, // Explain the status of this spec's analysis here. Try to mention how complete it is, and perhaps show links to places users can learn more. // If this spec's analysis does not show a complete picture please mention this in the `` component. @@ -42,14 +42,16 @@ const config: Config = { Discord or DM us on Discord.

- Make sure to check out the Death Knight Class Discord if - you need more specific advice or a more detailed guide than the ones available on{' '} + Make sure to check out the + Death Knight Class Discord + {' '} + if you need more specific advice or a more detailed guide than the ones available on{' '} Icy-Veins and{' '} wowhead. ), // A recent example report to see interesting parts of the spec. Will be shown on the homepage. - exampleReport: "/report/mx1BaMV7PyL4FnKz/10-Mythic+Artificer+Xy'mox+-+Kill+(5:53)/Tombo/standard", + exampleReport: '/report/y3D2KWrZtCd1AkVY/29-Heroic+Volcoross+-+Kill+(2:47)/Arlie/standard', // Don't change anything below this line; // The current spec identifier. This is the only place (in code) that specifies which spec this parser is about. @@ -63,6 +65,7 @@ const config: Config = { ), // The path to the current directory (relative form project root). This is used for generating a GitHub link directly to your spec's code. path: __dirname, + guideOnly: true, }; export default config; diff --git a/src/analysis/retail/deathknight/blood/modules/guide/index.tsx b/src/analysis/retail/deathknight/blood/modules/guide/index.tsx index f08b674cc34..5d4f4ce107d 100644 --- a/src/analysis/retail/deathknight/blood/modules/guide/index.tsx +++ b/src/analysis/retail/deathknight/blood/modules/guide/index.tsx @@ -1,11 +1,58 @@ -import { GuideProps } from 'interface/guide'; +import { GuideProps, Section } from 'interface/guide'; import CombatLogParser from '../../CombatLogParser'; import { DeathStrikeSection } from '../spells/DeathStrike/DeathStrikeSection'; +import PreparationSection from 'interface/guide/components/Preparation/PreparationSection'; +import { TALENTS_DEATH_KNIGHT } from 'common/TALENTS'; +import CooldownGraphSubsection, { + Cooldown, +} from 'interface/guide/components/CooldownGraphSubSection'; +import DRAGONFLIGHT_OTHERS_ITEMS from 'common/ITEMS/dragonflight/others'; +import DRAGONFLIGHT_OTHERS_SPELLS from 'common/SPELLS/dragonflight/others'; export default function BloodGuide(props: GuideProps): JSX.Element { + const cooldowns: Cooldown[] = [ + { + spell: TALENTS_DEATH_KNIGHT.DANCING_RUNE_WEAPON_TALENT, + isActive: (c) => c.hasTalent(TALENTS_DEATH_KNIGHT.DANCING_RUNE_WEAPON_TALENT), + }, + { + spell: TALENTS_DEATH_KNIGHT.EMPOWER_RUNE_WEAPON_SHARED_TALENT, + isActive: (c) => c.hasTalent(TALENTS_DEATH_KNIGHT.EMPOWER_RUNE_WEAPON_SHARED_TALENT), + }, + { + spell: DRAGONFLIGHT_OTHERS_SPELLS.RAGE_OF_FYRALATH_1, + isActive: (c) => c.hasMainHand(DRAGONFLIGHT_OTHERS_ITEMS.FYRALATH.id), + }, + { + spell: TALENTS_DEATH_KNIGHT.ABOMINATION_LIMB_TALENT, + isActive: (c) => c.hasTalent(TALENTS_DEATH_KNIGHT.ABOMINATION_LIMB_TALENT), + }, + { + spell: TALENTS_DEATH_KNIGHT.ICEBOUND_FORTITUDE_TALENT, + isActive: (c) => c.hasTalent(TALENTS_DEATH_KNIGHT.ICEBOUND_FORTITUDE_TALENT), + }, + { + spell: TALENTS_DEATH_KNIGHT.VAMPIRIC_BLOOD_TALENT, + isActive: (c) => c.hasTalent(TALENTS_DEATH_KNIGHT.VAMPIRIC_BLOOD_TALENT), + }, + { + spell: TALENTS_DEATH_KNIGHT.ANTI_MAGIC_SHELL_TALENT, + isActive: (c) => c.hasTalent(TALENTS_DEATH_KNIGHT.ANTI_MAGIC_SHELL_TALENT), + }, + ]; return ( <> - +
+ + {props.modules.deathStrikeTiming.guideSubsection} +
+
+ {props.modules.runicPowerDetails.guideSubsection} +
+
+ +
+ ); } diff --git a/src/analysis/retail/deathknight/blood/modules/spells/DeathStrike/DeathStrikeSection.tsx b/src/analysis/retail/deathknight/blood/modules/spells/DeathStrike/DeathStrikeSection.tsx index 0b6cf4ccf23..71c43bdba74 100644 --- a/src/analysis/retail/deathknight/blood/modules/spells/DeathStrike/DeathStrikeSection.tsx +++ b/src/analysis/retail/deathknight/blood/modules/spells/DeathStrike/DeathStrikeSection.tsx @@ -14,7 +14,7 @@ import talents from 'common/TALENTS/deathknight'; import MAGIC_SCHOOLS, { color } from 'game/MAGIC_SCHOOLS'; import RESOURCE_TYPES, { getResource } from 'game/RESOURCE_TYPES'; import { ResourceLink, SpellLink, TooltipElement } from 'interface'; -import { BadColor, GoodColor, Section, useAnalyzers, useEvents, useInfo } from 'interface/guide'; +import { BadColor, GoodColor, SubSection, useAnalyzers, useEvents, useInfo } from 'interface/guide'; import { ActualCastDescription } from 'interface/guide/components/Apl/violations/claims'; import CastReasonBreakdownTableContents from 'interface/guide/components/CastReasonBreakdownTableContents'; import Explanation from 'interface/guide/components/Explanation'; @@ -368,7 +368,7 @@ export function DeathStrikeSection(): JSX.Element | null { const healingTarget = totalDamage / 2; return ( -
+

As a Blood Death Knight, is both your @@ -543,6 +543,6 @@ export function DeathStrikeSection(): JSX.Element | null { renderer={DeathStrikeProblemRenderer} /> -

+ ); } From d038e79861c3f7d4d2fee89776b1729459a434de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aveline=20Esti=C3=A9?= Date: Mon, 18 Mar 2024 21:13:10 +0100 Subject: [PATCH 04/17] fix empower rune weapon --- src/analysis/retail/deathknight/blood/CONFIG.tsx | 1 - src/analysis/retail/deathknight/blood/modules/guide/index.tsx | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/analysis/retail/deathknight/blood/CONFIG.tsx b/src/analysis/retail/deathknight/blood/CONFIG.tsx index e4d6c1039c8..a948bb43e38 100644 --- a/src/analysis/retail/deathknight/blood/CONFIG.tsx +++ b/src/analysis/retail/deathknight/blood/CONFIG.tsx @@ -65,7 +65,6 @@ const config: Config = { ), // The path to the current directory (relative form project root). This is used for generating a GitHub link directly to your spec's code. path: __dirname, - guideOnly: true, }; export default config; diff --git a/src/analysis/retail/deathknight/blood/modules/guide/index.tsx b/src/analysis/retail/deathknight/blood/modules/guide/index.tsx index 5d4f4ce107d..3226d5ec72b 100644 --- a/src/analysis/retail/deathknight/blood/modules/guide/index.tsx +++ b/src/analysis/retail/deathknight/blood/modules/guide/index.tsx @@ -3,6 +3,7 @@ import CombatLogParser from '../../CombatLogParser'; import { DeathStrikeSection } from '../spells/DeathStrike/DeathStrikeSection'; import PreparationSection from 'interface/guide/components/Preparation/PreparationSection'; import { TALENTS_DEATH_KNIGHT } from 'common/TALENTS'; +import SPELLS from 'common/SPELLS'; import CooldownGraphSubsection, { Cooldown, } from 'interface/guide/components/CooldownGraphSubSection'; @@ -16,7 +17,7 @@ export default function BloodGuide(props: GuideProps): J isActive: (c) => c.hasTalent(TALENTS_DEATH_KNIGHT.DANCING_RUNE_WEAPON_TALENT), }, { - spell: TALENTS_DEATH_KNIGHT.EMPOWER_RUNE_WEAPON_SHARED_TALENT, + spell: SPELLS.EMPOWER_RUNE_WEAPON, isActive: (c) => c.hasTalent(TALENTS_DEATH_KNIGHT.EMPOWER_RUNE_WEAPON_SHARED_TALENT), }, { From fb6eac95b231902bef188a5c583309a038ee8b38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aveline=20Esti=C3=A9?= Date: Mon, 18 Mar 2024 21:19:13 +0100 Subject: [PATCH 05/17] add charges to rapid decomposition talent --- src/analysis/retail/deathknight/blood/modules/Abilities.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/analysis/retail/deathknight/blood/modules/Abilities.ts b/src/analysis/retail/deathknight/blood/modules/Abilities.ts index e803aad7fc8..f9970b91a16 100644 --- a/src/analysis/retail/deathknight/blood/modules/Abilities.ts +++ b/src/analysis/retail/deathknight/blood/modules/Abilities.ts @@ -271,6 +271,7 @@ class Abilities extends CoreAbilities { suggestion: true, recommendedEfficiency: 0.8, //reduced because of proc resets }, + charges: combatant.hasTalent(TALENTS.DEATHS_ECHO_TALENT) ? 2 : 1, timelineSortIndex: 5, }, //do not use cast efficiency for DnD without Rapid Decomposition. @@ -280,6 +281,7 @@ class Abilities extends CoreAbilities { gcd: { base: 1500, }, + enabled: !combatant.hasTalent(TALENTS.RAPID_DECOMPOSITION_TALENT), cooldown: 15, charges: combatant.hasTalent(TALENTS.DEATHS_ECHO_TALENT) ? 2 : 1, timelineSortIndex: 5, From 461a9c46de3fa760bab32c805462e66132451852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aveline=20Esti=C3=A9?= Date: Mon, 18 Mar 2024 22:43:22 +0100 Subject: [PATCH 06/17] change rune of sanguination to minor as it is used on ST fights for sure. --- .../deathknight/blood/modules/core/RuneForgeChecker.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/analysis/retail/deathknight/blood/modules/core/RuneForgeChecker.tsx b/src/analysis/retail/deathknight/blood/modules/core/RuneForgeChecker.tsx index aa3585e7a45..8eefc8742d4 100644 --- a/src/analysis/retail/deathknight/blood/modules/core/RuneForgeChecker.tsx +++ b/src/analysis/retail/deathknight/blood/modules/core/RuneForgeChecker.tsx @@ -35,11 +35,11 @@ class BloodRuneForgeChecker extends RuneForgeChecker { }, { forge: SPELLS.RUNE_OF_SANGUINATION, - importance: SUGGESTION_IMPORTANCE.MAJOR, + importance: SUGGESTION_IMPORTANCE.MINOR, suggestion: ( - Don't use as Blood Death Knight, use{' '} - instead. + Only use as Blood Death Knight on a + pure ST fight, use instead. ), }, From ab5d9d5707cfb1bee819739a0f3b83d4015acce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aveline=20Esti=C3=A9?= Date: Mon, 18 Mar 2024 22:44:25 +0100 Subject: [PATCH 07/17] add changelog entry --- src/analysis/retail/deathknight/blood/CHANGELOG.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/analysis/retail/deathknight/blood/CHANGELOG.tsx b/src/analysis/retail/deathknight/blood/CHANGELOG.tsx index bde82c9f6e9..0206cf3a0d8 100644 --- a/src/analysis/retail/deathknight/blood/CHANGELOG.tsx +++ b/src/analysis/retail/deathknight/blood/CHANGELOG.tsx @@ -5,6 +5,7 @@ import { SpellLink } from 'interface'; export default [ + change(date(2024, 3, 18), <>Updated spec to 10.2.5 and added new guide items,Arlie), change(date(2023, 12, 15), <>Fix spell link suggestions for,Arlie), change(date(2023, 8, 12), 'Large update to the abilities file to include many missing spells and talents.',Yajinni), change(date(2023, 8, 11), <> Updated it to show cast efficiency only if the talent was taken.,Yajinni), From abbe148ef3b329ea41d2e46c71369203f8550add Mon Sep 17 00:00:00 2001 From: Vollmer Date: Thu, 21 Mar 2024 10:11:17 +0100 Subject: [PATCH 08/17] Change channel prop type for BaseCastEvent to EndChannelEvent --- src/parser/core/Events.ts | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/parser/core/Events.ts b/src/parser/core/Events.ts index 095add4aafa..3771f570c0f 100644 --- a/src/parser/core/Events.ts +++ b/src/parser/core/Events.ts @@ -442,21 +442,7 @@ export interface BaseCastEvent extends Event { absorb?: number; armor?: number; attackPower?: number; - channel?: { - type: EventType.BeginChannel; - timestamp: number; - duration: number; - ability: Ability; - sourceID: number; - isCancelled: boolean; - start: number; - beginChannel?: { - isCancelled: boolean; - sourceID: number; - timestamp: number; - type: string; - }; - }; + channel?: EndChannelEvent; classResources?: Array; facing?: number; hitPoints?: number; From ec83d3847a4def5e6030cb85c642fde6cc273778 Mon Sep 17 00:00:00 2001 From: Vollmer Date: Thu, 21 Mar 2024 16:05:38 +0100 Subject: [PATCH 09/17] Implement attachChannelToCast fn for Channeling normalizer --- src/parser/shared/normalizers/Channeling.ts | 46 +++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/parser/shared/normalizers/Channeling.ts b/src/parser/shared/normalizers/Channeling.ts index 9c47a06bf7d..ba34d5f4ef7 100644 --- a/src/parser/shared/normalizers/Channeling.ts +++ b/src/parser/shared/normalizers/Channeling.ts @@ -252,9 +252,55 @@ export function endCurrentChannel(event: AnyEvent, channelState: ChannelState) { trigger: event, }; channelState.eventsInserter.addAfterEvent(endChannel, event); + + attachChannelToCast(endChannel); + channelState.unresolvedChannel = null; } +/** + * Attempts to attach the endChannel event to the associated cast event + * + * This is needed to allow the Cast module to properly render channels on the timeline without + * inserting the cast on top of the the fabricated channel + */ +function attachChannelToCast(endChannelEvent: EndChannelEvent): void { + const beginChannelTrigger = endChannelEvent.beginChannel.trigger; + const endChannelTrigger = endChannelEvent.trigger; + + // Due to how Empowers are currently implemented this won't work for them so no reason to try + if ( + endChannelTrigger?.type === EventType.EmpowerEnd || + beginChannelTrigger?.type === EventType.EmpowerStart + ) { + return; + } + + // If we for some reason don't have a cast event + // Currently only observed happening with Empowers, which makes sense with their current implementation but they are (for now) being ignored anyways + if (endChannelTrigger?.type !== EventType.Cast && beginChannelTrigger?.type !== EventType.Cast) { + console.warn( + 'Tried to attach endChannelEvent to cast event for ability', + endChannelEvent.ability.name + '(' + endChannelEvent.ability.guid + ')', + '@', + endChannelEvent.timestamp, + 'but was unable to find it', + endChannelEvent, + ); + return; + } + + // If the beginChannelTrigger was a cast attach to that + // The trigger could also be a beginCast, in which case the endChannelTrigger should be the cast + if (beginChannelTrigger?.type === EventType.Cast) { + beginChannelTrigger.channel = endChannelEvent; + return; + } else if (endChannelTrigger?.type === EventType.Cast) { + endChannelTrigger.channel = endChannelEvent; + return; + } +} + /** * Cancels the current channel (if there is one), and updates the channel state appropriately * @param channelState the current channel state From ebc635198cdddb7035ba0fe21138f3d35f7c914e Mon Sep 17 00:00:00 2001 From: Vollmer Date: Thu, 21 Mar 2024 17:36:37 +0100 Subject: [PATCH 10/17] add a missing S --- src/parser/shared/normalizers/Channeling.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser/shared/normalizers/Channeling.ts b/src/parser/shared/normalizers/Channeling.ts index ba34d5f4ef7..239475fd84a 100644 --- a/src/parser/shared/normalizers/Channeling.ts +++ b/src/parser/shared/normalizers/Channeling.ts @@ -261,7 +261,7 @@ export function endCurrentChannel(event: AnyEvent, channelState: ChannelState) { /** * Attempts to attach the endChannel event to the associated cast event * - * This is needed to allow the Cast module to properly render channels on the timeline without + * This is needed to allow the Casts module to properly render channels on the timeline without * inserting the cast on top of the the fabricated channel */ function attachChannelToCast(endChannelEvent: EndChannelEvent): void { From 93f84e87c6252cf6ca5173547976deeb5df396fb Mon Sep 17 00:00:00 2001 From: Vollmer Date: Fri, 22 Mar 2024 09:12:54 +0100 Subject: [PATCH 11/17] changelog --- src/CHANGELOG.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CHANGELOG.tsx b/src/CHANGELOG.tsx index 3dd32157fd1..3b0516062c9 100644 --- a/src/CHANGELOG.tsx +++ b/src/CHANGELOG.tsx @@ -34,6 +34,7 @@ import SpellLink from 'interface/SpellLink'; // prettier-ignore export default [ + change(date(2024, 3, 22), 'Update Channeling normalizer to attach fabricated channel events to their associated cast events.', Vollmer), change(date(2024, 3, 14), 'Correct getBuffStacks method to return the stacks at the given timestamp', Earosselot), change(date(2024, 3, 14), 'Fix overflow on cooldown bars while using the phase selector.', ToppleTheNun), change(date(2024, 3, 14), 'Bump opacity on phase selector to 75% from 40%.', ToppleTheNun), From 184b7ab6c54cb51d2b29cdd85f30fd5857b2c812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aveline=20Esti=C3=A9?= Date: Mon, 25 Mar 2024 09:23:41 +0100 Subject: [PATCH 12/17] merge both DnD entries into one --- .../deathknight/blood/modules/Abilities.ts | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/analysis/retail/deathknight/blood/modules/Abilities.ts b/src/analysis/retail/deathknight/blood/modules/Abilities.ts index f9970b91a16..8d69f6134b4 100644 --- a/src/analysis/retail/deathknight/blood/modules/Abilities.ts +++ b/src/analysis/retail/deathknight/blood/modules/Abilities.ts @@ -259,30 +259,18 @@ class Abilities extends CoreAbilities { timelineSortIndex: 7, }, { - //should this be used without procs? spell: SPELLS.DEATH_AND_DECAY.id, category: SPELL_CATEGORY.ROTATIONAL, gcd: { base: 1500, }, - enabled: combatant.hasTalent(TALENTS.RAPID_DECOMPOSITION_TALENT), - cooldown: 15, - castEfficiency: { - suggestion: true, - recommendedEfficiency: 0.8, //reduced because of proc resets - }, - charges: combatant.hasTalent(TALENTS.DEATHS_ECHO_TALENT) ? 2 : 1, - timelineSortIndex: 5, - }, - //do not use cast efficiency for DnD without Rapid Decomposition. - { - spell: SPELLS.DEATH_AND_DECAY.id, - category: SPELL_CATEGORY.ROTATIONAL, - gcd: { - base: 1500, - }, - enabled: !combatant.hasTalent(TALENTS.RAPID_DECOMPOSITION_TALENT), cooldown: 15, + castEfficiency: combatant.hasTalent(TALENTS.RAPID_DECOMPOSITION_TALENT) + ? { + suggestion: true, + recommendedEfficiency: 0.8, //reduced because of proc resets + } + : undefined, charges: combatant.hasTalent(TALENTS.DEATHS_ECHO_TALENT) ? 2 : 1, timelineSortIndex: 5, }, From 279d28cebaa6de75e08f38cb39f14e4c651098ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aveline=20Esti=C3=A9?= Date: Mon, 25 Mar 2024 09:29:33 +0100 Subject: [PATCH 13/17] only add sanguination suggestion if in m+ --- .../blood/modules/core/RuneForgeChecker.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/analysis/retail/deathknight/blood/modules/core/RuneForgeChecker.tsx b/src/analysis/retail/deathknight/blood/modules/core/RuneForgeChecker.tsx index 8eefc8742d4..d31bd17645b 100644 --- a/src/analysis/retail/deathknight/blood/modules/core/RuneForgeChecker.tsx +++ b/src/analysis/retail/deathknight/blood/modules/core/RuneForgeChecker.tsx @@ -1,6 +1,7 @@ import { Trans } from '@lingui/macro'; import { RuneForgeChecker } from 'analysis/retail/deathknight/shared'; import SPELLS from 'common/SPELLS'; +import { isMythicPlus } from 'common/isMythicPlus'; import SpellLink from 'interface/SpellLink'; import { Options } from 'parser/core/Analyzer'; import SUGGESTION_IMPORTANCE from 'parser/core/ISSUE_IMPORTANCE'; @@ -35,13 +36,13 @@ class BloodRuneForgeChecker extends RuneForgeChecker { }, { forge: SPELLS.RUNE_OF_SANGUINATION, - importance: SUGGESTION_IMPORTANCE.MINOR, - suggestion: ( + importance: SUGGESTION_IMPORTANCE.MAJOR, + suggestion: isMythicPlus(options.owner.fight) ? ( - Only use as Blood Death Knight on a - pure ST fight, use instead. + Only use as Blood Death Knight in + raids, use instead. - ), + ) : undefined, }, { forge: SPELLS.RUNE_OF_APOCALYPSE, From 342d7c3e918f68f5040aa07d8461f2deb27d3471 Mon Sep 17 00:00:00 2001 From: Richard Harrah Date: Tue, 26 Mar 2024 13:29:33 -0400 Subject: [PATCH 14/17] add Dragonflight S4 tier sets --- src/CHANGELOG.tsx | 1 + .../blood/modules/talents/Bonestorm.tsx | 4 +- .../unholy/modules/spells/VileInfusion.tsx | 2 +- .../demonhunter/vengeance/CHANGELOG.tsx | 4 +- .../tier/ScreamingTorchfiendsBrutality.tsx | 6 +- .../vengeance/modules/talents/Fracture.tsx | 4 +- .../modules/spells/GatheringStarstuff.tsx | 2 +- .../balance/modules/spells/TouchTheCosmos.tsx | 2 +- .../retail/druid/feral/modules/Abilities.ts | 2 +- .../feral/modules/dragonflight/Tier29.tsx | 8 +- .../modules/spells/ConvokeSpiritsFeral.tsx | 6 +- .../feral/modules/spells/FeralFrenzy.tsx | 6 +- .../modules/dragonflight/Tier29.tsx | 8 +- .../modules/dragonflight/Tier30.tsx | 8 +- .../modules/dragonflight/Tier31.tsx | 8 +- .../modules/abilities/EbonMight.tsx | 2 +- .../dragonflight/T31Augmentation4P.tsx | 2 +- .../BuffTargetHelper/BuffTargetHelper.tsx | 8 +- .../dragonflight/tier/T30DevaTier4P.tsx | 4 +- .../modules/dragonflight/tier/T31DevaTier.tsx | 2 +- .../modules/guide/DamageEfficiencySection.tsx | 2 +- .../modules/guide/EssenceGraphSection.tsx | 2 +- .../modules/core/AlwaysBeCasting.tsx | 2 +- .../modules/dragonflight/tier/T30TierSet.tsx | 4 +- .../modules/dragonflight/tier/T31TierSet.tsx | 8 +- .../modules/talents/EchoTypeBreakdown.tsx | 4 +- .../modules/talents/ResonatingSphere.tsx | 4 +- .../normalizers/CastLinkNormalizer.ts | 6 +- .../beastmastery/modules/core/SpellUsable.tsx | 2 +- .../modules/items/T29BMTier2P.tsx | 2 +- .../modules/items/T29BMTier4P.tsx | 2 +- .../modules/items/T30BMTier2P.tsx | 2 +- .../modules/items/T30BMTier4P.tsx | 2 +- .../modules/items/T29MMTier2P.tsx | 2 +- .../modules/items/T29MMTier4P.tsx | 2 +- .../retail/mage/fire/Checklist/Component.tsx | 6 +- src/analysis/retail/mage/fire/core/Buffs.tsx | 2 +- .../retail/mage/fire/items/CharringEmbers.tsx | 2 +- .../modules/core/StaggerFabricator.ts | 2 +- .../modules/items/Tier29/FourSet.tsx | 2 +- .../dragonflight/T31HealingBreakdown.tsx | 4 +- .../modules/dragonflight/tier/T29MWTier.tsx | 4 +- .../modules/dragonflight/tier/T30MWTier.tsx | 4 +- .../modules/dragonflight/tier/T31MWTier.tsx | 8 +- .../modules/dragonflight/tier/T31WWTier.tsx | 4 +- .../modules/dragonflight/tier/T30TierSet.tsx | 4 +- .../modules/core/ProtPaladinT304P.tsx | 2 +- .../discipline/modules/spells/Aberrus2p.tsx | 6 +- .../modules/spells/AegisOfWrath.tsx | 2 +- .../modules/spells/Amirdrassil4p.tsx | 6 +- .../modules/spells/PowerWordShield.tsx | 2 +- .../modules/spells/RadiantProvidence.tsx | 2 +- .../tier/tier29/Tier29HolyPriest2Set.tsx | 2 +- .../tier/tier29/Tier29HolyPriest4Set.tsx | 2 +- src/analysis/retail/priest/shadow/Guide.tsx | 2 +- .../modules/guide/CooldownGraphSubsection.tsx | 12 +- .../shadow/modules/spells/ShadowWordDeath.tsx | 2 +- .../modules/talents/InescapableTorment.tsx | 2 +- .../modules/tier/Tier29ShadowPriest4Set.tsx | 2 +- .../modules/tier/Tier31ShadowPriest4Set.tsx | 6 +- .../tier/Tier31ShadowPriest4SetNormalizer.tsx | 6 +- .../enhancement/modules/apl/AplCheck.tsx | 2 +- .../modules/dragonflight/Tier30.tsx | 6 +- .../modules/dragonflight/Tier31.tsx | 6 +- .../enhancement/modules/guide/Cooldowns.tsx | 2 +- .../shadowlands/tier/Tier28FourSet.tsx | 2 +- .../modules/shadowlands/tier/Tier28TwoSet.tsx | 2 +- .../modules/talents/ChainLightning.tsx | 2 +- .../modules/dragonflight/Tier30.tsx | 8 +- .../modules/dragonflight/Tier31.tsx | 8 +- .../modules/spells/HealingRain.tsx | 6 +- .../modules/talents/CloudburstTotem.tsx | 2 +- .../modules/talents/PrimordialWave.tsx | 8 +- .../restoration/modules/talents/Riptide.tsx | 10 +- .../normalizers/Tier30Normalizer.ts | 6 +- .../modules/dragonflight/tier/Aberrus2Set.tsx | 2 +- .../tier/T31AmirdrassilDemonology.tsx | 4 +- .../tier/VaultOfTheIncarnates4Set.tsx | 2 +- .../retail/warrior/fury/modules/Abilities.ts | 2 +- .../modules/items/tier30/ProtFourPiece.tsx | 2 +- .../modules/items/tier30/ProtTwoPiece.tsx | 2 +- src/common/ITEMS/dragonflight/tier.ts | 413 ++++++++++-------- src/game/TIERS.ts | 14 +- 83 files changed, 405 insertions(+), 339 deletions(-) diff --git a/src/CHANGELOG.tsx b/src/CHANGELOG.tsx index 3dd32157fd1..39c3adeec23 100644 --- a/src/CHANGELOG.tsx +++ b/src/CHANGELOG.tsx @@ -34,6 +34,7 @@ import SpellLink from 'interface/SpellLink'; // prettier-ignore export default [ + change(date(2024, 3, 26), 'Add tier set IDs for Dragonflight season 4.', ToppleTheNun), change(date(2024, 3, 14), 'Correct getBuffStacks method to return the stacks at the given timestamp', Earosselot), change(date(2024, 3, 14), 'Fix overflow on cooldown bars while using the phase selector.', ToppleTheNun), change(date(2024, 3, 14), 'Bump opacity on phase selector to 75% from 40%.', ToppleTheNun), diff --git a/src/analysis/retail/deathknight/blood/modules/talents/Bonestorm.tsx b/src/analysis/retail/deathknight/blood/modules/talents/Bonestorm.tsx index bd86622519b..6131dff160c 100644 --- a/src/analysis/retail/deathknight/blood/modules/talents/Bonestorm.tsx +++ b/src/analysis/retail/deathknight/blood/modules/talents/Bonestorm.tsx @@ -68,7 +68,7 @@ class Bonestorm extends Analyzer { } get goodBonestormCasts() { - if (this.selectedCombatant.has2PieceByTier(TIERS.T28)) { + if (this.selectedCombatant.has2PieceByTier(TIERS.SL3)) { return this.bsCasts.filter((cast) => cast.cost / 10 === SUGGESTED_RUNIC_POWER_SPENT).length; } else { return this.bsCasts.filter( @@ -94,7 +94,7 @@ class Bonestorm extends Analyzer { } suggestions(when: When) { - if (this.selectedCombatant.has2PieceByTier(TIERS.T28)) { + if (this.selectedCombatant.has2PieceByTier(TIERS.SL3)) { when(this.suggestionThresholds).addSuggestion((suggest, actual, recommended) => suggest( diff --git a/src/analysis/retail/deathknight/unholy/modules/spells/VileInfusion.tsx b/src/analysis/retail/deathknight/unholy/modules/spells/VileInfusion.tsx index 4f1f7ea2da0..c0927e74fc6 100644 --- a/src/analysis/retail/deathknight/unholy/modules/spells/VileInfusion.tsx +++ b/src/analysis/retail/deathknight/unholy/modules/spells/VileInfusion.tsx @@ -18,7 +18,7 @@ class VileInfusion extends Analyzer { constructor(options: Options) { super(options); - this.active = this.selectedCombatant.has2PieceByTier(TIERS.T29); + this.active = this.selectedCombatant.has2PieceByTier(TIERS.DF1); if (!this.active) { return; } diff --git a/src/analysis/retail/demonhunter/vengeance/CHANGELOG.tsx b/src/analysis/retail/demonhunter/vengeance/CHANGELOG.tsx index 816e0855047..d00211f550a 100644 --- a/src/analysis/retail/demonhunter/vengeance/CHANGELOG.tsx +++ b/src/analysis/retail/demonhunter/vengeance/CHANGELOG.tsx @@ -5,12 +5,12 @@ import SpellLink from 'interface/SpellLink'; import SPELLS from 'common/SPELLS/demonhunter'; import TALENTS from 'common/TALENTS/demonhunter'; import SHARED_CHANGELOG from 'analysis/retail/demonhunter/shared/CHANGELOG'; -import { DEMON_HUNTER_T31_ID } from 'common/ITEMS/dragonflight'; +import { DEMON_HUNTER_DF3_ID } from 'common/ITEMS/dragonflight'; // prettier-ignore export default [ change(date(2023, 12, 14), <>Detect if no targets were hit by ., ToppleTheNun), - change(date(2023, 12, 10), <>Add CDR calculations for Screaming Torchfiend's Brutality.., ToppleTheNun), + change(date(2023, 12, 10), <>Add CDR calculations for Screaming Torchfiend's Brutality.., ToppleTheNun), change(date(2023, 11, 19), <>Revise guidance in single target and fix bug with consumption., ToppleTheNun), change(date(2023, 11, 15), <>Fix cooldown., ToppleTheNun), change(date(2023, 10, 24), <>Make not count as a cast., ToppleTheNun), diff --git a/src/analysis/retail/demonhunter/vengeance/modules/dragonflight/tier/ScreamingTorchfiendsBrutality.tsx b/src/analysis/retail/demonhunter/vengeance/modules/dragonflight/tier/ScreamingTorchfiendsBrutality.tsx index 20bb18fb39d..5af59bfcd88 100644 --- a/src/analysis/retail/demonhunter/vengeance/modules/dragonflight/tier/ScreamingTorchfiendsBrutality.tsx +++ b/src/analysis/retail/demonhunter/vengeance/modules/dragonflight/tier/ScreamingTorchfiendsBrutality.tsx @@ -6,7 +6,7 @@ import React from 'react'; import STATISTIC_CATEGORY from 'parser/ui/STATISTIC_CATEGORY'; import Statistic from 'parser/ui/Statistic'; import BoringItemSetValueText from 'parser/ui/BoringItemSetValueText'; -import { DEMON_HUNTER_T31_ID } from 'common/ITEMS/dragonflight'; +import { DEMON_HUNTER_DF3_ID } from 'common/ITEMS/dragonflight'; import { formatDurationMillisMinSec, formatPercentage } from 'common/format'; import SpellLink from 'interface/SpellLink'; import getResourceSpent from 'parser/core/getResourceSpent'; @@ -34,7 +34,7 @@ export class ScreamingTorchfiendsBrutality extends Analyzer.withDependencies(dep constructor(options: Options) { super(options); this.spell = getSigilOfFlameSpell(this.selectedCombatant); - this.active = this.selectedCombatant.has4PieceByTier(TIERS.T31); + this.active = this.selectedCombatant.has4PieceByTier(TIERS.DF3); this.addEventListener( Events.damage.spell(SPELLS.SIGIL_OF_FLAME_DEBUFF).by(SELECTED_PLAYER), this.onSigilOfFlameTick, @@ -63,7 +63,7 @@ export class ScreamingTorchfiendsBrutality extends Analyzer.withDependencies(dep } >
diff --git a/src/analysis/retail/demonhunter/vengeance/modules/talents/Fracture.tsx b/src/analysis/retail/demonhunter/vengeance/modules/talents/Fracture.tsx index b8c4f3f47bf..70872d9969c 100644 --- a/src/analysis/retail/demonhunter/vengeance/modules/talents/Fracture.tsx +++ b/src/analysis/retail/demonhunter/vengeance/modules/talents/Fracture.tsx @@ -59,7 +59,7 @@ export default class Fracture extends Analyzer { return; } - const hasT292Pc = this.selectedCombatant.has2PieceByTier(TIERS.T29); + const hasT292Pc = this.selectedCombatant.has2PieceByTier(TIERS.DF1); this.maximumFury = BASE_FURY + @@ -132,7 +132,7 @@ export default class Fracture extends Analyzer { SPELLS.METAMORPHOSIS_TANK.id, event.timestamp, ); - const hasT292Piece = this.selectedCombatant.has2PieceByTier(TIERS.T29); + const hasT292Piece = this.selectedCombatant.has2PieceByTier(TIERS.DF1); const hasExtraDetails = hasMetamorphosis || hasT292Piece; const extraDetails = ( diff --git a/src/analysis/retail/druid/balance/modules/spells/GatheringStarstuff.tsx b/src/analysis/retail/druid/balance/modules/spells/GatheringStarstuff.tsx index 247744c7091..c08288f24c8 100644 --- a/src/analysis/retail/druid/balance/modules/spells/GatheringStarstuff.tsx +++ b/src/analysis/retail/druid/balance/modules/spells/GatheringStarstuff.tsx @@ -45,7 +45,7 @@ class GatheringStarstuff extends Analyzer { constructor(options: Options) { super(options); - this.active = this.selectedCombatant.has2PieceByTier(TIERS.T29); + this.active = this.selectedCombatant.has2PieceByTier(TIERS.DF1); this.stacksWhenCast = Array.from({ length: GATHERING_STARSTUFF.MAX_STACKS + 1 }, (x) => [0]); this.castWraths = []; diff --git a/src/analysis/retail/druid/balance/modules/spells/TouchTheCosmos.tsx b/src/analysis/retail/druid/balance/modules/spells/TouchTheCosmos.tsx index c4221dc9efc..fa27224c66d 100644 --- a/src/analysis/retail/druid/balance/modules/spells/TouchTheCosmos.tsx +++ b/src/analysis/retail/druid/balance/modules/spells/TouchTheCosmos.tsx @@ -18,7 +18,7 @@ class TouchTheCosmos extends Analyzer { constructor(options: Options) { super(options); - this.active = this.selectedCombatant.has4PieceByTier(TIERS.T29); + this.active = this.selectedCombatant.has4PieceByTier(TIERS.DF1); Object.values(AFFECTED_CAST).forEach((spell) => { this.totcBuffedAbilities[spell.id] = 0; diff --git a/src/analysis/retail/druid/feral/modules/Abilities.ts b/src/analysis/retail/druid/feral/modules/Abilities.ts index c6d07779fcf..bff5c3ab35a 100644 --- a/src/analysis/retail/druid/feral/modules/Abilities.ts +++ b/src/analysis/retail/druid/feral/modules/Abilities.ts @@ -193,7 +193,7 @@ class Abilities extends CoreAbilities { spell: TALENTS_DRUID.FERAL_FRENZY_TALENT.id, category: SPELL_CATEGORY.COOLDOWNS, enabled: combatant.hasTalent(TALENTS_DRUID.FERAL_FRENZY_TALENT), - cooldown: combatant.has4PieceByTier(TIERS.T31) ? 30 : 45, + cooldown: combatant.has4PieceByTier(TIERS.DF3) ? 30 : 45, castEfficiency: { suggestion: true, recommendedEfficiency: 0.9, diff --git a/src/analysis/retail/druid/feral/modules/dragonflight/Tier29.tsx b/src/analysis/retail/druid/feral/modules/dragonflight/Tier29.tsx index a6c67fe26e1..c76e3e27ca4 100644 --- a/src/analysis/retail/druid/feral/modules/dragonflight/Tier29.tsx +++ b/src/analysis/retail/druid/feral/modules/dragonflight/Tier29.tsx @@ -8,7 +8,7 @@ import STATISTIC_ORDER from 'parser/ui/STATISTIC_ORDER'; import STATISTIC_CATEGORY from 'parser/ui/STATISTIC_CATEGORY'; import ItemPercentDamageDone from 'parser/ui/ItemPercentDamageDone'; import ItemSetLink from 'interface/ItemSetLink'; -import { DRUID_T29_ID } from 'common/ITEMS/dragonflight'; +import { DRUID_DF1_ID } from 'common/ITEMS/dragonflight'; import { TALENTS_DRUID } from 'common/TALENTS'; import { CONVOKE_FB_CPS, FINISHERS, MAX_CPS } from 'analysis/retail/druid/feral/constants'; import getResourceSpent from 'parser/core/getResourceSpent'; @@ -70,8 +70,8 @@ export default class Tier29 extends Analyzer { constructor(options: Options) { super(options); - this.active = this.selectedCombatant.has2PieceByTier(TIERS.T29); - this.has4pc = this.selectedCombatant.has4PieceByTier(TIERS.T29); + this.active = this.selectedCombatant.has2PieceByTier(TIERS.DF1); + this.has4pc = this.selectedCombatant.has4PieceByTier(TIERS.DF1); this.addEventListener(Events.damage.by(SELECTED_PLAYER).spell(BOOSTED_2PC), this.on2pcDamage); if (this.has4pc) { @@ -161,7 +161,7 @@ export default class Tier29 extends Analyzer { >
2pc: diff --git a/src/analysis/retail/druid/feral/modules/spells/ConvokeSpiritsFeral.tsx b/src/analysis/retail/druid/feral/modules/spells/ConvokeSpiritsFeral.tsx index 65e545ba8b0..db64b3c761b 100644 --- a/src/analysis/retail/druid/feral/modules/spells/ConvokeSpiritsFeral.tsx +++ b/src/analysis/retail/druid/feral/modules/spells/ConvokeSpiritsFeral.tsx @@ -16,7 +16,7 @@ import ComboPointTracker from 'analysis/retail/druid/feral/modules/core/combopoi import { PassFailCheckmark, PerformanceMark } from 'interface/guide'; import { TIERS } from 'game/TIERS'; import ItemSetLink from 'interface/ItemSetLink'; -import { DRUID_T31_ID } from 'common/ITEMS/dragonflight'; +import { DRUID_DF3_ID } from 'common/ITEMS/dragonflight'; class ConvokeSpiritsFeral extends ConvokeSpirits { static dependencies = { @@ -77,7 +77,7 @@ class ConvokeSpiritsFeral extends ConvokeSpirits { /** Guide fragment showing a breakdown of each Convoke cast */ get guideCastBreakdown() { - const hasT31 = this.selectedCombatant.has2PieceByTier(TIERS.T31); + const hasT31 = this.selectedCombatant.has2PieceByTier(TIERS.DF3); const explanation = ( <>

@@ -91,7 +91,7 @@ class ConvokeSpiritsFeral extends ConvokeSpirits {

{hasT31 && (

- Because you have the Amirdrassil Tier Set, + Because you have the Amirdrassil Tier Set, you should also make sure to have active during Convoke.

diff --git a/src/analysis/retail/druid/feral/modules/spells/FeralFrenzy.tsx b/src/analysis/retail/druid/feral/modules/spells/FeralFrenzy.tsx index 161696f362f..b69914e1b58 100644 --- a/src/analysis/retail/druid/feral/modules/spells/FeralFrenzy.tsx +++ b/src/analysis/retail/druid/feral/modules/spells/FeralFrenzy.tsx @@ -12,7 +12,7 @@ import CooldownExpandable, { } from 'interface/guide/components/CooldownExpandable'; import { PassFailCheckmark, PerformanceMark } from 'interface/guide'; import { TIERS } from 'game/TIERS'; -import { DRUID_T31_ID } from 'common/ITEMS/dragonflight'; +import { DRUID_DF3_ID } from 'common/ITEMS/dragonflight'; import ItemSetLink from 'interface/ItemSetLink'; import EnergyTracker from 'analysis/retail/druid/feral/modules/core/energy/EnergyTracker'; @@ -45,7 +45,7 @@ export default class FeralFrenzy extends Analyzer { this.active = this.selectedCombatant.hasTalent(TALENTS_DRUID.FERAL_FRENZY_TALENT); this.hasSwarm = this.selectedCombatant.hasTalent(TALENTS_DRUID.ADAPTIVE_SWARM_TALENT); - this.hasT31 = this.selectedCombatant.has2PieceByTier(TIERS.T31); + this.hasT31 = this.selectedCombatant.has2PieceByTier(TIERS.DF3); this.addEventListener( Events.cast.by(SELECTED_PLAYER).spell(TALENTS_DRUID.FERAL_FRENZY_TALENT), @@ -96,7 +96,7 @@ export default class FeralFrenzy extends Analyzer {

{this.hasT31 && (

- Because you have the Amirdrassil Tier Set, + Because you have the Amirdrassil Tier Set, it's also important to pool energy before using Feral Frezy in order to maximize your abilities used during .

diff --git a/src/analysis/retail/druid/restoration/modules/dragonflight/Tier29.tsx b/src/analysis/retail/druid/restoration/modules/dragonflight/Tier29.tsx index 593196853d9..105468ab829 100644 --- a/src/analysis/retail/druid/restoration/modules/dragonflight/Tier29.tsx +++ b/src/analysis/retail/druid/restoration/modules/dragonflight/Tier29.tsx @@ -9,7 +9,7 @@ import StatTracker from 'parser/shared/modules/StatTracker'; import HIT_TYPES from 'game/HIT_TYPES'; import ItemPercentHealingDone from 'parser/ui/ItemPercentHealingDone'; import ItemSetLink from 'interface/ItemSetLink'; -import { DRUID_T29_ID } from 'common/ITEMS/dragonflight'; +import { DRUID_DF1_ID } from 'common/ITEMS/dragonflight'; import HotTrackerRestoDruid from 'analysis/retail/druid/restoration/modules/core/hottracking/HotTrackerRestoDruid'; import SpellUsable from 'parser/shared/modules/SpellUsable'; import SpellLink from 'interface/SpellLink'; @@ -62,8 +62,8 @@ class Tier29 extends Analyzer { constructor(options: Options) { super(options); - this.active = this.selectedCombatant.has2PieceByTier(TIERS.T29); - this.has4pc = this.selectedCombatant.has4PieceByTier(TIERS.T29); + this.active = this.selectedCombatant.has2PieceByTier(TIERS.DF1); + this.has4pc = this.selectedCombatant.has4PieceByTier(TIERS.DF1); this.addEventListener(Events.heal.by(SELECTED_PLAYER).spell(TWO_PIECE_SPELLS), this.on2pcHeal); @@ -160,7 +160,7 @@ class Tier29 extends Analyzer { >