跨服
群组服可以把所有副本集中在一台副本服务器上:玩家在任何分流(大厅、生存服……)组队、按准备,整队被送到副本服务器开副本,结束后各自送回原本的分流。
大厅 / 分流 A ─┐ ┌─ 结束后送回原分流
├─ 组队、检查、全员准备 ─→ 副本服务器(开副本)
大厅 / 分流 B ─┘ (写一笔传送单) └─ 次数、冷却、排行写进共用 MySQL
需要什么
- 代理端:BungeeCord,或 Velocity 并在
velocity.toml开启bungee-plugin-message-channel = true。 - 所有服务器都装 CloudDungeon,
database.type: mysql而且连到同一个数据库:次数、冷却、排行榜、传送单都在这里共用。 - 副本设置每台都放一份:
dungeons/(各副本的 yml)与tickets.yml。分流需要它们来显示菜单、检查条件。 - 地图只要放在副本服务器:
map.schem/points.yml只有副本服务器用得到;分流不检查地图。 - 入场券靠背包同步插件(例如 CloudSync)一起带过去:入场券在副本服务器开场时才扣,所以玩家到达时背包里要有。
设置
每台服务器的 plugins/CloudDungeon/config.yml:
# 大 厅 / 分流(例如代理端里叫 lobby)
network:
enabled: true
server: lobby
dungeon-server: dungeon
arrival-timeout: 30
start-delay: 2
database:
type: mysql
mysql:
host: 10.0.0.5
database: clouddungeon
user: dungeon
password: "******"
# 副本服务器(代理端里叫 dungeon):server 和 dungeon-server 填一样
network:
enabled: true
server: dungeon
dungeon-server: dungeon
| 项目 | 说明 |
|---|---|
server | 这台服务器在代理端设置里的名称,要和代理端一字不差 |
dungeon-server | 开副本的那台服务器名称。和 server 一样 = 这台就是副本服务器;不一样 = 这台是大厅 / 分流 |
arrival-timeout | 队员几秒内没到齐的处理(见下方) |
start-delay | 全员到齐后等几秒再开始,让背包同步把入场券带过来 |
network.* 改了要重启服务器。启动时 控制台会显示这台是大厅还是副本服务器;数据库不是 MySQL 时会警告。
流程
- 玩家在分流组队,队长按开始(或快速配对凑满人)。分流先检查人数、权限、条件、冷却、次数、入场券(地图与场数上限交给副本服务器检查)。
- 全员按准备后,分流把这一队写成一笔「传送单」存进数据库,然后把每个人送到副本服务器。
- 副本服务器看到玩家进来,找到属于他的传送单。全员到齐后等
start-delay秒,自动开始(不用再按准备),这时才正式检查地图、扣入场券。 - 副本结束、玩家
/leave离开时,先回到进副本前的位置,约 1.5 秒后再送回原本的分流。
没到齐
- 超过
arrival-timeout秒还没到齐:已到的人数 ≥ 副本的players.min就先开;不够就把已到的人送回原分流,这笔传送单取消。 - 副本服务器上找不到这个副本,或开始时检查没通过(例如入场券没同步过来):提示原因并把人送回原分流。
当机
副本服务器当机时,下次开服照常退还入场券与次数(见 掉线与当机保护);玩家下次登录副本服务器时会被送回原 分流。
注意
- 队伍与快速配对的排队都在各自的分流里进行:同一台分流上的玩家才能组成一队、配对在一起。
- 在分流上执行
/cd admin test会在本机开测试(分流通常没有地图),测试请到副本服务器上做。 - 编辑模式请在副本服务器上做,存好的地图就在副本服务器上;分流只需要同步
dungeons/里的 yml。 - 每日 / 每周次数、冷却、排行榜因为共用 MySQL,在哪一台看都一样。
- 副本服务器上的玩家掉线重连,要直接连回副本服务器才能回到副本(掉线保留时间内)。