diff --git a/src/CHANGELOG.tsx b/src/CHANGELOG.tsx index 2abeb776d65..00bcb92bad2 100644 --- a/src/CHANGELOG.tsx +++ b/src/CHANGELOG.tsx @@ -38,6 +38,8 @@ import SpellLink from 'interface/SpellLink'; // prettier-ignore export default [ + change(date(2024, 10, 4), <>Added simple statistics for ., Vetyst), + change(date(2024, 10, 3), 'Fixed rendering of the Header on the character log browser.', Vetyst), change(date(2024, 9, 30), 'Add Classic Cata Firelands raid zone, headshots, and placeholder image', jazminite), change(date(2024, 9, 30), 'Enchant checker now detects Spellthreads', Sref), change(date(2024, 9, 26), "Add support for Warlock Hero Talents", Gazh), diff --git a/src/CONTRIBUTORS.ts b/src/CONTRIBUTORS.ts index 201bfd21e82..3d379aa9a14 100644 --- a/src/CONTRIBUTORS.ts +++ b/src/CONTRIBUTORS.ts @@ -564,14 +564,14 @@ export const HawkCorrigan: Contributor = { }; export const Vetyst: Contributor = { nickname: 'Vetyst', - github: 'djanse', - discord: 'vetyst#0001', + github: 'vetyst', + discord: 'vetyst', avatar: avatar('vetyst-avatar.png'), mains: [ { - name: 'Vetyst', - spec: SPECS.BALANCE_DRUID, - link: 'https://worldofwarcraft.com/en-gb/character/tarren-mill/vetyst', + name: 'Vetiest', + spec: SPECS.SHADOW_PRIEST, + link: 'https://worldofwarcraft.com/en-gb/character/ragnaros/vetiest', }, ], }; diff --git a/src/analysis/retail/warlock/affliction/CHANGELOG.tsx b/src/analysis/retail/warlock/affliction/CHANGELOG.tsx index 8b1108b3866..c04dc39e88d 100644 --- a/src/analysis/retail/warlock/affliction/CHANGELOG.tsx +++ b/src/analysis/retail/warlock/affliction/CHANGELOG.tsx @@ -5,6 +5,7 @@ import { Arlie, Jonfanz, Lithix, Meldris, ToppleTheNun, dodse, Gazh } from 'CONT import { SpellLink } from 'interface'; export default [ + change(date(2024, 10, 1), <>Add support for , Gazh), change(date(2024, 9, 28), <>Fix error , Gazh), change(date(2024, 9, 26), "Add support for Hero Talents", Gazh), change(date(2024, 8, 10), 'Made several changes for affliction in preperation for the TWW', Lithix), diff --git a/src/analysis/retail/warlock/affliction/CONFIG.tsx b/src/analysis/retail/warlock/affliction/CONFIG.tsx index 3d88c5f5c54..5658edbe951 100644 --- a/src/analysis/retail/warlock/affliction/CONFIG.tsx +++ b/src/analysis/retail/warlock/affliction/CONFIG.tsx @@ -1,4 +1,4 @@ -import { Jonfanz } from 'CONTRIBUTORS'; +import { Gazh } from 'CONTRIBUTORS'; import GameBranch from 'game/GameBranch'; import SPECS from 'game/SPECS'; import type Config from 'parser/Config'; @@ -8,11 +8,11 @@ import { SupportLevel } from 'parser/Config'; const CONFIG: Config = { // The people that have contributed to this spec recently. People don't have to sign up to be long-time maintainers to be included in this list. If someone built a large part of the spec or contributed something recently to that spec, they can be added to the contributors list. If someone goes MIA, they may be removed after major changes or during a new expansion. - contributors: [Jonfanz], + contributors: [Gazh], branch: GameBranch.Retail, // The WoW client patch this spec was last updated. - patchCompatibility: null, - supportLevel: SupportLevel.Unmaintained, + patchCompatibility: '11.0.2', + supportLevel: SupportLevel.MaintainedPartial, // 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. description: ( @@ -43,7 +43,7 @@ const CONFIG: Config = { ), // A recent example report to see interesting parts of the spec. Will be shown on the homepage. - exampleReport: '/report/JGFabW3gfqrtynX1/5-Normal+Eranog+-+Kill+(5:08)/Crunky', + exampleReport: '/report/mQMF8YnCpTctZK7w/44-Heroic+The+Silken+Court+-+Kill+(7:53)/Desolater', // 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. diff --git a/src/analysis/retail/warlock/affliction/modules/checklist/Component.tsx b/src/analysis/retail/warlock/affliction/modules/checklist/Component.tsx index 71d3e32f890..bf9032939ce 100644 --- a/src/analysis/retail/warlock/affliction/modules/checklist/Component.tsx +++ b/src/analysis/retail/warlock/affliction/modules/checklist/Component.tsx @@ -80,6 +80,9 @@ const AfflictionWarlockChecklist = ({ combatant, castEfficiency, thresholds }: C or mitigate incoming damage with{' '} / .
+ You can use 3 if you have{' '} + talented. +
While you shouldn't cast these defensives on cooldown, be aware of them and use them whenever effective. Not using them at all indicates you might not be aware of them or not using them optimally. @@ -90,6 +93,9 @@ const AfflictionWarlockChecklist = ({ combatant, castEfficiency, thresholds }: C )} + {combatant.hasTalent(TALENTS.PACT_OF_GLUTTONY_TALENT) && ( + + )} Add support for , Gazh), change(date(2024, 9, 28), <>Add support for & , Gazh), change(date(2024, 9, 26), "Add support for Hero Talents", Gazh), change(date(2024, 5, 31), <>Fixed statistic, Zyer), diff --git a/src/analysis/retail/warlock/demonology/CONFIG.tsx b/src/analysis/retail/warlock/demonology/CONFIG.tsx index de04b03cce0..7b894b70c34 100644 --- a/src/analysis/retail/warlock/demonology/CONFIG.tsx +++ b/src/analysis/retail/warlock/demonology/CONFIG.tsx @@ -1,17 +1,17 @@ -import { Zyer } from 'CONTRIBUTORS'; +import { Zyer, Gazh } from 'CONTRIBUTORS'; import GameBranch from 'game/GameBranch'; import SPECS from 'game/SPECS'; import Config, { SupportLevel } from 'parser/Config'; -// import CHANGELOG from './CHANGELOG'; +import CHANGELOG from './CHANGELOG'; const config: Config = { // The people that have contributed to this spec recently. People don't have to sign up to be long-time maintainers to be included in this list. If someone built a large part of the spec or contributed something recently to that spec, they can be added to the contributors list. If someone goes MIA, they may be removed after major changes or during a new expansion. - contributors: [Zyer], + contributors: [Zyer, Gazh], branch: GameBranch.Retail, // The WoW client patch this spec was last updated. - patchCompatibility: '10.2.7', - supportLevel: SupportLevel.MaintainedFull, + patchCompatibility: '11.0.2', + supportLevel: SupportLevel.MaintainedPartial, // 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. description: ( @@ -72,18 +72,18 @@ const config: Config = { ), // A recent example report to see interesting parts of the spec. Will be shown on the homepage. - exampleReport: '/report/myndpGBw3k7rjVDf/4-Mythic+Smolderon+-+Kill+(7:01)/Yumiblood/standard', + exampleReport: "/report/hY6vg1LxqzmR94XG/126-Heroic+Broodtwister+Ovi'nax+-+Kill+(6:24)/Meurthe/", // 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. spec: SPECS.DEMONOLOGY_WARLOCK, // The contents of your changelog. - // changelog: CHANGELOG, + changelog: CHANGELOG, // The CombatLogParser class for your spec. - // parser: () => - // import('./CombatLogParser' /* webpackChunkName: "DemonologyWarlock" */).then( - // (exports) => exports.default, - // ), + parser: () => + import('./CombatLogParser' /* webpackChunkName: "DemonologyWarlock" */).then( + (exports) => exports.default, + ), // 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: import.meta.url, }; diff --git a/src/analysis/retail/warlock/destruction/CHANGELOG.tsx b/src/analysis/retail/warlock/destruction/CHANGELOG.tsx index 6e399935b27..60b2e714f5f 100644 --- a/src/analysis/retail/warlock/destruction/CHANGELOG.tsx +++ b/src/analysis/retail/warlock/destruction/CHANGELOG.tsx @@ -5,6 +5,7 @@ import { SpellLink } from 'interface'; // prettier-ignore export default [ + change(date(2024, 10, 1), <>Add support for , Gazh), change(date(2024, 9, 26), "Add support for Hero Talents", Gazh), change(date(2023, 7, 8), 'Update CDR on Dark Pact and Unending Resolve', Arlie), change(date(2023, 7, 8), 'Update SpellLink usage.', ToppleTheNun), diff --git a/src/analysis/retail/warlock/destruction/CONFIG.tsx b/src/analysis/retail/warlock/destruction/CONFIG.tsx index a752583996c..bc5b103ed98 100644 --- a/src/analysis/retail/warlock/destruction/CONFIG.tsx +++ b/src/analysis/retail/warlock/destruction/CONFIG.tsx @@ -1,16 +1,17 @@ +import { Gazh } from 'CONTRIBUTORS'; import GameBranch from 'game/GameBranch'; import SPECS from 'game/SPECS'; -// import CHANGELOG from './CHANGELOG'; +import CHANGELOG from './CHANGELOG'; import { SupportLevel } from 'parser/Config'; export default { // The people that have contributed to this spec recently. People don't have to sign up to be long-time maintainers to be included in this list. If someone built a large part of the spec or contributed something recently to that spec, they can be added to the contributors list. If someone goes MIA, they may be removed after major changes or during a new expansion. - contributors: [], + contributors: [Gazh], branch: GameBranch.Retail, // The WoW client patch this spec was last updated. - patchCompatibility: null, - supportLevel: SupportLevel.Unmaintained, + patchCompatibility: '11.0.2', + supportLevel: SupportLevel.MaintainedPartial, // 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. description: ( @@ -39,18 +40,18 @@ export default { ), // A recent example report to see interesting parts of the spec. Will be shown on the homepage. - exampleReport: '/report/TGzmk4bXDZJndpj7/6-Heroic+Opulence+-+Kill+(8:12)/3-Lunaira', + exampleReport: '/report/9dvKWtRTxa4Ab3Yj/8-Heroic+The+Silken+Court+-+Kill+(6:30)/Trundle', // 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. spec: SPECS.DESTRUCTION_WARLOCK, // The contents of your changelog. - // changelog: CHANGELOG, + changelog: CHANGELOG, // The CombatLogParser class for your spec. - // parser: () => - // import('./CombatLogParser' /* webpackChunkName: "DestructionWarlock" */).then( - // (exports) => exports.default, - // ), + parser: () => + import('./CombatLogParser' /* webpackChunkName: "DestructionWarlock" */).then( + (exports) => exports.default, + ), // 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: import.meta.url, }; diff --git a/src/analysis/retail/warlock/destruction/modules/features/Checklist/Component.tsx b/src/analysis/retail/warlock/destruction/modules/features/Checklist/Component.tsx index b5f0d51d23b..f50355d0895 100644 --- a/src/analysis/retail/warlock/destruction/modules/features/Checklist/Component.tsx +++ b/src/analysis/retail/warlock/destruction/modules/features/Checklist/Component.tsx @@ -110,6 +110,9 @@ const DestructionWarlockChecklist = ({ or mitigate incoming damage with{' '} / .
+ You can use 3 if you have{' '} + talented. +
While you shouldn't cast these defensives on cooldown, be aware of them and use them whenever effective. Not using them at all indicates you might not be aware of them or not using them optimally. @@ -120,6 +123,9 @@ const DestructionWarlockChecklist = ({ )} + {combatant.hasTalent(TALENTS.PACT_OF_GLUTTONY_TALENT) && ( + + )}
; export default trinkets; diff --git a/src/common/SPELLS/others.ts b/src/common/SPELLS/others.ts index 8d92a7c1434..b231e8810a7 100644 --- a/src/common/SPELLS/others.ts +++ b/src/common/SPELLS/others.ts @@ -318,6 +318,11 @@ const spells = { name: 'Healthstone', icon: 'warlock_-healthstone', }, + DEMONIC_HEALTHSTONE: { + id: 452930, + name: 'Demonic Healthstone', + icon: 'warlock_-bloodstone', + }, ANCIENT_REJUVENATION_POTION: { id: 188018, name: 'Ancient Rejuvenation Potion', diff --git a/src/common/SPELLS/thewarwithin/trinkets.ts b/src/common/SPELLS/thewarwithin/trinkets.ts index 64507d9bd0e..18f60b493e0 100644 --- a/src/common/SPELLS/thewarwithin/trinkets.ts +++ b/src/common/SPELLS/thewarwithin/trinkets.ts @@ -7,6 +7,17 @@ const spells = { name: 'Bolstering Light', icon: 'inv_arathordungeon_signet_color1', }, + // Spymaster's Web + SPYMASTERS_WEB: { + id: 444959, + name: "Spymaster's Web", + icon: 'ability_spy', + }, + SPYMASTERS_REPORT: { + id: 451199, + name: "Spymaster's Report", + icon: 'inv_nerubianspiderling2_black', + }, } satisfies Record; export default spells; diff --git a/src/common/TALENTS/warlock.ts b/src/common/TALENTS/warlock.ts index 0393616798e..0ff35a1576e 100644 --- a/src/common/TALENTS/warlock.ts +++ b/src/common/TALENTS/warlock.ts @@ -1150,7 +1150,7 @@ const talents = { PACT_OF_GLUTTONY_TALENT: { id: 386689, name: 'Pact of Gluttony', - icon: 'warlock__bloodstone', + icon: 'warlock_-bloodstone', maxRanks: 1, entryIds: [91434], definitionIds: [{ id: 96436, specId: 267 }], diff --git a/src/common/WCL_TYPES.ts b/src/common/WCL_TYPES.ts index 295db2eecbf..7e11823e231 100644 --- a/src/common/WCL_TYPES.ts +++ b/src/common/WCL_TYPES.ts @@ -188,7 +188,11 @@ export interface WCLParse { estimated: boolean; } -export type WCLParsesResponse = WCLParse[]; +export type WCLParsesResponse = WCLParse[] | { hidden: true }; + +export function isHiddenParsesResponse(data: WCLParsesResponse): data is { hidden: true } { + return !Array.isArray(data); +} export type WCLResponseJSON = | WCLGuildReportsResponse diff --git a/src/game/CLASSES.ts b/src/game/CLASSES.ts index 516b51e0b4a..5d726c97530 100644 --- a/src/game/CLASSES.ts +++ b/src/game/CLASSES.ts @@ -30,6 +30,22 @@ export enum CLASSES { WARRIOR, } +export const CLASS_NAMES: { [classId: number]: { name: string } } = { + 1: { name: 'Warrior' }, + 2: { name: 'Paladin' }, + 3: { name: 'Hunter' }, + 4: { name: 'Rogue' }, + 5: { name: 'Priest' }, + 6: { name: 'Death Knight' }, + 7: { name: 'Shaman' }, + 8: { name: 'Mage' }, + 9: { name: 'Warlock' }, + 10: { name: 'Monk' }, + 11: { name: 'Druid' }, + 12: { name: 'Demon Hunter' }, + 13: { name: 'Evoker' }, +}; + export function getClassBySpecId(specId: number) { if (DEATH_KNIGHT_SPECS.find((spec) => spec.id === specId)) { return CLASSES.DEATH_KNIGHT; diff --git a/src/interface/CharacterParses.tsx b/src/interface/CharacterParses.tsx index beadc474fcc..c382f909402 100644 --- a/src/interface/CharacterParses.tsx +++ b/src/interface/CharacterParses.tsx @@ -19,12 +19,18 @@ import REPORT_HISTORY_TYPES from 'interface/REPORT_HISTORY_TYPES'; import { Component } from 'react'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; -import { WCLParse, WCLParsesResponse } from 'common/WCL_TYPES'; +import { isHiddenParsesResponse, WCLParse, WCLParsesResponse } from 'common/WCL_TYPES'; import { isSupportedRegion } from 'common/regions'; +import './report/Results/Header.scss'; import './CharacterParses.scss'; import ParsesList, { Parse } from './CharacterParsesList'; import { appendReportHistory } from './reducers/reportHistory'; +import { CLASS_NAMES } from 'game/CLASSES'; +import { + classBackgroundImage, + characterBackgroundImage, +} from 'interface/report/Results/PlayerInfo'; const loadRealms = (classic: boolean) => retryingPromise(() => @@ -100,7 +106,8 @@ interface CharacterParsesState { activeEncounter: number; sortBy: number; metric: string; - image: string | null; + characterImage: string | null; + classImage: string | null; avatarImage: string | null; parses: Parse[]; isLoading: boolean; @@ -123,7 +130,8 @@ class CharacterParses extends Component { this.load(); @@ -281,7 +289,7 @@ class CharacterParses extends Component { this.load(); @@ -312,18 +320,19 @@ class CharacterParses extends Component { + if (isHiddenParsesResponse(rawParses)) { + // WCL responds with {hidden:true} when the logs are hidden. + this.setState({ + parses: [], + isLoading: false, + error: ERRORS.CHARACTER_HIDDEN, + }); + return; + } if (rawParses.length === 0) { this.setState({ parses: [], @@ -397,7 +415,6 @@ class CharacterParses extends Component