57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import type { CoaClassId } from "../app/characterCatalog";
|
|
import type { PartyRole } from "./partyRoles";
|
|
|
|
export type CoaFirstPartySeatRole = "tank" | "healer" | "melee" | "ranged" | "caster";
|
|
|
|
export interface CoaFirstPartyMemberDefinition {
|
|
readonly classId: CoaClassId;
|
|
readonly specializationId: string;
|
|
readonly specialization: string;
|
|
/** Seat label; melee, ranged, and caster all use the shared damage role in combat. */
|
|
readonly role: CoaFirstPartySeatRole;
|
|
readonly partyRole: PartyRole;
|
|
}
|
|
|
|
/** Fixed targeted diagnostic roster. This does not affect readiness or party pools. */
|
|
export const COA_FIRST_PARTY_MEMBERS: readonly CoaFirstPartyMemberDefinition[] = Object.freeze([
|
|
Object.freeze({
|
|
classId: "guardian",
|
|
specializationId: "guardian:vanguard",
|
|
specialization: "Vanguard",
|
|
role: "tank",
|
|
partyRole: "tank",
|
|
}),
|
|
Object.freeze({
|
|
classId: "witch-doctor",
|
|
specializationId: "witch-doctor:brewing",
|
|
specialization: "Brewing",
|
|
role: "healer",
|
|
partyRole: "healer",
|
|
}),
|
|
Object.freeze({
|
|
classId: "barbarian",
|
|
specializationId: "barbarian:brutality",
|
|
specialization: "Brutality",
|
|
role: "melee",
|
|
partyRole: "damage",
|
|
}),
|
|
Object.freeze({
|
|
classId: "ranger",
|
|
specializationId: "ranger:archery",
|
|
specialization: "Archery",
|
|
role: "ranged",
|
|
partyRole: "damage",
|
|
}),
|
|
Object.freeze({
|
|
classId: "pyromancer",
|
|
specializationId: "pyromancer:incineration",
|
|
specialization: "Incineration",
|
|
role: "caster",
|
|
partyRole: "damage",
|
|
}),
|
|
]);
|
|
|
|
export const COA_FIRST_PARTY_CLASS_IDS: readonly CoaClassId[] = Object.freeze([
|
|
...new Set(COA_FIRST_PARTY_MEMBERS.map((member) => member.classId)),
|
|
]);
|