Update Healer Man server
This commit is contained in:
1 parent
4c768fbec6
commit
b16821e92e
330 files changed
+35406
-1760
No files matched your search
@@ -0,0 +1,83 @@
|
||||
import type { AuraDefinition } from "./combatAuras";
|
||||
import { WOW335_TALENT_NODES } from "./wow335Talents.generated";
|
||||
|
||||
export const WOW335_DEATH_KNIGHT_DESOLATION_TALENT_ID = "talent-2285";
|
||||
export const WOW335_DEATH_KNIGHT_BLOOD_STRIKE_SPELL_ID = 45_902;
|
||||
export const WOW335_DEATH_KNIGHT_BLOOD_STRIKE_ABILITY_ID = "wow335-death-knight-blood-strike";
|
||||
export const WOW335_DEATH_KNIGHT_DESOLATION_AURA_ID = "wow335:death-knight:desolation";
|
||||
|
||||
const DESOLATION_NODE = WOW335_TALENT_NODES.find(
|
||||
(node) => node.id === WOW335_DEATH_KNIGHT_DESOLATION_TALENT_ID,
|
||||
);
|
||||
|
||||
export interface Wow335DeathKnightDesolationProfile {
|
||||
readonly rank: number;
|
||||
readonly damageBonus: number;
|
||||
readonly durationMs: number;
|
||||
readonly triggerSpellId: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the rank value and child trigger directly from the generated local DBC
|
||||
* talent row. The resolved tooltip is the source for the hidden child buff's
|
||||
* percentage and duration; fail closed if that generated text no longer fits.
|
||||
*/
|
||||
export function wow335DeathKnightDesolationProfile(
|
||||
rank: number,
|
||||
): Wow335DeathKnightDesolationProfile | null {
|
||||
const normalizedRank = Math.trunc(rank);
|
||||
const talentRank = DESOLATION_NODE?.rankEffects[normalizedRank - 1];
|
||||
const description = DESOLATION_NODE?.rankDescriptions[normalizedRank - 1];
|
||||
if (normalizedRank < 1 || !talentRank || !description || talentRank.procChance !== 100) return null;
|
||||
|
||||
const values = description.match(
|
||||
/^Your Blood Strikes cause you to deal (\d+(?:\.\d+)?)% additional damage with all attacks for the next (\d+(?:\.\d+)?) seconds\.$/,
|
||||
);
|
||||
const triggerSpellId = talentRank.effects.find((effect) => effect.triggerSpellId > 0)?.triggerSpellId ?? 0;
|
||||
if (!values || triggerSpellId <= 0) return null;
|
||||
|
||||
const damageBonus = Number(values[1]) / 100;
|
||||
const durationMs = Number(values[2]) * 1_000;
|
||||
if (!Number.isFinite(damageBonus) || damageBonus <= 0 || !Number.isFinite(durationMs) || durationMs <= 0) return null;
|
||||
return { rank: normalizedRank, damageBonus, durationMs, triggerSpellId };
|
||||
}
|
||||
|
||||
/** A landed Blood Strike refreshes the source-defined child buff. */
|
||||
export function wow335DeathKnightDesolationShouldTrigger(
|
||||
rank: number,
|
||||
triggeringAbilityId: string,
|
||||
hitLanded: boolean,
|
||||
isMainHandHit = true,
|
||||
): boolean {
|
||||
return hitLanded
|
||||
&& isMainHandHit
|
||||
&& triggeringAbilityId === WOW335_DEATH_KNIGHT_BLOOD_STRIKE_ABILITY_ID
|
||||
&& wow335DeathKnightDesolationProfile(rank) !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the generic all-school damage-done aura used by both player and
|
||||
* generated-companion casts. No school or attack-kind filter is present:
|
||||
* the generated tooltip says "all attacks".
|
||||
*/
|
||||
export function wow335DeathKnightDesolationAuraDefinition(
|
||||
rank: number,
|
||||
): AuraDefinition | null {
|
||||
const profile = wow335DeathKnightDesolationProfile(rank);
|
||||
if (!profile) return null;
|
||||
return {
|
||||
id: WOW335_DEATH_KNIGHT_DESOLATION_AURA_ID,
|
||||
name: "Desolation",
|
||||
description: `Blood Strike increases damage dealt by ${Math.round(profile.damageBonus * 100)}% for ${profile.durationMs / 1_000} seconds.`,
|
||||
disposition: "buff",
|
||||
durationMs: profile.durationMs,
|
||||
maxStacks: 1,
|
||||
stackBehavior: "replace",
|
||||
modifiers: [{
|
||||
kind: "damage",
|
||||
direction: "dealt",
|
||||
operation: "percent",
|
||||
value: profile.damageBonus,
|
||||
}],
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user