@3d-dice/dice-roller-parser

中文文档
0.2.6发布于 2022/05/27MITTypeScriptESM + CJS零依赖近 30 天下载 3725

一个 Javascript 骰子滚动器, 用于解析 roll20 格式字符串并生成滚动输出

中文使用文档
文档目录10 节
  1. 信贷
  2. 快速启动
  3. 使用量
  4. DiceRoller
  5. DiscordRollRenderer
  6. 发展
  7. 输出类型
  8. 滚动结果输出
  9. 解析滚动输出
  10. 帮助类型

骰子滚盘和解析器

这个骰子滚盘是一个字符串解析器,它返回一个包含骰子滚盘组件的物体. 它支持充分的 卷20 剂量规格它使用 标签 创建一个 骰子滚动格式的表示,然后可以将其转换成一个简单的数字值,或者转换为一个 复杂对象 用于显示全卷的细节.

信贷

这是本·莫顿的叉子 骰子滚动器 项目。 它有几只虫子,所以我正在重排 我的项目所需的修复和特性.

快速启动

使用 :

npm install dice-roller-parser

安装后, 只需在浏览器中加载库 :

<script src="node_modules/dice-roller-parser/dist/index.js"></script>

或在节点:

import { DiceRoller } from "dice-roller-parser";

然后创建一个新的实例 DiceRoller 表演骰子卷.

const diceRoller = new DiceRoller();

//	Returns the total rolled value
const roll = diceRoller.rollValue("2d20kh1");
console.log(roll);

//	Returns an object representing the dice roll, use to display the component parts of the roll
const rollObject = diceRoller.roll("2d20kh1");
console.log(rollObject.value);

使用量

这个图书馆有两门课 DiceRoller (单位:千美元) DiscordRollRenderer。 。 。 .

DiceRoller

这个 DiceRoller class 管理骰子字符串的解析,并根据结果执行滚动.

//	Creates a new instance of the DiceRoller class
const roller = new DiceRoller();

构造选项

默认构造器使用 Math.random 并应用最高卷数每死1000. 这些可以使用下列构造器超载来指定.

DiceRoller(GeneratorFunction)

您可以指定一个函数, 以骰子滚筒作为随机数生成器 。 此函数应为类型 () => number 并返回 0 到 1 之间的数字。 默认使用内置 Math.random 方法.

//	Default constructor using Math.random
const roller = new DiceRoller();

//	Uses a custom random generator that always returns 0.5
const roller = new DiceRoller(() => 0.5);

使用 randFunction 属性.

roller.randFunction = () => 0.5;
DiceRoller(GeneratorFunction, MaxRollsPerDie)

为防止试图剖析出数量非常多的死卷,可以指定死卷的最大数量. 默认值设定为 1000 .

//	Uses the default constructor with a limit of 100 rolls per die
const roller = new DiceRoller(null, 100);

//	Uses a custom random generator that always returns 0.5, and a limit of 10 rolls per die
const roller = new DiceRoller(() => 0.5, 10);

使用 maxRollCount 属性.

roller.maxRollCount = 75;

类用法

一旦 DiceRoller 已经构建了类, 执行骰子卷有三种选项:

  • 直接获得滚动结果
  • 生成一个代表骰子卷的对象
  • 只要解析输入并添加自己的滚动逻辑
获得直接滚动结果

这个 rollValue 方法需要骰子字符串输入,解析,执行一卷并返回计算出的数字值结果.

//	Rolls 2 d20 dice and keeps the value of the highest
const roll = roller.rollValue("2d20kh1");

//	Prints out the numeric value result
console.log(roll);
生成一个代表骰子滚的物体

这个 roll 方法需要骰子字符串输入,解析,执行一卷并返回代表一卷的物体。 使用滚动对象可以构建出自己的滚动显示功能,而不只是输出出最终值.

//	Rolls 2 d20 dice and keeps the value of the highest
const roll = roller.roll("2d20kh1");

