主题
任务系统配置
任务系统允许你设置定时、循环或事件触发的脚本,实现复杂的地牢机制。
常见用途:
- 倒计时提醒(定时任务)
- 定期补给发放(循环任务)
- 击杀统计和奖励(事件任务)
- Boss战阶段触发(事件任务)
- 环境特效循环(循环任务)
前置要求:
- 脚本需要在
tasks.yml中手动编辑 - 事件类型需要了解触发条件
任务类型说明
任务系统支持 3 种任务类型:
| 类型 | 说明 | 适用场景 | 触发方式 |
|---|---|---|---|
定时 | 在特定时间点执行 | 倒计时提醒、阶段切换 | 地牢开始后X秒 |
循环 | 定期重复执行 | 补给发放、环境特效 | 每X秒执行一次 |
事件 | 特定事件发生时触发 | 击杀统计、波次完成 | 事件发生时 |
支持的事件类型
| 事件 | 说明 | trigger_target用途 |
|---|---|---|
monster_kill | 每次击杀怪物 | 指定怪物ID(可选) |
wave_complete | 怪物组完成 | 指定怪物组名(可选) |
interact_trigger | 交互点触发 | 指定交互点名(可选) |
示例1:定时任务 - 倒计时提醒
在特定时间点提醒玩家。
yaml
tasks:
倒计时提醒:
type: "定时"
timings:
# 5分钟时
300: |-
action.title('@all', '&e剩余25分钟', '&7请加快速度')
action.sound('@all', 'BLOCK_NOTE_BLOCK_PLING', 1.0, 1.0)
# 10分钟时
600: |-
action.title('@all', '&e剩余20分钟', '&7时间充裕')
action.sound('@all', 'BLOCK_NOTE_BLOCK_PLING', 1.0, 1.2)
# 25分钟时(紧急警告)
1500: |-
action.title('@all', '&c&l剩余5分钟!', '&4&l快速完成')
action.message('@all', '&4&l[紧急] 还剩 5 分钟!')
action.sound('@all', 'ENTITY_ENDER_DRAGON_GROWL', 1.0, 0.8)
# 29分钟时(最后警告)
1740: |-
action.title('@all', '&4&l还剩1分钟!!!', '&4&l马上超时')
action.message('@all', '&4&l[紧急] 还剩 1 分钟!!!')
action.sound('@all', 'ENTITY_WITHER_SPAWN', 1.0, 1.0)示例2:循环任务 - 进度显示
定期显示任务进度。
yaml
tasks:
进度显示:
type: "循环"
interval: 10 # 每10秒执行一次
script: |-
var kills = getVar('total_kills') || 0
var target = 50
var progress = Math.floor((kills / target) * 100)
action.actionbar('@all', '&e击杀进度: &a' + kills + '&7/&e' + target + ' &8[&a' + progress + '%&8]')示例3:循环任务 - 补给箱刷新
定期给随机玩家发放补给。
yaml
tasks:
补给箱刷新:
type: "循环"
interval: 120 # 每2分钟
script: |-
action.message('@all', '&e[系统] 随机补给已发放')
action.give_item('@random', 'GOLDEN_APPLE', 1)
action.give_item('@random', 'ARROW', 16)
action.sound('@random', 'ENTITY_ITEM_PICKUP', 1.0, 1.2)
action.effect('VILLAGER_HAPPY', '0,65,0', 30, 2.0, 0.5)示例4:循环任务 - 环境特效
定期播放环境粒子效果。
yaml
tasks:
环境特效:
type: "循环"
interval: 60 # 每1分钟
script: |-
action.effect('END_ROD', '10,70,10', 15, 0.5, 0.05)
action.effect('END_ROD', '-10,70,-10', 15, 0.5, 0.05)
action.effect('PORTAL', '0,68,0', 30, 2.0, 0.1)示例5:事件任务 - 击杀统计
每次击杀怪物时统计并给予奖励。
yaml
tasks:
击杀计数:
type: "事件"
trigger: "monster_kill" # 每次击杀怪物触发
script: |-
var kills = (getVar('total_kills') || 0) + 1
setVar('total_kills', kills)
action.message('@trigger', '&7击杀 +1 &8(&e' + kills + '&8)')
action.sound('@trigger', 'ENTITY_EXPERIENCE_ORB_PICKUP', 0.5, 1.5)
// 每10击杀给予奖励
if (kills % 10 === 0) {
action.message('@all', '&a&l团队击杀达到 ' + kills + ' 只!获得速度效果')
action.apply_potion('@all', 'SPEED', '30秒', 1)
action.effect('FIREWORK', '0,65,0', 20, 2.0, 0.5)
}示例6:事件任务 - 指定怪物击杀
只统计击杀特定怪物。
yaml
tasks:
Boss击杀检测:
type: "事件"
trigger: "monster_kill"
trigger_target: "SkeletonKing" # ⚠️ 必须是 MythicMobs 的 Internal Name
script: |-
action.title('@all', '&6&l击败骷髅王!', '&e获得特殊奖励')
action.sound('@all', 'UI_TOAST_CHALLENGE_COMPLETE', 1.0, 1.0)
action.effect('FIREWORK', '0,65,0', 20, 1.0, 0.5)
action.give_item('@all', 'DIAMOND', 10)
action.give_item('@all', 'EMERALD', 5)
action.message('@all', '&a全队获得: 10钻石, 5绿宝石')示例7:事件任务 - 波次完成治疗
所有怪物组完成时触发。
yaml
tasks:
波次完成治疗:
type: "事件"
trigger: "wave_complete" # 怪物组完成触发
# 不指定 trigger_target,所有怪物组完成时都触发
script: |-
action.message('@all', '&d[治疗波] 神秘力量治愈了你们!')
action.heal('@all')
action.sound('@all', 'BLOCK_BEACON_POWER_SELECT', 1.0, 1.2)
action.effect('HEART', '0,65,0', 50, 2.0, 0.3)示例8:事件任务 - 指定波次完成奖励
只在特定怪物组完成时触发。
yaml
tasks:
第一波奖励:
type: "事件"
trigger: "wave_complete"
trigger_target: "第一波" # 只在"第一波"完成时触发
script: |-
action.message('@all', '&a[奖励] 第一波完成!获得速度效果!')
action.apply_potion('@all', 'SPEED', '60秒', 1)
action.sound('@all', 'ENTITY_PLAYER_LEVELUP', 1.0, 1.0)
// 给予金币奖励
action.message('@all', '&e+500 金币')
// 需要经济插件支持示例9:事件任务 - 击杀计数器(精英怪)
统计特定类型怪物的击杀数。
yaml
tasks:
精英击杀计数:
type: "事件"
trigger: "monster_kill"
trigger_target: "EliteGuard" # 只统计精英守卫
script: |-
var kills = (getVar('elite_kills') || 0) + 1
setVar('elite_kills', kills)
action.actionbar('@all', '&6精英击杀: &e' + kills + '&7/&e5')
if (kills >= 5) {
action.message('@all', '&a&l已击败5只精英守卫!开启宝箱')
action.delete_obstacle('treasure_gate')
action.effect('EXPLOSION_LARGE', '0,65,0', 20, 2.0, 0.0)
}示例10:复杂定时任务 - 多阶段提醒
结合多个时间点的复杂任务。
yaml
tasks:
阶段切换:
type: "定时"
timings:
# 3分钟 - 第一阶段
180:
- |-
action.title('@all', '&e第一阶段', '&7难度提升')
action.message('@all', '&e[阶段] 敌人变得更强了!')
setVar('difficulty', 1)
# 10分钟 - 第二阶段
600:
- |-
action.title('@all', '&6第二阶段', '&7大量敌人来袭')
action.message('@all', '&6[阶段] 敌人数量增加!')
setVar('difficulty', 2)
action.spawn_group('第二波')
# 20分钟 - 最终阶段
1200:
- |-
action.title('@all', '&c&l最终阶段', '&4Boss即将出现')
action.message('@all', '&c[阶段] Boss战准备开始!')
action.weather('thunder')
action.time('midnight')
setVar('difficulty', 3)
action.wait('10秒')
action.spawn_group('Boss战')配置字段说明
定时任务字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | 字符串 | ✅ | 任务类型:"定时" |
timings | 对象 | ✅ | 时间点映射,键=秒数,值=脚本列表 |
循环任务字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | 字符串 | ✅ | 任务类型:"循环" |
interval | 整数 | ✅ | 循环间隔(秒) |
script | 脚本 | ✅ | 每次执行的脚本 |
事件任务字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | 字符串 | ✅ | 任务类型:"事件" |
trigger | 字符串 | ✅ | 事件类型(见事件类型表) |
trigger_target | 字符串 | ❌ | 目标过滤(怪物ID/组名/交互点名) |
script | 脚本 | ✅ | 事件触发时执行的脚本 |
配置文件编辑
任务系统只能通过配置文件编辑,没有游戏内UI。
编辑步骤
- 打开
plugins/QueDP/dungeons/地牢名/tasks.yml - 按照示例格式添加任务
- 使用
/dga reload重载配置 - 进入地牢测试
配置技巧
定时任务:
- 时间点从地牢开始时计算(秒)
- 可以设置多个时间点
- 每个时间点可以有多个脚本
循环任务:
interval不要设置太小(建议≥5秒)- 过于频繁会影响性能
- 适合用于UI更新和定期奖励
事件任务:
trigger_target留空表示所有目标- 怪物ID必须是MythicMobs的Internal Name
- 可以在脚本中使用
@trigger选择器
常见问题
Q: 定时任务不触发?
- 检查时间点是否在地牢时限内
- 确认
timings格式正确(键必须是数字) - 查看控制台是否有脚本错误
Q: 循环任务执行太频繁?
- 增大
interval值 - 建议最小值为5秒
- 使用条件判断减少不必要的执行
Q: 事件任务不触发?
- 确认
trigger类型正确 - 检查
trigger_target是否存在(怪物ID/组名) - 确认事件确实发生了(击杀/完成/触发)
Q: 如何获取MythicMobs怪物的Internal Name?
- 打开MythicMobs配置文件(如
Mobs.yml) - 查找怪物定义,冒号前的就是Internal Name
- 例如:
SkeletonKing:→ Internal Name是SkeletonKing
Q: 如何实现条件判断?
- 使用JavaScript条件语句
- 示例:
if (getVar('kills') >= 10) { ... } - 可以使用
setVar和getVar存储数据
Q: 多个任务能同时运行吗?
- 可以!所有任务类型都是独立运行的
- 定时任务按时间点触发
- 循环任务按间隔执行
- 事件任务按事件触发
高级技巧
1. 动态难度调整
根据时间动态改变怪物强度。
yaml
tasks:
难度递增:
type: "循环"
interval: 300 # 每5分钟
script: |-
var currentDiff = getVar('difficulty') || 1
var newDiff = currentDiff + 1
setVar('difficulty', newDiff)
action.message('@all', '&c[难度] 难度已提升至 Lv.' + newDiff)
action.sound('@all', 'ENTITY_ENDER_DRAGON_GROWL', 1.0, 0.8)2. 成就系统
统计玩家成就并给予奖励。
yaml
tasks:
成就检测:
type: "事件"
trigger: "monster_kill"
script: |-
var kills = (getVar('total_kills') || 0) + 1
setVar('total_kills', kills)
// 检查成就
if (kills === 50) {
action.title('@all', '&6&l成就解锁', '&e击杀大师')
action.grant_reward('@all', '成就奖励_击杀50')
} else if (kills === 100) {
action.title('@all', '&6&l成就解锁', '&e屠戮之王')
action.grant_reward('@all', '成就奖励_击杀100')
}3. 击杀里程碑
根据击杀数给予阶段性奖励。
yaml
tasks:
击杀里程碑:
type: "事件"
trigger: "monster_kill"
script: |-
var kills = (getVar('total_kills') || 0) + 1
setVar('total_kills', kills)
// 25击杀里程碑
if (kills === 25) {
action.title('@all', '&6击杀25', '&e团队力量提升')
action.apply_potion('@all', 'DAMAGE_RESISTANCE', '60秒', 0)
}
// 50击杀里程碑
if (kills === 50) {
action.title('@all', '&6击杀50', '&e团队速度提升')
action.apply_potion('@all', 'SPEED', '60秒', 1)
}
// 100击杀里程碑
if (kills === 100) {
action.title('@all', '&6&l击杀100', '&e获得特殊奖励')
action.grant_reward('@all', '击杀里程碑奖励')
}