Update Healer Man server

This commit is contained in:
phenom committed 2026-09-23 16:14:19 -04:00
1 parent f90ba7d989
commit 189b94d6b7
51 files changed
+3448 -154

No files matched your search

+92 -4
View File
@@ -21,6 +21,22 @@ function effectsOfKind<K extends AbilityEffect["kind"]>(
}
describe("WoW 3.3.5 executable effect mapping", () => {
it("combines each Holy Nova damage rank with its matching healing payload", () => {
const nova = byId("wow335-priest-holy-nova");
expect(nova.ranks).toHaveLength(9);
for (const rank of nova.ranks ?? []) {
expect(effectsOfKind(rank, "damage")).toHaveLength(1);
expect(effectsOfKind(rank, "heal")).toHaveLength(1);
expect(rank.cost.amount).toBeGreaterThan(0);
}
expect(abilityAtLevel(nova, 80)).toMatchObject({
dbcSpellId: 48078,
target: "self",
radius: 10,
castMode: "instant",
});
});
it("maps Envenom to Deadly Poison dose damage and its poison-frequency buff", () => {
const envenom = abilityAtLevel(byId("wow335-rogue-envenom"), 80);
expect(effectsOfKind(envenom, "finisher-damage")).toEqual([
@@ -188,13 +204,85 @@ describe("WoW 3.3.5 executable effect mapping", () => {
]));
});
it("models Penance as the Discipline rotation's friendly heal", () => {
it("models Penance as three healing or damaging pulses", () => {
const penance = byId("wow335-priest-penance");
expect(penance.target).toBe("friendly");
expect(penance.target).toBe("any");
expect(effectsOfKind(penance, "heal")).toEqual([
expect.objectContaining({ coefficient: 1.8 }),
expect.objectContaining({ coefficient: 0.6 }),
]);
expect(effectsOfKind(penance, "damage")).toEqual([]);
expect(effectsOfKind(penance, "hot")).toEqual([
expect.objectContaining({ coefficient: 0.6, ticks: 2, intervalMs: 1_000 }),
]);
expect(effectsOfKind(penance, "damage")).toEqual([
expect.objectContaining({ coefficient: 0.6 }),
]);
expect(effectsOfKind(penance, "dot")).toEqual([
expect.objectContaining({ coefficient: 0.6, ticks: 2, intervalMs: 1_000 }),
]);
});
it("maps the Ready-five missing spell payloads without cast-time damage on self buffs", () => {
const devastate = abilityAtLevel(byId("wow335-warrior-devastate"), 80);
expect(effectsOfKind(devastate, "damage")).toEqual([
expect.objectContaining({ coefficient: 1, bonusPerSunderStack: 202 }),
]);
expect(effectsOfKind(devastate, "apply-aura")).toEqual([
expect.objectContaining({ aura: expect.objectContaining({ id: "wow335:warrior:sunder-armor", maxStacks: 5 }) }),
]);
const lastStand = byId("wow335-warrior-last-stand");
expect(lastStand.target).toBe("self");
expect(effectsOfKind(lastStand, "heal")).toEqual([]);
expect(effectsOfKind(lastStand, "apply-aura")).toEqual([
expect.objectContaining({ aura: expect.objectContaining({
modifiers: [{ kind: "stat", stat: "maximum-health", operation: "percent", value: 0.3 }],
}) }),
]);
expect(effectsOfKind(byId("wow335-priest-divine-hymn"), "heal")).toEqual([
expect.objectContaining({ scope: "party", maximumTargets: 3, radius: 40 }),
]);
expect(effectsOfKind(byId("wow335-hunter-chimera-shot"), "damage")).toEqual([
expect.objectContaining({ coefficient: 1.25 }),
]);
expect(effectsOfKind(abilityAtLevel(byId("wow335-mage-living-bomb"), 80), "dot")).toHaveLength(1);
const moltenArmor = abilityAtLevel(byId("wow335-mage-molten-armor"), 80);
expect(moltenArmor.target).toBe("self");
expect(effectsOfKind(moltenArmor, "damage")).toEqual([]);
expect(effectsOfKind(byId("wow335-rogue-shiv"), "combo")).toEqual([{ kind: "combo", amount: 1 }]);
expect(effectsOfKind(byId("wow335-rogue-cold-blood"), "apply-aura")).toEqual([
expect.objectContaining({ aura: expect.objectContaining({
utilityTags: ["next-offensive-critical"],
modifiers: [{ kind: "stat", stat: "critical-strike", operation: "flat", value: 100 }],
}) }),
]);
});
it("maps the remaining Ready-five cooldowns and defensive modifiers", () => {
expect(effectsOfKind(byId("wow335-warrior-last-stand"), "apply-aura")[0]?.aura.durationMs).toBe(20_000);
expect(byId("wow335-warrior-enraged-regeneration").target).toBe("self");
const innerFire = abilityAtLevel(byId("wow335-priest-inner-fire"), 80);
expect(effectsOfKind(innerFire, "apply-aura")[0]?.aura).toMatchObject({
maxStacks: 20, initialStacks: 20,
modifiers: [{ kind: "stat", stat: "armor", operation: "flat", value: 2440, perStack: false }],
});
const shadowfiend = byId("wow335-priest-shadowfiend");
expect(effectsOfKind(shadowfiend, "summon")).toHaveLength(1);
expect(effectsOfKind(shadowfiend, "resource")).toHaveLength(0);
expect(effectsOfKind(abilityAtLevel(byId("wow335-hunter-kill-shot"), 80), "damage"))
.toEqual([{ kind: "damage", coefficient: 2, bonusFlat: 325 }]);
const combustion = byId("wow335-mage-combustion");
expect(combustion.target).toBe("self");
expect(effectsOfKind(combustion, "damage")).toHaveLength(0);
expect(effectsOfKind(combustion, "apply-aura")[0]?.aura.utilityTags).toContain("fire-crit-stacking");
expect(effectsOfKind(byId("wow335-mage-mirror-image"), "summon")).toHaveLength(3);
const molten = abilityAtLevel(byId("wow335-mage-molten-armor"), 80);
expect(effectsOfKind(molten, "apply-aura").flatMap((effect) => effect.aura.modifiers ?? []))
.toEqual(expect.arrayContaining([
expect.objectContaining({ stat: "incoming-critical-strike", value: -5 }),
expect.objectContaining({ stat: "spirit-to-spell-crit-rating", value: 0.35 }),
]));
expect(effectsOfKind(abilityAtLevel(byId("wow335-rogue-evasion"), 80), "apply-aura")
.flatMap((effect) => effect.aura.modifiers ?? []))
.toEqual(expect.arrayContaining([expect.objectContaining({ stat: "incoming-ranged-hit", value: -25 })]));
});
it("keeps triggered shield damage children out of learned Shaman ranks", () => {