为什么用云竞技
一个玩家,同一时间只有一个状态
云竞技里每个玩家只会处在下面其中一种状态,而且同时只有一种:
| 状态 | 怎么进入 | 怎么离开 |
|---|---|---|
| 排队中 | /ca join、菜单点模式 | 配到对手、/ca leave、逾时、下线 |
| 比赛中 | 配对成功、切磋接受 | 比赛结束、/ca leave(判负)、下线(判负) |
| 观战中 | /ca spectate、观战菜单 | /ca leave、比赛结束、下线、直接去排队 |
进入「比赛中」或「观战中」时会拍下一份备份,这份备份只属于这个状态。离开状态时还原并删除,不会有第二份备份去覆盖它。 所以「观战到一半去排队」「阵亡后先离开、马上开下一场」这类操作,都不会把别场的备份拿错。
备份写进数据库
备份在建立的当下就写进数据库(ca_restores 表),还原成功才删除:
- 下线:比赛中下线算判负;重新上线时自动还原背包与位置。
- 崩服 / 断电:服务器重开后,玩家一上线就还原。
- 关服:正在比赛与观战的人会在关服前直接还原。
- 多个子服共用 MySQL 时,备份记着是哪一台子服的,只会在同一台还原。
详细流程见 背包与还原。
死亡不掉落、盔甲不脱下
比赛中死亡一律保留物品:
- 公平模式:身上本来就是套装,结束时整个背包换回进场前的备份。
- 巅峰模式:用的是自己的东西,死亡不掉落、盔甲也不会被脱进背包,结束后原样带走。
死亡后会自动重生在观战点;2V2 还有队友活着时可以旁观队友,比赛一结束就和大家一起还原。
公平就是同一套装
公平模式排队时可以选套装,也可以选「随机」:
- 两个人选了不同的套装,不会配在一起。
- 选「随机」的人可以配任何人;双方都选随机时,开赛时随机抽一套,两边拿到的是同一套。
- 进场前清空药水效果、补满血量与饱食度,套装附带的效果两边一样。
匹配模式虽然不显示分数,但也有隐藏分,配对时会优先把实力接近的人放在一起。
每个排位各自独立
| 排位模式 | 分数 | 定级赛 | 排行榜 |
|---|---|---|---|
| 公平排位 1V1 | 独立 | 独立 | 独立 |
| 公平排位 2V2 | 独立 | 独立 | 独立 |
| 巅峰排位 1V1 | 独立 | 独立 | 独立 |
| 巅峰排位 2V2 | 独立 | 独立 | 独立 |
2V2 排位用两队的平均分算胜率期望,然后每个人在自己的分数上加减,队友不会被改成同一个分数。
排队不会被一组人卡住
- 配对从等最久的人开始找;他暂时配不到(分数差太多、套装不同、同 IP),就换下一个人找,不会让整条队列一起等。
- 开赛前有人进不来(下线、倒数中离开、带了黑名单物品),只取消这一场:其他人带着原本的排队时间回到队列最前面。
- 倒数中离开排位赛的人有 30 秒冷却,避免看到对手就跑。
不拖慢服务器
- 所有数据库读写都在独立线程;PlaceholderAPI 变量(含排行榜)只读内存缓存。
- 场地恢复只扫描场地本身的范围;支持 Folia 的区域线程。
- 授权在背景验证,不会拖慢开服。