主题
完整示例
本页面提供各种场景的完整地牢脚本示例,你可以直接复制这些代码到你的配置文件中。
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
等级: 10scripts.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);
}