跳到主要内容

副本限制(防作弊)

副本里默认把所有能用来作弊、逃出副本或破坏地图的东西全部关掉。规则写在 rules::

  • plugins/CloudDungeon/config.yml 的 rules: 是全服默认。
  • 每个副本的 config.yml 也可以写 rules:,只写想改的项目,其他沿用全服默认。

true = 允许,false = 禁止。

# dungeons/<副本>/config.yml:这个副本允许挖方块、开放鞘翅
rules:
block-break: true
elytra: true

全部规则​

规则默认说明
block-breakfalse破坏方块
block-placefalse放置方块
explosion-block-damagefalse爆炸破坏地形(苦力怕、技能爆炸)
pvpfalse队友互打(包括用弓箭等射击)
item-droptrue丢物品
item-pickuptrue捡物品
hungertrue会饿;false = 饱食度不会下降
ender-pearlfalse末影珍珠、末影之眼
chorus-fruitfalse紫颂果传送
elytrafalse鞘翅滑翔
firework-boostfalse烟花加速
riptidefalse激流三叉戟
wind-chargefalse风弹
totemfalse不死图腾(会绕过生命次数)
ender-chestfalse末影箱(防止把副本物品藏起来)
bucketsfalse水桶、岩浆桶(装与倒)
vehiclesfalse船、矿车
leashfalse拴绳(拉怪)
spawn-eggsfalse刷怪蛋
throw-eggsfalse丢鸡蛋
firefalse打火石、火焰弹(false 时火也不会蔓延)
explosivesfalseTNT、TNT 矿车、末地水晶
flightfalse飞行(/fly);创造与旁观模式不受影响
frames-and-standsfalse物品展示框、盔甲架、画(放置、拿取、打掉)
tramplefalse踩坏耕地
bed-and-anchorfalse右键床、重生锚(会爆炸)
mob-dropstrue原版怪物掉落物与经验(MythicMobs 的掉落表不受影响)
sun-burnfalse副本生成的僵尸、骷髅被太阳烧(副本世界在服务器端是白天,默认关掉;被火、岩浆点燃照常)

右键使用类的操作(珍珠、末影箱、水桶、鞘翅……)被挡下时会提示「副本内不能使用……」;破坏 / 放置方块、PVP、丢 / 捡物品这类直接无效,不提示。提示文字在 lang.yml 的 rules:。

block-break / block-place 是 false 时,开着的 break / place 触发组 所指定的方块(它的点位 / 区域里,种类也符合)仍然可以挖 / 放,挖放时会执行那个触发;其他方块照样受保护。注意冒险模式本来就挖不动、放不了方块,要用这类触发请把 environment.gamemode 改成 SURVIVAL。

名单类设置​

rules:
# 额外禁止右键使用的物品(物品 ID)
blocked-items: [GOLDEN_APPLE, SNOWBALL]
# lore 含有这些文字的物品,离开副本时会被收走
bound-item-lore: ["副本限定"]
项目说明
blocked-items右键无效并提示。物品 ID 写错会在 /cd admin reload 时警告
bound-item-lore副本限定物品:离开副本(任何方式)时收走;不在副本里的玩家登录时如果带着这种物品(例如当机时带出来的)也会收走。比对的是去掉颜色后的文字,只要某一行 lore 包含就算
备注

副本的 rules: 里写了名单类项目,会整份取代全服默认的名单,不是追加。例如副本只写 blocked-items: [SNOWBALL],全服默认挡掉的金苹果在这个副本里就能用了。

副本里能用哪些指令写在 rules.commands,见下一节。

副本内的指令​

rules:
commands:
mode: whitelist # whitelist / blacklist / leave-only / all
list: [cd, clouddungeon, dungeon, msg, tell, w, r, reply]
message: "" # 被挡下时的提示;空 = 用 lang.yml 的 rules.command-blocked

四种模式​

mode中文写法作用
whitelist白名单默认。只有 list 里的指令能用,其他全部挡掉
blacklist黑名单list 里的指令挡掉,其他都能用
leave-only只能离开除了离开副本的指令,全部挡掉(不看 list)
all全部不限制,什么指令都能用

mode 写英文或中文都可以。

list 怎么写​

写法意思
cd整个指令:/cd 和它底下所有子指令
cd party只算这个子指令:白名单时只开放 /cd party …,其他 /cd 子指令仍然挡掉;黑名单时只挡 /cd party …,其他 /cd 子指令照常可用
home*前缀:结尾的 * 代表「以这段开头」,home* 包含 /home、/homes、/homeset……
  • 开头的 / 和插件前缀都会忽略:/essentials:msg 和 msg 当成同一个指令。
  • 不分大小写。
  • message 是被挡下时的提示(可用 & 色码),{command} = 被挡下的指令;空 = 用 lang.yml 的 rules.command-blocked。

一定可以用的指令​

不管哪种模式,离开副本的指令一定可以用:

  • leave-command 设置的离开指令(默认 /leave,包括它的别名);
  • /cd leave(/cd quit)。

所以不用把它们写进 list;黑名单写了也挡不掉。

