Skip to content

Commit

Permalink
Merge branch 'dragonflight' of https://github.com/WoWAnalyzer/WoWAnal…
Browse files Browse the repository at this point in the history
…yzer into Living-Flame-Prepull
  • Loading branch information
Krealle committed Apr 4, 2024
2 parents 4365d94 + ea5e779 commit baa3b7f
Show file tree
Hide file tree
Showing 24 changed files with 1,140 additions and 6 deletions.
1 change: 1 addition & 0 deletions src/CHANGELOG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import SpellLink from 'interface/SpellLink';

// prettier-ignore
export default [
change(date(2024, 3, 30), 'Update Nymue spellids and make Channeling normalizer normalize fabricated Prepull events.', Vollmer),
change(date(2024, 3, 27), 'Rewrite events tab in TypeScript.', ToppleTheNun),
change(date(2024, 3, 26), 'Add patch 10.2.6.', ToppleTheNun),
change(date(2024, 3, 26), 'Add Dragonflight season 4 M+ dungeons and zone.', ToppleTheNun),
Expand Down
1 change: 1 addition & 0 deletions src/analysis/retail/evoker/augmentation/CHANGELOG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import SPELLS from 'common/SPELLS/evoker';
import RESOURCE_TYPES from 'game/RESOURCE_TYPES';

export default [
change(date(2024, 4, 1), <>Added analysis for <SpellLink spell={TALENTS.RENEWING_BLAZE_TALENT} />, <SpellLink spell={TALENTS.OBSIDIAN_SCALES_TALENT} /> and <SpellLink spell={TALENTS.TWIN_GUARDIAN_TALENT} />.</>, Vollmer),
change(date(2024, 3, 30), <>Fix prepull <SpellLink spell={SPELLS.LIVING_FLAME_CAST} /> casts to properly display channel time.</>, Vollmer),
change(date(2024, 3, 7), <>Fix an issue with <SpellLink spell={TALENTS.POTENT_MANA_TALENT} /> module when no <SpellLink spell={TALENTS.SOURCE_OF_MAGIC_TALENT} /> was active during the fight.</>, Vollmer),
change(date(2024, 2, 10), <>Fix crash in <SpellLink spell={TALENTS.SOURCE_OF_MAGIC_TALENT} /> module.</>, Trevor),
Expand Down
11 changes: 11 additions & 0 deletions src/analysis/retail/evoker/augmentation/CombatLogParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ import {
EssenceGraph,
SourceOfMagic,
PotentMana,
ObsidianScales,
DefensiveNormalizer,
DefensiveCastLinkNormalizer,
TwinGuardian,
RenewingBlaze,
} from 'analysis/retail/evoker/shared';

class CombatLogParser extends MainCombatLogParser {
Expand All @@ -60,6 +65,12 @@ class CombatLogParser extends MainCombatLogParser {
sourceOfMagic: SourceOfMagic,
potentMana: PotentMana,

obsidianScales: ObsidianScales,
defensiveCastLinkNormalizer: DefensiveCastLinkNormalizer,
defensiveNormalizer: DefensiveNormalizer,
twinGuardian: TwinGuardian,
renewingBlaze: RenewingBlaze,

// Normalizers
castLinkNormalizer: CastLinkNormalizer,
prescienceNormalizer: PrescienceNormalizer,
Expand Down
2 changes: 2 additions & 0 deletions src/analysis/retail/evoker/augmentation/Guide.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { CooldownSection } from './modules/guide/Cooldown';
import { IntroSection } from './modules/guide/IntroSection';
import { CoreRotationSection } from './modules/guide/CoreRotation';
import { Helpers } from './modules/guide/Helpers';
import MajorDefensives from '../shared/modules/MajorDefensives/DefensivesGuide';

export default function Guide({ modules, events, info }: GuideProps<typeof CombatLogParser>) {
return (
Expand All @@ -13,6 +14,7 @@ export default function Guide({ modules, events, info }: GuideProps<typeof Comba
<Helpers modules={modules} events={events} info={info} />
<CoreRotationSection modules={modules} events={events} info={info} />
<CooldownSection modules={modules} info={info} events={events} />
<MajorDefensives />
<PreparationSection />
</>
);
Expand Down
1 change: 1 addition & 0 deletions src/analysis/retail/evoker/devastation/CHANGELOG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import SPELLS from 'common/SPELLS/evoker';
import RESOURCE_TYPES from 'game/RESOURCE_TYPES';

export default [
change(date(2024, 4, 1), <>Added analysis for <SpellLink spell={TALENTS.RENEWING_BLAZE_TALENT} />, <SpellLink spell={TALENTS.OBSIDIAN_SCALES_TALENT} /> and <SpellLink spell={TALENTS.TWIN_GUARDIAN_TALENT} />.</>, Vollmer),
change(date(2024, 3, 30), <>Fix prepull <SpellLink spell={SPELLS.LIVING_FLAME_CAST} /> casts to properly display channel time.</>, Vollmer),
change(date(2024, 3, 17), 'Update APL Check and timeline cleanup.', Vollmer),
change(date(2024, 3, 7), <>Fix an issue with <SpellLink spell={TALENTS.POTENT_MANA_TALENT} /> module when no <SpellLink spell={TALENTS.SOURCE_OF_MAGIC_TALENT} /> was active during the fight.</>, Vollmer),
Expand Down
11 changes: 11 additions & 0 deletions src/analysis/retail/evoker/devastation/CombatLogParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ import {
EssenceGraph,
SourceOfMagic,
PotentMana,
ObsidianScales,
DefensiveNormalizer,
DefensiveCastLinkNormalizer,
TwinGuardian,
RenewingBlaze,
} from 'analysis/retail/evoker/shared';

class CombatLogParser extends MainCombatLogParser {
Expand All @@ -56,6 +61,12 @@ class CombatLogParser extends MainCombatLogParser {
sourceOfMagic: SourceOfMagic,
potentMana: PotentMana,

obsidianScales: ObsidianScales,
defensiveCastLinkNormalizer: DefensiveCastLinkNormalizer,
defensiveNormalizer: DefensiveNormalizer,
twinGuardian: TwinGuardian,
renewingBlaze: RenewingBlaze,

// Core
abilities: Abilities,
buffs: Buffs,
Expand Down
2 changes: 2 additions & 0 deletions src/analysis/retail/evoker/devastation/Guide.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { DamageEfficiency } from './modules/guide/DamageEfficiencySection';
import { EssenceGraphSection } from './modules/guide/EssenceGraphSection';
import { DragonRageSection } from './modules/guide/DragonRageSection';
import { IntroSection } from './modules/guide/IntroSection';
import MajorDefensives from '../shared/modules/MajorDefensives/DefensivesGuide';

export default function Guide({ modules, events, info }: GuideProps<typeof CombatLogParser>) {
return (
Expand All @@ -17,6 +18,7 @@ export default function Guide({ modules, events, info }: GuideProps<typeof Comba
<DragonRageSection modules={modules} info={info} events={events} />
<DamageEfficiency modules={modules} info={info} events={events} />
<CoreRotation modules={modules} info={info} events={events} />
<MajorDefensives />
<PreparationSection />
</>
);
Expand Down
5 changes: 5 additions & 0 deletions src/analysis/retail/evoker/shared/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,9 @@ export { default as EssenceTracker } from './modules/core/essence/EssenceTracker
export { default as EssenceGraph } from './modules/core/essence/EssenceGraph';
export { default as SourceOfMagic } from './modules/talents/SourceOfMagic';
export { default as PotentMana } from './modules/talents/PotentMana';
export { default as ObsidianScales } from './modules/MajorDefensives/ObsidianScales';
export { default as DefensiveNormalizer } from './modules/normalizers/DefensiveNormalizer';
export { default as DefensiveCastLinkNormalizer } from './modules/normalizers/DefensiveCastLinkNormalizer';
export { default as TwinGuardian } from './modules/MajorDefensives/TwinGuardian';
export { default as RenewingBlaze } from './modules/MajorDefensives/RenewingBlaze';
export * from './constants';
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import { GoodColor, Section, SubSection, useAnalyzers } from 'interface/guide';
import ObsidianScales from './ObsidianScales';
import HideExplanationsToggle from 'interface/guide/components/HideExplanationsToggle';
import Explanation from 'interface/guide/components/Explanation';
import Timeline from 'interface/guide/components/MajorDefensives/Timeline';
import AllCooldownUsageList from 'interface/guide/components/MajorDefensives/AllCooldownUsagesList';
import { SpellLink, TooltipElement } from 'interface';
import { Highlight } from 'interface/Highlight';
import TALENTS from 'common/TALENTS/evoker';
import TwinGuardian from './TwinGuardian';
import RenewingBlaze from './RenewingBlaze';

const MajorDefensives = () => {
const defensiveAnalyzers = [ObsidianScales, TwinGuardian, RenewingBlaze];

return (
<Section title="Defensives">
<HideExplanationsToggle id="hide-explanations-major-defensives" />
<Explanation>
<p>
Effectively using your major defensive cooldowns is an important aspect of your
performance, as it will not only increase your own survivability, but also your entire
raid by allowing healers to focus on keeping others alive.
<br />
As an <span className="Evoker">Evoker</span> you have access to many short CD defensives
such as <SpellLink spell={TALENTS.OBSIDIAN_SCALES_TALENT} />,{' '}
<SpellLink spell={TALENTS.RENEWING_BLAZE_TALENT} />,{' '}
<SpellLink spell={TALENTS.ZEPHYR_TALENT} /> and{' '}
<SpellLink spell={TALENTS.TWIN_GUARDIAN_TALENT} />.
</p>
<p>There are two things you should look for in your cooldown usage:</p>
<ol>
<li>
You should cover as many{' '}
<TooltipElement
content={
<>
A <strong>damage spike</strong> is when you take much more damage than normal in a
small amount of time. These are visible on the Timeline below as tall spikes.
</>
}
>
damage spikes
</TooltipElement>{' '}
as possible, and use any left over to cover periods of heavy, consistent damage.
<br />
<small>
In the damage chart below, a spike highlighted in{' '}
<Highlight color={GoodColor} textColor="black">
green
</Highlight>{' '}
was covered by a defensive.
</small>
</li>
<li>
You should <em>use</em> your cooldowns. This may seem silly&mdash;but not using
defensives is a common problem! For <span className="Evoker">Evokers</span>, it is also
likely to be fatal, since most of your mitigation lies in your active cooldowns.
<br />
<small>
Below the damage chart, your cooldowns are shown. Large gaps may indicate that you
could get more uses&mdash;but remember that covering spikes is more important than
maximizing total casts!
</small>
</li>
</ol>
</Explanation>
<SubSection title="Damage Taken">
<Timeline analyzers={useAnalyzers(defensiveAnalyzers)} />
</SubSection>
<AllCooldownUsageList analyzers={useAnalyzers(defensiveAnalyzers)} />
</Section>
);
};

export default MajorDefensives;
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import {
MajorDefensiveBuff,
absoluteMitigation,
buff,
} from 'interface/guide/components/MajorDefensives/MajorDefensiveAnalyzer';
import { Options, SELECTED_PLAYER } from 'parser/core/Analyzer';
import TALENTS from 'common/TALENTS/evoker';
import Events, { DamageEvent } from 'parser/core/Events';
import { SpellLink } from 'interface';
import MajorDefensiveStatistic from 'interface/MajorDefensiveStatistic';
import STATISTIC_CATEGORY from 'parser/ui/STATISTIC_CATEGORY';

// TWW ScaleCommander hero talent has a +5% buff so just preparing for that.
const BASE_MITIGATION = 0.3;
const HARDENED_SCALES_MITIGATION = 0.05;

class ObsidianScales extends MajorDefensiveBuff {
hasHardenedScales = false;
mitPct: number = BASE_MITIGATION + (this.hasHardenedScales ? HARDENED_SCALES_MITIGATION : 0);

constructor(options: Options) {
super(TALENTS.OBSIDIAN_SCALES_TALENT, buff(TALENTS.OBSIDIAN_SCALES_TALENT), options);
this.active = this.selectedCombatant.hasTalent(TALENTS.OBSIDIAN_SCALES_TALENT);

this.addEventListener(Events.damage.to(SELECTED_PLAYER), this.recordDamage);
}

private recordDamage(event: DamageEvent) {
if (!this.defensiveActive) {
return;
}
this.recordMitigation({
event,
mitigatedAmount: absoluteMitigation(event, this.mitPct),
});
}

description() {
return (
<p>
<SpellLink spell={TALENTS.OBSIDIAN_SCALES_TALENT} /> reduces the damage you take by 30%.
</p>
);
}

statistic() {
return <MajorDefensiveStatistic analyzer={this} category={STATISTIC_CATEGORY.GENERAL} />;
}
}

export default ObsidianScales;
Loading

0 comments on commit baa3b7f

Please sign in to comment.