跨服
多个子服连到同一个 MySQL / MariaDB 数据库后,玩家在每个子服抽同一个奖池,就像在同一台服务器上抽一样。 不需要代理端插件,也不需要 Redis。
共享与不共享
| 数据 | 跨服共享? | 说明 |
|---|---|---|
| 保底次数、总抽数 | ✔ | 在一服抽到第 40 抽,到二服接着是第 41 抽 |
| 每个奖品的获得次数 | ✔ | 每人上限全服合计 |
| 抽奖记录 | ✔ | /sc history、/sc stats、/sc top 看到的是全部子服 |
| 每日次数 | ✔ | 每日上限全服合计 |
| 暂存奖励 | ✔ | 在一服暂存,在任何子服 /sc stash 都能领 |
| 待补发记录 | ✔ | 一服崩溃,玩家上线任何子服都会补发,且只补发一次 |
| 公告 | ✔ | 会公告的奖品同步到其他子服(见下方) |
奖池文件 crates/ | ✘ | 每个子服读自己的文件夹,见下方说明 |
抽奖方块 blocks.yml | ✘ | 每个子服各自设定自己的方块 |
config.yml 等设定文件 | ✘ | 各子服各自一份 |
奖池文件要自己同步
玩家数据是用奖池 ID 对应的。想让多个子服共用同一个奖池,请把同一份 crates/<奖池>.yml 复制到每个子服(ID 相同),改完后各子服 /sc reload。
在一个子服用编辑器修改,只会改那个子服的文件。
设定步骤
- 建立一个 MySQL 数据库(例如
starcrate)与帐号。 - 每个子服的
plugins/StarCrate/config.yml:
database:
type: mysql
host: 127.0.0.1
port: 3306
database: starcrate
username: starcrate
password: '你的密码'
parameters: 'useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=utf8'
table-prefix: 'sc_'
pool-size: 6
broadcast:
enabled: true
cross-server: true
sync:
server-id: 'survival' # 每个子服不同,例如 survival、skyblock、lobby
server-names:
survival: '生存服'
skyblock: '空岛服'
lobby: '大厅'
interval-seconds: 2
- 所有子服的
database与table-prefix必须相同;server-id每 个子服不同;server-names可以每个子服都写同一份完整名单。 - 重启每个子服(数据库设定不能用
/sc reload切换)。开服时控制台显示「数据库已连接:MySQL …」就成功了。 - 把需要共用的
crates/*.yml复制到每个子服,/sc reload。
插件会自动建立数据表(sc_state、sc_wins、sc_draws、sc_pending、sc_stash、sc_feed)。
各子服请使用相同的 Minecraft 版本
暂存奖励与待补发记录里存的是完整物品数据。较新版本存的物品,旧版本的服务器读不出来,所以共用数据库的子服请尽量使用相同版本(至少不要让玩家在新版本暂存、到旧版本领取)。
server-id 与 server-names
| 键 | 作用 |
|---|---|
sync.server-id |