Skip to content

脚本配置 scripts.yml

scripts.yml 定义了地牢的生命周期脚本,在不同阶段自动执行。

完整配置

yaml
# 副本初始化时执行(世界创建完毕、玩家传送前)
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('全员死亡')"

生命周期说明

事件触发时机说明
init世界创建完成后设置世界环境,创建初始障碍物等
start玩家传送到副本后可设置条件。用于开场演出和第一波怪物
complete调用 action.complete()发放奖励、播放通关效果
exit玩家被传送回主世界前清理工作
fail调用 action.fail()失败提示和退出处理
player_death每个玩家死亡时可用于复活机制
all_death所有玩家都死亡时通常直接调用 action.fail()

多行字符串格式

脚本也可以使用 YAML 多行字符串格式,适合包含 if/else 等代码块:

yaml
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 - 动作调用对象

详见 脚本系统概述动作参考

基于 MIT 许可发布