跳到主要内容

宠物背包

宠物可以帮主人背东西。宠物文件写 backpack(列数,0 = 没有背包,最多 6 列):

backpack: 1 # 固定 1 列(9 格)
backpack: 'min(6, 1 + floor(level / 8))' # 随等级变大:1 级 1 列、8 级 2 列……最多 6 列
backpack: [1, 1, 1, 2, 2, 3] # 每级一个值

怎么打开​

  • 宠物菜单的「背包」按钮。
  • /cp backpack [宠物](不写宠物 = 召唤中的第一只)。

需要权限 cloudpet.backpack(默认所有人都有),而且 config.yml 的 backpack.enabled: true。宠物不用召唤出来也能打开。

不能放的物品​

config.yml
backpack:
enabled: true
blacklist: [SHULKER_BOX, WHITE_SHULKER_BOX, ..., BUNDLE]

默认挡下所有颜色的潜影盒与收纳袋,避免把东西层层塞进宠物背包。想挡宠物蛋,把 eggs.item 用的材质(默认 EGG)加进去。

跨服与同时打开​

  • 背包存在数据库,宠物在哪个子服,背包就在哪里(多个子服共用 MySQL 时)。
  • 同一时间只有一个地方能打开同一个背包:另一个子服或另一个窗口正开着时,会提示「这个背包正在别的地方打开」。
  • 背包开着时不能把宠物打包成宠物蛋或放生。

为什么不会复制或吞物品​

步骤做了什么
打开向数据库取得这个背包的租约(每 20 秒续约),拿不到就不打开
每次改动先把「这一笔要把背包从第 N 版改成什么」的日志写进玩家自己的数据,再到数据库做「版本号还是 N 才写入」的交易
鼠标上拿着东西先不写;放下之后才写这一笔(避免物品「不在任何地方」时存档)
关闭写最后一笔并放开租约
崩服后上线玩家数据里的日志还在、数据库还停在第 N 版 → 把日志补写进去

所以不会出现「拿出来了、背包里也还在」(复制),也不会出现「放进去了、背包里却没有」(吞物品)。

格数变少时​

宠物降级、改了 backpack 设置让格数变少时,看不到的格子原样保留在数据库,打开时会提示「有 N 格物品暂时看不到(没有消失)」,格数恢复后就回来。

宠物蛋、进化与放生​

  • 打包成宠物蛋:背包内容跟着蛋走,孵化后的新主人打开就是原本的东西。
  • 进化:背包不变(列数照新宠物的 backpack 计算)。
  • 放生:背包里还有东西时不能放生,要先拿出来。

管理员​

/cp admin backpack <玩家> <宠物|宠物编号>

唯读查看一位玩家的宠物背包(不能拿也不能放)。离线玩家写完整的宠物编号(/cp admin list <玩家> 查看)。

MythicMobs 机制 cloudpet-dropbackpack(或 DropPetInventory)可以把宠物背包的东西全部丢在宠物脚下:数据库先清空成功才丢出,主人正开着背包时不会执行。