跳到主要内容

奖励发放

先存结果,再发奖励​

玩家点下抽奖的那一刻,结果就已经决定,并且和保底次数、获得次数、抽奖记录、一条「待发放」记录在同一个数据库事务里写入。 接着才播放动画,动画结束后发放奖励,发放完成再删除「待发放」记录。

情况结果
正常播完动画动画结束后发放奖励
立即抽取 / 没有动画抽完马上发放
动画中玩家下线立刻结束动画并发放(寄到邮箱,或放进下线前的背包)
动画中服务器关闭(/stop、重启)关闭插件前先结束所有动画并发放
服务器崩溃、断电「待发放」记录还在:玩家下次上线约 2 秒后自动补发,提示「补发你上次在 … 未完成发放的抽奖奖励」。使用 MySQL 时上线任何一个子服都会补发,每一笔只会补发一次
备注

补发的奖励不会再全服公告一次。万一数据库在抽奖当下写入失败(控制台显示「保存抽奖结果失败(奖励照常发放)」),奖励仍会照常发放,只是那一次没有补发保护。

两种发放方式​

config.yml安装了 StarMail发放方式
delivery.use-starmail: true(默认)是寄到星月邮箱
delivery.use-starmail: true否(或星月邮箱尚未启用 / 未授权)直接放进背包
delivery.use-starmail: false—直接放进背包

/sc version 会显示目前的发放方式,开服时控制台也会写出「奖励发放方式:…」。

寄到星月邮箱​

需要安装 StarMail 星月邮箱。

  • 一次抽奖一封邮件:单抽一封,十连也是一封(里面是 10 个奖品)。
  • 邮件的附件是所有「发放物品」的奖品;「只展示」(give-item: false)的奖品不放附件,名称写在邮件的备注里,奖励由指令发放。
  • 邮件图标是这次最稀有奖品的物品材质。
  • 聊天栏显示「奖励已寄到你的星月邮箱 [点击打开]」,点一下打开邮箱。
  • 玩家可以在任何一个连着同一个邮箱数据库的子服领取。

邮件的外观在 config.yml 与 messages.yml:

config.yml
delivery:
use-starmail: true
mail-commands: claim # claim = 领取邮件时执行指令;now = 抽中立刻执行
mail-sender: '<gradient:#FFD86F:#FC6262>星月造物</gradient>'
mail-title: '{crate} <gray>· {count} 件奖励' # {crate} 奖池名 {count} 奖品数量
mail-expire-days: 0 # 几天后过期,0 = 永不过期
messages.yml
mail:
content:
- '<gray>恭喜你在 {crate} <gray>获得以下奖励:'
- '<dark_gray> ▪ {prizes}' # 这一行会对每个奖品重复:稀有度 + 奖品名称
- ''
- '<dark_gray>星月造物祝你好运 ✦'

正文可用 {crate}、{count}、{player};含有 {prizes} 的那一行会对每个奖品各写一行。

指令奖励什么时候执行(mail-commands)​

值行为
claim(默认)指令随邮件寄出,玩家领取邮件时才执行。玩家在哪个子服领,就在哪个子服执行
now动画结束、寄出邮件时立刻执行;邮件里只有物品

给权限、称号这类需要在特定子服执行的指令,用 now 会在抽奖的子服执行;用 claim 则在领取的子服执行,请依你的服务器架构选择。

寄邮件失败时(例如星月邮箱的数据库暂时连不上),会自动改为直接放进背包;玩家已离线时存进暂存,下次 /sc stash 领取。

直接放进背包​

  • 物品直接放进背包,指令立刻执行。
  • 背包放不下的部分按 delivery.overflow 处理:
值行为
stash(默认)存进暂存,聊天栏提示「背包满了,N 组奖励已暂存 [点击领取 /sc stash]」
drop掉在玩家脚下,提示「背包满了,N 组奖励掉在你脚下」

领取暂存:/sc stash​

  • 玩家输入 /sc stash、点聊天栏的提示,或点预览界面的「领取暂存奖励」按钮。
  • 按存入的先后顺序领取;每一份暂存会整份放进背包,放得下几份就领几份,剩下的留着下次领,并提示「已领取 N 份暂存奖励(还剩 M 份)」。
  • 第一份就放不下时提示「背包空间不足,整理后再领取」。
  • 暂存存在数据库里,使用 MySQL 时在任何子服都能领。

聊天栏结果​

发放时聊天栏会写出抽到的奖品(鼠标移到奖品名称上可以看物品详情):

✦ 星月造物 » 你抽到了 史诗 星辉钻石
✦ 星月造物 » 本次获得 10 件奖励:
▪ 普通 星辉面包
▪ 稀有 金锭
▪ 传说 星陨合金 ✦终极大奖
…

文字在 messages.yml 的 result.*,见 messages.yml。

全服公告​

一个奖品会不会公告,依序判断:

  1. config.yml 的 broadcast.enabled 是 false → 都不公告。
  2. 奖池的「全服公告」(effects.broadcast)关闭 → 这个奖池都不公告。
  3. 奖品的公告设定:
    • true(公告)→ 公告;
    • false(不公告)→ 不公告;
    • default(跟随稀有度)→ 稀有度的 broadcast: true,或这个奖品是终极大奖时公告。

默认的稀有度里,传说与神话会公告;终极大奖不论稀有度都会公告。

公告在奖励发放时(动画结束后)送出,所以其他玩家不会比抽奖的人先知道结果。十连里每个要公告的奖品各公告一行。

奖品使用的文字(messages.yml)
一般奖品broadcast.normal:✦ Steve 在 星辉宝箱 抽中了 史诗 星辉钻石!
终极大奖broadcast.grand:✦ 终极大奖 ✦ Steve 在 星辉宝箱 抽中了 传说 星陨合金!,同时对全服玩家播放 broadcast.grand-sound

跨服公告​

使用 MySQL 并且 broadcast.cross-server: true(默认)时,所有会公告的奖品都会同步到连着同一个数据库的其他子服,前面加上子服名称:

[生存服] ✦ 终极大奖 ✦ Steve 在 星辉宝箱 抽中了 传说 星陨合金!

子服名称在 config.yml 的 sync.server-names 设定,见 跨服。