forked from phenom/healer-man
Release Healer Man 0.1.54
This commit is contained in:
1 parent
d6976e6ef6
commit
2dbb0acfc1
26 files changed
+1893
-912
No files matched your search
@@ -19,7 +19,7 @@ import {
|
||||
partyUsesRangedAttacks,
|
||||
resetPartyRuntimeClock,
|
||||
} from "./partyRuntime";
|
||||
import { usePartyStore } from "./partyStore";
|
||||
import { createConfiguredPartyMember, usePartyStore } from "./partyStore";
|
||||
import { EMPTY_ITEM_STATS } from "./itemStats";
|
||||
import { subscribeCombatPresentation, type CombatPresentationEvent } from "./combatPresentation";
|
||||
import { abilitiesForClass } from "./abilityCatalog";
|
||||
@@ -72,6 +72,74 @@ describe("party combat runtime", () => {
|
||||
expect(effects.find(effect => effect.targetId === first.targetId)?.nextTickAt).toBe(first.nextTickAt);
|
||||
});
|
||||
|
||||
it("precasts Earth Shield on the tank while the Restoration Shaman is at full health", () => {
|
||||
useCombatStore.getState().initializeCharacter({ classId: "mage", role: "damage", level: 80 });
|
||||
const tank = createConfiguredPartyMember({
|
||||
name: "Tank",
|
||||
classId: "warrior",
|
||||
specialization: "Protection",
|
||||
specializationId: "warrior:protection",
|
||||
talentTreeId: "warrior-protection",
|
||||
role: "tank",
|
||||
}, 80, 0, "earth-shield-runtime");
|
||||
const healer = createConfiguredPartyMember({
|
||||
name: "Healer",
|
||||
classId: "shaman",
|
||||
specialization: "Restoration",
|
||||
specializationId: "shaman:restoration",
|
||||
talentTreeId: "shaman-restoration",
|
||||
role: "healer",
|
||||
}, 80, 1, "earth-shield-runtime");
|
||||
usePartyStore.getState().initializeParty("earth-shield-runtime", 80, useCombatStore.getState().health, "damage");
|
||||
usePartyStore.setState({ members: [tank, healer] });
|
||||
registerPartyRuntimePosition(tank.id, [0, 0, 0]);
|
||||
registerPartyRuntimePosition(healer.id, [-12, 0, 0]);
|
||||
useCombatStore.getState().synchronizeActors();
|
||||
useCombatStore.getState().registerMob("earth-shield-boss", {
|
||||
name: "Earth Shield boss", boss: true, maxHealth: 100_000, xpReward: 0,
|
||||
});
|
||||
setMobPosition("earth-shield-boss", [2, 0, 0]);
|
||||
useCombatStore.getState().damageMob("earth-shield-boss", 1, 100);
|
||||
updatePartyRuntimeTargetVisibility(tank.id, "earth-shield-boss", true);
|
||||
updatePartyRuntimeTargetVisibility(healer.id, "earth-shield-boss", true);
|
||||
|
||||
for (const now of [1_000, 2_500, 4_000]) advanceDungeonPartyCombat(now);
|
||||
|
||||
expect(useCombatStore.getState().auras.some((aura) => (
|
||||
aura.sourceId === healer.id
|
||||
&& aura.targetId === tank.id
|
||||
&& aura.definition.exclusiveGroup === "shaman:earth-shield"
|
||||
))).toBe(true);
|
||||
});
|
||||
|
||||
it("turns Feral Spirit into two live Enhancement summons against a boss", () => {
|
||||
useCombatStore.getState().initializeCharacter({ classId: "mage", role: "damage", level: 80 });
|
||||
const shaman = createConfiguredPartyMember({
|
||||
name: "Enhancement",
|
||||
classId: "shaman",
|
||||
specialization: "Enhancement",
|
||||
specializationId: "shaman:enhancement",
|
||||
talentTreeId: "shaman-enhancement",
|
||||
role: "damage",
|
||||
}, 80, 0, "feral-spirit-runtime");
|
||||
usePartyStore.getState().initializeParty("feral-spirit-runtime", 80, useCombatStore.getState().health, "damage");
|
||||
usePartyStore.setState({ members: [shaman] });
|
||||
registerPartyRuntimePosition(shaman.id, [0, 0, 0]);
|
||||
useCombatStore.getState().synchronizeActors();
|
||||
useCombatStore.getState().registerMob("feral-spirit-boss", {
|
||||
name: "Feral Spirit boss", boss: true, maxHealth: 100_000, xpReward: 0,
|
||||
});
|
||||
setMobPosition("feral-spirit-boss", [2, 0, 0]);
|
||||
useCombatStore.getState().damageMob("feral-spirit-boss", 1, 100);
|
||||
updatePartyRuntimeTargetVisibility(shaman.id, "feral-spirit-boss", true);
|
||||
for (const now of [1_000, 2_500, 4_000, 5_500, 7_000]) advanceDungeonPartyCombat(now);
|
||||
|
||||
const feralSpirit = abilitiesForClass("shaman").find((ability) => ability.name === "Feral Spirit")!;
|
||||
expect(useCombatStore.getState().summons.filter((summon) => (
|
||||
summon.ownerActorId === shaman.id && summon.sourceAbilityId === feralSpirit.id
|
||||
))).toHaveLength(2);
|
||||
});
|
||||
|
||||
it("lets a resurrected tank rejoin independently instead of taunting or casting from its checkpoint", () => {
|
||||
registerEngagedMob();
|
||||
const tank = usePartyStore.getState().members.find((member) => member.role === "tank")!;
|
||||
|
||||
Reference in new issue
Block a user