//	Print out the full roll breakdown
printDiceRoll(roll);
//	Prints out the numeric value result
console.log(`Final roll value: ${roll.Value}`);

见 滚动结果产出 输入 输出类型 关于返回对象的更详细情况,请在下面一节中说明.

只要分析一下值

这个 parse 方法使用骰子字符串输入,解析并返回解析后输入的表示。 这可以用来进行骰子卷或重新构建原始输入. 这个 rollParsed 方法将此解析结果作为输入,执行卷并返回与输出相同的 roll 方法.

//	Rolls 2 d20 dice and keeps the value of the highest
const parsedInput = roller.parse("2d20kh1");

//	Print out a re-constructed input string
printParsedInput(parsedInput);

//	Run the roller on the parsed object
const roll = roller.rollParsed(parsedInput);

//	Print out the full roll breakdown
printDiceRoll(roll);
//	Print out the numeric value result
console.log(`Final roll value: ${roll.Value}`);

见 解析卷输出 输入 输出类型 关于返回对象的更详细情况,请在下面一节中说明.

DiscordRollRenderer

这个 DiscordRollRenderer class 是实例渲染器类,它使用滚动输入,以一个 RollBase 对象并将其以下标格式变成与Discord兼容的字符串.

//	Creates a new instance of the DiceRoller class
const renderer = new DiscordRollRenderer();

类用法

这个 DiscordRollRenderer 暴露一个单身 render 使用单一参数的方法 RollBase 对象可渲染,并返回已渲染的字符串.

//	Rolls 2 d20 dice and keeps the value of the highest
const roll = roller.rollValue("2d20kh1");

//	Get the formatted string
const render = renderer.render(roll);
console.log(render);

发展

要开发此库, 只需复制寄存器, 运行一个安装 :

npm install

然后做一个建:

npm run build

这有四件事:

# Clean any existing builds
npm run clean

# Build the dice grammer
npx pegjs src/diceroll.pegjs

# Run tslint against the project
tslint -c tslint.json --project tsconfig.json

# Then run webpack to build and package everything up nicely
webpack

要运行测试套件,请使用:

npm run test

就是这样!

输出类型

以下对象类型是来自 DiceRoller 类,并可作为排字用户的界面.

滚动结果输出

以卷式结果返回的对象由下列类型组成.

RollBase

根据类型属性扩展所有死活的基类.

财产类型说明
成功boolean卷子是成功的, 对于目标数卷。 示例 3d6 > 3
类型RollType此对象所代表的卷轴类型 .
无效boolean卷子是否仍然有效,并包括在计算中.
价值number本卷的滚动或计算值.
标签string本卷的显示标签 。 此地产可选.
顺序number用来在组内维持骰子滚的订单的财产.

RollType

有效卷的圆柱. 可能的价值是:

GroupedRoll

为骰子组扩展的中间接口 。 此接口扩展 RollBase。 。 。 .

财产类型说明
骰子Array<RollBase>卷入为本组.

DiceExpressionRoll

表示骰子表达式. 此接口扩展 GroupedRoll。 。 。 .

示例

2d20 + 6d6

财产类型说明
类型"diceexpressionroll"此对象所代表的卷轴类型 .
行动Array<DiceGroupMathOperation>运行在卷上.

ExpressionRoll

一个数学表达式的体现. 此接口扩展 GroupedRoll。 。 。 .

示例

20 * 17

财产类型说明
类型"expressionroll"此对象所代表的卷轴类型 .
行动Array<MathOperation>运行在卷上.

MathFunctionRoll

数学功能的体现. 此接口扩展 RollBase。 。 。 .

示例

floor(20 / 17)

财产类型说明
类型"expressionfunc"此对象所代表的卷轴类型 .
执行MathFunction运行在卷上.
外观RollBase应用函数的表达式 .

GroupRoll

代表一组卷

示例

[4d6,3d6] (英语). 此接口扩展 GroupedRoll。 。 。 .

