Skip to content

Commit

Permalink
Merge pull request WoWAnalyzer#6476 from kfinch/feature/druid-guardia…
Browse files Browse the repository at this point in the history
…n-10.2

Druid Guardian - 10.2 support
  • Loading branch information
kfinch authored Nov 11, 2023
2 parents 719c2a3 + 016dc46 commit d3e1ba7
Show file tree
Hide file tree
Showing 11 changed files with 172 additions and 151 deletions.
2 changes: 1 addition & 1 deletion src/analysis/retail/druid/feral/CONFIG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ const config: Config = {
</>
),
// A recent example report to see interesting parts of the spec. Will be shown on the homepage.
exampleReport: '/report/nKgjXCLPNABhk6GV/32-Heroic+Eranog+-+Kill+(2:44)/Azlann/standard',
exampleReport: '/report/NCgvk7mBrHa9QTAZ/6/19',
guideDefault: true,

// Don't change anything below this line;
Expand Down
2 changes: 2 additions & 0 deletions src/analysis/retail/druid/guardian/CHANGELOG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ import { change, date } from 'common/changelog';
import { Sref, ToppleTheNun } from 'CONTRIBUTORS';
import { TALENTS_DRUID } from 'common/TALENTS';
import { SpellLink } from 'interface';
import SPELLS from 'common/SPELLS';

