39 lines
1.6 KiB
Markdown
39 lines
1.6 KiB
Markdown
# 联网协议
|
|
|
|
## 传输
|
|
|
|
- TCP:默认端口 `18140`。
|
|
- KCP:默认端口 `18141`。
|
|
- UDP 房间发现:默认端口 `18142`。
|
|
- 直接 IP 在端口可达时可用于局域网或公网;不提供匹配、NAT 穿透或账号系统。
|
|
|
|
Unity 内置 Host 与 .NET 独服使用同一个 `ReplacedRoomAuthority` 和 `ReplacedMatchEngine`。消息体是 UTF-8 JSON,底层 TCP/KCP 传输负责完整包边界。
|
|
|
|
## 消息
|
|
|
|
| Kind | 用途 |
|
|
| --- | --- |
|
|
| `Create` | 创建房间并占用席位 |
|
|
| `Join` | 加入房间;房间为空时独服可按配置创建 |
|
|
| `Ready` | 设置准备状态 |
|
|
| `Deck` | 提交并校验 12+4 牌组 |
|
|
| `MatchCommand` | 提交回合指令 |
|
|
| `MatchSnapshot` | 玩家裁剪快照、房间状态和状态哈希 |
|
|
| `MatchEvent` | 成功、重复包等权威结果 |
|
|
| `Reconnect` | 在 30 秒席位保留期内重新绑定 |
|
|
| `Error` | 结构化错误码和差异详情 |
|
|
|
|
所有对局指令包含玩家序号和幂等令牌。已接受令牌的重发返回 `Duplicate=true`,不会重复结算。快照只保留对手隐藏区的数量,不暴露卡牌 ID。
|
|
|
|
## Mod 握手
|
|
|
|
加入请求携带所有启用 Mod 的 ID、版本及文件 SHA-256。权威端逐文件比较,报告 `missing-mod`、`unexpected-mod`、`version`、`missing-file`、`unexpected-file` 或 `hash` 差异,并拒绝准备。
|
|
|
|
房间创建时冻结内容快照。热重载只更新之后创建的房间或下一场单机对局,不修改进行中的状态机。
|
|
|
|
## 断线和超时
|
|
|
|
- 断线后席位保留 30 秒。
|
|
- 连续两个回合超时判负。
|
|
- 客户端重连后以权威快照和状态哈希恢复,不在客户端补算遗漏骰点。
|