脚本配置 scripts.yml
scripts.yml 定义了地牢的生命周期脚本,在不同阶段自动执行。
# 副本初始化时执行(世界创建完毕、玩家传送前)init: - "action.world_time('day')" - "action.weather('clear')"
# 副本开始后执行start: # 可选:开始条件(JavaScript 表达式,返回 true 才执行脚本) condition: - "dungeon.getOnlinePlayerCount() >= 1" script: - "action.title('@all', '&6地牢开始', '&7准备战斗!')" - "action.spawn_group('wave_1')"
# 副本通关时执行(调用 action.complete() 后触发)complete: - "action.title('@all', '&a恭喜通关!', '&7即将返回大厅')" - "action.grant_reward('通关奖励')" - "action.wait('5s')" - "action.exit_dungeon()"
# 副本退出时执行(所有玩家被传送回主世界前)exit: - "action.message('@all', '&7感谢参与!')"
# 副本失败时执行(调用 action.fail() 后触发)fail: - "action.title('@all', '&c挑战失败', '&7再接再厉')" - "action.wait('3s')" - "action.exit_dungeon()"
# 玩家死亡时执行(每个玩家死亡都会触发)player_death: - "action.message('@all', '{player.name} 倒下了!')"
# 全队死亡时执行(所有玩家都死亡)all_death: - "action.fail('全员死亡')"生命周期说明
Section titled “生命周期说明”| 事件 | 触发时机 | 说明 |
|---|---|---|
init | 世界创建完成后 | 设置世界环境,创建初始障碍物等 |
start | 玩家传送到副本后 | 可设置条件。用于开场演出和第一波怪物 |
complete | 调用 action.complete() 后 | 发放奖励、播放通关效果 |
exit | 玩家被传送回主世界前 | 清理工作 |
fail | 调用 action.fail() 后 | 失败提示和退出处理 |
player_death | 每个玩家死亡时 | 可用于复活机制 |
all_death | 所有玩家都死亡时 | 通常直接调用 action.fail() |
多行字符串格式
Section titled “多行字符串格式”脚本也可以使用 YAML 多行字符串格式,适合包含 if/else 等代码块:
complete: |- action.title('@all', '&a通关!', '') let time = dungeon.getRunningTime() if (time < 300) { action.grant_reward('速通奖励') action.message('@all', '&a速通奖励已发放!') } else { action.grant_reward('普通奖励') } action.wait('5s') action.exit_dungeon()脚本中可以使用以下内置变量:
player/trigger- 触发脚本的玩家对象dungeon- 当前副本实例对象action- 动作调用对象
详见 脚本系统概述,其中包含各类动作(消息 / 地牢 / 世界 / 玩家 / 战斗等)的完整参考。