为什么用星月市集
市集插件看起来简单,难的是那些「出事才会发现」的地方:两个人同时买最后一组会不会都买到?卖家刚好在你按确认时改了价怎么办? 拍卖被超过的钱去哪了?关服的那一刻正在成交的东西会不会消失?星月市集把这些情况都处理好了。
每笔交易只成交一次
每一次购买、出价、卖给收购单、下架,都是数据库里的一个事务,而且第一步是一条带条件的更新: 「这件商品还在上架、还剩这么多、价格还是玩家看到的那个价格」——只有条件完全符合时才成交,然后在同一个事务里把要给双方的物品和钱写进待寄清单。
- 两个玩家(甚至在两个不同的子服)同时买最后一组:只有一边成交,另一边提示「这件商品已经卖完、结束或被下架了」,已经扣的钱马上退回。
- 两个人同时出价:后到的那个提示「价格或出价刚刚变动了,请确认后再试」,他刚扣的出价马上退回。
- 卖家刚好在你按确认时改了价:不会用新价格成交,提示价格变动,要重新确认。
- 同一个玩家网络卡顿时狂点:同时只会处理一个操作,提示「上一个操作还在处理,请稍候」。
东西不会丢
所有给玩家的东西都寄到他的 StarMail 星月邮箱(详见 星月邮箱寄送):
| 情况 | 星月市集的处理 |
|---|---|
| 买到东西、拍得东西、收购单收到货 | 物品寄到星月邮箱,背包满了也不怕,整理好再领 |
| 东西卖出时卖家不在线 / 在别的子服 | 收入寄到卖家的星月邮箱,并在他上线时告诉他离线期间卖了什么 |
| 拍卖出价被超过 | 冻结的出价原数寄回星月邮箱 |
| 商品到期、被下架、拍卖流拍 | 剩下的物品、收购单没用完的预付款、最高出价,全部寄回各自的星月邮箱 |
| 上架菜单关闭 / 断线 / 重载 / 关服 | 放进上架菜单的物品退回背包;玩家已经离线时寄到他的星月邮箱 |
| 数据库写入失败 | 已扣的物品与货币退回,提示「操作失败,请稍后再试(已退回扣除的物品与货币)」 |
| 寄信时当机、等待回应超时、星月邮箱暂时不能用 | 东西留在待寄清单,之后自动重寄;每一笔带唯一编号,星月邮箱只收一次,不会重复也不会遗失 |
| 物品数据在这个子服读不出来(来自更新版本的服务器) | 交给读得懂的子服寄出;邮件留在邮箱,到正确版本的子服领取 |
待寄清单和成交写在同一个数据库事务里;寄出的邮件默认永不过期,每封邮件只能领一次,跨服同时点也只会有一边拿到。 物品以完整的物品数据保存,附魔、自定义名称、说明,以及其他插件写在物品上的数据都会原样保留。