Update Healer Man server

This commit is contained in:
phenom committed 2026-09-27 21:48:00 -04:00
1 parent 15a5254380
commit 9d7e0e2f9e
71 files changed
+3490 -81

No files matched your search

+38 -2
View File
@@ -1,4 +1,7 @@
import type { DungeonDefinition } from "./dungeonTypes";
import { materializeBiteSizedLayout } from "./biteSizedLayoutRuntime";
import { useBiteSizedLayoutsStore } from "./biteSizedLayoutsStore";
import { BITE_SIZED_DEFAULT_CONFIG, BITE_SIZED_LAYOUT_CATALOG, isLayoutBiteSizedDungeon, normalizeBiteSizedSelection, selectBiteSizedRun, type BiteSizedRunSelection } from "../../shared/bite-sized-layouts.mjs";
import { FORSAKEN_ABBEY_DEFINITION } from "./dungeons/forsakenAbbey";
import { WAILING_CAVERNS_DEFINITION } from "./dungeons/wailingCaverns";
import availability from "./generated/dungeonAvailability.json";
@@ -353,7 +356,7 @@ export function clearBossTestingDungeons(): void {
}
/** Materializes seeded variants after a run id exists; ordinary dungeons keep their catalog definition. */
export function prepareDungeonSessionDefinition(id: string, seed: string): DungeonDefinition | null {
function legacyBiteSizedDefinition(id: string, seed: string): DungeonDefinition | null {
let definition: DungeonDefinition;
if (id === BITE_SIZED_STOCKADES_DUNGEON_ID) definition = createBiteSizedStockadesDefinition(stockadesDefinition, seed);
else if (isRandomizedBiteSizedDungeonId(id)) definition = randomizedBiteSizedDefinitionForSeed(seed, id);
@@ -369,7 +372,40 @@ export function prepareDungeonSessionDefinition(id: string, seed: string): Dunge
else if (id === BITE_SIZED_DEADMINES_DUNGEON_ID) definition = createBiteSizedDeadminesDefinition(deadminesDefinition, seed);
else if (id === BITE_SIZED_UTGARDE_PINNACLE_DUNGEON_ID) definition = createBiteSizedUtgardePinnacleDefinition(utgardePinnacleDefinition, seed);
else return dungeonDefinitionById(id);
sessionDungeonDefinitions.set(id, definition);
return definition;
}
export function biteSizedDefinitionForSelection(selection: BiteSizedRunSelection, seed: string, difficultyId?: string): DungeonDefinition {
const validated = normalizeBiteSizedSelection(selection);
if (validated.legacyRandomized) return { ...legacyBiteSizedDefinition(validated.dungeonId, seed)!, contentSourceDungeonId: validated.spot.sourceDungeonId, biteSizedSelection: validated };
const source = adaptedSourceRegistry[validated.spot.sourceDungeonId];
const baseline = legacyBiteSizedDefinition(validated.spot.dungeonId, seed);
if (!source || !baseline) throw new Error("The selected Bite-Sized parent is unavailable.");
return materializeBiteSizedLayout(source, baseline, validated, adaptedSourceRegistry, difficultyId);
}
/** Checkpoints made before the editor retain the original map and creature deal. */
export function legacyBiteSizedRunSelection(id: string, seed: string): BiteSizedRunSelection | undefined {
if (!isLayoutBiteSizedDungeon(id)) return undefined;
const randomized = id.startsWith("randomized-");
const selection = selectBiteSizedRun(BITE_SIZED_DEFAULT_CONFIG, id, seed, {
eligibleDungeonIds: [randomized ? "bite-sized-stormwind-stockade" : id],
});
if (!randomized) return selection;
const definition = legacyBiteSizedDefinition(id, seed)!;
const pool = BITE_SIZED_LAYOUT_CATALOG.pools[id];
return normalizeBiteSizedSelection({ ...selection, legacyRandomized: true, mobs: selection.mobs.map((m) => {
const spawn = definition.staticSpawns.find((s) => s.id === m.placementId)!;
const ref = pool.find((c) => c.objectiveId === spawn.entityId)!;
return { placementId: m.placementId, sourceDungeonId: ref.sourceDungeonId, entityId: ref.entityId };
}) });
}
export function prepareDungeonSessionDefinition(id: string, seed: string, selection?: BiteSizedRunSelection, difficultyId?: string): DungeonDefinition | null {
const definition = isLayoutBiteSizedDungeon(id)
? biteSizedDefinitionForSelection(selection ?? selectBiteSizedRun(useBiteSizedLayoutsStore.getState().config, id, seed), seed, difficultyId)
: dungeonDefinitionById(id);
if (definition) sessionDungeonDefinitions.set(id, definition);
return definition;
}