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_players,state=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、市场挂单、双方现金。
序列化格式:Protobuf 或 FArchive 自定义 + Base64;务必带 schema_version,迁移时双读旧版本。
5. 与 UE ruleset_version
- 客户端请求加入房间时携带
ruleset_version;服务器与 matches.ruleset_version 不一致则拒绝或触发「仅观战」策略。