panel v0.9.1 — open-source game server manager
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
-- Empyrion EAH-style features. Three tables:
|
||||
--
|
||||
-- 1. empyrion_events — append-only log of unsolicited Event_* packages
|
||||
-- streamed from the bridge. Powers the player-history view, chat log,
|
||||
-- and the "what happened while I was away" overview.
|
||||
--
|
||||
-- 2. empyrion_inv_templates — operator-defined inventory kits (name +
|
||||
-- JSON list of {itemId, count}). Click "Apply" on a player row to
|
||||
-- drop the whole kit via Request_Player_AddItem fan-out.
|
||||
--
|
||||
-- 3. empyrion_known_players — projected from empyrion_events. Cached
|
||||
-- last-seen / first-seen / login count for the players-list view so
|
||||
-- we don't aggregate the events table on every refresh.
|
||||
--
|
||||
-- All tables are scoped by instance_id so two running empyrion instances
|
||||
-- on the same agent (rare but allowed) keep separate state.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS empyrion_events (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
instance_id TEXT NOT NULL,
|
||||
ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
cmd TEXT NOT NULL,
|
||||
player_id INTEGER,
|
||||
steam_id TEXT,
|
||||
player_name TEXT,
|
||||
playfield TEXT,
|
||||
msg TEXT,
|
||||
raw JSONB
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS empyrion_events_instance_ts
|
||||
ON empyrion_events (instance_id, ts DESC);
|
||||
CREATE INDEX IF NOT EXISTS empyrion_events_player_ts
|
||||
ON empyrion_events (player_id, ts DESC) WHERE player_id IS NOT NULL;
|
||||
CREATE INDEX IF NOT EXISTS empyrion_events_steam_ts
|
||||
ON empyrion_events (steam_id, ts DESC) WHERE steam_id IS NOT NULL;
|
||||
CREATE INDEX IF NOT EXISTS empyrion_events_cmd
|
||||
ON empyrion_events (instance_id, cmd, ts DESC);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS empyrion_inv_templates (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT NOT NULL DEFAULT '',
|
||||
items JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||||
-- items shape: [{ "itemId": 4307, "count": 1, "ammo": 0, "decay": 0 }, ...]
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS empyrion_inv_templates_name
|
||||
ON empyrion_inv_templates (name);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS empyrion_known_players (
|
||||
instance_id TEXT NOT NULL,
|
||||
player_id INTEGER NOT NULL,
|
||||
steam_id TEXT NOT NULL DEFAULT '',
|
||||
player_name TEXT NOT NULL DEFAULT '',
|
||||
first_seen TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
last_seen TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
login_count INTEGER NOT NULL DEFAULT 0,
|
||||
last_playfield TEXT NOT NULL DEFAULT '',
|
||||
notes TEXT NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (instance_id, player_id)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS empyrion_known_players_steam
|
||||
ON empyrion_known_players (steam_id) WHERE steam_id != '';
|
||||
CREATE INDEX IF NOT EXISTS empyrion_known_players_lastseen
|
||||
ON empyrion_known_players (instance_id, last_seen DESC);
|
||||
Reference in New Issue
Block a user