语法与表达式
这一页讲的是 DM 脚本语言本身的写法。它支持的内容比“几行动作”要多得多,足够写完整的副本机制。
基本写法
- 一行通常写一件事。
- 多行脚本通常放在 YAML 的
|块里。 - 文本可以用双引号,也可以用单引号。
- 代码块用
{}包起来。 - 注释支持
#和//。
text
# 这一行不会执行
// 这一行也不会执行
消息.全体("&e副本开始")值和表达式
当前常见值类型包括:
- 数字
- 布尔值
- 文本
- 列表
- 函数返回值
对象.方法()返回值
常见表达式写法:
text
阶段名 = "第一阶段"
击杀数 = 10
Boss已开启 = true
玩家列表 = 副本.玩家列表()
当前时间 = 时间戳()赋值与复合赋值
普通赋值:
text
击杀数 = 0
奖励倍率 = 1.0复合赋值:
text
击杀数 += 1
奖励倍率 *= 1.2
剩余次数 -= 1当前版本支持 +=、-=、*=。
判断分支
text
if 击杀数 >= 10 {
消息.全体("&a击杀达标")
}多分支:
text
if 难度 == "普通" {
消息.全体("&e普通难度")
} else if 难度 == "困难" {
消息.全体("&c困难难度")
} else {
消息.全体("&7未设置难度")
}常见运算符:
| 类型 | 写法 |
|---|---|
| 比较 | == != > >= < <= |
| 逻辑 | && ` |
| 计算 | + - * / % |
概率分支
text
chance 30 {
消息.全体("&6触发稀有事件")
} fail {
消息.全体("&7本次未触发")
}很适合做掉落特效、隐藏事件、随机阶段分支。
循环
列表循环:
text
for name in 副本.玩家列表() {
日志(name)
}区间循环:
text
for i in 1..10 {
怪物组.生成("小怪波次")
}当前版本里,区间循环超过 10000 次会被截断,避免脚本无限跑长循环。
分支选择
text
switch 难度 {
case "普通":
消息.全体("&e普通难度")
case "困难":
消息.全体("&c困难难度")
default:
消息.全体("&7未设置难度")
}前置检查
require 适合放在脚本前面拦条件。
text
require @player.level >= 30
消息.发送("&a你满足进入条件")支持自定义提示:
text
require @player.level >= 30: "&c等级不足"
命令.玩家("warp boss")条件不满足时,后续逻辑不会继续执行。
异常处理
text
try {
命令.控制台("say 剧情开始")
} catch {
日志("剧情命令执行失败")
}也支持主动抛错:
text
if !有变量("Boss配置") {
throw("&cBoss 配置不存在")
}延迟执行
推荐统一写这两种:
text
delay(60)
流程.等待(60)示例:
text
消息.全体("&e3 秒后刷怪")
delay(60)
怪物组.生成("第一波")当前版本里,delay 60 这种不带括号的写法虽然能被识别,但等待时间可能会回到默认 20 tick。正式脚本里直接用 delay(60) 或 流程.等待(60) 更稳。
结束、跳过、终止
return:结束当前脚本break:结束当前循环continue:跳过本轮循环
这一层适合做什么
- 控制副本什么时候转阶段
- 写循环型天气机制、持续 Debuff、倒计时机制
- 给剧情和机关做前置判断
- 把随机事件和固定流程写在同一套逻辑里
- 在复杂脚本里做失败保护和异常收口
需要注意的点
- 没有玩家上下文时,
@player.*、玩家函数、玩家动作都要谨慎用。 - 读取条件尽量用函数或
对象.方法(),流程推进尽量用动作。 - 长延迟和长循环脚本上线前先在测试服跑一遍。