diff --git a/src/CHANGELOG.tsx b/src/CHANGELOG.tsx index 878ef2df5dd..e4b72adf32e 100644 --- a/src/CHANGELOG.tsx +++ b/src/CHANGELOG.tsx @@ -37,6 +37,7 @@ import SpellLink from 'interface/SpellLink'; export default [ change(date(2024, 9, 12), 'Fixed crash when analyzing reports where 0 procs of certain effects ocurred.', emallson), change(date(2024, 9, 12), 'Add support for Earthen characters.', ToppleTheNun), + change(date(2024, 9, 11), 'Update Death Knight spells for Classic Cataclysm', jazminite), change(date(2024, 9, 10), 'Change behavior of getLowestPerf when no perfs are provided', Trevor), change(date(2024, 9, 9), 'Fix character search showing UNKNOWN instead of THE WAR WITHIN.', ToppleTheNun), change(date(2024, 9, 8), "Add Nerub'ar Palace bosses and season 1 M+ dungeons.", ToppleTheNun), diff --git a/src/analysis/classic/deathknight/frost/CombatLogParser.ts b/src/analysis/classic/deathknight/frost/CombatLogParser.ts index 48f088088f6..6997bdc504e 100644 --- a/src/analysis/classic/deathknight/frost/CombatLogParser.ts +++ b/src/analysis/classic/deathknight/frost/CombatLogParser.ts @@ -1,8 +1,6 @@ // Base file import BaseCombatLogParser from 'parser/classic/CombatLogParser'; // Shared -import lowRankSpellsSuggestion from 'parser/classic/suggestions/lowRankSpells'; -import { lowRankSpells, GlobalCooldown } from 'analysis/classic/deathknight/shared'; // Features import Abilities from './modules/features/Abilities'; import AlwaysBeCasting from './modules/features/AlwaysBeCasting'; @@ -14,8 +12,6 @@ import Checklist from './modules/checklist/Module'; class CombatLogParser extends BaseCombatLogParser { static specModules = { // Shared - lowRankSpells: lowRankSpellsSuggestion(lowRankSpells), - globalCooldown: GlobalCooldown, // Features abilities: Abilities, alwaysBeCasting: AlwaysBeCasting, diff --git a/src/analysis/classic/deathknight/frost/modules/checklist/Component.tsx b/src/analysis/classic/deathknight/frost/modules/checklist/Component.tsx index 6c7d5aff8d7..a84d510893b 100644 --- a/src/analysis/classic/deathknight/frost/modules/checklist/Component.tsx +++ b/src/analysis/classic/deathknight/frost/modules/checklist/Component.tsx @@ -39,7 +39,7 @@ const MeleeChecklist = ({ combatant, castEfficiency, thresholds }: ChecklistProp description={<>Use your cooldowns as often as possible to maximize your damage output.} > {/* SPELLS listed here must be in ../features/Abilities */} - + diff --git a/src/analysis/classic/deathknight/frost/modules/features/Abilities.ts b/src/analysis/classic/deathknight/frost/modules/features/Abilities.ts index 66584164c9f..1fb67fdad7f 100644 --- a/src/analysis/classic/deathknight/frost/modules/features/Abilities.ts +++ b/src/analysis/classic/deathknight/frost/modules/features/Abilities.ts @@ -11,11 +11,6 @@ class Abilities extends CoreAbilities { category: SPELL_CATEGORY.ROTATIONAL, gcd: { base: 1500 }, }, - { - spell: SPELLS.FROST_STRIKE.id, - category: SPELL_CATEGORY.ROTATIONAL, - gcd: { base: 1500 }, - }, { spell: SPELLS.BLOOD_STRIKE.id, category: SPELL_CATEGORY.ROTATIONAL, @@ -64,7 +59,7 @@ class Abilities extends CoreAbilities { }, // Cooldowns { - spell: [SPELLS.UNBREAKABLE_ARMOR.id], + spell: [SPELLS.PILLAR_OF_FROST.id], category: SPELL_CATEGORY.COOLDOWNS, gcd: null, cooldown: 60, diff --git a/src/analysis/classic/deathknight/frost/modules/features/Buffs.tsx b/src/analysis/classic/deathknight/frost/modules/features/Buffs.tsx index 939a276ba35..c8859f123b2 100644 --- a/src/analysis/classic/deathknight/frost/modules/features/Buffs.tsx +++ b/src/analysis/classic/deathknight/frost/modules/features/Buffs.tsx @@ -20,7 +20,7 @@ class Buffs extends CoreAuras { timelineHighlight: true, }, { - spellId: SPELLS.UNBREAKABLE_ARMOR.id, + spellId: SPELLS.PILLAR_OF_FROST.id, timelineHighlight: true, }, { diff --git a/src/analysis/classic/deathknight/shared/GlobalCooldown.ts b/src/analysis/classic/deathknight/shared/GlobalCooldown.ts index cde5d7cdf46..360793765cb 100644 --- a/src/analysis/classic/deathknight/shared/GlobalCooldown.ts +++ b/src/analysis/classic/deathknight/shared/GlobalCooldown.ts @@ -2,12 +2,9 @@ import SPELLS from 'common/SPELLS/classic/deathknight'; import CoreGlobalCooldown from 'parser/shared/modules/GlobalCooldown'; const UNHOLY_PRESENCE_GCD_REDUCTION = 500; -const ICY_TALONS_GCD_REDUCTION = 0.2; /** * Unholy presence reduces the GCD of all casts by 0.5 seconds - * Icy Talons reduces the GCD of all casts by 20% - * Min GCD is 0.75 seconds */ class GlobalCooldown extends CoreGlobalCooldown { @@ -16,9 +13,6 @@ class GlobalCooldown extends CoreGlobalCooldown { if (gcd && this.selectedCombatant.hasBuff(SPELLS.UNHOLY_PRESENCE.id)) { return Math.max(gcd - UNHOLY_PRESENCE_GCD_REDUCTION, this.minDuration); } - if (gcd && this.selectedCombatant.hasBuff(SPELLS.ICY_TALONS_BUFF.id)) { - return Math.max(gcd * (1 - ICY_TALONS_GCD_REDUCTION), this.minDuration); - } return gcd; } } diff --git a/src/analysis/classic/deathknight/shared/index.ts b/src/analysis/classic/deathknight/shared/index.ts index eb89e431db2..0bd2b6eb603 100644 --- a/src/analysis/classic/deathknight/shared/index.ts +++ b/src/analysis/classic/deathknight/shared/index.ts @@ -1,2 +1 @@ -export { default as lowRankSpells } from './lowRankSpells'; export { default as GlobalCooldown } from './GlobalCooldown'; diff --git a/src/analysis/classic/deathknight/shared/lowRankSpells.ts b/src/analysis/classic/deathknight/shared/lowRankSpells.ts deleted file mode 100644 index 73f52159ea2..00000000000 --- a/src/analysis/classic/deathknight/shared/lowRankSpells.ts +++ /dev/null @@ -1,10 +0,0 @@ -import SPELLS from 'common/SPELLS/classic/deathknight'; - -const lowRankSpells = Object.entries(SPELLS).reduce((result, [str, obj]) => { - if ('lowRanks' in obj && obj.lowRanks) { - Object.assign(result, { [obj.id]: [...obj.lowRanks] }); - } - return result; -}, {}); - -export default lowRankSpells; diff --git a/src/analysis/classic/deathknight/unholy/modules/features/Abilities.ts b/src/analysis/classic/deathknight/unholy/modules/features/Abilities.ts index d75e8033448..700b28a94a3 100644 --- a/src/analysis/classic/deathknight/unholy/modules/features/Abilities.ts +++ b/src/analysis/classic/deathknight/unholy/modules/features/Abilities.ts @@ -32,7 +32,7 @@ class Abilities extends CoreAbilities { gcd: { base: 1500 }, }, { - spell: [SPELLS.GHOUL_FRENZY.id], + spell: [SPELLS.DARK_TRANSFORMATION.id], category: SPELL_CATEGORY.ROTATIONAL, gcd: { base: 1500 }, }, @@ -62,11 +62,6 @@ class Abilities extends CoreAbilities { category: SPELL_CATEGORY.ROTATIONAL_AOE, gcd: { base: 1500 }, }, - { - spell: SPELLS.CORPSE_EXPLOSION.id, - category: SPELL_CATEGORY.ROTATIONAL_AOE, - gcd: { base: 1500 }, - }, // Cooldowns { spell: [SPELLS.SUMMON_GARGOYLE.id], diff --git a/src/common/SPELLS/classic/deathknight.ts b/src/common/SPELLS/classic/deathknight.ts index c250a9afaf2..61bfc30a3b2 100644 --- a/src/common/SPELLS/classic/deathknight.ts +++ b/src/common/SPELLS/classic/deathknight.ts @@ -1,5 +1,5 @@ /** - * All WotLK Death Knight spells (including talent spells) go here. + * All Classic Death Knight spells (including talent spells) go here. * You need to do this manually by opening a WCL report and clicking the icons of spells to open the relevant Wowhead page. Here, you can get the icon name by clicking the icon, copy the name of the spell, and the ID is in the URL. * You can access these entries like other entries in the spells files by importing `common/SPELLS/classic` and using the assigned property on the SPELLS object. Please try to avoid abbreviating properties. */ @@ -13,339 +13,313 @@ const spells = { ANTI_MAGIC_SHELL: { id: 48707, name: 'Anti-Magic Shell', - icon: 'spell_shadow_antimagicshell', + icon: 'spell_shadow_antimagicshell.jpg', }, ARMY_OF_THE_DEAD: { id: 42650, name: 'Army of the Dead', - icon: 'spell_deathknight_armyofthedead', + icon: 'spell_deathknight_armyofthedead.jpg', }, BLOOD_BOIL: { id: 48721, name: 'Blood Boil', - icon: 'spell_deathknight_bloodboil', + icon: 'spell_deathknight_bloodboil.jpg', }, BLOOD_PRESENCE: { id: 48263, name: 'Blood Presence', - icon: 'spell_deathknight_bloodpresence', + icon: 'spell_deathknight_bloodpresence.jpg', }, BLOOD_STRIKE: { - id: 49930, + id: 45902, name: 'Blood Strike', - icon: 'spell_deathknight_deathstrike', - lowRanks: [49929, 49928, 49927, 49926, 45902], + icon: 'spell_deathknight_deathstrike.jpg', }, BLOOD_TAP: { id: 45529, name: 'Blood Tap', - icon: 'spell_deathknight_bloodtap', - }, - BONE_SHIELD: { - id: 49222, - name: 'Bone Shield', - icon: 'inv_chest_leather_13', + icon: 'spell_deathknight_bloodtap.jpg', }, CHAINS_OF_ICE: { id: 45524, name: 'Chains of Ice', - icon: 'spell_frost_chainsofice', - }, - CORPSE_EXPLOSION: { - id: 51328, - name: 'Corpse Explosion', - icon: 'ability_creature_disease_02', - lowRanks: [51327, 51326, 51325, 49158], + icon: 'spell_frost_chainsofice.jpg', }, DARK_COMMAND: { id: 56222, name: 'Dark Command', - icon: 'spell_nature_shamanrage', + icon: 'spell_nature_shamanrage.jpg', }, DARK_SIMULACRUM: { id: 77606, name: 'Dark Simulacrum', - icon: 'spell_holy_consumemagic', + icon: 'spell_holy_consumemagic.jpg', }, DEATH_AND_DECAY: { id: 43265, name: 'Death and Decay', - icon: 'spell_shadow_deathanddecay', + icon: 'spell_shadow_deathanddecay.jpg', }, DEATH_COIL_DK: { id: 47541, name: 'Death Coil', - icon: 'spell_shadow_deathcoil', + icon: 'spell_shadow_deathcoil.jpg', }, DEATH_GRIP: { id: 49576, name: 'Death Grip', - icon: 'spell_deathknight_strangulate', + icon: 'spell_deathknight_strangulate.jpg', }, DEATH_PACT: { id: 48743, name: 'Death Pact', - icon: 'spell_shadow_deathpact', + icon: 'spell_shadow_deathpact.jpg', }, DEATH_STRIKE: { id: 49998, name: 'Death Strike', - icon: 'spell_deathknight_butcher2', + icon: 'spell_deathknight_butcher2.jpg', }, EMPOWER_RUNE_WEAPON: { id: 47568, name: 'Empower Rune Weapon', - icon: 'inv_sword_62', + icon: 'inv_sword_62.jpg', + }, + FESTERING_STRIKE: { + id: 85948, + name: 'Festering Strike', + icon: 'inv_sword_61.jpg', + }, + FESTERING_STRIKE_OFFHAND: { + id: 86061, + name: 'Festering Strike Off-Hand', + icon: 'inv_sword_61.jpg', }, FROST_PRESENCE: { id: 48266, name: 'Frost Presence', - icon: 'spell_deathknight_frostpresence', - }, - FROZEN_RUNE_WEAPON: { - id: 49142, - name: 'Frozen Rune Weapon', - icon: 'spell_deathknight_frozenruneweapon', + icon: 'spell_deathknight_frostpresence.jpg', }, HORN_OF_WINTER: { id: 57330, name: 'Horn of Winter', - icon: 'inv_misc_horn_02', + icon: 'inv_misc_horn_02.jpg', }, ICEBOUND_FORTITUDE: { id: 48792, name: 'Icebound Fortitude', - icon: 'spell_deathknight_iceboundfortitude', + icon: 'spell_deathknight_iceboundfortitude.jpg', }, ICY_TOUCH: { id: 45477, name: 'Icy Touch', - icon: 'spell_deathknight_icetouch', + icon: 'spell_deathknight_icetouch.jpg', }, MIND_FREEZE: { id: 47528, name: 'Mind Freeze', - icon: 'spell_deathknight_mindfreeze', + icon: 'spell_deathknight_mindfreeze.jpg', + }, + NECROTIC_STRIKE: { + id: 73975, + name: 'Necrotic Strike', + icon: 'inv_axe_96.jpg', }, OBLITERATE: { - id: 51425, + id: 49020, name: 'Obliterate', - icon: 'spell_deathknight_classicon', - lowRanks: [51424, 51423, 49020, 66198], + icon: 'spell_deathknight_classicon.jpg', + }, + OBLITERATE_OFFHAND: { + id: 66198, + name: 'Obliterate Off-Hand', + icon: 'spell_deathknight_classicon.jpg', + }, + OUTBREAK: { + id: 77575, + name: 'Outbreak', + icon: 'spell_deathvortex.jpg', }, PATH_OF_FROST: { id: 3714, name: 'Path of Frost', - icon: 'spell_deathknight_pathoffrost', + icon: 'spell_deathknight_pathoffrost.jpg', }, PESTILENCE: { id: 50842, name: 'Pestilence', - icon: 'spell_shadow_plaguecloud', + icon: 'spell_shadow_plaguecloud.jpg', }, PLAGUE_STRIKE: { id: 45462, name: 'Plague Strike', - icon: 'spell_deathknight_empowerruneblade', + icon: 'spell_deathknight_empowerruneblade.jpg', }, RAISE_ALLY: { id: 61999, name: 'Raise Ally', - icon: 'spell_shadow_deadofnight', + icon: 'spell_shadow_deadofnight.jpg', }, RAISE_DEAD: { id: 46584, name: 'Raise Dead', - icon: 'spell_shadow_animatedead', + icon: 'spell_shadow_animatedead.jpg', }, RUNE_OF_CINDERGLACIER: { - id: 3369, + id: 3369, // Enchant Id name: 'Rune of Cinderglacier (enchant)', - icon: 'spell_shadow_chilltouch', + icon: 'spell_shadow_chilltouch.jpg', }, RUNE_OF_LICHBANE: { - id: 3366, + id: 3366, // Enchant Id name: 'Rune of Lichbane (enchant)', - icon: 'spell_holy_harmundeadaura', + icon: 'spell_holy_harmundeadaura.jpg', }, RUNE_OF_RAZORICE: { - id: 3370, + id: 3370, // Enchant Id name: 'Rune of Razorice (enchant)', - icon: 'spell_frost_frostarmor', + icon: 'spell_frost_frostarmor.jpg', }, RUNE_OF_SPELLBREAKING: { - id: 3595, + id: 3595, // Enchant Id name: 'Rune of Spellbreaking (enchant)', - icon: 'spell_shadow_antimagicshell', + icon: 'spell_shadow_antimagicshell.jpg', }, RUNE_OF_SPELLSHATTERING: { - id: 3367, + id: 3367, // Enchant Id name: 'Rune of Spellshattering (enchant)', - icon: 'spell_shadow_antimagicshell', + icon: 'spell_shadow_antimagicshell.jpg', }, RUNE_OF_SWORDBREAKING: { - id: 3594, + id: 3594, // Enchant Id name: 'Rune of Swordbreaking (enchant)', - icon: 'ability_parry', + icon: 'ability_parry.jpg', }, RUNE_OF_SWORDSHATTERING: { - id: 3365, + id: 3365, // Enchant Id name: 'Rune of Swordshattering (enchant)', - icon: 'ability_parry', + icon: 'ability_parry.jpg', }, RUNE_OF_THE_FALLEN_CRUSADER: { - id: 3368, + id: 3368, // Enchant Id name: 'Rune of the Fallen Crusader (enchant)', - icon: 'spell_holy_retributionaura', + icon: 'spell_holy_retributionaura.jpg', }, RUNE_OF_THE_NERUBIAN_CARAPACE: { - id: 3883, + id: 3883, // Enchant Id name: 'Rune of the Nerubian Carapace (enchant)', - icon: 'inv_sword_61', + icon: 'inv_sword_61.jpg', }, RUNE_OF_THE_STONESKIN_GARGOYLE: { - id: 3847, + id: 3847, // Enchant Id name: 'Rune of the Stoneskin Gargoyle', - icon: 'inv_sword_130', + icon: 'inv_sword_130.jpg', }, RUNE_STRIKE: { id: 56815, name: 'Rune Strike', - icon: 'spell_deathknight_darkconviction', + icon: 'spell_deathknight_darkconviction.jpg', }, STRANGULATE: { id: 47476, name: 'Strangulate', - icon: 'spell_shadow_soulleech_3', + icon: 'spell_shadow_soulleech_3.jpg', }, UNHOLY_PRESENCE: { id: 48265, name: 'Unholy Presence', - icon: 'spell_deathknight_unholypresence', - }, - OUTBREAK: { - id: 77575, - name: 'Outbreak', - icon: 'spell_deathvortex', + icon: 'spell_deathknight_unholypresence.jpg', }, - // --------- // TALENTS // --------- - // Blood + BLOOD_RITES: { + id: 50034, + name: 'Blood Rites', + icon: 'spell_deathknight_bloodtap.jpg', + }, + BONE_SHIELD: { + id: 49222, + name: 'Bone Shield', + icon: 'ability_deathknight_boneshield.jpg', + }, DANCING_RUNE_WEAPON: { id: 49028, name: 'Dancing Rune Weapon', - icon: 'inv_sword_07', - }, - DEATH_RUNE_MASTERY: { - id: 50034, - name: 'Death Rune Mastery', - icon: 'inv_sword_62', - lowRanks: [50033], + icon: 'inv_sword_07.jpg', }, HEART_STRIKE: { id: 55050, name: 'Heart Strike', - icon: 'inv_weapon_shortblade_40', - }, - MARK_OF_BLOOD: { - id: 49005, - name: 'Mark of Blood', - icon: 'ability_hunter_rapidkilling', + icon: 'inv_weapon_shortblade_40.jpg', }, RUNE_TAP: { id: 48982, name: 'Rune Tap', - icon: 'spell_deathknight_runetap', - }, - UNHOLY_FRENZY: { - id: 49016, - name: 'Unholy Frenzy', - icon: 'spell_deathknight_bladedarmor', + icon: 'spell_deathknight_runetap.jpg', }, VAMPIRIC_BLOOD: { id: 55233, name: 'Vampiric Blood', - icon: 'spell_shadow_lifedrain', + icon: 'spell_shadow_lifedrain.jpg', }, - // Frost - DEATHCHILL: { - id: 49796, - name: 'Deathchill', - icon: 'spell_shadow_soulleech_2', - }, - FROST_STRIKE: { - id: 55268, - name: 'Frost Strike', - icon: 'spell_deathknight_empowerruneblade2', - lowRanks: [51419, 51418, 51417, 51416, 49143], - }, HOWLING_BLAST: { - id: 51411, + id: 49184, name: 'Howling Blast', - icon: 'spell_frost_arcticwinds', - lowRanks: [51410, 51409, 49184], + icon: 'spell_frost_arcticwinds.jpg', }, HUNGERING_COLD: { id: 49203, name: 'Hungering Cold', - icon: 'inv_staff_15', - }, - ICY_TALONS_BUFF: { - id: 58578, - name: 'Icy Talons', - icon: 'spell_deathknight_icytalons', + icon: 'inv_staff_15.jpg', }, LICHBORNE: { id: 49039, name: 'Lichborne', - icon: 'spell_shadow_raisedead', + icon: 'spell_shadow_raisedead.jpg', }, - UNBREAKABLE_ARMOR: { + PILLAR_OF_FROST: { id: 51271, - name: 'Unbreakable Armor', - icon: 'inv_armor_helm_plate_naxxramas_raidwarrior_c_01', + name: 'Pillar of Frost', + icon: 'ability_deathknight_pillaroffrost.jpg', }, - // Unholy ANTI_MAGIC_ZONE: { id: 51052, name: 'Anti-Magic Zone', - icon: 'spell_deathknight_antimagiczone', + icon: 'spell_deathknight_antimagiczone.jpg', }, DESECRATION: { id: 55667, name: 'Desecration', - icon: 'spell_shadow_shadowfiend', - lowRanks: [55666], + icon: 'spell_shadow_shadowfiend.jpg', }, EBON_PLAGUE: { - id: 51735, + id: 65142, name: 'Ebon Plague', // debuff on enemy - icon: 'spell_shadow_nethercloak', + icon: 'ability_creature_cursed_03.jpg', }, - GHOUL_FRENZY: { + DARK_TRANSFORMATION: { id: 63560, - name: 'Ghoul Frenzy', - icon: 'ability_ghoulfrenzy', + name: 'Dark Transformation', + icon: 'achievement_boss_festergutrotface.jpg', }, SCOURGE_STRIKE: { id: 55090, name: 'Scourge Strike', - icon: 'spell_deathknight_scourgestrike', + icon: 'spell_deathknight_scourgestrike.jpg', }, SUMMON_GARGOYLE: { id: 49206, name: 'Summon Gargoyle', - icon: 'ability_hunter_pet_bat', + icon: 'ability_hunter_pet_bat.jpg', }, - FESTERING_STRIKE: { - id: 85948, - name: 'Festering Strike', - icon: 'spell_deathknight_festering_strike.jpg', + UNHOLY_FRENZY: { + id: 49016, + name: 'Unholy Frenzy', + icon: 'spell_shadow_unholyfrenzy.jpg', }, } satisfies Record; diff --git a/src/interface/ReportRaidBuffList.tsx b/src/interface/ReportRaidBuffList.tsx index 79b00fe91cd..02a3bf78674 100644 --- a/src/interface/ReportRaidBuffList.tsx +++ b/src/interface/ReportRaidBuffList.tsx @@ -84,7 +84,6 @@ const CLASSIC_RAID_BUFFS = new Map>([ // Strength & Agility [CLASSIC_SPELLS.STRENGTH_OF_EARTH_TOTEM, [Class.Shaman]], // Melee Haste - [CLASSIC_SPELLS.ICY_TALONS_BUFF, [SPECS.CLASSIC_DEATH_KNIGHT_FROST]], // All Damage % [CLASSIC_SPELLS.SANCTIFIED_RETRIBUTION, [SPECS.CLASSIC_PALADIN_RETRIBUTION]], // Haste %