跳到主要内容

跨服

多个子服连到同一个 MySQL / MariaDB 数据库后,玩家在每个子服抽同一个奖池,就像在同一台服务器上抽一样。 不需要代理端插件,也不需要 Redis。

共享与不共享​

数据跨服共享?说明
保底次数、总抽数✔在一服抽到第 40 抽,到二服接着是第 41 抽
每个奖品的获得次数✔每人上限全服合计
抽奖记录✔/sc history、/sc stats、/sc top 看到的是全部子服
每日次数✔每日上限全服合计
暂存奖励✔在一服暂存,在任何子服 /sc stash 都能领
待补发记录✔一服崩溃,玩家上线任何子服都会补发,且只补发一次
公告✔会公告的奖品同步到其他子服(见下方)
奖池文件 crates/✘每个子服读自己的文件夹,见下方说明
抽奖方块 blocks.yml✘每个子服各自设定自己的方块
config.yml 等设定文件✘各子服各自一份
奖池文件要自己同步

玩家数据是用奖池 ID 对应的。想让多个子服共用同一个奖池,请把同一份 crates/<奖池>.yml 复制到每个子服(ID 相同),改完后各子服 /sc reload。 在一个子服用编辑器修改,只会改那个子服的文件。

设定步骤​

  1. 建立一个 MySQL 数据库(例如 starcrate)与帐号。
  2. 每个子服的 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
  1. 所有子服的 database 与 table-prefix 必须相同;server-id 每个子服不同;server-names 可以每个子服都写同一份完整名单。
  2. 重启每个子服(数据库设定不能用 /sc reload 切换)。开服时控制台显示「数据库已连接:MySQL …」就成功了。
  3. 把需要共用的 crates/*.yml 复制到每个子服,/sc reload。

插件会自动建立数据表(sc_state、sc_wins、sc_draws、sc_pending、sc_stash、sc_feed)。

各子服请使用相同的 Minecraft 版本

暂存奖励与待补发记录里存的是完整物品数据。较新版本存的物品,旧版本的服务器读不出来,所以共用数据库的子服请尽量使用相同版本(至少不要让玩家在新版本暂存、到旧版本领取)。

server-id 与 server-names​

键作用
sync.server-id这个子服的 ID,会记在抽奖记录里(history.yml 的 {server}),也用来分辨公告是不是自己发的。留空时每次开服自动产生一个随机 ID,跨服时请务必设定
sync.server-names子服 ID 对应的显示名称,用在跨服公告的 {server}。没有对应名称时直接显示 ID
sync.interval-seconds每隔几秒检查一次其他子服的公告(默认 2 秒),重启生效

跨服公告​

条件:使用 MySQL,且 broadcast.cross-server: true(默认)。

  • 本服会公告的奖品(规则见 奖励发放 · 全服公告),也会在其他子服公告。
  • 其他子服显示时,前面加上 messages.yml 的 broadcast.cross-server-prefix(默认 [生存服] ),{server} 换成发出公告的子服名称。
  • 终极大奖的提示音只在抽中的子服播放。
  • 公告最晚在 interval-seconds 秒内出现在其他子服。只会显示开服之后发生的公告;超过 1 小时的公告记录会自动清除。
[生存服] ✦ 终极大奖 ✦ Steve 在 星辉宝箱 抽中了 传说 星陨合金!

注意事项​

  • 每次抽奖都以数据库为准:玩家每次抽奖前,插件都会等上一次抽奖写入完成,再从数据库重新读取他的保底次数与获得次数。 所以在任何子服用 /sc pity 修改、或玩家刚在别的子服抽过,下一抽都会用最新的数值。
  • 奖励发放方式(星月邮箱或背包)由抽奖的那个子服决定;使用 星月邮箱 并且邮箱也是跨服数据库时,玩家可以在任何子服领取。
  • 默认的 mail-commands: claim 会让指令奖励在玩家领取邮件的子服执行;需要在抽奖的子服执行时改成 now,见 奖励发放。