跳至主要內容

内置脚本语言

大约 4 分钟

内置脚本语言

本节内容

本节将介绍海豹内置的脚本语言,请善用侧边栏和搜索,按需阅读文档。

为了在很多地方支持实现一些逻辑,但又不至于直接使用学习门槛较高的正式编程语言,海豹提供了一种简单易学的脚本语言,可以称为「海豹语」「豹语」等。

变量

你可能注意到,在自定义文案等地方,出现了一些以 $t 开头的东西,这些是海豹中的变量

变量的名称可以是汉字、字母和数字,$t 是一个特殊的变量前缀,还有其它的前缀。不同前缀代表不同的作用域:

变量名字用途举例
普通名字玩家的角色属性理智、力量、智力
$t开头个人临时变量,不存数据库$t随机点数
$m开头个人变量,跨群存在$m今日人品
$g开头群变量,群内所有人共享$g群主体重

所有变量均可以在 .rx / .rxh / .ra/ .text 等指令以及「自定义文案」中使用。

变量不生效?

如果一部分变量无效,请检查海豹是否为最新版本。

一些内置变量

变量名内容示例结果
$t玩家当前人物卡的名字,如果不存在则为群昵称或 QQ 昵称。<木落>
$t玩家_RAW同上,但没有<>木落
$tQQ昵称QQ 昵称<木落>
$t账号ID海豹格式的 IDQQ:123456789
$t账号ID_RAW原始格式的 ID123456789
$tQQ海豹格式的 IDQQ:123456789
$t群名群名海豹核心·SealDice 用户群
$t群号海豹格式的 IDQQ-Group:987654321
$t群号_RAW原始格式的 ID987654321
$t个人骰子面数个人骰子面数100
$tDate数字格式的现日期20230109
$tYear数字格式的年份2023
$tMonth数字格式的现月份1
$tDay数字格式的现日期9
$tWeekday数字格式的星期(1-7)1
$tHour数字格式的现时间(小时)15
$tMinute数字格式的现时间(分钟)41
$tSecond数字格式的现时间(秒)55
$tTimestamp数字格式的 10 位时间戳1673250115
$t文本长度触发消息的文本,汉字长度为 3,英文字母和数字长度为 1。6
$t平台触发的平台QQ
$t游戏模式.set coc/dnd 改变coc7
$t消息类型触发位置为群还是私聊(group/private)group
娱乐:今日人品自定义文案<木落> 的今日人品为 0
常量:APPNAME软件名SealDice
常量:VERSION版本号1.4.0
$tMsgID消息 ID,仅自定义回复中可用。-123

所有自定义文案也均为可用变量。

数据类型和赋值

// 注意,目前并不支持写注释,此为教程中便于展示
// 文本类型
$t0 = '文本'
$t0 = "也是文本"
$t0 = `特殊文本类型,可以插入表达式,例如,玩家的力量数值: {力量}`
$t0 = `另一种插入表达式的写法 {% 力量 %} `

// 数字类型
$t0 = 1

// 布尔类型:没有专门的布尔类型,0 或空字符串被视为 False,非零和非空字符串为 True
$t0 > 1
$t0 >= 1
$t0 == 1
$t0 != 1
$t0 < 1
$t0 <= 1

语句

多个语句可以用 ; 分隔,取分隔后的最后一项的值,为整个表达式的值,例如:

$t0 = 1;2;3

此时 $t0 的值为 3

运算符

数学运算

加减乘除余 + -* / %
乘方 ^ ** // 2 ** 3 或 2 ^ 3,即 2 的 3 次方

骰子算符

d 常规骰子算符,用法举例 d20 2d20k1 d20 优势

f 命运骰,随机骰 4 次,每骰结果可能是 -1 0 1,记为 - 0 +

b 奖励骰 (COC)

p 惩罚骰 (COC)

c 双十字

条件算符

条件算符 ?

灵视 >= 40 ? '如果灵视达到40以上,你就能看到这句话'

可以用这个指令测试,下同:

.st 灵视 41
.text {灵视 >= 40 ? '如果灵视达到 40 以上,你就能看到这句话'}

多重条件算符 ? ,

灵视 >= 80 ? '看得很清楚吗?',
灵视 >= 50 ? '不错,再靠近一点……',
灵视 >= 30 ? '仔细听……',
灵视 >= 0 ? '呵,无知之人。'

应用举例,默认的 jrrp

{$t玩家} 今日人品为{$t人品},{%
    $t人品 > 95 ? '人品爆表!',
    $t人品 > 80 ? '运气还不错!',
    $t人品 > 50 ? '人品还行吧',
    $t人品 > 10 ? '今天不太行',
    1 ? '流年不利啊!'
%}

三目运算符 ? :

灵视 >= 40 ? '如果灵视达到 40 以上,你就能看到这句话' : '无知亦是幸运'

条件语句

if $t0 > 10 {
    $t1 = "aaa"
} else {
    $t1 = 'bbb'
}

出现格式化错误

如果上面的代码输出「格式化错误」,那是因为你的 $t0 不是数值。字符串当然不能和数值比较大小,所以会报错。

解决方法:.text {$t0=0}

实际测试:

.text {% if $t0 > 10 { $t1="aaa"} else { $t1 = 'bbb' }; $t1 %}
上次编辑于: