forked from phenom/healer-man
Update Healer Man server
This commit is contained in:
1 parent
15a5254380
commit
9d7e0e2f9e
71 files changed
+3490
-81
No files matched your search
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user