/
index.ts
86 lines (77 loc) · 2.32 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { Spec } from 'game/SPECS';
import { Race } from 'parser/core/Combatant';
import PhaseConfig from 'parser/core/PhaseConfig';
import MythicPlusSeasonOne from 'game/raids/mythicplusseasonone';
import MythicPlusSeasonTwo from 'game/raids/mythicplusseasontwo';
import MythicPlusSeasonThree from 'game/raids/mythicplusseasonthree';
import MythicPlusSeasonFour from 'game/raids/mythicplusseasonfour';
import VaultOfTheIncarnates from 'game/raids/vaultoftheincarnates';
import Aberrus from 'game/raids/aberrus';
import Amirdrassil from 'game/raids/amirdrassil';
import Ulduar from 'game/raids/ulduar';
import TrialOfTheGrandCrusader from 'game/raids/trialofthegrandcrusader';
import IcecrownCitadel from 'game/raids/icc';
import RubySanctum from 'game/raids/rubysanctum';
interface EncounterConfig {
vantusRuneBuffId?: number;
softMitigationChecks?: {
physical: [];
magical: [];
};
resultsWarning?: string;
phases?: { [key: string]: PhaseConfig };
raceTranslation?: (race: Race, spec?: Spec) => Race;
disableDeathSuggestion?: boolean;
disableDowntimeSuggestion?: boolean;
disableDowntimeStatistic?: boolean;
}
interface Encounter {
id: number;
name: string;
background?: string;
backgroundPosition?: string;
headshot?: string;
icon?: string;
}
export interface Boss extends Encounter {
fight: EncounterConfig;
}
export interface Raid {
name: string;
background?: string;
bosses: Record<string, Boss>;
}
export interface Phase extends PhaseConfig {
start: number[];
end: number[];
}
const dungeons = {
// Dragonflight
MythicPlusSeasonOne,
MythicPlusSeasonTwo,
MythicPlusSeasonThree,
MythicPlusSeasonFour,
};
const raids = {
VaultOfTheIncarnates, // tier 29
Aberrus, // tier 30
Amirdrassil, // tier 31
// Wrath of the Lich King (Classic)
Ulduar, // tier 8
TrialOfTheGrandCrusader, // tier 9
IcecrownCitadel, // tier 10
RubySanctum, // tier 11
};
function findByDungeonBossId(id: number) {
return Object.values(dungeons)
.flatMap((dungeon) => Object.values(dungeon.bosses))
.find((boss) => boss.id === id);
}
function findByRaidBossId(id: number) {
return Object.values(raids)
.flatMap((raid) => Object.values(raid.bosses))
.find((boss) => boss.id === id);
}
export function findByBossId(id: number) {
return findByRaidBossId(id) ?? findByDungeonBossId(id) ?? null;
}