Sott Data Schema Server

返回索引

服务端表结构(对局 / 快照 / 账号)

程序设计稿 — 建筑与市场 中「断线重连、仲裁」需求对应。具体栈(PostgreSQL / MySQL 等)由你们选定;下列为 逻辑模型

1. ER 概览

职责
accounts 玩家账号(可对接第三方登录后补字段)。
matches 一场对局元数据。
match_players 座位、账号、局外 loadout_json
match_snapshots 权威状态快照(二进制或压缩 JSON)。
match_events(可选) 增量事件日志,用于回放与审计。

2. 字段定义

accounts

类型 约束
id UUID PK
display_name VARCHAR(64) NOT NULL
created_at TIMESTAMPTZ DEFAULT now()

matches

类型 说明
id UUID PK
map_id VARCHAR(32) 对应 UE DT_MapLevel.MapId
ruleset_version INT 与客户端 ruleset_version.txt 一致
state VARCHAR(24) lobby / running / finished / aborted
network_mode VARCHAR(24) 记录 Listen / Dedicated 等便于排错
started_at / ended_at TIMESTAMPTZ

match_players

类型 说明
match_id UUID FK → matches
seat SMALLINT 0..N-1
account_id UUID FK → accounts,可空(匿名房)
loadout_json JSONB 对应 DT_MetaLoadout 选用行

唯一约束(match_id, seat)

match_snapshots

类型 说明
match_id UUID FK
logic_round INT 逻辑回合索引
schema_version SMALLINT 快照二进制格式版本,与 UE Serialize 对齐
state_blob BYTEA 或 JSONB 权威世界状态
saved_at TIMESTAMPTZ

索引(match_id, logic_round DESC);可选部分索引仅保留每 N 回合。

match_events(可选)

说明
seq BIGSERIAL
match_id FK
logic_round
payload_json 阶段切换、撮合输入输出、作弊标记等

3. 调用逻辑

时机 操作
创建房间 INSERT matches + N 行 match_playersstate=lobby
开局 UPDATE matches SET state=running, started_at=now();写 schema_version 与首帧 state_blob(可为空壳)。
每逻辑回合结束 INSERT match_snapshots;可选批量 match_events
断线重连 SELECT state_blob FROM match_snapshots WHERE match_id=? ORDER BY logic_round DESC LIMIT 1,校验 schema_version 与客户端。
结算 UPDATE matches SET state=finished, ended_at=now()

4. state_blob 内容建议(与 UE 对齐)

最小应包含:随机种子、逻辑回合、阶段枚举、每格 owner/building、每物资堆 ward+qty、市场挂单、双方现金
序列化格式:ProtobufFArchive 自定义 + Base64;务必带 schema_version,迁移时双读旧版本。

5. 与 UE ruleset_version

  • 客户端请求加入房间时携带 ruleset_version;服务器与 matches.ruleset_version 不一致则拒绝或触发「仅观战」策略。