47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { IWT2_INFUSION_ABILITIES, type Iwt2InfusionAbilityId } from './infusionAbilities'
|
|
import type { Iwt2HealerAbility, Iwt2HealerId } from './healerAbilities'
|
|
|
|
export function iwt2HealerInfusionAbility(
|
|
infusionAbilityId: Iwt2InfusionAbilityId,
|
|
healerId: Iwt2HealerId,
|
|
): Iwt2HealerAbility | null {
|
|
const infusion = IWT2_INFUSION_ABILITIES[infusionAbilityId]
|
|
if (!infusion || infusion.classId !== 'healer') return null
|
|
if (infusion.effectKey === 'sanctuary') {
|
|
return createInfusedHealerAbility(healerId, 'sanctuary', infusion.name, infusion.icon, 'shield', 50, 16, infusion.cooldownSeconds ?? 45, 'shield')
|
|
}
|
|
if (infusion.effectKey === 'guardianPulse') {
|
|
return createInfusedHealerAbility(healerId, 'guardian-pulse', infusion.name, infusion.icon, 'group', 26, 14, infusion.cooldownSeconds ?? 40)
|
|
}
|
|
if (infusion.effectKey === 'emergencyMiracle') {
|
|
return createInfusedHealerAbility(healerId, 'emergency-miracle', infusion.name, infusion.icon, 'direct', 90, 20, infusion.cooldownSeconds ?? 75)
|
|
}
|
|
return null
|
|
}
|
|
|
|
function createInfusedHealerAbility(
|
|
healerId: Iwt2HealerId,
|
|
slug: string,
|
|
name: string,
|
|
icon: string,
|
|
kind: Iwt2HealerAbility['kind'],
|
|
power: number,
|
|
manaCost: number,
|
|
cooldownSeconds: number,
|
|
effectType?: string,
|
|
): Iwt2HealerAbility {
|
|
return {
|
|
cooldownSeconds,
|
|
effectType,
|
|
healerId,
|
|
icon,
|
|
id: `${healerId}-infusion-${slug}`,
|
|
kind,
|
|
manaCost,
|
|
name,
|
|
power,
|
|
slot: 6,
|
|
target: 'party-member',
|
|
}
|
|
}
|