跳到主要内容

星月邮箱寄送

从 1.1.0 起,星月市集所有要给玩家的东西都寄到他的 StarMail 星月邮箱,玩家在邮箱里领取。以前的「领取箱」已经由星月邮箱取代:

  • 买到的物品、卖出的收入、被超过的出价、到期退回的商品……每一笔都是一封邮件,附件就是那些物品或货币。
  • 玩家在线、离线、在别的子服都没关系,邮件会在邮箱里等他;在任何一个子服(共用星月邮箱数据库时)都能领。
  • 每一笔只会寄出一封,关服、当机、断线、两个子服同时处理都不会重复,也不会遗失。

因此 StarMail 星月邮箱 1.1.0 以上是必装的前置插件,见 安装与授权。

打开方式:/sa stash(也可以 /sa claim、/sa collect、/sa 领取箱)、市集右下角的 星月邮箱 按钮(有东西待领时变成发光的末影箱,显示「● 数量」),或直接 /sm。 三者打开的都是星月邮箱(装了云界面 CloudUI 时是全屏的云界面邮箱),领取方式见星月邮箱的 玩家邮箱。

会寄什么​

来源邮件标题(默认)附件
买到的一口价商品购买成功:物品物品
拍得的物品(含一口价买下)拍卖得标:物品物品
收购单收到的物品收购到货:物品物品
卖出收入(一口价、拍卖、卖给收购单)卖出收入:金额货币(已扣交易税)
出价被超过出价被超过:物品冻结的出价原数退回
拍卖流拍 / 被取消出价退回:物品冻结的出价原数退回
商品到期商品到期:物品剩下的物品,或收购单没用完的预付款
自己下架下架退回:物品同上
管理员下架管理员下架:物品同上(上架手续费也一并退还)
退款(交易没完成、手续费退还…)星月市集退款货币
背包放不下的东西背包放不下的物品物品

邮件的寄件人默认是「星月市集」,永不过期(mail.expire-days: 0),可在 config.yml 修改。 物品超过星月邮箱 mail.max-items(默认 21 组)时,星月邮箱会把它拆成几封,标题后面加上「(1/2)」「(2/2)」。

不会寄出、而是当场处理的情况:

  • 上架失败(价格不对、上限已满……)时,已经拿走的物品直接退回背包,放不下的部分才寄到邮箱。
  • 购买、出价、发布收购单失败时,已扣的钱当场退回余额;退不进去的部分(例如超过余额上限)才寄到邮箱。

货币怎么寄​

货币类型邮件附件领取时
vault(金币)邮件金币存进领取那个子服的 Vault 经济帐户
playerpoints(点券)邮件点券存进 PlayerPoints
item(物品货币)物品本身(例如 N 颗钻石,自定义物品也完整保留)放进背包
exp(经验等级)一条领取时执行的指令 experience add <玩家> N levels,附件说明显示「N 级经验」加上经验等级

领取金币 / 点券的子服要装对应的插件,没装时星月邮箱会跳过那一封、留到能领的子服再领,见星月邮箱的 一键领取。

如果某一笔在这个子服组不成邮件(例如这个子服没有那种货币、或物品资料是更新版本的服务器存的、这里读不出来),它会留在待寄清单里,一分钟后由任何一个子服(可能是读得懂它的那个)再试;控制台会提示一次「待寄 #编号 … 在本服无法寄出」。

邮件文字​

标题与正文在 messages.yml 的 mail 段,每一种来源一组,可以用 {item} 物品名称、{amount} 数量、{money} 金额、{player} 交易对象、{id} 商品编号:

mail:
bought: {title: '购买成功:{item}', content: ['你在星月市集买下了 {item} ×{amount}。', '商品编号 #{id},请领取附件。']}
sold: {title: '卖出收入:{money}', content: ['{player} 买下了你的 {item} ×{amount}。', '扣税后的收入 {money} 在附件里。']}
outbid: {title: '出价被超过:{item}', content: ['你在 {item} 的出价被超过了,冻结的 {money} 已退回。', '想再出价请输入 /sa open {id}。']}

全部的键见 messages.yml。邮件里的物品名称是中文名(例如「钻石」),在云界面邮箱等由服务器画出来的画面里也不会变成英文。 文字在寄出那一刻套用,改了 messages.yml 之后寄出的邮件才会用新文字。

每一笔只寄一次​