export default [
change(date(2023, 11, 9), <>Added simple spell usage stats for <SpellLink spell={SPELLS.MANGLE_BEAR} />, <SpellLink spell={SPELLS.THRASH_BEAR} />, and <SpellLink spell={SPELLS.MOONFIRE_CAST} />. Marked as updated for 10.2.</>, Sref),
change(date(2023, 6, 20), 'Update SpellLink usage.', ToppleTheNun),
change(date(2023, 4, 24), <>Fixed a bug where <SpellLink spell={TALENTS_DRUID.PULVERIZE_TALENT} /> uses weren't being correctly detected.</>, Sref),
change(date(2023, 4, 22), <>Reactivated Guardian analyzer! Only basic guide and modules so far, more to come.</>, Sref),
Expand Down
4 changes: 2 additions & 2 deletions src/analysis/retail/druid/guardian/CONFIG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const config: Config = {
contributors: [Sref],
expansion: Expansion.Dragonflight,
// The WoW client patch this spec was last updated.
patchCompatibility: '10.1.0',
patchCompatibility: '10.2.0',
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 @@ -39,7 +39,7 @@ const config: Config = {
</>
),
// A recent example report to see interesting parts of the spec. Will be shown on the homepage.
exampleReport: 'report/DhJG8fqB2rZgk9Kj/6-Heroic+Terros+-+Kill+(5:04)/Azlann/standard/overview',
exampleReport: 'report/VWt9ZTmxfhQyLw14/9/11',
guideDefault: true,

// Don't change anything below this line;
Expand Down
8 changes: 6 additions & 2 deletions src/analysis/retail/druid/guardian/CombatLogParser.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import Barkskin from 'analysis/retail/druid/guardian/modules/core/defensives/Bar
import SurvivalInstincts from 'analysis/retail/druid/guardian/modules/core/defensives/SurvivalInstincts';
import RageOfTheSleeper from 'analysis/retail/druid/guardian/modules/core/defensives/RageOfTheSleeper';
import Pulverize from 'analysis/retail/druid/guardian/modules/core/defensives/Pulverize';
import Thrash from 'analysis/retail/druid/guardian/modules/spells/Thrash';
import Mangle from 'analysis/retail/druid/guardian/modules/spells/Mangle';
import Moonfire from 'analysis/retail/druid/guardian/modules/spells/Moonfire';

class CombatLogParser extends CoreCombatLogParser {
static specModules = {
Expand Down Expand Up @@ -42,8 +45,9 @@ class CombatLogParser extends CoreCombatLogParser {
// Spells
convokeSpirits: ConvokeSpiritsGuardian,
ironfur: Ironfur,
// thrash: Thrash,
// moonfire: Moonfire,
thrash: Thrash,
mangle: Mangle,
moonfire: Moonfire,
// pulverize: Pulverize,
// frenziedRegeneration: FrenziedRegeneration,
// earthwarden: Earthwarden,
Expand Down
7 changes: 5 additions & 2 deletions src/analysis/retail/druid/guardian/Guide.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ function RotationSection({ modules, events, info }: GuideProps<typeof CombatLogP
</p>
<p>
Guardian is absolutely a GCD-capped spec and you should be constantly using abilities.
Automated analysis of this rotation is coming soon, but for now we'll look at your GCD
utilization:
Active time shows the percentage of time you were spamming abilities - get as close to 100%
as you can.
</p>
<p>
<strong>
Expand All @@ -95,6 +95,9 @@ function RotationSection({ modules, events, info }: GuideProps<typeof CombatLogP
</PerformanceStrong>{' '}
</strong>
</p>
{modules.mangle.guideSubsection}
{modules.thrash.guideSubsection}
{modules.moonfire.guideSubsection}
</Section>
);
}
Expand Down
24 changes: 24 additions & 0 deletions src/analysis/retail/druid/guardian/modules/spells/Mangle.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import SPELLS from 'common/SPELLS';
import Analyzer from 'parser/core/Analyzer';
import SpellLink from 'interface/SpellLink';
import CastEfficiencyPanel from 'interface/guide/components/CastEfficiencyPanel';
import { explanationAndDataSubsection } from 'interface/guide/components/ExplanationRow';

export default class Mangle extends Analyzer {
get guideSubsection() {
const explanation = (
<p>
<strong>
<SpellLink spell={SPELLS.MANGLE_BEAR} />
</strong>{' '}
does direct damage and generates rage. Use it on cooldown. The very short cooldown combined
with jammed GCDs means 100% usage will be practically impossible, but get as close as you
can.
</p>
);

const data = <CastEfficiencyPanel spell={SPELLS.MANGLE_BEAR} useThresholds />;

return explanationAndDataSubsection(explanation, data);
}
}
74 changes: 0 additions & 74 deletions src/analysis/retail/druid/guardian/modules/spells/Moonfire.jsx

This file was deleted.

78 changes: 78 additions & 0 deletions src/analysis/retail/druid/guardian/modules/spells/Moonfire.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { formatPercentage } from 'common/format';
import SPELLS from 'common/SPELLS';
import { SpellIcon } from 'interface';
import Analyzer from 'parser/core/Analyzer';
import Enemies from 'parser/shared/modules/Enemies';
import BoringValueText from 'parser/ui/BoringValueText';
import Statistic from 'parser/ui/Statistic';
import STATISTIC_ORDER from 'parser/ui/STATISTIC_ORDER';
import SpellLink from 'interface/SpellLink';
import { explanationAndDataSubsection } from 'interface/guide/components/ExplanationRow';
import { RoundedPanel } from 'interface/guide/components/GuideDivs';
import uptimeBarSubStatistic from 'parser/ui/UptimeBarSubStatistic';

const MF_COLOR = '#22aaff';

const deps = {
enemies: Enemies,
};

export default class Moonfire extends Analyzer.withDependencies(deps) {
get guideSubsection() {
const explanation = (
<p>
<strong>
<SpellLink spell={SPELLS.MOONFIRE_CAST} />
</strong>{' '}
is a DoT that can be applied to any number of targets. It's worth maintaining full uptime on
low target counts.
</p>
);

const history = this.deps.enemies.getDebuffHistory(SPELLS.MOONFIRE_DEBUFF.id);
const uptimeBar = uptimeBarSubStatistic(this.owner.fight, {
spells: [SPELLS.MOONFIRE_DEBUFF],
uptimes: history,
color: MF_COLOR,
});
const data = (
<div>
<RoundedPanel>
<strong>Moonfire uptimes</strong>
{uptimeBar}
</RoundedPanel>
</div>
);

return explanationAndDataSubsection(explanation, data);
}

get uptime() {
return this.deps.enemies.getBuffUptime(SPELLS.MOONFIRE_DEBUFF.id) / this.owner.fightDuration;
}

statistic() {
return (
<Statistic
position={STATISTIC_ORDER.CORE(12)}
size="flexible"
tooltip={
<>
Your <strong>Moonfire</strong> uptime is{' '}
<strong>{`${formatPercentage(this.uptime)}%`}</strong>
</>
}
>
<BoringValueText
label={
<>
<SpellIcon spell={SPELLS.MOONFIRE_DEBUFF} /> Moonfire uptime{' '}
</>
}
>
{`${formatPercentage(this.uptime)}%`}
</BoringValueText>
</Statistic>
);
}
}
69 changes: 0 additions & 69 deletions src/analysis/retail/druid/guardian/modules/spells/Thrash.jsx

This file was deleted.

53 changes: 53 additions & 0 deletions src/analysis/retail/druid/guardian/modules/spells/Thrash.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import { formatPercentage } from 'common/format';
import SPELLS from 'common/SPELLS';
import { SpellIcon } from 'interface';
import Analyzer from 'parser/core/Analyzer';
import Enemies from 'parser/shared/modules/Enemies';
import BoringValueText from 'parser/ui/BoringValueText';
import Statistic from 'parser/ui/Statistic';
import STATISTIC_ORDER from 'parser/ui/STATISTIC_ORDER';
import SpellLink from 'interface/SpellLink';
import CastEfficiencyPanel from 'interface/guide/components/CastEfficiencyPanel';
import { explanationAndDataSubsection } from 'interface/guide/components/ExplanationRow';

const deps = {
enemies: Enemies,
};

export default class Thrash extends Analyzer.withDependencies(deps) {
get guideSubsection() {
const explanation = (
<p>
<strong>
<SpellLink spell={SPELLS.THRASH_BEAR} />
</strong>{' '}
is AoE direct damage and a stacking bleed. It generates rage and should be used on cooldown.
The very short cooldown combined with jammed GCDs means 100% usage will be practically
impossible, but get as close as you can.
</p>
);

const data = <CastEfficiencyPanel spell={SPELLS.THRASH_BEAR} useThresholds />;

return explanationAndDataSubsection(explanation, data);
}

statistic() {
const thrashUptimePercentage =
this.deps.enemies.getBuffUptime(SPELLS.THRASH_BEAR_DOT.id) / this.owner.fightDuration;

return (
<Statistic position={STATISTIC_ORDER.CORE(11)} size="flexible">
<BoringValueText
label={
<>
<SpellIcon spell={SPELLS.THRASH_BEAR} /> Thrash uptime{' '}
</>
}
>
{`${formatPercentage(thrashUptimePercentage)}%`}
</BoringValueText>
</Statistic>
);
}
}
2 changes: 1 addition & 1 deletion src/analysis/retail/druid/restoration/CONFIG.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const config: Config = {
</>
),
// A recent example report to see interesting parts of the spec. Will be shown on the homepage.
exampleReport: '/report/nKgjXCLPNABhk6GV/32-Heroic+Eranog+-+Kill+(2:44)/Shåped/standard',
exampleReport: '/report/xnaX1W8rCGf9Jtwv/5/3',
//Only show the guide since restoration druid no longer has a supported checklist
//This will also default to the guide
guideOnly: true,
Expand Down

0 comments on commit d3e1ba7

Please sign in to comment.