import { World, WorldEventBus } from '../src/renderer/game/engine/runtime/World' import { LogItem, ChronicleEntry, BattleLog } from '../src/renderer/game/types/domain' const sinks: Set = new Set() resetSaveBus() export function resetSaveBus(): void { sinks.clear() } export function attachLogSink(w: World): void { const bus: WorldEventBus = { onLog: () => undefined, onChronicle: () => undefined, onBattle: () => undefined, onPendingEvent: () => undefined, onGameOver: () => undefined } sinks.add(bus) w.out.push(bus) } /** 取当前世界 NPC id:prefer 命中则用之(多为老牌 id),缺失取任一家(wgen 世界名单随机) */ export function anyNpc(w: import('./../src/renderer/game/engine/runtime/World').World, prefer?: string[]): string { const ids = Object.keys(w.state.npcFamilies) const hit = prefer?.find((p) => ids.includes(p)) return hit ?? ids[0]! }