61 lines
2.0 KiB
TypeScript
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'
|
|
);
|
|
}
|