跳到主要内容

数据库

SQLite(默认)​

不用设置,数据存在 plugins/CloudPet/data.db。单一服务器建议直接用 SQLite。

MySQL / MariaDB​

config.yml
database:
type: mysql # mysql 或 mariadb
host: 127.0.0.1
port: 3306
database: cloudpet
username: root
password: ''
parameters: useSSL=false&characterEncoding=utf8&serverTimezone=UTC
table-prefix: cp_
pool-size: 4

先建好数据库(字符集 utf8mb4),改完重启服务器(数据库设置不能用 /cp admin reload 重载)。数据表会自动建立。table-prefix 只能用字母、数字与下划线。

连不上数据库时云宠物会停用,后台写明原因;检查 database 段后重启即可。

多个子服​

多个子服连同一个 MySQL 时,宠物跟着玩家跨服:拥有的宠物、等级经验、名字皮肤、召唤中的宠物、背包内容、个人设置(例如隐藏别人的宠物)全部共用。

请在每台子服的 config.yml 填不同的 server-id(留空时自动用「服务器文件夹名:端口」):

server-id: 'survival-1'

跨服租约​

每位玩家的数据同一时间只由一台子服写入:

  1. 玩家进入子服 B 时,B 先向数据库「领取」这位玩家;如果子服 A 还没存完、还没放手,B 会等它(最多约 8 秒)。
  2. A 把宠物数据写完、放开租约后,B 才读取。所以换服再快也不会读到旧数据。
  3. A 崩溃没放手时,B 等待后会自动接手(每台子服每 10 秒更新一次心跳)。
  4. 子服重开时,会放开上次没正常关服留下、而且现在不在线的玩家的租约。

宠物背包另外有自己的租约(见 宠物背包),同一个背包同一时间只能在一个地方打开。宠物被打包成蛋、送人、放生或被管理员收回后,旧子服的写入一律无效,不会把宠物「写回来」。

数据表​

表(前缀 cp_)内容
cp_players每个玩家一行:名字、召唤中的宠物、个人设置,以及跨服租约(子服名称 + 心跳时间)
cp_pets每只宠物一行(编号永远不变):主人、种类、名字、皮肤、等级、经验、血量、昏倒到什么时候、状态(owned 拥有 / egg 宠物蛋 / released 已放生)、已解锁的皮肤、其他数据
cp_storage宠物背包:物品内容、版本号、背包租约
cp_log记录:给予、打包、孵化、放生、进化、购买皮肤、管理员操作……
cp_meta共用设置

所有读写都在独立线程执行,不会卡主线程。

备份

cp_pets 与 cp_storage 是玩家的宠物与背包。请把 data.db(或 MySQL)纳入日常备份;不要在服务器运行中手动修改这两张表。