Update Healer Man server
This commit is contained in:
1 parent
4c768fbec6
commit
b16821e92e
330 files changed
+35406
-1760
No files matched your search
@@ -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) => {
|
||||
|
||||
Reference in new issue
Block a user