副本文件、入口与开本流程
GTDungeonTeam 的副本固定使用文件夹模式。每个副本一个 yml,放在 plugins/GTDungeonTeam/dungeons/。
plugins/GTDungeonTeam/dungeons/
forest.yml
tower.yml
abyss/nightmare.yml可以建子文件夹。插件会递归读取所有 .yml 文件。
基础副本文件
dungeon:
id: forest
name: "&a森林遗迹"
provider: command
engine-id: forest
target-server: ""
min-players: 1
max-players: 4
icon: ENDER_EYE
description:
- "&7被藤蔓吞没的古代遗迹。"| 字段 | 作用 |
|---|---|
id | GTDungeonTeam 内部副本 ID |
name | 玩家看到的副本名 |
provider | 适配器 ID |
engine-id | 对应副本插件里的真实副本 ID |
target-server | 目标副本服,跨服时使用 |
min-players | 最少人数 |
max-players | 最多人数 |
icon | GUI 展示材料 |
description | 副本描述 |
id 建议只用英文、数字、下划线和短横线。不要频繁改,队伍选择、副本记录、跨服请求都会用到它。
provider 怎么填
常见值:
command
dungeonplus
quedp
btdungeons
mythicdungeons实际可用状态以命令为准:
/gdt providersprovider: command 不要求安装副本插件,适合先打通消耗、队伍、结算动作。
副本入口
大型 RPG 服通常不希望玩家在任意地方点列表就开本,而是走副本门口、NPC、方块、菜单。写法:
dungeon:
id: forest
entry:
require-open-command: true
permission: "gtdungeonteam.entry.forest"
locked-text: "请先到森林遗迹入口打开副本。"让 NPC、方块菜单、传送门或其他插件执行:
/gdt dungeon open forest效果:
- 玩家从入口打开副本详情页。
- 插件记录玩家正在查看的副本。
- 队长在详情页确认选择。
- 如果直接在列表里选择,会被
locked-text拦住。
permission 为空时不检查权限。写了权限后,玩家必须拥有该权限才能打开入口详情页。
难度展示
dungeon:
difficulties:
- "普通"
- "困难"
- "噩梦"当前版本主要用于详情页展示和后续 UI 扩展。真实难度切换通常由对应副本插件或 start-actions 自己接。
展示掉落
dungeon:
display-drops:
- "&6远古钥匙 &8x1"
- "&b星辉碎片 &8x3-8"
- "&d史诗装备箱 &8低概率"display-drops 只负责展示,不会发奖励。
真实奖励写在副本插件、GTMobDrops、MythicMobs 或 reward-actions 里。
展示掉落适合写:
- 稀有装备
- 通关材料
- 坐骑碎片
- 称号道具
- 门票返还
- 每日首通奖励提示
进入条件 requirements
dungeon:
requirements:
scope: leader
list:
- "{calc:%player_level%+0} >= 30"
- "%player_job% == 战士"| 字段 | 作用 |
|---|---|
scope: leader | 只检查队长 |
scope: all-online | 检查当前服务器在线队员 |
requirements.list 支持:
- PAPI
<变量>{calc:公式}- GTCore 表达式
常见写法:
requirements:
scope: leader
list:
- "{calc:%player_level%+0} >= 60"
- "{calc:%player_zhandouli%+0} >= 50000"
- "%player_job% == 法师"如果跨服检查全队,注意不在当前子服的玩家无法直接读取本服 PAPI。跨服开本建议先检查队长,或让各子服共享玩家属性数据。
成本 cost
dungeon:
cost:
scope: leader
stamina: "{calc:10+<members>*2}"
money: "{calc:100*<members>}"
items:
- "vanilla:DIAMOND x1"| 字段 | 作用 |
|---|---|
scope: leader | 只扣队长 |
scope: all-online | 扣当前服务器在线队员 |
stamina | 体力消耗 |
money | 金币消耗 |
items | 物品消耗 |
stamina、money 支持公式:
cost:
stamina: "{calc:30}"
money: "{calc:100*<members>}"<members> 是队伍当前人数。
物品消耗
cost:
items:
- "vanilla:DIAMOND x1"
- "ia:dungeon_ticket x1"
- "ce:forest_key x1"
- "oa:abyss_token x2"常用前缀:
| 前缀 | 说明 |
|---|---|
vanilla: | 原版物品 |
ia: | ItemsAdder |
ce: | CraftEngine |
oa: | Oraxen |
不同物品库的真实 ID 以对应插件为准。展示图标和扣除物品建议先在测试服验证。
开始动作
dungeon:
start-actions:
- "[console] say <leader> 开始了 <dungeon_name>"开始动作在副本启动流程中执行。常用变量:
<leader>
<team>
<team_id>
<dungeon>
<dungeon_name>
<engine_dungeon>
<members>完成、奖励、失败动作
dungeon:
finish-actions:
- "[console] say <player> 完成 <dungeon> success=<success> damage=<damage>"
reward-actions:
- "[message] &a你获得了 <dungeon_name> 的奖励。"
- "gtmd:setitem example_reward"
fail-actions:
- "[message] &c副本失败了,下次再战。"
return-actions: []| 动作 | 触发 |
|---|---|
finish-actions | 副本结束时 |
reward-actions | 成功结算发奖励时 |
fail-actions | 失败结算时 |
return-actions | 返回或收尾时 |
动作语法见 GUI 与客户端界面。
开本检查顺序
队长执行 /gdt dungeon start 后,插件按这个顺序处理:
- 检查玩家是否有队伍。
- 检查执行者是否是队长。
- 检查队伍是否选择了副本。
- 读取
dungeons/中的副本配置。 - 检查队伍人数是否在
min-players和max-players范围内。 - 按
requirements.scope检查进入条件。 - 按
cost.scope预检查体力、金币、物品。 - 如果目标服不是当前服,创建跨服等待请求并传送队员。
- 扣除体力、金币、物品。
- 调用副本适配器启动副本。
- 启动成功后记录副本运行状态。
如果中途失败,后面的步骤不会继续。跨服传送失败时,会取消等待请求。
command 适配器示例
dungeon:
id: test
name: "&a测试副本"
provider: command
engine-id: test
min-players: 1
max-players: 4
start-actions:
- "[console] say 队伍 <team> 开始测试副本"用它检查:
- 队伍是否能选副本
- 体力是否扣除
- 金币是否扣除
- 物品是否扣除
- 结算动作是否执行
这些都通了,再接真实副本插件。
