Skip to content

Commit

Permalink
Merge branch 'dragonflight' into Timeline
Browse files Browse the repository at this point in the history
  • Loading branch information
emallson authored Mar 27, 2024
2 parents 93f84e8 + 04480f8 commit ea91cc1
Show file tree
Hide file tree
Showing 141 changed files with 794 additions and 799 deletions.
52 changes: 26 additions & 26 deletions e2e/report-selection.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,48 +3,48 @@ import { expect, test } from './fixtures';
test('report selection', async ({ page, homePage, fightSelectionPage }) => {
await homePage.goto();

await homePage.fillInReportInputWithCode('dFzCLcjyqMbX43KP');
await homePage.fillInReportInputWithCode('bjqrZRnNdvKPXt13');

await fightSelectionPage.expectFightSelectionHeaderToBeVisible();
await fightSelectionPage.expectUrlToHaveReportCode('dFzCLcjyqMbX43KP');
await expect(page).toHaveTitle('raid day');
await fightSelectionPage.expectUrlToHaveReportCode('bjqrZRnNdvKPXt13');
await expect(page).toHaveTitle('owl time');
});

test('fight selection', async ({ page, fightSelectionPage, playerSelectionPage }) => {
await fightSelectionPage.goto('dFzCLcjyqMbX43KP');
await fightSelectionPage.goto('bjqrZRnNdvKPXt13');

await page.getByRole('link', { name: 'Kill 3:11' }).click();
await page.getByRole('link', { name: 'Kill 8:47' }).click();

await playerSelectionPage.expectPlayerSelectionHeaderToBeVisible();
await playerSelectionPage.expectUrlToHaveReportCodeAndFight(
'dFzCLcjyqMbX43KP',
'20-Mythic+Volcoross+-+Kill+(3:11)',
'bjqrZRnNdvKPXt13',
'34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)',
);
await expect(page).toHaveTitle('Mythic Volcoross - Kill (3:11) in raid day');
await expect(page).toHaveTitle('Mythic Fyrakk the Blazing - Kill (8:47) in owl time');
});

test('player selection', async ({ page, playerSelectionPage, reportPage }) => {
await playerSelectionPage.goto('dFzCLcjyqMbX43KP', '20-Mythic+Volcoross+-+Kill+(3:11)');
await playerSelectionPage.goto('bjqrZRnNdvKPXt13', '34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)');

await page
.getByRole('link', { name: 'Toppledh Vengeance Demon Hunter Vengeance Demon Hunter 485' })
.getByRole('link', { name: 'Toppledh Vengeance Demon Hunter Vengeance Demon Hunter 488' })
.click();

await reportPage.expectBossDifficultyAndNameHeaderToBeVisible();
await reportPage.expectBossDifficultyAndNameHeaderToHaveText('MythicVolcoross');
await reportPage.expectBossDifficultyAndNameHeaderToHaveText('MythicFyrakk, the Blazing');
await reportPage.expectUrlToHave(
'dFzCLcjyqMbX43KP',
'20-Mythic+Volcoross+-+Kill+(3:11)',
'bjqrZRnNdvKPXt13',
'34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)',
'Toppledh',
);
await expect(page).toHaveTitle('Mythic Volcoross - Kill (3:11) by Toppledh in raid day');
await expect(page).toHaveTitle('Mythic Fyrakk the Blazing - Kill (8:47) by Toppledh in owl time');
});

