Files
healer-man/src/game/wow335ShamanTidalWavesRuntime.ts
T
2026-09-30 09:57:13 -04:00

44 lines
1.7 KiB
TypeScript

export const WOW335_SHAMAN_TIDAL_WAVES_AURA_TAG = "wow335-shaman-tidal-waves";
// The generated rank rows reference child 53390 but do not include its aura duration.
// WotLKDB's 3.3.5a child row supplies the missing 15-second lifetime.
export const WOW335_SHAMAN_TIDAL_WAVES_DURATION_MS = 15_000;
export const WOW335_SHAMAN_TIDAL_WAVES_MAX_CHARGES = 3;
const TIDAL_WAVES_PROC_CHANCE_BY_RANK = [0, 0.33, 0.66, 1] as const;
const TIDAL_WAVES_BONUS_HEALING_PERCENT_BY_RANK = [0, 0.04, 0.08, 0.12] as const;
function normalizedTidalWavesRank(rank: number): number {
return Number.isFinite(rank) ? Math.max(0, Math.min(3, Math.trunc(rank))) : 0;
}
function normalizedTidalWavesCharges(charges: number): number {
return Number.isFinite(charges)
? Math.max(0, Math.min(WOW335_SHAMAN_TIDAL_WAVES_MAX_CHARGES, Math.trunc(charges)))
: 0;
}
export function wow335ShamanTidalWavesProcChance(rank: number): number {
return TIDAL_WAVES_PROC_CHANCE_BY_RANK[normalizedTidalWavesRank(rank)] ?? 0;
}
export function wow335ShamanTidalWavesChargesForTrigger(abilityName: string): number {
if (abilityName === "Chain Heal") return 3;
if (abilityName === "Riptide") return 2;
return 0;
}
export function wow335ShamanTidalWavesCastTimeMultiplier(charges: number): number {
return 1 - normalizedTidalWavesCharges(charges) * 0.1;
}
export function wow335ShamanTidalWavesCriticalChanceBonusPercent(
abilityName: string,
charges: number,
): number {
return abilityName === "Lesser Healing Wave" ? normalizedTidalWavesCharges(charges) * 10 : 0;
}
export function wow335ShamanTidalWavesBonusHealingPercent(rank: number): number {
return TIDAL_WAVES_BONUS_HEALING_PERCENT_BY_RANK[normalizedTidalWavesRank(rank)] ?? 0;
}