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:
@@ -1163,3 +1163,41 @@ ALTER TABLE rust_servers ADD COLUMN IF NOT EXISTS perm_policy VARCHAR(16) NOT NU
|
||||
-- `split` (D190 gave a server its own copy of a shared group, and says so in
|
||||
-- case the change was meant for every server).
|
||||
ALTER TABLE rust_perm_drift ADD COLUMN IF NOT EXISTS direction VARCHAR(16) NOT NULL DEFAULT 'added';
|
||||
|
||||
-- ── Zone presets (PLAN_REDESIGNS §3.1, D195, D210) ─────────────────────────
|
||||
--
|
||||
-- A set of ZoneManager flags and settings an admin saved under a name, for one
|
||||
-- server, several, or the whole fleet. None ship with the module: what an
|
||||
-- "arena" is differs by server. A zone step copies a preset's options into its
|
||||
-- own field when the preset is picked (D210), so editing a preset later leaves
|
||||
-- every published event as it was.
|
||||
--
|
||||
-- `flags` is a JSON array of names as ZoneManager spells them, `settings` a JSON
|
||||
-- object of the plugin's allowlisted settings. Both are TEXT, not JSON: MariaDB's
|
||||
-- JSON is an alias the driver hands back as a string either way.
|
||||
CREATE TABLE IF NOT EXISTS rust_zone_presets (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
flags TEXT NOT NULL,
|
||||
settings TEXT NOT NULL,
|
||||
-- 1: every server, including servers added later. 0: exactly the servers
|
||||
-- `rust_zone_preset_servers` names. The shape of a shared group (§1.4).
|
||||
all_servers TINYINT(1) NOT NULL DEFAULT 0,
|
||||
created_by INT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
-- Not unique: two servers may each have their own "Arena" (D189's rule for
|
||||
-- groups). The model refuses two of one name on one server.
|
||||
KEY idx_rust_zone_presets_name (name)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS rust_zone_preset_servers (
|
||||
preset_id INT UNSIGNED NOT NULL,
|
||||
server_id VARCHAR(64) NOT NULL,
|
||||
PRIMARY KEY (preset_id, server_id),
|
||||
KEY idx_rust_zone_preset_servers_server (server_id),
|
||||
CONSTRAINT fk_rust_zone_preset_servers_preset
|
||||
FOREIGN KEY (preset_id) REFERENCES rust_zone_presets (id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_rust_zone_preset_servers_server
|
||||
FOREIGN KEY (server_id) REFERENCES rust_servers (id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
Reference in New Issue
Block a user