forked from phenom/healer-man
Release Healer Man 0.1.59
This commit is contained in:
1 parent
11934a3979
commit
ab1434a3b8
44 files changed
+1242
-103
No files matched your search
@@ -11,6 +11,7 @@ import { loadCoaAbilityCatalogShard } from "./coaAbilityCatalogLoader";
|
||||
import { registerAbilityAnimationLookup } from "./abilityAnimationLookup";
|
||||
import type { AuraDefinition, DamageSchool, DispelCategory } from "./combatAuras";
|
||||
import { applyAbilityBalanceTuning, currentBalanceTuningPolicy } from "./balanceTuning";
|
||||
import { preloadRuntimeTalentCatalog } from "./talentRuntimeCatalog";
|
||||
|
||||
export type RomSkillGroup = "primary" | "general" | "elite" | "passive";
|
||||
|
||||
@@ -268,6 +269,9 @@ export interface AbilityRankDefinition {
|
||||
readonly description: string;
|
||||
readonly castMode: AbilityCastMode;
|
||||
readonly castTimeMs: number;
|
||||
readonly channelTickMs?: number;
|
||||
readonly channelPulses?: number;
|
||||
readonly channelStartsWithPulse?: boolean;
|
||||
readonly cooldownMs: number;
|
||||
readonly gcdMs: number;
|
||||
readonly cost: AbilityCost;
|
||||
@@ -293,6 +297,9 @@ export interface AbilityDefinition {
|
||||
readonly radius?: number;
|
||||
readonly castMode: AbilityCastMode;
|
||||
readonly castTimeMs: number;
|
||||
readonly channelTickMs?: number;
|
||||
readonly channelPulses?: number;
|
||||
readonly channelStartsWithPulse?: boolean;
|
||||
readonly cooldownMs: number;
|
||||
readonly cooldownGroup?: string;
|
||||
readonly gcdMs: number;
|
||||
@@ -900,6 +907,7 @@ const abilityCatalog: Record<string, AbilityDefinition> = {};
|
||||
let romEliteAbilities: readonly AbilityDefinition[] = [];
|
||||
let romTriggeredAbilityResolver: ((spellId: number) => AbilityDefinition | null) | null = null;
|
||||
const coaTriggeredAbilities = new Map<number, AbilityDefinition>();
|
||||
const classicChannelTriggeredAbilities = new Map<number, AbilityDefinition>();
|
||||
let classicLoad: Promise<void> | null = null;
|
||||
let romLoad: Promise<void> | null = null;
|
||||
const coaLoads = new Map<CoaClassId, Promise<void>>();
|
||||
@@ -940,13 +948,19 @@ for (const classId of BASE_CLASS_IDS) {
|
||||
|
||||
async function preloadClassicAbilityCatalog(): Promise<void> {
|
||||
if (classicLoad) return classicLoad;
|
||||
classicLoad = import("./wow335AbilityCatalog").then(({ WOW335_ABILITIES_BY_CLASS }) => {
|
||||
classicLoad = import("./wow335AbilityCatalog").then(({
|
||||
WOW335_ABILITIES_BY_CLASS,
|
||||
WOW335_CHANNEL_TRIGGERED_ABILITIES_BY_SPELL_ID,
|
||||
}) => {
|
||||
for (const classId of BASE_CLASS_IDS) {
|
||||
registerClassAbilities(
|
||||
classId,
|
||||
mergeWow335ClassicAbilities(CLASSIC_CORE_ABILITIES[classId], WOW335_ABILITIES_BY_CLASS[classId]),
|
||||
);
|
||||
}
|
||||
for (const [spellId, ability] of Object.entries(WOW335_CHANNEL_TRIGGERED_ABILITIES_BY_SPELL_ID)) {
|
||||
classicChannelTriggeredAbilities.set(Number(spellId), ability);
|
||||
}
|
||||
}).catch((error: unknown) => {
|
||||
classicLoad = null;
|
||||
throw error;
|
||||
@@ -994,6 +1008,10 @@ async function preloadCoaAbilityCatalog(classId: CoaClassId): Promise<void> {
|
||||
*/
|
||||
export async function preloadAbilityCatalogsForClasses(classIds: readonly ClassId[]): Promise<void> {
|
||||
const requested = new Set(classIds);
|
||||
if (BASE_CLASS_IDS.some((classId) => requested.has(classId))
|
||||
|| COA_CLASS_IDS.some((classId) => requested.has(classId))) {
|
||||
await preloadRuntimeTalentCatalog();
|
||||
}
|
||||
const loads: Promise<void>[] = [];
|
||||
if (BASE_CLASS_IDS.some((classId) => requested.has(classId))) loads.push(preloadClassicAbilityCatalog());
|
||||
if (ROM_CLASS_IDS.some((classId) => requested.has(classId))) loads.push(preloadRomAbilityCatalog());
|
||||
@@ -1008,6 +1026,7 @@ export function triggeredAbilityBySpellId(
|
||||
includeCoa = true,
|
||||
): AbilityDefinition | null {
|
||||
return romTriggeredAbilityResolver?.(spellId)
|
||||
?? classicChannelTriggeredAbilities.get(spellId)
|
||||
?? (includeCoa ? coaTriggeredAbilities.get(spellId) : undefined)
|
||||
?? null;
|
||||
}
|
||||
@@ -1104,6 +1123,9 @@ export function abilityAtLevel(
|
||||
description: rank.description || ability.description,
|
||||
castMode: rank.castMode,
|
||||
castTimeMs: rank.castTimeMs,
|
||||
channelTickMs: rank.channelTickMs,
|
||||
channelPulses: rank.channelPulses,
|
||||
channelStartsWithPulse: rank.channelStartsWithPulse,
|
||||
cooldownMs: rank.cooldownMs,
|
||||
gcdMs: rank.gcdMs,
|
||||
cost: rank.cost,
|
||||
|
||||
Reference in new issue
Block a user