Automatically deploy the lowest available lobby with exact ID preview
This commit is contained in:
@@ -48,7 +48,7 @@ export interface CreateServerInput {
|
||||
gameMode: GameMode; // 'zombie' — only value supported today
|
||||
mapSlug: string; // 'cosmodrome'
|
||||
plutoKey?: string; // saved for this server ID when supplied
|
||||
lobby?: number; // explicit stable identity; otherwise first available
|
||||
expectedName?: string; // optional preview guard; never selects a lobby
|
||||
createdBy?: string; // 'ui' by default
|
||||
}
|
||||
|
||||
@@ -160,15 +160,14 @@ async function createServerUnlocked(input: CreateServerInput): Promise<CreateSer
|
||||
}
|
||||
|
||||
const baseName = `t5_${input.gameMode}_${mapEntry.slug}`;
|
||||
if (input.lobby !== undefined && (!Number.isInteger(input.lobby) || input.lobby < 1 || input.lobby > 20)) {
|
||||
return { ok: false, kind: 'bad-request', message: 'Lobby must be an integer from 1 to 20' };
|
||||
}
|
||||
const lobby = input.lobby ?? nextLobbyNumber(baseName);
|
||||
const lobby = nextLobbyNumber(baseName);
|
||||
if (lobby === null) {
|
||||
return { ok: false, kind: 'no-slot', message: `all lobby slots (1..20) for ${baseName} are taken` };
|
||||
}
|
||||
const name = `${baseName}_${lobby}`;
|
||||
if (getServer(name)) return { ok: false, kind: 'no-slot', message: `${name} is already deployed` };
|
||||
if (input.expectedName !== undefined && input.expectedName !== name) {
|
||||
return { ok: false, kind: 'no-slot', message: 'Available lobby changed. Review the updated server ID and key, then deploy again.' };
|
||||
}
|
||||
const plutoKey = input.plutoKey?.trim() || getServerKey(name);
|
||||
if (!plutoKey) return { ok: false, kind: 'bad-request', message: `No saved key for ${name}. Enter a Plutonium server key.` };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user