Files
healer-man/src/game/romScoutPriestScreenAttack.ts
T
2026-10-02 10:38:12 -04:00

87 lines
3.1 KiB
TypeScript

import type { AbilityDefinition, AbilityEffect } from "./abilityCatalog";
import type { AuraDefinition } from "./combatAuras";
export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_ID = 499555;
export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_DURATION_MS = 20_000;
export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_COOLDOWN_MS = 60_000;
/** CoA radius 150 is interpreted as 15 project units using the established 10:1 conversion. */
export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS = 15;
export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_DAMAGE_BONUS = 0.174;
export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_DESCRIPTION =
"For 20 seconds, increases your and nearby party members' damage dealt by 17.4%, including periodic damage. Radius: 150. Cooldown: 60 seconds.";
export const ROM_SCOUT_PRIEST_SCREEN_ATTACK_AURA: AuraDefinition = Object.freeze<AuraDefinition>({
id: "rom-scout-priest:screen-attack",
name: "Screen Attack",
description: "Increases damage dealt by 17.4% for 20 seconds.",
disposition: "buff",
durationMs: ROM_SCOUT_PRIEST_SCREEN_ATTACK_DURATION_MS,
stackBehavior: "replace",
uniqueBySource: true,
modifiers: [{
kind: "damage",
direction: "dealt",
operation: "percent",
value: ROM_SCOUT_PRIEST_SCREEN_ATTACK_DAMAGE_BONUS,
}],
});
const SCREEN_ATTACK_EFFECT: AbilityEffect = {
kind: "apply-aura",
aura: ROM_SCOUT_PRIEST_SCREEN_ATTACK_AURA,
recipient: "caster",
scope: "party",
radius: ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS,
sourceEffectType: -1,
sourceAuraType: -1,
miscValue: 0,
triggerSpellId: 0,
};
/**
* Current CoA Scout/Priest Screen Attack (499555) is an active raid damage buff.
* Its current skill entry says 20 seconds; patch 11.1.1's rework note says 30.
* The catalog follows the current skill entry and keeps that discrepancy in
* the feature rationale rather than carrying the obsolete RuneWaker passive.
*/
export function romScoutPriestScreenAttackCatalogOverride(
ability: AbilityDefinition,
): AbilityDefinition {
if (ability.source !== "runewaker"
|| ability.classId !== "rom-scout"
|| ability.secondaryClassId !== "rom-priest"
|| ability.dbcSpellId !== ROM_SCOUT_PRIEST_SCREEN_ATTACK_ID) {
return ability;
}
return {
...ability,
name: "Screen Attack",
description: ROM_SCOUT_PRIEST_SCREEN_ATTACK_DESCRIPTION,
target: "self",
range: { min: 0, max: 0 },
radius: ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS,
targeting: { shape: "circle", radius: ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS },
castMode: "instant",
castTimeMs: 0,
cooldownMs: ROM_SCOUT_PRIEST_SCREEN_ATTACK_COOLDOWN_MS,
costs: [],
cost: { resource: "mana", amount: 0 },
effects: [SCREEN_ATTACK_EFFECT],
passive: false,
romSkillGroup: "elite",
ranks: ability.ranks?.map((rank) => ({
...rank,
description: ROM_SCOUT_PRIEST_SCREEN_ATTACK_DESCRIPTION,
castMode: "instant",
castTimeMs: 0,
cooldownMs: ROM_SCOUT_PRIEST_SCREEN_ATTACK_COOLDOWN_MS,
costs: [],
cost: { resource: "mana", amount: 0 },
effects: [SCREEN_ATTACK_EFFECT],
targeting: { shape: "circle", radius: ROM_SCOUT_PRIEST_SCREEN_ATTACK_RADIUS },
})),
};
}