跳到主要内容

当机保护

服务器当机(或被强制结束)时,行囊已经存进数据库,玩家资料却还停在较早的存档。不处理的话,刚存进行囊的东西玩家身上还有一份。 星月行囊在玩家下次进服时自动修正,默认开启:

recovery:
enabled: true
player-data: auto
join-delay-ticks: 40

怎么判断​

  1. 每一步搬动存档时,数据库同时记下「玩家这边多了 / 少了什么」、一个序号、以及 是哪一次运行的子服 做的;
  2. 玩家资料里记下「我已经包含到第几步」(和物品栏一起保存);
  3. 子服每次启动都会登记,上一次没有正常关服的运行会被标记为「当机」;
  4. 玩家进服 join-delay-ticks 之后,找出数据库有、玩家资料没包含、而且是当机那次运行做的步骤,补做:
    • 当时存进行囊的:从玩家身上收回(身上没有了就从行囊收回);
    • 当时取出来的:再给玩家一次(放不下就放回行囊)。

玩家会看到「服务器上次异常关闭,已自动修正你的物品:……」,后台也会写一行。检查完成前行囊暂时打不开。

玩家资料存在哪里(player-data)​

值用在判断「玩家资料包含到哪一步」的方式
auto(默认)自动选择装了 CloudSync 且行囊用 MySQL → cloudsync;装了 HuskSync 等 → shared;否则 server
server每个子服各自保存玩家资料(一般情况)玩家资料里的序号,每个子服分开
shared同步插件在各子服之间同步物品栏,并且 连同 PersistentDataContainer 一起同步(HuskSync 默认会)玩家资料里的序号,全服共用
cloudsync云同步 CloudSyncCloudSync 最后一次保存这位玩家的时间(读取 CloudSync 的数据表,需要同一台 MySQL)

cloudsync 模式会自动从 plugins/CloudSync/config.yml 找到 CloudSync 的数据库与数据表;数据表在别处时可以在 recovery.cloudsync-table 指定(例如 cloudsync.cloudsync_player)。 同步插件载入物品栏比较慢时,把 join-delay-ticks 调大。

其他保护​

  • 玩家下线时如果还有一步在存档,下线会等最多 3 秒让它完成,再让服务器保存玩家资料;
  • 数据库暂时连不上导致结果不明时,物品会暂存在 plugins/StarBag/rescue.yml,确认后在玩家下次进服时发还;
  • 关服时还没有结果的那一步会把两种可能都记下来,下次开服确认后自动处理。