52 lines
2.2 KiB
TypeScript
52 lines
2.2 KiB
TypeScript
import type { AbilityEffect } from "./abilityCatalog";
|
|
import type { AuraDefinition } from "./combatAuras";
|
|
|
|
export const WOW335_ROGUE_IMPROVED_KICK_TAG = "wow335-rogue-improved-kick";
|
|
export const WOW335_ROGUE_IMPROVED_KICK_TALENT_ID = "talent-206";
|
|
export const WOW335_ROGUE_UNFAIR_ADVANTAGE_COOLDOWN_TAG = "wow335-rogue-unfair-advantage-cooldown";
|
|
export const WOW335_ROGUE_UNFAIR_ADVANTAGE_DAMAGE_ID = "wow335-rogue-unfair-advantage";
|
|
|
|
/** Generated talent 2073 returns 50%/100% main-hand weapon damage at ranks 1/2. */
|
|
export function wow335RogueUnfairAdvantageDamageMultiplierForRank(rank: number): number {
|
|
const safeRank = Math.max(0, Math.min(2, Math.trunc(Number.isFinite(rank) ? rank : 0)));
|
|
return safeRank / 2;
|
|
}
|
|
|
|
const IMPROVED_KICK_CAPSTONE_AURA: AuraDefinition = {
|
|
id: WOW335_ROGUE_IMPROVED_KICK_TAG,
|
|
name: "Improved Kick",
|
|
description: "A successful Kick interrupt restores 40 Energy and increases attack speed by 35% for 6 seconds.",
|
|
disposition: "buff",
|
|
durationMs: 6_000,
|
|
stackBehavior: "refresh",
|
|
utilityTags: [WOW335_ROGUE_IMPROVED_KICK_TAG],
|
|
modifiers: [
|
|
{ kind: "stat", stat: "melee-haste", operation: "flat", value: 35 },
|
|
{ kind: "stat", stat: "ranged-haste", operation: "flat", value: 35 },
|
|
],
|
|
};
|
|
|
|
/** Improved Kick silences on a 50%/100% rank chance for the stock two-rank talent. */
|
|
export function wow335RogueImprovedKickSilenceDurationMs(rank: number, roll: number): number {
|
|
const safeRank = Math.max(0, Math.min(2, Math.trunc(Number.isFinite(rank) ? rank : 0)));
|
|
const safeRoll = Number.isFinite(roll) ? Math.max(0, Math.min(1, roll)) : 1;
|
|
const chance = [0, 0.5, 1][safeRank] ?? 0;
|
|
return chance > 0 && safeRoll < chance ? 2_000 : 0;
|
|
}
|
|
|
|
/** Generated talent 206 has a two-rank capstone with this success-only rider. */
|
|
export function wow335RogueImprovedKickAuraEffectForRank(
|
|
rank: number,
|
|
): Extract<AbilityEffect, { kind: "apply-aura" }> | null {
|
|
if (Math.max(0, Math.min(2, Math.trunc(Number.isFinite(rank) ? rank : 0))) < 2) return null;
|
|
return {
|
|
kind: "apply-aura",
|
|
recipient: "caster",
|
|
aura: IMPROVED_KICK_CAPSTONE_AURA,
|
|
sourceEffectType: -1,
|
|
sourceAuraType: -1,
|
|
miscValue: 0,
|
|
triggerSpellId: 0,
|
|
};
|
|
}
|