feat(rust): zone presets, and the zone step's options, messages and dome (PLAN_REDESIGNS §3, D210)

Admin → Rust zone presets: named sets of ZoneManager flags and settings for
one server, several, or every server (D195), ticked in groups read from each
server's own ZoneManager list in its last hello (D211). A flag not on a
covered server is refused on save with the server named; two presets of one
name may not share a server.

rust.zone.open gains options (one line, NoBuild, radiation=10), enterMessage,
leaveMessage, delivery, dome and domeStack. The options field's dropdown is
rust.options.zone_presets, whose row VALUE is the preset's line, so picking
one copies it into the step (D210) and no published event changes when a
preset does. The line and the dome are checked against the server's hello
on save and in a dry run; bad-option and dome-unavailable are permanent.

Schema: rust_zone_presets, rust_zone_preset_servers. Swagger fragment and
routes.manifest regenerated against the pinned core f0e7d2a.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
2026-09-29 05:25:44 -05:00
parent afb16112b0
commit 8361b19c24
17 changed files with 2159 additions and 1 deletions

View File

@@ -205,6 +205,18 @@ export const adminVisibility = {
save: (body) => req('/admin/rust/visibility', { method: 'PUT', body }),
}
// ── admin · zone presets (PLAN_REDESIGNS §3.1, D210) ───────────────────────
//
// An admin's named sets of ZoneManager flags and settings. `read` also carries
// what each server's last hello said about ZoneManager and ZoneDomes, so the
// page works while a server is off.
export const adminZones = {
read: () => req('/admin/rust/zones'),
create: (body) => req('/admin/rust/zones/presets', { method: 'POST', body }),
update: (id, body) => req(`/admin/rust/zones/presets/${encodeURIComponent(id)}`, { method: 'PUT', body }),
remove: (id) => req(`/admin/rust/zones/presets/${encodeURIComponent(id)}`, { method: 'DELETE' }),
}
// ── admin · mod configuration (R18) ───────────────────────────────────────
//
// Every call here is a LIVE round trip to a game host, which makes this the only
@@ -285,6 +297,7 @@ export default {
adminPermissions,
adminConfig,
adminVisibility,
adminZones,
adminUserLinks,
adminUserPermissions,
BASE,