test.describe('tab selection', () => {
test.beforeEach(async ({ reportPage }) => {
await reportPage.goto({
reportCode: 'dFzCLcjyqMbX43KP',
fightCode: '20-Mythic+Volcoross+-+Kill+(3:11)',
reportCode: 'bjqrZRnNdvKPXt13',
fightCode: '34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)',
playerName: 'Toppledh',
});
});
Expand All @@ -53,39 +53,39 @@ test.describe('tab selection', () => {
await reportPage.clickOnStatisticsTab();

await expect(page).toHaveURL(
'/report/dFzCLcjyqMbX43KP/20-Mythic+Volcoross+-+Kill+(3:11)/Toppledh/standard/statistics',
'/report/bjqrZRnNdvKPXt13/34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)/Toppledh/standard/statistics',
);
});

test('timeline', async ({ page, reportPage }) => {
await reportPage.clickOnTimelineTab();

await expect(page).toHaveURL(
'/report/dFzCLcjyqMbX43KP/20-Mythic+Volcoross+-+Kill+(3:11)/Toppledh/standard/timeline',
'/report/bjqrZRnNdvKPXt13/34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)/Toppledh/standard/timeline',
);
});

test('cooldowns', async ({ page, reportPage }) => {
await reportPage.clickOnCooldownsTab();

await expect(page).toHaveURL(
'/report/dFzCLcjyqMbX43KP/20-Mythic+Volcoross+-+Kill+(3:11)/Toppledh/standard/cooldowns',
'/report/bjqrZRnNdvKPXt13/34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)/Toppledh/standard/cooldowns',
);
});

test('character', async ({ page, reportPage }) => {
await reportPage.clickOnCharacterTab();

await expect(page).toHaveURL(
'/report/dFzCLcjyqMbX43KP/20-Mythic+Volcoross+-+Kill+(3:11)/Toppledh/standard/character',
'/report/bjqrZRnNdvKPXt13/34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)/Toppledh/standard/character',
);
});

test('about', async ({ page, reportPage }) => {
await reportPage.clickOnAboutTab('Vengeance Demon Hunter');

await expect(page).toHaveURL(
'/report/dFzCLcjyqMbX43KP/20-Mythic+Volcoross+-+Kill+(3:11)/Toppledh/standard/about',
'/report/bjqrZRnNdvKPXt13/34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)/Toppledh/standard/about',
);
});
});
Expand All @@ -96,16 +96,16 @@ test('perform analysis', async ({ page }) => {
await page.getByPlaceholder('https://www.warcraftlogs.com/reports/<report code>').click();
await page
.getByPlaceholder('https://www.warcraftlogs.com/reports/<report code>')
.fill('https://www.warcraftlogs.com/reports/dFzCLcjyqMbX43KP');
.fill('https://www.warcraftlogs.com/reports/bjqrZRnNdvKPXt13');
await page.getByRole('heading', { name: 'Fight selection' }).waitFor();
await page.getByRole('link', { name: 'Kill 3:11' }).click();
await page.getByRole('link', { name: 'Kill 8:47' }).click();
await page.getByRole('heading', { name: 'Player selection' }).waitFor();
await page
.getByRole('link', { name: 'Toppledh Vengeance Demon Hunter Vengeance Demon Hunter 485' })
.getByRole('link', { name: 'Toppledh Vengeance Demon Hunter Vengeance Demon Hunter 488' })
.click();
await page.getByText('MythicVolcoross').waitFor();
await page.getByText('MythicFyrakk, the Blazing').waitFor();

await expect(page).toHaveURL(
'/report/dFzCLcjyqMbX43KP/20-Mythic+Volcoross+-+Kill+(3:11)/Toppledh/standard',
'/report/bjqrZRnNdvKPXt13/34-Mythic+Fyrakk+the+Blazing+-+Kill+(8:47)/Toppledh/standard',
);
});
4 changes: 2 additions & 2 deletions scripts/talents/generate-talents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ import {
TalentNode,
} from './talent-tree-types';

const LIVE_WOW_BUILD_NUMBER = '10.2.5.52902';
const LIVE_WOW_BUILD_NUMBER = '10.2.6.53913';
const LIVE_TALENT_DATA_URL = 'https://www.raidbots.com/static/data/live/talents.json';
const LIVE_SPELLPOWER_DATA_URL = `https://wago.tools/db2/SpellPower/csv?build=${LIVE_WOW_BUILD_NUMBER}`;
const PTR_WOW_BUILD_NUMBER = '10.2.5.52902';
const PTR_WOW_BUILD_NUMBER = '10.2.6.53877';
const PTR_TALENT_DATA_URL = 'https://www.raidbots.com/static/data/xptr/talents.json';
const PTR_SPELLPOWER_DATA_URL = `https://wago.tools/db2/SpellPower/csv?build=${PTR_WOW_BUILD_NUMBER}`;

Expand Down
4 changes: 4 additions & 0 deletions src/CHANGELOG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ import SpellLink from 'interface/SpellLink';

// prettier-ignore
export default [
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),
change(date(2024, 3, 26), 'Remove support for Shadowlands tier sets.', ToppleTheNun),
change(date(2024, 3, 26), 'Add tier set IDs for Dragonflight season 4.', ToppleTheNun),
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),
Expand Down
2 changes: 2 additions & 0 deletions src/analysis/retail/deathknight/blood/CHANGELOG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import { SpellLink } from 'interface';


export default [
change(date(2024, 3, 26), 'Remove support for Shadowlands tier set.', ToppleTheNun),
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<SpellLink spell={talents.DANCING_RUNE_WEAPON_TALENT} /></>,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), <><SpellLink spell={talents.RUNE_TAP_TALENT} /> Updated it to show cast efficiency only if the talent was taken.</>,Yajinni),
Expand Down
10 changes: 6 additions & 4 deletions src/analysis/retail/deathknight/blood/CONFIG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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.6',
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 `<Warning>` component.
Expand Down Expand Up @@ -42,14 +42,16 @@ const config: Config = {
<a href="https://discord.gg/AxphPxU">Discord</a> or DM us on Discord.
<br />
<br />
Make sure to check out the <a href="https://goo.gl/qjTtNY">Death Knight Class Discord</a> if
you need more specific advice or a more detailed guide than the ones available on{' '}
Make sure to check out the <a href="https://discord.gg/acherus">
Death Knight Class Discord
</a>{' '}
if you need more specific advice or a more detailed guide than the ones available on{' '}
<a href="https://www.icy-veins.com/wow/blood-death-knight-pve-tank-guide">Icy-Veins</a> and{' '}
<a href="https://www.wowhead.com/blood-death-knight-guide">wowhead</a>.
</>
),
// 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.
Expand Down
22 changes: 6 additions & 16 deletions src/analysis/retail/deathknight/blood/modules/Abilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -258,29 +258,19 @@ 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
},
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,
},
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,
},
Expand Down
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -36,12 +37,12 @@ class BloodRuneForgeChecker extends RuneForgeChecker {
{
forge: SPELLS.RUNE_OF_SANGUINATION,
importance: SUGGESTION_IMPORTANCE.MAJOR,
suggestion: (
suggestion: isMythicPlus(options.owner.fight) ? (
<Trans id="deathknight.blood.runeforgeSuggestion.sanguination">
Don't use <SpellLink spell={SPELLS.RUNE_OF_SANGUINATION} /> as Blood Death Knight, use{' '}
<SpellLink spell={SPELLS.RUNE_OF_THE_FALLEN_CRUSADER} /> instead.
Only use <SpellLink spell={SPELLS.RUNE_OF_SANGUINATION} /> as Blood Death Knight in
raids, use <SpellLink spell={SPELLS.RUNE_OF_THE_FALLEN_CRUSADER} /> instead.
</Trans>
),
) : undefined,
},
{
forge: SPELLS.RUNE_OF_APOCALYPSE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}

Expand Down
52 changes: 50 additions & 2 deletions src/analysis/retail/deathknight/blood/modules/guide/index.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,59 @@
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 SPELLS from 'common/SPELLS';
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<typeof CombatLogParser>): 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: SPELLS.EMPOWER_RUNE_WEAPON,
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 (
<>
<DeathStrikeSection />
<Section title="Death Strike">
<DeathStrikeSection />
{props.modules.deathStrikeTiming.guideSubsection}
</Section>
<Section title="Runic Power Economy">
{props.modules.runicPowerDetails.guideSubsection}
</Section>
<Section title="Cooldowns">
<CooldownGraphSubsection cooldowns={cooldowns} />
</Section>
<PreparationSection />
</>
);
}
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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 = {
Expand Down Expand Up @@ -96,16 +97,12 @@ class RunicPowerDetails extends Analyzer {
);
}

tab() {
return {
title: 'Runic Power usage',
url: 'runic-power-usage',
render: () => (
<Panel>
<ResourceBreakdown tracker={this.runicPowerTracker} showSpenders />
</Panel>
),
};
get guideSubsection() {
return (
<SubSection title="Runic Power Usage">
<ResourceBreakdown tracker={this.runicPowerTracker} showSpenders />
</SubSection>
);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -368,7 +368,7 @@ export function DeathStrikeSection(): JSX.Element | null {
const healingTarget = totalDamage / 2;

return (
<Section title="Death Strike Usage">
<SubSection title="Death Strike Usage">
<Explanation>
<p>
As a Blood Death Knight, <SpellLink spell={talents.DEATH_STRIKE_TALENT} /> is both your
Expand Down Expand Up @@ -543,6 +543,6 @@ export function DeathStrikeSection(): JSX.Element | null {
renderer={DeathStrikeProblemRenderer}
/>
</ContentRow>
</Section>
</SubSection>
);
}
Loading

0 comments on commit ea91cc1

Please sign in to comment.