Skip to content

脚本系统 API

QueDPAPI.scripts() 提供 JavaScript 脚本执行功能(基于 Rhino 引擎)。


执行脚本

使用实例上下文

kotlin
val scripts = listOf(
    "action.title('@所有玩家', '&6&l开始!', '&7击败所有怪物');",
    "action.sound('@所有玩家', 'ENTITY_PLAYER_LEVELUP');"
)

QueDPAPI.scripts().execute(instance, scripts)

使用自定义上下文

kotlin
val context = instance.scriptContext
val scripts = listOf(
    "var time = dungeon.time;",
    "if (time < 300) {",
    "  action.message('@所有玩家', '&a时间充足!');",
    "}"
)

QueDPAPI.scripts().execute(scripts, context)

条件评估

kotlin
val context = instance.scriptContext

// 评估条件表达式
val result: Boolean = QueDPAPI.scripts().evaluateCondition(
    "dungeon.time < 300",
    context
)

if (result) {
    player.sendMessage("时间充足")
}

执行预定义脚本

kotlin
// 执行地牢配置中的脚本
val success: Boolean = QueDPAPI.scripts().executeDungeonScript(
    dungeonId = "my_dungeon",
    scriptName = "start",
    context = instance.scriptContext
)

重载脚本引擎

kotlin
// 重新加载所有脚本
QueDPAPI.scripts().reload()

完整示例

kotlin
fun executeCustomBossSpawn(instance: DungeonInstance) {
    val scripts = listOf(
        """
        // 设置时间为夜晚
        action.time('night');
        
        // 给所有玩家发送标题
        action.title('@所有玩家', '&c&lBoss 即将出现', '&7做好准备!');
        
        // 播放音效
        action.sound('@所有玩家', 'ENTITY_ENDER_DRAGON_GROWL', 1.0, 0.8);
        
        // 3秒后生成 Boss
        action.wait('3秒');
        action.spawn_group('boss_wave');
        
        // 封锁大门
        action.create_obstacle('boss_gate');
        
        // 记录Boss生成时间
        setVar('boss_spawn_time', dungeon.time);
        """.trimIndent()
    )
    
    QueDPAPI.scripts().execute(instance, scripts)
}

可用的脚本动作

查看 JavaScript 脚本文档 了解所有可用的动作。

常用动作

  • action.message() - 发送消息
  • action.title() - 发送标题
  • action.sound() - 播放音效
  • action.teleport() - 传送玩家
  • action.spawn_group() - 生成怪物组
  • action.create_obstacle() - 创建障碍物
  • action.remove_obstacle() - 移除障碍物
  • action.complete() - 完成副本
  • action.fail() - 失败副本
  • action.wait() - 延迟执行

变量操作

  • setVar(key, value) - 设置变量
  • getVar(key) - 获取变量
  • dungeon.time - 副本运行时间

注意事项

  • 脚本使用 JavaScript 语法(Rhino 引擎)
  • 变量通过 setVar/getVar 在脚本间共享
  • 脚本在副本实例的上下文中执行
  • 长时间运行的脚本会阻塞主线程

返回值说明

  • execute() 无返回值(执行失败会输出日志)
  • evaluateCondition() 返回 Boolean
  • executeDungeonScript() 返回 Boolean 表示成功/失败

基于 MIT 许可发布