Skip to content

sealdice/dicescript

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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