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> = Object.freeze({ tank: "Tank", healer: "Healer", damage: "DPS", }); const roles = (...values: PartyRole[]): readonly PartyRole[] => Object.freeze(values); const CLASS_PARTY_ROLES: Readonly> = 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); }