跳到主要内容

跨服

群组服可以把所有副本集中在一台副本服务器上:玩家在任何分流(大厅、生存服……)组队、按准备,整队被送到副本服务器开副本,结束后各自送回原本的分流。

大厅 / 分流 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 时会警告。

流程​

  1. 玩家在分流组队,队长按开始(或快速配对凑满人)。分流先检查人数、权限、条件、冷却、次数、入场券(地图与场数上限交给副本服务器检查)。
  2. 全员按准备后,分流把这一队写成一笔「传送单」存进数据库,然后把每个人送到副本服务器。
  3. 副本服务器看到玩家进来,找到属于他的传送单。全员到齐后等 start-delay 秒,自动开始(不用再按准备),这时才正式检查地图、扣入场券。
  4. 副本结束、玩家 /leave 离开时,先回到进副本前的位置,约 1.5 秒后再送回原本的分流。

没到齐​

  • 超过 arrival-timeout 秒还没到齐:已到的人数 ≥ 副本的 players.min 就先开;不够就把已到的人送回原分流,这笔传送单取消。
  • 副本服务器上找不到这个副本,或开始时检查没通过(例如入场券没同步过来):提示原因并把人送回原分流。

当机​

副本服务器当机时,下次开服照常退还入场券与次数(见 掉线与当机保护);玩家下次登录副本服务器时会被送回原分流。

注意​

  • 队伍与快速配对的排队都在各自的分流里进行:同一台分流上的玩家才能组成一队、配对在一起。
  • 在分流上执行 /cd admin test 会在本机开测试(分流通常没有地图),测试请到副本服务器上做。
  • 编辑模式请在副本服务器上做,存好的地图就在副本服务器上;分流只需要同步 dungeons/ 里的 yml。
  • 每日 / 每周次数、冷却、排行榜因为共用 MySQL,在哪一台看都一样。
  • 副本服务器上的玩家掉线重连,要直接连回副本服务器才能回到副本(掉线保留时间内)。