主配置 config.yml
plugins/GTDungeonTeam/config.yml 控制队伍、体力、掉落、竞拍、经验、存储、代理和界面。副本本身不写在这里,副本固定放在 dungeons/ 文件夹。
修改后执行:
/gdt reload存储、代理、经济、客户端 UI 这类加载顺序相关的内容,正式服建议完整重启一次。
队伍 team
team:
default-max-players: 4
default-name: "<leader>的队伍"
default-description: "欢迎加入队伍。"
default-public: true
default-allow-apply: true
default-allow-pvp: false
default-random-distribution: false
pvp-damage-in-dungeon: false
invite-expire-seconds: 60
application-expire-seconds: 45
max-applications: 6| 字段 | 作用 |
|---|---|
default-max-players | 新队伍默认人数上限 |
default-name | 新队伍默认显示名,支持 <leader> |
default-description | 新队伍默认介绍 |
default-public | 新队伍是否默认公开 |
default-allow-apply | 是否默认接收入队申请 |
default-allow-pvp | 队伍是否默认允许队友伤害 |
default-random-distribution | 队伍是否默认开启掉落分配开关 |
pvp-damage-in-dungeon | 副本内是否允许队伍 PVP 逻辑生效 |
invite-expire-seconds | 邀请过期时间 |
application-expire-seconds | 入队申请过期时间 |
max-applications | 单个队伍最多保留多少条申请 |
队伍 ID 和队伍显示名是两回事。队伍 ID 用于内部索引、跨服同步、公开房间操作;队伍显示名给玩家看,队长可以改。
公开房间
team:
public-room:
enabled: true
quick-join: true| 字段 | 作用 |
|---|---|
enabled | 是否开放公开房间列表 |
quick-join | 是否允许 /gdt rooms quick 快速加入 |
公开房间不是强制进队。队伍开启申请时,玩家会提交入队申请;队伍关闭申请或条件不满足时,会收到失败提示。
入队条件模板
team:
join-requirements:
templates:
power:
name: "战斗力"
placeholder: "%player_zhandouli%"
default-operator: ">="
description:
- "限制申请者战斗力。"
job:
name: "职业"
placeholder: "%player_job%"
default-operator: "="
description:
- "限制申请者职业。"这里用于给队长准备“可选条件”。队长在游戏里决定要不要启用、比较符是什么、值填多少。
| 字段 | 作用 |
|---|---|
name | 玩家看到的条件名称 |
placeholder | 检查申请者时读取的 PAPI |
default-operator | 队长只输入值时使用的默认比较符 |
description | GUI 说明文字 |
可用比较符:
>= <= > < = == != contains !contains中文输入也能识别一部分:
大于 大于等于 小于 小于等于 等于 不等于 包含 不包含职业、阵营、称号这类文本条件,默认比较符用 =。战力、等级、转生次数这类数值条件,默认比较符用 >=。
副本默认适配器
dungeon:
default-provider: command当副本文件没写 provider 时,会使用这里的默认值。新服测试建议先用 command,流程通了再换成真实副本适配器。
体力 stamina
stamina:
enabled: true
max: 120
initial: 120
recover-amount: 1
recover-seconds: 60| 字段 | 作用 |
|---|---|
enabled | 是否启用体力 |
max | 体力上限 |
initial | 玩家首次记录时的初始体力 |
recover-amount | 每次恢复多少体力 |
recover-seconds | 每隔多少秒恢复一次 |
max、initial、recover-amount 支持变量和公式:
stamina:
max: "{calc:120+%player_level%*2}"
initial: "<stamina_max>"
recover-amount: "{calc:1+%vip_level%}"
recover-seconds: 60<stamina_max> 是当前计算出的体力上限。恢复量结果小于 0 时会按 0 处理。
战斗统计 stats
stats:
damage-enabled: true开启后插件会记录副本中的队伍伤害,用于结算页、DPS 展示、HUD 或客户端 UI 显示。
掉落分配 loot
loot:
enabled: true
mode: random
require-team-toggle: true
require-active-run: false
same-world-only: true
include-picker: true
announce: true| 字段 | 作用 |
|---|---|
enabled | 总开关 |
mode | 分配模式 |
require-team-toggle | 是否要求队伍自己的掉落分配开关已开启 |
require-active-run | 是否必须在副本运行中才接管掉落 |
same-world-only | 只分给同世界在线队员 |
include-picker | 拾取者是否也参与分配 |
announce | 是否通知队伍成员 |
mode 可填:
| 值 | 效果 |
|---|---|
random | 在线候选队员随机获得 |
round_robin | 轮流获得 |
leader | 优先给队长 |
picker | 给拾取者 |
off | 不接管掉落 |
普通组队服可以保持:
loot:
require-active-run: false这样没有副本插件时也能使用队伍掉落分配。
掉落黑名单
loot:
blacklist:
materials: []
lore-keywords:
- "绑定"
- "限定"匹配黑名单的物品不会被队伍分配接管。适合绑定物品、任务物品、不可交易物品。
materials 写原版材料名:
materials:
- BARRIER
- COMMAND_BLOCKlore-keywords 会去掉颜色后做包含匹配。
经验共享 exp-share
exp-share:
enabled: false
require-active-run: false
outside-dungeon-range: 32.0
same-world-only: false
announce: false
message: "&a<receiver> 获得队伍经验分配 &f<exp> &8(总经验 <total_exp>)"
distribution:
killer-weight: "1"
member-weight: "1"
actions:
shared: []| 字段 | 作用 |
|---|---|
enabled | 是否启用经验共享 |
require-active-run | 是否必须在副本中才共享 |
outside-dungeon-range | 不在副本运行中时的同世界共享半径,0 表示关闭副本外共享 |
same-world-only | 副本运行中是否进一步要求队员与击杀者同世界;副本外始终要求同世界 |
announce | 是否向每名经验接收者发送分配提示 |
distribution.killer-weight | 击杀者或原经验获得者的权重公式 |
distribution.member-weight | 每名符合条件队员的权重公式 |
actions.shared | 每次成功分配经验后执行的动作 |
经验只使用怪物或经验事件原本提供的数量作为固定池。所有权重会先求值,再按总权重归一化;公式写得再大,也不会突破原始经验总量。
例如击杀者获得每名队员的双倍权重:
exp-share:
enabled: true
outside-dungeon-range: 32.0
distribution:
killer-weight: "2"
member-weight: "1"怪物提供 100 经验,1 名击杀者和 2 名队员参与时,最终分成 50 / 25 / 25,总和仍为 100。
两项权重都支持 PAPI、<变量> 和 {calc:公式}。常用变量:
<exp> <total_exp>
<team_size> <participant_count> <teammate_count>
<earner> <earner_uuid>
<receiver> <receiver_uuid>
<in_dungeon> <outside_dungeon>
<distance> <exp_role>动态提高击杀者权重:
distribution:
killer-weight: "{calc: 1 + <teammate_count> * 0.5}"
member-weight: "1"副本运行中,只选择同一次副本运行记录里的在线队员;不在副本中时,只选择同世界且距离不超过 outside-dungeon-range 的在线队员。
旧配置中的 proportions 仍可继续使用。它现在表示每名队员从固定经验池取得的百分比,击杀者获得剩余部分,不再额外增加经验。要使用新公式,在 exp-share 下加入 distribution 即可。
副本适配器 providers
providers:
btdungeons:
prefer-api: true
command:
enabled: truecommand 是兜住流程用的适配器,适合测试、临时副本、只执行命令的玩法。真实副本插件能用 API 时,优先走 API。
查看当前适配器状态:
/gdt providers存储 storage
storage:
mode: local| 值 | 说明 |
|---|---|
local | 本地存储,适合单服测试 |
mysql | 使用 MySQL |
redis | 使用 Redis |
单服测试用 local。跨服网络选 MySQL 或 Redis,多个子服必须使用同一套存储。插件不会自动探测或切换存储模式。
MySQL
mysql:
enabled: false
host: 127.0.0.1
port: 3306
database: gtdungeonteam
username: root
password: ""
params:
useSSL: false
serverTimezone: Asia/Shanghai
characterEncoding: utf8
pool:
maximum-pool-size: 8一般不用手写完整 JDBC。确实需要自定义时,可以额外配置旧式 mysql.jdbc-url,插件会优先使用它。
Redis
redis:
enabled: false
host: 127.0.0.1
port: 6379
password: ""
database: 0Redis 适合跨服队伍状态和短期请求。生产服注意给 Redis 设置密码,并限制外网访问。
代理 proxy
proxy:
enabled: false
type: none
server-id: lobby-1
custom-channel: "gtdungeonteam:main"
legacy-custom-channel: "GTDungeonTeam"| 字段 | 作用 |
|---|---|
enabled | 是否启用跨服桥 |
type | velocity、bungee、waterfall、none |
server-id | 当前子服 ID,要和代理服务器名对应 |
custom-channel | 现代插件消息通道 |
legacy-custom-channel | 旧版本插件消息通道 |
每个子服的 server-id 必须不同,且和副本文件中的 target-server 对得上。
跨服开本 cross-server
cross-server:
auto-start-on-target: true
pending-expire-seconds: 120
join-delay-ticks: 40| 字段 | 作用 |
|---|---|
auto-start-on-target | 队员到达目标服后自动消费开本请求 |
pending-expire-seconds | 跨服开本请求过期时间 |
join-delay-ticks | 玩家进目标服后延迟多少 tick 再尝试开本 |
跨服开本流程见 跨服与存储。
客户端界面 ui
ui:
default: vanilla
prefer-client-ui: true
client-views:
main: "gtdungeonteam/main"
team: "gtdungeonteam/team"
rooms: "gtdungeonteam/rooms"
dungeons: "gtdungeonteam/dungeons"
result: "gtdungeonteam/result"default 可填:
vanilla
paiui
ax
dragoncore
kongcore
dialogdefault 是唯一界面模式。prefer-client-ui: true 时,插件只初始化并使用这里指定的客户端 UI;不会自动探测或依次尝试其他引擎。指定前置缺失或 API 初始化失败时直接回到原版 GUI。各引擎的页面 ID 和连接参数在 client-ui/providers.yml。
消息前缀
messages:
prefix: "&8[&3GTDungeonTeam&8] &r"所有普通提示都会带这个前缀。颜色符号支持 &。
