import { getVersionContent } from './scripts.js'; import { composeServerCfg } from './config-compose.js'; import { getBaselineForScope, getVersion, listPromotedOverlaysForScope } from './scripts.js'; import { selectedZombieMap, mapRotation } from './map-aliases.js'; import { applyRuntimePassword } from './runtime-config.js'; export const MAP_CONFIG_FILE = 'electric_cherry_map.cfg'; /** Loaded after Plutainer's default/main config and before map_rotate. */ export function getServerMapConfig( game: string | null, map: string | null, mapSlug?: string | null ): Buffer | null { const entry = selectedZombieMap(game, map, mapSlug); return entry ? Buffer.from( `// Generated by Electric Cherry from the selected map.\nset sv_maprotation "${mapRotation(entry)}"\n` ) : null; } /** The promoted config used for first boot and drift reconciliation. */ export function getPromotedServerConfig( game: string | null, map: string | null, mapSlug?: string | null, rconPassword?: string | null ): Buffer | null { if (!game) return null; const baseline = getBaselineForScope('game', game); if (!baseline?.current_version_id) return null; const version = getVersion(baseline.current_version_id); if (!version) return null; const overlays = [ ...listPromotedOverlaysForScope('game', game), ...(map ? listPromotedOverlaysForScope('map', map) : []) ].flatMap((overlay) => { const current = overlay.current_version_id ? getVersion(overlay.current_version_id) : undefined; return current ? [{ id: overlay.id, text: getVersionContent(current.id).toString('utf8') }] : []; }); return Buffer.from( applyRuntimePassword( composeServerCfg( getVersionContent(version.id).toString('utf8'), overlays, game, map, mapSlug ), rconPassword ), 'utf8' ); }