Files
electric-cherry/src/lib/server/fleet/server-config.ts
T

61 lines
2.0 KiB
TypeScript

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'
);
}