通用TRPG骰点脚本语言。
Simple script language for TRPG dice engine.
特性:
- 易于使用,方便扩展
- 稳定可靠,极高的测试覆盖率
- 免费,并可商用
- 支持JavaScript
- 海豹TRPG骰点核心的第二代解释器
测试页面:
https://sealdice.github.io/dicescript/
你可以从这里了解如何使用DiceScript进行骰点,编写自己的TRPG规则,以及如何嵌入到任何你想要的地方。
先随便写一些想到的,然后再细化
这是未来SealDice项目的一部分,一次从零重构。
目前SealDice使用一个叫做RollVM的解释器来完成脚本语言的解析。
DiceScript将使用和RollVM相同的技术栈,但会有更好的接口设计,增强自定义能力的同时,剥离耦合的部分。
几个设计原则:
- 从主流语言和跑团软件中借鉴语法,如Golang/Python/JS/Ruby/Fvtt/BCDice,不随意发明
- 兼容**大陆地区跑团指令的一般习惯
- 要具有不错的配置和扩展能力,且不用重新编译的情况下就能具备
- 一定限度内容忍全角符号
- 兼容gopherjs
- 良好的错误提示文本
- 支持多线程
- 基础类型 int float string
- 基础类型 undefined null
- 一元算符 + -
- 二元算符 +-*/% >,>=,==,!=,<,<=,&,|,&&,||
- 三元算符 ? :
- 空值合并算符 ??
- 骰点运算 流行: d20, 3d20, (4+5)d(20), 2d20k1, 2d20q1
- 骰点运算 - fvtt语法: 2d20kl, 2d20kh, 2d20dl, 2d20dh, d20min10, d20max10
- 骰点运算 - CoC / Fate / WoD / Double Cross
- 骰点运算 - 自定义算符
- 高级类型 数组array
- 高级类型 字典dict
- 高级类型 计算数值computed
- 逻辑语法 if ... else ..
- 逻辑语法 while
- 函数支持
- 内置函数
- 分片语法
- 区间数组
- 变量支持
- 序列化和反序列化
- 计算过程显示
- 角色属性对接
- 报错信息优化
- 线程安全
- 变量作用域
- 测试覆盖率 77% / 90%
- NativeObject 一种用于绑定Go对象的类型,行为类似于dict
- 为字典类型增加了 keys() values() items() 方法
- dir 函数,和python的dir函数类似,用于获取对象的所有属性
- 空值合并算符
- 文档调整
- 逻辑与/逻辑或/按位与/按位或
- 补全测试用例
- 编写文档
- Fate/WoD/DoubleCross 相关算符
- 计算过程完善
- 内置函数支持默认参数
- 简易原型链机制
- 计算过程显示
- 字典类型
- 变量作用域
- 序列化和反序列化: array native_function,全类型完成
- 内置函数: ceil floor round int float str
- 序列化和反序列化: int float str undefined null computed function
- 分片赋值,以及取值语法,支持array和str
- range语法 [0..2] 为 [0,1,2],[3..1] 为 [3,2,1]
- while 语法
- return 语法
- 数组下标赋值
- 线程安全优化
- 现在可以使用 true / false 其值为 1 / 0
- break / continue 支持
- 多维数组
- computed 计算类型
- function 函数类型
- if else 语句
- undefined 类型
- a == 1 ? 1 : 2 三目运算符
- a == 1 ? 'A', a == 2 ? 'B', a == 3 : 'C'
- 一元算符 +1 -1
- 数组
- 数组下标
- fvtt语法: [1,2,3]kh [1,2,3]kl
- 支持浮点数
- 支持字符串
- 支持变量
- RollVM的测试覆盖率提升至95%
- 能够编译到JS
- 数学和逻辑算符全类型支持(除computed和array之外)
- 初步的单元测试
- 异常机制
- 接口调整
- 实现了d算符
- 实现d算符语法,d20k / d20q / d20kh / d20hl / d20d / d20dl / d20dh
- 二元算符框架(+-*/等)
- 支持数学四则运算
- 支持比较算符(< <= == != > >=)
- 指令执行初步架构
- VM接口
- 简易REPL
- 建项目,初步文法
- d2d(4d4d5)d6 计算过程问题