Skip to content

完整示例

本页面提供各种场景的完整地牢脚本示例,你可以直接复制这些代码到你的配置文件中。

1. 基础波次战斗

这是一个经典的三波怪物战斗系统,包含普通波次、精英波次和 Boss 战。

TIP

这种模式适合大多数防守型或竞技场型的副本。

monsters.yml

yaml
怪物组:
  第一波:
    auto-start: true
    开始时: |
      action.title('@所有玩家', '&c━━ 第一波 ━━', '&7骷髅来袭');
      action.create_obstacle('大门');
    完成时: |
      action.remove_obstacle('大门');
      action.message('@所有玩家', '&a第一波完成!3秒后下一波');
      action.wait('3秒');
      action.spawn_group('第二波');
    怪物:
      - ID: "SkeletonMinion"
        位置: "10,64,10"
        数量: 5
  
  第二波:
    auto-start: false
    开始时: |
      action.title('@所有玩家', '&6━━ 第二波 ━━', '&7精英骷髅');
    完成时: |
      action.message('@所有玩家', '&a准备Boss战!');
      action.wait('5秒');
      action.spawn_group('Boss');
    怪物:
      - ID: "SkeletonElite"
        位置: "10,64,10"
        数量: 3
        等级: 5
  
  Boss:
    auto-start: false
    开始时: |
      action.time('midnight');
      action.weather('thunder');
      action.title('@所有玩家', '&c&l━━━ Boss战 ━━━', '&4骷髅王');
      for (var i = 0; i < 3; i++) {
        action.lightning('0,65,0');
        action.sound('@所有玩家', 'ENTITY_LIGHTNING_BOLT_THUNDER');
        action.wait('0.5秒');
      }
    完成时: |
      action.title('@所有玩家', '&a&l━━━ 胜利 ━━━', '');
      action.complete();
    怪物:
      - ID: "SkeletonBoss"
        位置: "0,64,0"
        数量: 1
        等级: 10

scripts.yml

yaml
开始: |
  action.title('@所有玩家', '&6地牢开始', '&7击败所有敌人');
  action.sound('@所有玩家', 'ENTITY_PLAYER_LEVELUP');

完成: |
  var time = dungeon.time;
  action.title('@所有玩家', '&a恭喜通关', '&7用时 ' + time + ' 秒');
  for (var i = 0; i < 5; i++) {
    action.effect('FIREWORK', '0,70,0', 50);
    action.sound('@所有玩家', 'ENTITY_FIREWORK_ROCKET_BLAST');
    action.wait('0.5秒');
  }
  action.reward('基础奖励');
  action.wait('3秒');

失败: |
  action.title('@所有玩家', '&c&l任务失败', '');
  action.sound('@所有玩家', 'ENTITY_VILLAGER_NO');

2. 计分与评级系统

根据通关时间、击杀数和死亡数计算总分,并根据分数发放不同等级的奖励。

scripts.yml

yaml
初始化: |
  setVar('总击杀', 0);
  setVar('总死亡', 0);

完成: |
  var baseScore = 1000;
  var timeBonus = Math.max(0, 600 - dungeon.time);
  var killBonus = (getVar('总击杀') || 0) * 10;
  var deathPenalty = (getVar('总死亡') || 0) * 50;
  var totalScore = baseScore + timeBonus + killBonus - deathPenalty;
  
  setVar('最终得分', totalScore);
  
  action.message('@所有玩家', '&6&l━━━━━━ 结算 ━━━━━━');
  action.message('@所有玩家', '&7  基础分: &e+' + baseScore);
  action.message('@所有玩家', '&7  时间加分: &a+' + timeBonus);
  action.message('@所有玩家', '&7  击杀加分: &a+' + killBonus);
  if (deathPenalty > 0) {
    action.message('@所有玩家', '&7  死亡惩罚: &c-' + deathPenalty);
  }
  action.message('@所有玩家', '&6&l  总分: ' + totalScore);
  action.message('@所有玩家', '');
  
  if (totalScore >= 1500) {
    action.message('@所有玩家', '&d&l  评级: SSS (完美)');
    action.reward('传说礼包');
  } else if (totalScore >= 1200) {
    action.message('@所有玩家', '&6&l  评级: SS (优秀)');
    action.reward('精良礼包');
  } else {
    action.message('@所有玩家', '&a&l  评级: S (良好)');
    action.reward('普通礼包');
  }
  
  action.wait('5秒');

tasks.yml

yaml
任务:
  击杀统计:
    类型: "事件"
    触发: "monster_kill"
    脚本: |
      var kills = (getVar('总击杀') || 0) + 1;
      setVar('总击杀', kills);

3. 里程碑奖励

当玩家达到特定的击杀数量时,给予即时奖励和 Buff。

tasks.yml

