Release Healer Man 0.1.6

This commit is contained in:
phenom
2026-08-20 14:05:50 -04:00
parent 55cfd43d66
commit b12fb84859
96 changed files with 10874 additions and 609 deletions
+114
View File
@@ -0,0 +1,114 @@
import assert from "node:assert/strict";
import test from "node:test";
import { GameDatabaseError } from "./database.mjs";
import { createOnlineSessionManager } from "./online-session.mjs";
function groupSnapshot() {
return {
invitations: [],
group: {
id: "group-one",
leaderAccountId: "leader",
members: [
{
accountId: "leader",
username: "Leader",
character: { id: "lead", name: "Bulwark", classId: "warrior", raceId: "human", gender: "male", level: 20 },
role: "tank",
},
{
accountId: "healer",
username: "Healer",
character: { id: "heal", name: "Mendara", classId: "priest", raceId: "human", gender: "female", level: 20 },
role: "healer",
},
],
activity: {
id: "activity-one",
type: "dungeon",
contentId: "wailing-caverns",
fillWithAi: false,
partySize: 2,
startingLevel: null,
startedAt: Date.now(),
},
},
};
}
const presence = {
position: [1, 2, 3],
yaw: 0.5,
health: 900,
maxHealth: 1_000,
resource: 400,
maxResource: 500,
resourceName: "Mana",
};
test("synchronizes player presence, leader world state, and ordered combat events", () => {
const manager = createOnlineSessionManager();
const snapshot = groupSnapshot();
const leader = manager.sync({ id: "leader" }, snapshot, {
presence,
world: { mobs: { boss: { health: 500, maxHealth: 500 } }, encounter: { phase: "boss" } },
});
assert.equal(leader.authority, true);
assert.equal(leader.players[0].character.name, "Bulwark");
assert.equal(leader.world.mobs.boss.health, 500);
const healer = manager.sync({ id: "healer" }, snapshot, {
presence: { ...presence, position: [4, 5, 6] },
afterEventId: 0,
events: [{
clientEventId: "heal:1",
kind: "damage",
sourceActorId: "online-player:healer",
targetActorId: "boss",
school: "holy",
rawAmount: 75,
effectiveAmount: 60,
occurredAt: 123,
}],
});
assert.equal(healer.players.length, 2);
assert.equal(healer.events.length, 1);
assert.equal(healer.events[0].id, 1);
assert.equal(healer.events[0].sourceAccountId, "healer");
const deduplicated = manager.sync({ id: "healer" }, snapshot, {
presence,
afterEventId: 1,
events: [{
clientEventId: "heal:1",
kind: "damage",
sourceActorId: "online-player:healer",
targetActorId: "boss",
rawAmount: 75,
effectiveAmount: 60,
}],
});
assert.equal(deduplicated.events.length, 0);
assert.equal(deduplicated.latestEventId, 1);
});
test("rejects non-leader world updates and forged enemy events", () => {
const manager = createOnlineSessionManager();
const snapshot = groupSnapshot();
assert.throws(() => manager.sync({ id: "healer" }, snapshot, {
presence,
world: { mobs: {} },
}), (error) => error instanceof GameDatabaseError && error.code === "activity_authority_required");
const state = manager.sync({ id: "healer" }, snapshot, {
presence,
events: [{
clientEventId: "forged",
kind: "damage",
sourceActorId: "boss",
targetActorId: "online-player:leader",
rawAmount: 1_000_000,
}],
});
assert.equal(state.events.length, 0);
});