forked from phenom/healer-man
Update Healer Man server
This commit is contained in:
1 parent
4c768fbec6
commit
b16821e92e
330 files changed
+35406
-1760
No files matched your search
@@ -5,7 +5,10 @@ import {
|
||||
dungeonEncounterSnapshot,
|
||||
resetDungeonEncounters,
|
||||
} from "./dungeonEncounterRuntime";
|
||||
import { applySharedWorld } from "./OnlineSessionBridge";
|
||||
import { applySharedWorld, eventForRelay } from "./OnlineSessionBridge";
|
||||
import { PLAYER_AGGRO_ID } from "./aggro";
|
||||
import { usePartyStore } from "./partyStore";
|
||||
import type { StructuredCombatEvent } from "./combatEvents";
|
||||
import { useCombatStore } from "./combatStore";
|
||||
import { useGameStore } from "./store";
|
||||
import {
|
||||
@@ -75,3 +78,45 @@ describe("online shared-world hydration", () => {
|
||||
expect(useCombatStore.getState().inventory).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("online damage presentation relay", () => {
|
||||
it("relays authority companion hits so followers can display them", () => {
|
||||
useCombatStore.getState().initializeCharacter({ classId: "priest", level: 20 });
|
||||
useCombatStore.getState().registerMob("relay-mob", { name: "Relay mob", maxHealth: 100 });
|
||||
const oldMembers = usePartyStore.getState().members;
|
||||
usePartyStore.setState({ members: [{ id: "companion" } as (typeof oldMembers)[number]] });
|
||||
try {
|
||||
const event = {
|
||||
id: 1, occurredAt: 1_000, kind: "damage", sourceActorId: "companion", targetActorId: "relay-mob",
|
||||
rawAmount: 55, effectiveAmount: 40, overheal: 0, absorbed: 0, critical: true,
|
||||
} satisfies StructuredCombatEvent;
|
||||
expect(eventForRelay(event, "leader", true)).toMatchObject({
|
||||
kind: "damage", sourceActorId: "companion", targetActorId: "relay-mob", effectiveAmount: 40, critical: true,
|
||||
});
|
||||
expect(eventForRelay(event, "leader", false)).toBeNull();
|
||||
} finally {
|
||||
usePartyStore.setState({ members: oldMembers });
|
||||
}
|
||||
});
|
||||
|
||||
it("relays authority AI hits on the leader and companions with their crit flag", () => {
|
||||
useCombatStore.getState().initializeCharacter({ classId: "priest", level: 20 });
|
||||
const oldMembers = usePartyStore.getState().members;
|
||||
usePartyStore.setState({ members: [{ id: "companion" } as (typeof oldMembers)[number]] });
|
||||
try {
|
||||
const hit = {
|
||||
id: 2, occurredAt: 2_000, kind: "damage", sourceActorId: "mob", targetActorId: PLAYER_AGGRO_ID,
|
||||
rawAmount: 80, effectiveAmount: 50, overheal: 0, absorbed: 30, critical: true,
|
||||
} satisfies StructuredCombatEvent;
|
||||
expect(eventForRelay(hit, "leader", true)).toMatchObject({
|
||||
sourceActorId: "mob", targetActorId: "online-player:leader", effectiveAmount: 50, critical: true,
|
||||
});
|
||||
expect(eventForRelay({ ...hit, targetActorId: "companion" }, "leader", true)).toMatchObject({
|
||||
sourceActorId: "mob", targetActorId: "companion", effectiveAmount: 50, critical: true,
|
||||
});
|
||||
expect(eventForRelay(hit, "leader", false)).toBeNull();
|
||||
} finally {
|
||||
usePartyStore.setState({ members: oldMembers });
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user