87 lines
3.1 KiB
TypeScript
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 },
|
|
})),
|
|
};
|
|
}
|