财产类型说明
类型"grouproll"此对象所代表的卷轴类型 .

DiceRollResult

一群骰子的滚出结果 此接口扩展 RollBase。 。 。 .

示例

6d20

财产类型说明
死亡( e)RollBase这个结果意味着死亡.
类型"die"此对象所代表的卷轴类型 .
卷轴DieRollBase[每出一卷死相会.
计数RollBase死生所取之数.
匹配boolean是否这是匹配的结果 .

DieRollBase

为个人死亡卷扩展的中间接口(见下文)。 此接口扩展 RollBase。 。 。 .

财产类型说明
滚动number死因的滚动结果.
匹配boolean此卷是否为相.

DieRoll

一卷活活活活活活活 此接口扩展 DieRollBase。 。 。 .

示例

d20

财产类型说明
死亡( e)number死亡数字要滚动.
类型"roll"此对象所代表的卷轴类型 .
关键事项CriticalType如果这个角色是关键的成败(用于渲染).

FateDieRoll

一卷一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一 此接口扩展 DieRollBase。 。 。 .

示例

dF

财产类型说明
类型"fateroll"此对象所代表的卷轴类型 .

解析滚动输出

以下界面被库所曝光,作为解析后输入字符串的重写. 联合国的答复 parse 方法是一个 RootType 对象,也可以是扩展它的任何接口.

ParsedObjectType

有效卷的圆柱. 可能的价值是:

ParsedType

这是所有解析类型的基础界面 .

财产类型说明
类型string此对象所代表的解析项的类型 .

RootType

这是子集解析类型的基础界面,只有那些可以作为根类型的. 此对象延伸 ParsedType 接口.

财产类型说明
标签?string本卷所附文字标签. 此地产可选.
根号boolean一个布尔旗来表示是否这是 parse 树的根 .

NumberType

此对象代表输入中的单个数字. 此对象延伸 RootType 接口.

财产类型说明
类型"number"此对象所代表的解析项的类型 .
价值number数之所值.

InlineExpression

这个对象代表了字符串中的内在骰子表达,用双方括号包裹. 此对象延伸 RootType 接口.

示例

I want to roll [[2d20]] dice

财产类型说明
类型"inline"此对象所代表的解析项的类型 .
外观Expression被解析为内线字符串的表达式 .

AnyRoll

代表任何有效卷的组合类型。 这是以下几种类型的组合:

ModGroupedRoll

此对象代表带有可选修饰符的分组卷. 此对象延伸 RootType 接口.

示例

{4d6+3d8}kh1

财产类型说明
模式Array<KeepDropModType,SuccessFailureModType>适用于分组卷的修改语句.

SuccessFailureCritModType

一个代表成功测试修饰对象的对象 。 此对象延伸 ParsedType 接口. A 类 "success" 或者说 "failure" 修饰器将结果转换成成功类型结果,返回达到目标的卷数. A 类 "crit" 或者说 "critfail" 修改器测试卷子是否应该显示为关键的成功还是关键失败.

示例

成功 : 3d6>3 失败 : 3d6f<3

财产类型说明
类型"success", "failure", "crit", "critfail"此对象所代表的解析项的类型 .
模式CompareOperation用于条件的检查类型 .
外观RollExpression代表成功条件的表达式.

SuccessFailureModType

等同于 SuccessFailureCritModType 但仅支持"成功"和"失败"修饰者. 此对象延伸 SuccessFailureCritModType 接口.

示例

成功 : 3d6>3 失败 : 3d6f<3

财产类型说明
类型"success", "failure"此对象所代表的解析项的类型 .
模式CompareOperation用于条件的检查类型 .
外观RollExpression代表成功条件的表达式.

MatchModType

一个代表匹配类型修饰器的物体,用于修改卷20中骰子输出的显示. 此对象延伸 ParsedType 接口.

示例

2d6m

当使用时 mt 扩展名,将返回找到的匹配数.

示例

20d6mt

还可以指定其他参数来增加所需的匹配次数,或者添加对匹配的限制.

示例

20d6mt3 counts matches of 3 items

示例

20d6m>3 Only counts matches where the rolled value is > 3

财产类型说明
类型"match"此对象所代表的解析项的类型 .
分钟NumberType要接受的最小匹配数 。 此属性默认为 2 a NumberType。 。 。 .
计数boolean是否计算匹配 .
摩德吗?CompareOperation如果指定了匹配条件的检查类型 。 此字段可选 .
爱普尔?RollExpression如果指定, 表示匹配条件的表达式 。 此字段可选 .

KeepDropModType

代表保存或投放调制器的物体,指定要保存或投放的骰子卷数,可以指最高或最低的卷数. 此对象延伸 ParsedType 接口.

示例

保留 : 2d20kh1 丢入 : 2d20dl1

财产类型说明
类型"keep", "drop"此对象所代表的解析项的类型 .
高调HighLowType是否保留/ 投放最高或最低卷 .
外观RollExpression表示要保存/ 滴入的卷数的表达式 。 此属性默认为 1 NumberType示例: 2d6

GroupedRoll

这个对象代表一组卷子组合,带有可选的修饰符. 此对象延伸 ModGroupedRoll 接口.

示例

{2d6,3d6}

财产类型说明
类型"group"此对象所代表的解析项的类型 .
卷轴Array<RollExpression>本组所收卷.

RollExpressionType

代表卷式表达式的对象,包括复杂的卷和组,只允许添加操作. 此对象延伸 RootType 接口.

示例

{2d6,3d6}kh1 + {3d6 + 2d6}kh2

财产类型说明
头RollOrExpression出自"活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活.
类型"diceExpression"此对象所代表的解析项的类型 .
行动Array<MathType<RollOrExpression,DiceGroupMathOperation>>适用于初始卷或表达式的操作.

RollExpression

复合卷式表达式,卷式或数学表达式的帮助者类型组合. 下列类型:

RollOrExpression

帮助者类型组合一卷,或数学表达式. 下列类型:

FullRoll

代表一卷(包括骰子卷)和任何修饰器的物体。 此对象延伸 DiceRoll 接口.

示例

2d6kh1

财产类型说明
摩德吗?Array<ReRollMod,KeepDropModType>任何附卷之修饰. 此地产可选.
目标?Array<SuccessFailureCritModType>任何成功或失败的目标 滚动。 此地产可选.
比赛?MatchModTyp任何匹配的修改器的卷。 此地产可选.
有点?SortRollType任何类型的操作 适用于卷。 此地产可选.

SortRollType

用于卷的排序操作 。 此对象延伸 ParsedType 接口.

示例

10d6sa

财产类型说明
类型"sort"此对象所代表的解析项的类型 .
资产cboolean是否排序升降.

ReRollMod

代表重滚动操作的物体,适用于卷。 可以是下列类型之一:

  • "explode": 重新滚动任何符合目标的骰子, 如果新卷匹配则继续
  • "compound": 重新滚动任何符合目标的骰子, 如果新卷匹配的话继续, 并将结果添加到单卷中
  • "penetrate": 将任何符合目标的骰子从新值中减去1, 如果新卷匹配则继续
  • "reroll":只要达到目标,就重新滚动死亡,保留最后的卷
  • "rerollOnce":如果达到目标,则重新滚动一次死亡,保留新卷

示例

2d6!

财产类型说明
类型"explode", "compound", "penetrate", "reroll", "rerollOnce"此对象所代表的解析项的类型 .
目标TargetMod目标修饰以比较卷取值.

TargetMod

对象重写目标修饰器以适用于卷. 此对象延伸 ParsedType 接口.

财产类型说明
类型"target"此对象所代表的解析项的类型 .
模式CompareOperation用于条件的检查类型 .
价值RollExpr表示目标条件值的表达式 .

DiceRoll

代表死亡一卷。 此对象延伸 RootType 接口.

示例

2d6

财产类型说明
死亡( e)RollExpr,FateExpr倒转的去死值,可以是命中注定的去死,一个数字或者一个复杂的去死来表示.
计数RollExpr卷出这个的时数会死.
类型"die"此对象所代表的解析项的类型 .

FateExpr

代表命运的活活 此对象延伸 ParsedType 接口.

示例

2dF

财产类型说明
类型"fate"此对象所代表的解析项的类型 .

RollExpr

一个非表达式的由数字或值组成的帮助者类型组合. 下列类型:

Expression

表达式类型的帮助者类型组合. 下列类型:

MathExpression

两个或两个以上骰子滚相间的数学类型表达. 此对象延伸 RootType 接口.

示例

2d6 + 3d6 * 4d6

财产类型说明
头AnyRoll初一卷来进行行动.
类型"expression"此对象所代表的解析项的类型 .
行动Array<MathType<AnyRoll>>适用于初卷的操作.

MathType

一个对象代表要应用的滚动数学操作以及应用它的值. 此对象延伸 ParsedType 接口. 此对象的界面需要模板类型 TailType 指定操作中使用的第二个值的类型. 有第二个模板类型 OpValues 指定可以使用的操作类型。 此默认为 Array<MathOperation>`.

示例

+ 3d6 (as part of 2d6 + 3d6)

财产类型说明
类型"math"此对象所代表的解析项的类型 .
执行OpValues要执行的数学操作.
尾声TailType操作中使用的第二个值 .

MathFunctionExpression

表示要应用的数学函数的对象和用于应用的表达式。 此对象延伸 RootType 接口.

示例

floor(3d6 / 2d4)

财产类型说明
类型"mathfunction"此对象所代表的解析项的类型 .
执行MathFunction要应用的函数 .
外观AnyRoll应用此函数的表达式 .

帮助类型

以下为上述接口所使用的支持类型.

DiceGroupMathOperation

表示一组骰子上数学操作的有效操作的助手类型 .

"+" | "-"

MathOperation

一个代表数学操作中有效操作的助手类型.

"+" | "-" | "*" | "/" | "%" | "**"

MathFunction

一个代表数学操作中有效操作的助手类型.

"floor" | "ceil" | "round" | "abs"

CriticalType

在将卷标为关键成败时使用的帮助类型.

"success" | "failure" | null

CompareOperation

用于比较点的可用操作的帮助类型 .

">" | "<" | "="

HighLowType

用于确定要保存或放下的卷的帮助类型 .

"h" | "l" | null

版本与发布记录

@3d-dice/dice-roller-parser 共发布 8 个版本,首次发布于 2021/09/15;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.2.6latest2022/05/274 年前
0.2.52022/03/134 年前
0.2.42022/03/044 年前
0.2.32021/11/254 年前
0.2.22021/11/254 年前
0.2.12021/11/254 年前

关于 @3d-dice/dice-roller-parser 的常见问题

@3d-dice/dice-roller-parser 是什么?

一个 Javascript 骰子滚动器, 用于解析 roll20 格式字符串并生成滚动输出

如何安装 @3d-dice/dice-roller-parser?

在项目目录运行 npm install @3d-dice/dice-roller-parser,或使用 pnpm add / yarn add / bun add。

@3d-dice/dice-roller-parser 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@3d-dice/dice-roller-parser 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@3d-dice/dice-roller-parser 可以商用吗?

@3d-dice/dice-roller-parser 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@3d-dice/dice-roller-parser 的下载量有多少?

根据 npm 官方下载统计,@3d-dice/dice-roller-parser 在 2026/10/05 – 2026/11/03 这 30 天内被下载 3,725 次,日均约 124 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@3d-dice/dice-roller-parser 还在维护吗?

最新版本 0.2.6 发布于 2022/05/27(4 年前);至今共发布 8 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/09/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。