yaml
任务:
  击杀里程碑:
    类型: "事件"
    触发: "monster_kill"
    脚本: |
      var kills = (getVar('总击杀') || 0) + 1;
      setVar('总击杀', kills);
      
      if (kills == 10) {
        action.message('@所有玩家', '&e[里程碑] 击杀10!获得速度I');
        action.potion('@所有玩家', 'SPEED', '30秒', 0);
        action.sound('@所有玩家', 'ENTITY_PLAYER_LEVELUP');
      } else if (kills == 25) {
        action.message('@所有玩家', '&6[里程碑] 击杀25!获得力量I');
        action.potion('@所有玩家', 'INCREASE_DAMAGE', '60秒', 0);
      } else if (kills == 50) {
        action.message('@所有玩家', '&c&l[里程碑] 击杀50!终极增益!');
        action.heal('@所有玩家');
        action.shield('@所有玩家', 20);
        action.potion('@所有玩家', 'INCREASE_DAMAGE', '120秒', 2);
        action.potion('@所有玩家', 'DAMAGE_RESISTANCE', '120秒', 1);
        action.title('@所有玩家', '&c&l屠魔者', '&4终极力量觉醒');
      }
  
  实时进度:
    类型: "循环"
    间隔: 20
    脚本: |
      var kills = getVar('总击杀') || 0;
      var time = dungeon.time;
      action.actionbar('@所有玩家', '&7击杀: &e' + kills + ' &8| &7时间: &6' + time + 's');

4. 交互与陷阱

展示如何制作踩踏陷阱、弹跳板和需要钥匙开启的宝箱。

interacts.yml

yaml
interacts:
  火焰陷阱:
    type: STEP_ON
    parameters:
      location: "15,64,10"
    script: |
      action.sound('@触发者', 'ENTITY_CREEPER_PRIMED');
      action.effect('FLAME', '15,64,10', 50);
      action.message('@触发者', '&c火焰陷阱触发!');
      action.wait('0.5秒');
      action.damage('@触发者', 5);
  
  弹跳陷阱:
    type: STEP_ON
    parameters:
      location: "20,64,15"
    script: |
      action.velocity('@触发者', 0, 2, 0);
      action.sound('@触发者', 'ENTITY_SLIME_JUMP');
  
  宝箱:
    type: RIGHT_CLICK_BLOCK
    once: true
    parameters:
      location: "25,64,20"
      required_item_data:
        material: TRIPWIRE_HOOK
        display_name: "§6金钥匙"
    script: |
      action.sound('@触发者', 'BLOCK_CHEST_OPEN');
      action.effect('VILLAGER_HAPPY', '25,65,20', 30);
      action.message('@触发者', '&a宝箱已打开!');
      action.give_item('@触发者', 'diamond', 5);
      action.sound('@触发者', 'ENTITY_PLAYER_LEVELUP');

5. 限时挑战

玩家必须在规定时间内完成副本,否则失败。包含倒计时提醒。

scripts.yml

yaml
开始: |
  action.title('@所有玩家', '&e限时10分钟', '&7快速完成挑战');
  action.spawn_group('全部怪物');

tasks.yml

yaml
任务:
  倒计时_5分钟:
    类型: "定时"
    时间: 300
    脚本: |
      action.title('@所有玩家', '&e剩余5分钟', '&7请加快速度');
      action.sound('@所有玩家', 'BLOCK_NOTE_BLOCK_PLING');
  
  倒计时_1分钟:
    类型: "定时"
    时间: 540
    脚本: |
      action.title('@所有玩家', '&c&l剩余1分钟', '&7时间紧迫');
      action.sound('@所有玩家', 'BLOCK_NOTE_BLOCK_PLING', 1.0, 0.5);
  
  超时检查:
    类型: "定时"
    时间: 600
    脚本: |
      action.fail('超时');

6. 动态难度

根据玩家的通关速度动态调整怪物强度或给予增益。

tasks.yml

yaml
任务:
  难度调整:
    类型: "事件"
    触发: "wave_complete"
    脚本: |
      var completedWaves = (getVar('完成波次') || 0) + 1;
      setVar('完成波次', completedWaves);
      
      var time = dungeon.time;
      var avgTime = time / completedWaves;
      
      if (avgTime < 60) {
        action.message('@所有玩家', '&e[难度调整] 表现优秀!增加挑战');
        action.potion('@所有玩家', 'INCREASE_DAMAGE', '60秒', 0);
        setVar('难度系数', 1.5);
      } else if (avgTime > 120) {
        action.message('@所有玩家', '&e[难度调整] 获得协助增益');
        action.heal('@所有玩家');
        action.potion('@所有玩家', 'DAMAGE_RESISTANCE', '60秒', 0);
      }

基于 MIT 许可发布