70 lines
2.5 KiB
TypeScript
70 lines
2.5 KiB
TypeScript
import type { ClassId } from "../app/characterCatalog";
|
|
|
|
export type PartyRole = "tank" | "healer" | "damage";
|
|
export type PartySize = 1 | 2 | 3 | 4 | 5;
|
|
|
|
export const PARTY_ROLE_LABELS: Readonly<Record<PartyRole, string>> = Object.freeze({
|
|
tank: "Tank",
|
|
healer: "Healer",
|
|
damage: "DPS",
|
|
});
|
|
|
|
const roles = (...values: PartyRole[]): readonly PartyRole[] => Object.freeze(values);
|
|
|
|
const CLASS_PARTY_ROLES: Readonly<Record<ClassId, readonly PartyRole[]>> = Object.freeze({
|
|
warrior: roles("tank", "damage"),
|
|
paladin: roles("tank", "healer", "damage"),
|
|
hunter: roles("damage"),
|
|
rogue: roles("damage"),
|
|
priest: roles("healer", "damage"),
|
|
"death-knight": roles("tank", "damage"),
|
|
shaman: roles("healer", "damage"),
|
|
mage: roles("damage"),
|
|
warlock: roles("damage"),
|
|
druid: roles("tank", "healer", "damage"),
|
|
barbarian: roles("damage"),
|
|
"witch-doctor": roles("healer", "damage"),
|
|
felsworn: roles("tank", "damage"),
|
|
"witch-hunter": roles("tank", "damage"),
|
|
stormbringer: roles("damage"),
|
|
"knight-of-xoroth": roles("tank", "damage"),
|
|
guardian: roles("tank", "damage"),
|
|
templar: roles("tank", "damage"),
|
|
bloodmage: roles("tank", "healer", "damage"),
|
|
ranger: roles("damage"),
|
|
chronomancer: roles("healer", "damage"),
|
|
necromancer: roles("damage"),
|
|
pyromancer: roles("damage"),
|
|
cultist: roles("tank", "healer", "damage"),
|
|
starcaller: roles("tank", "healer", "damage"),
|
|
"sun-cleric": roles("tank", "healer", "damage"),
|
|
tinker: roles("healer", "damage"),
|
|
venomancer: roles("tank", "healer", "damage"),
|
|
reaper: roles("tank", "damage"),
|
|
primalist: roles("tank", "healer", "damage"),
|
|
runemaster: roles("tank", "damage"),
|
|
"rom-warrior": roles("tank", "damage"),
|
|
"rom-scout": roles("damage"),
|
|
"rom-rogue": roles("damage"),
|
|
"rom-mage": roles("damage"),
|
|
"rom-priest": roles("healer", "damage"),
|
|
"rom-knight": roles("tank", "damage"),
|
|
"rom-warden": roles("tank", "damage"),
|
|
"rom-druid": roles("healer", "damage"),
|
|
"rom-warlock": roles("damage"),
|
|
"rom-champion": roles("tank", "damage"),
|
|
});
|
|
|
|
export function partyRolesForClass(classId: ClassId): readonly PartyRole[] {
|
|
return CLASS_PARTY_ROLES[classId];
|
|
}
|
|
|
|
export function defaultPartyRoleForClass(classId: ClassId): PartyRole {
|
|
const available = partyRolesForClass(classId);
|
|
return available.includes("healer") ? "healer" : available.includes("damage") ? "damage" : available[0];
|
|
}
|
|
|
|
export function classCanFillPartyRole(classId: ClassId, role: PartyRole): boolean {
|
|
return partyRolesForClass(classId).includes(role);
|
|
}
|