44 lines
1.7 KiB
TypeScript
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;
|
|
}
|