Skip to content

sealdice/dicescript

Repository files navigation

DiceScript

Go Report Card Software License GoDoc

通用TRPG骰点脚本语言。

Simple script language for TRPG dice engine.

特性:

  • 支持整数、浮点数、字符串、数组、字典、函数,常见算符以及if和while逻辑语句
  • 支持形如d20等的trpg用骰点语法
  • 全类型可序列化(包括函数在内)
  • 对模板字符串语法做大量优化,可胜任模板引擎
  • 易于使用,方便扩展
  • 稳定可靠,极高的测试覆盖率
  • 免费并可商用
  • 可编译到JavaScript

测试页面:

https://sealdice.github.io/dicescript/

这个项目是海豹核心的骰点解释器的完全重构。 从第一次实现中吸取了很多经验和教训,并尝试做得更好。

如何使用

DiceScript指南

你可以从这里了解如何使用DiceScript进行骰点,编写自己的TRPG规则,以及如何嵌入到任何你想要的地方。

设计原则

  • 从主流语言和跑团软件中借鉴语法,如Golang/Python/JS/Fvtt/BCDice,不随意发明
  • 符合国内跑团指令的一般习惯
  • 要具有较强的配置和扩展能力,符合trpg场景的需求
  • 一定限度内容忍全角符号
  • 兼容gopherjs
  • 良好的错误提示文本
  • 支持多线程

进度

  • 基础类型 int float string 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
  • 函数支持
  • 内置函数
  • 分片语法
  • 区间数组
  • 变量支持
  • 序列化和反序列化
  • 计算过程显示
  • 角色属性对接
  • 报错信息优化
  • 线程安全
  • 变量作用域
  • 测试覆盖率 86% / 90%

更新记录

更新记录

TODO

  • 骰点运算 - 自定义算符
  • computed 的repr格式无法读入

开发

如果修改了文法,使用这个工具重新生成:

go install github.com/fy0/pigeon@latest
pigeon -nolint -optimize-parser -optimize-ref-expr-by-index -o .\roll.peg.go .\roll.peg