Update Healer Man server

This commit is contained in:
phenom committed 2026-10-02 10:38:12 -04:00
1 parent 4c768fbec6
commit b16821e92e
330 files changed
+35406 -1760

No files matched your search

+25 -40
View File
@@ -8,7 +8,8 @@ import { createConfiguredPartyMember, usePartyStore } from "./partyStore";
import {
ROM_KNIGHT_DIVINE_PUNISHMENT_TAG,
ROM_KNIGHT_GODS_VENGEANCE_TAG,
ROM_KNIGHT_HOLY_LIGHTS_FURY_TAG,
ROM_KNIGHT_COMPASSION_OF_HOLY_LIGHT_TAG,
romKnightDivinePunishmentAuraForSealStacks,
ROM_KNIGHT_SHIELD_OF_VALOR_TAG,
} from "./romKnightOverrides";
import { romEffectsForCast } from "./romCombatMechanics";
@@ -118,7 +119,7 @@ describe("RuneWaker Knight periodic skills", () => {
&& event.effectiveAmount > 0)).toBe(true);
});
it("limits Divine Punishment's sourced 1% bonus to Punishment", () => {
it("uses current CoA's 28.5% Divine Punishment damage bonus only on Punishment", () => {
useCombatStore.getState().initializeCharacter({
classId: "rom-knight", secondaryClassId: "rom-warrior", raceId: "rom-human", level: 80,
});
@@ -163,9 +164,9 @@ describe("RuneWaker Knight periodic skills", () => {
expect(damageValues(baseline)).toHaveLength(2);
expect(damageValues(boosted)).toHaveLength(2);
for (const [index, base] of damageValues(baseline).entries()) {
expect(damageValues(boosted)[index]!.coefficient).toBeCloseTo(base.coefficient * 1.01);
expect(damageValues(boosted)[index]!.basePoints).toBeCloseTo(base.basePoints * 1.01);
expect(damageValues(boosted)[index]!.pointsPerLevel).toBeCloseTo(base.pointsPerLevel * 1.01);
expect(damageValues(boosted)[index]!.coefficient).toBeCloseTo(base.coefficient * 1.285);
expect(damageValues(boosted)[index]!.basePoints).toBeCloseTo(base.basePoints * 1.285);
expect(damageValues(boosted)[index]!.pointsPerLevel).toBeCloseTo(base.pointsPerLevel * 1.285);
}
expect(romEffectsForCast(abilityById("rom-knight-primary-1")!, {
...context,
@@ -173,54 +174,38 @@ describe("RuneWaker Knight periodic skills", () => {
})).toEqual(romEffectsForCast(abilityById("rom-knight-primary-1")!, context));
});
it("makes Divine Punishment apply its sourced Light-damage vulnerability", () => {
useCombatStore.getState().initializeCharacter({
classId: "rom-knight", secondaryClassId: "rom-warrior", raceId: "rom-human", level: 80,
});
useCombatStore.getState().registerMob("divine-punishment-target", {
name: "Divine Punishment Target", maxHealth: 100_000,
});
setMobPosition("divine-punishment-target", [3, 0, 0]);
useCombatStore.getState().selectMob("divine-punishment-target");
expect(useCombatStore.getState().castAbility("rom-knight-primary-1", undefined, 1_000))
.toMatchObject({ ok: true });
expect(useCombatStore.getState().castAbility("rom-knight-general-0", undefined, 12_000))
.toMatchObject({ ok: true });
const vulnerability = useCombatStore.getState().auras.find((aura) => (
aura.targetId === "divine-punishment-target"
&& aura.definition.id === "rom-knight-divine-punishment-light-vulnerability"
));
expect(vulnerability?.definition).toMatchObject({
it("replaces the old Light-only aura with current CoA's general per-seal vulnerability data", () => {
expect(romKnightDivinePunishmentAuraForSealStacks(3)?.aura).toMatchObject({
durationMs: 10_000,
modifiers: [{ kind: "damage", direction: "taken", school: "holy", operation: "percent", value: 0.01 }],
modifiers: [{ kind: "damage", direction: "taken", operation: "percent", value: 0.06 }],
});
expect(vulnerability?.expiresAt).toBe(22_000);
expect(romKnightDivinePunishmentAuraForSealStacks(3)?.aura.id)
.toBe("rom-knight-divine-punishment-damage-taken");
});
it("reduces Holy Seal cooldown by three seconds with Holy Light's Fury", () => {
it("uses the local Knight/Priest Compassion row bridged to current CoA behavior and no longer changes Holy Seal cooldown", () => {
useCombatStore.getState().initializeCharacter({
classId: "rom-knight", secondaryClassId: "rom-priest", raceId: "rom-human", level: 80,
});
const state = useCombatStore.getState();
const holySeal = state.abilities.find((ability) => ability.dbcSpellId === 490149)!;
const furyPassive = state.abilities.find((ability) => ability.dbcSpellId === 491635)!;
expect(furyPassive.passive).toBe(true);
expect(furyPassive.effects).toEqual([
const compassionPassive = state.abilities.find((ability) => ability.dbcSpellId === 491635)!;
expect(compassionPassive).toMatchObject({ name: "Compassion of Holy Light", passive: true });
expect(compassionPassive.effects).toEqual([
expect.objectContaining({
kind: "apply-aura",
aura: expect.objectContaining({ utilityTags: [ROM_KNIGHT_HOLY_LIGHTS_FURY_TAG] }),
aura: expect.objectContaining({ utilityTags: [ROM_KNIGHT_COMPASSION_OF_HOLY_LIGHT_TAG] }),
}),
]);
useCombatStore.getState().registerMob("holy-lights-fury-target", {
name: "Holy Light's Fury Target", maxHealth: 100_000,
});
setMobPosition("holy-lights-fury-target", [3, 0, 0]);
useCombatStore.getState().selectMob("holy-lights-fury-target");
expect(useCombatStore.getState().castAbility(holySeal.id, undefined, 1_000)).toMatchObject({ ok: true });
expect(useCombatStore.getState().cooldowns[holySeal.id]).toBe(8_000);
const tags = state.auras.find((aura) => aura.definition.utilityTags?.includes(ROM_KNIGHT_COMPASSION_OF_HOLY_LIGHT_TAG))
?.definition.utilityTags ?? [];
expect(romEffectsForCast(holySeal, {
sealStacks: 0, bleedCount: 0, charged: false, mainHandDagger: false,
casterMaxHealth: state.maxHealth, targetHealthPercent: 1, passiveTags: tags,
})).toEqual(romEffectsForCast(holySeal, {
sealStacks: 0, bleedCount: 0, charged: false, mainHandDagger: false,
casterMaxHealth: state.maxHealth, targetHealthPercent: 1,
}));
});
it.each([true, false])("lets God's Vengeance preserve Holy Seal when the 50% roll is %s", (preservesSeal) => {