用权限单独开放某个指令​

给玩家 clouddungeon.command.<指令> 权限,他在副本里就能用那个指令,不管 mode 是什么。例如 clouddungeon.command.spawn = 这个人在副本里可以用 /spawn。

有 clouddungeon.bypass 的人则完全不受任何副本限制(包括指令),见 谁不受限制。

Tab 补全​

在副本里时,玩家不能用的指令不会出现在指令补全清单里(按 / 再按 Tab 看不到)。进入、离开副本或掉线重连回副本时会自动刷新。

示例​

只能用 /leave 离开,其他指令一律不行:

rules:
commands:
mode: leave-only

大部分指令都开放,只挡传送类(黑名单):

rules:
commands:
mode: blacklist
list: [spawn, "home*", "tpa*", warp]
message: "&c副本里不能使用 &f{command}"

只开放组队与私讯(白名单):

rules:
commands:
mode: whitelist
list: ["cd party", msg, tell, w, r, reply]

这样玩家在副本里只能用 /cd party … 和私讯,/cd 的其他子指令都不行;/leave、/cd leave 仍然可以用。

全服默认与副本覆写​

  • plugins/CloudDungeon/config.yml 的 rules.commands 是全服默认。
  • 副本的 config.yml 写了 rules.commands,会整份取代全服默认(mode 和 list 一起),不是合并。例如全服是白名单,副本写 mode: blacklist 加 list: [spawn],这个副本就变成只挡 /spawn。
  • 旧写法仍然可以用:allowed-commands: [...] = 白名单,blocked-commands: [...] = 黑名单。
# 旧写法,等同 mode: whitelist
rules:
allowed-commands: [cd, msg, tell, r]

与 command 触发组​

command 触发组 先执行,再检查指令规则。触发了、但这个指令本身不被规则允许(例如自己编的 /芝麻开门),会直接被吃掉,不会出现「不能使用指令」的提示。

副本规则菜单​

编辑模式的编辑菜单里,「回到出生点」旁边的「副本规则」可以直接修改这个副本的 rules:(写进副本的 config.yml,保留注释,立刻重新读取):

按钮作用
每一条规则点击切换允许 / 禁止:绿色 = 允许,灰色 = 禁止。✎ 表示这个副本有自己的设置(覆写了全服默认);Shift+右键 = 删掉这个副本的设置,改回全服默认
副本内的指令点击轮换模式:白名单 → 黑名单 → 全部关闭(只能离开)→ 全部开放
指令清单用脚本编辑器的方式编辑 rules.commands.list,一行一个指令
被挡时的讯息在聊天栏输入 rules.commands.message
指令改回全服默认删掉这个副本的 rules.commands,改回用全服的设置

第一次在菜单里改指令设置时,会先把目前实际生效的模式和清单(全服默认或旧写法)复制进副本的 config.yml,你是从现在生效的设置开始改,不会一改就变成空清单。

其他固定的保护​

这些不需要设置,一直有效:

  • 副本世界不会自然生怪,只会有副本生成的怪物(不依赖游戏规则,各版本都有效)。
  • 不能传送到别的格子:副本里的人被技能、其他插件传送时,只能在自己这一格的范围内。
  • 外人不能传送进来:不在副本里的人(例如 /tpa 到副本中的玩家)不能进入副本世界;有 clouddungeon.admin 的管理员可以。
  • 跑出地图会被拉回:离开地图范围(地图外围留 environment.border 格,最少 16 格)或掉进虚空,会被传回存档点。
  • 被传送出副本世界 = 离开副本:例如 /spawn、/home,会照离开副本处理并恢复状态。

谁不受限制​

  • 有 clouddungeon.bypass 权限的人完全不受限制(测试用;默认没有人有,OP 也没有)。
  • 有 clouddungeon.command.<指令> 权限的人,在副本里可以用那个指令,见 用权限单独开放某个指令。
  • 规则只在副本世界里生效,对其他世界完全没有影响。
  • 在副本世界但不在任何副本里的人(例如管理员),套用全服默认的 rules:。
  • 进行中的副本不受 /cd admin reload 影响:规则(包括指令模式与清单)维持开始时的设置,下一场才用新的设置。

进行中修改规则:setting​

脚本可以用 setting 动作在副本进行中改这一场的规则,例如打完 Boss 开放挖矿、进入竞技场阶段开 PVP:

end:
- "setting block-break true"
- "setting pvp=true elytra=true mode=survival"

DungeonPlus 的写法 $setting{break=true;place=true;mode=SURVIVAL} @init 也能直接用(放在 before.yml 就是开场前设置)。

  • 可以改任何规则名称,break / place 是 block-break / block-place 的简写。
  • mode(或 gamemode)= 改这一场的游戏模式,活着的人立刻切换。
  • 只影响这一场,下一场恢复设置文件里的规则。
  • 名单类设置(blocked-items、bound-item-lore)与指令规则(commands、allowed-commands、blocked-commands)不能用 setting 改。
  • 规则名称写错会在控制台警告。

setting 的完整说明见 动作:环境与规则。