星月市集用一张「待寄清单」(数据库表 sa_stash)保证东西不丢也不多:

  1. 成交时,要给双方的物品与货币和交易本身写在同一个数据库事务里:成交了就一定在待寄清单里,没成交就一定不在。
  2. 寄送程序接着把清单里的每一笔变成邮件:先「租下」这一笔(一次只有一个子服在寄它),再交给星月邮箱,邮件带着唯一的编号 starauction:<安装编号>:<这一笔的编号>。
  3. 星月邮箱回传邮件编号之后,这一笔才标记为「已寄出」。

星月邮箱对同一个编号只会存一封邮件(幂等寄送),所以就算在「星月邮箱已经存好、市集还没来得及标记」的那一瞬间当机、等待回应超时、或两个子服都去寄同一笔,玩家也只会收到一封。 没寄成功的会自动重试:

时机说明
成交、下架、到期结算之后马上寄出
开服后 3 秒寄出关服期间留下的
玩家上线后 notify.join-delay-seconds 秒再试一次这时还没寄出的
别的子服有新的成交跨服时,任何子服都会帮忙寄
每 mail.retry-seconds 秒(默认 10)定时重试失败的

已寄出的记录保留 mail.keep-sent-days 天(默认 30)后清除;还没寄出的永远保留。

星月邮箱暂时不能用时​

情况结果
没装星月邮箱、星月邮箱没启用,或版本低于 1.1.0星月市集不会启动,控制台显示「星月市集需要星月邮箱 StarMail 1.1.0 以上(没有安装 / 没有启用 / 版本 … 太旧)」,装好或更新后重启即可
星月邮箱装了,但还没准备好(例如授权还在验证、连不上授权服务器)市集照常交易,要寄的东西留在待寄清单里,星月邮箱准备好之后自动寄出;这时 /sa stash 提示「星月邮箱现在不能用……邮箱恢复后会自动寄出」
星月邮箱的数据库暂时连不上同上,下一次重试时寄出;控制台提示「星月邮箱寄送暂时失败,稍后自动重试」
其他插件用 MailSendEvent 取消了寄送那一笔不算寄出,控制台提示一次,之后定时重试

通知​

别人买了你的东西、你的出价被超过、你拍得了东西、收购单收到货、商品到期或被管理员下架…… 每一件事都会在你所在的子服通知你一次(messages.yml 的 news.*,大多带一个「[领取]」按钮打开邮箱),离线期间发生的事会在下次上线后 notify.join-delay-seconds 秒告诉你。

新邮件的提示(聊天、标题、音效、上线提示、定时提醒没领的附件)由星月邮箱负责,在 StarMail 的 config.yml 的 notify 调整。 卖出时的音效、标题与被超过时的音效在星月市集 config.yml 的 notify,见 config.yml。

关服、重载、断线时​

情况东西去哪
关服 / /sa reload 时有人开着上架菜单菜单里的物品退回背包
玩家在上架菜单里输入价格时下线菜单里的物品寄到他的星月邮箱
交易处理中玩家下线交易没成功时,已扣的货币与物品寄到他的星月邮箱
关服时还有数据库操作没做完等它们做完(最多 10 秒)再关闭数据库,要寄的东西已经在待寄清单里,开服后寄出
商品在关服期间到期开服后结算,东西寄到星月邮箱

从 1.0.x 的领取箱升级​

直接换上 1.1.0 的 jar(并装好星月邮箱 1.1.0 以上)开服即可:

  • 领取箱里还没领的东西会自动寄到每位玩家的星月邮箱,控制台显示「已升级为星月邮箱寄送:领取箱里还没领的东西会自动寄到每位玩家的星月邮箱」。
  • config.yml 末尾自动加上 mail: 段;已经不用的 stash.auto-collect-money、stash.direct-delivery 可以删掉(留着也没有作用)。
  • 服务器上的 messages.yml 与菜单文件里默认的「领取箱」字样自动改成星月邮箱(例如「已放进领取箱」→「已寄到星月邮箱」、市集按钮名称),上线提示 join-stash 改成空白;你自己改过的文字不会动。
  • 以前收入自动入帐、买到的物品直接放进背包的做法已经取消,现在一律寄到邮箱。

相关​

  • 指令:/sa stash,见 指令。
  • 设置:mail 段,见 config.yml。
  • 变量:%starauction_stash%、%starauction_stash_items%、%starauction_stash_money%,见 变量。
  • 跨服:星月邮箱也要共用同一个数据库,见 跨服设置。