Esta tirada de dados es un analizador de cadenas que devuelve un objeto que contiene los componentes de la tirada de dados. Es compatible con la especificación completa de dados Roll20. Utiliza una gramática pegjs para crear una representación del formato de tirada de dados. Luego, esto se puede convertir en un valor numérico simple o en un objeto complejo utilizado para mostrar los detalles completos del rollo.
Esta es una bifurcación del proyecto dice_roller de Ben Morton. Tenía algunos errores, así que lo volveré a publicar con las correcciones y funciones necesarias para mis proyectos.
Instale la biblioteca usando:
npm install dice-roller-parser
Una vez instalada, simplemente carga la biblioteca, ya sea en el navegador:
< script src =" node_modules/dice-roller-parser/dist/index.js " > </ script >
O en nodo:
import { DiceRoller } from "dice-roller-parser" ;
Luego crea una nueva instancia de la clase DiceRoller
y úsala para realizar algunas tiradas de dados.
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 ) ;
Esta biblioteca expone dos clases, DiceRoller
y DiscordRollRenderer
.
DiceRoller
La clase DiceRoller
gestiona el análisis de una cadena de dados y realiza tiradas en función del resultado.
// Creates a new instance of the DiceRoller class
const roller = new DiceRoller ( ) ;
El constructor predeterminado usa Math.random
y aplica un número máximo de tiradas por dado de 1000. Estos se pueden especificar usando las siguientes sobrecargas de constructor.
DiceRoller(GeneratorFunction)
Puede especificar una función que el lanzador de dados utilizará como generador de números aleatorios. Esta función debe ser del tipo () => number
y devolver un número entre 0 y 1. De forma predeterminada, utiliza el método Math.random
incorporado.
// 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 ) ;
Esto se puede leer o modificar usando la propiedad randFunction
.
roller . randFunction = ( ) => 0.5 ;
DiceRoller(GeneratorFunction, MaxRollsPerDie)
Para evitar intentar analizar un número muy grande de tiradas de dado, se puede especificar un número máximo de tiradas para un dado. El valor predeterminado está establecido en 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 ) ;
Esto se puede leer o modificar usando la propiedad maxRollCount
.
roller . maxRollCount = 75 ;
Una vez construida la clase DiceRoller
, hay tres opciones para realizar una tirada de dados:
El método rollValue
toma una entrada de cadena de dados, la analiza, realiza una tirada y devuelve el resultado del valor numérico calculado.
// 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 ) ;
El método roll
toma una entrada de cadena de dados, la analiza, realiza una tirada y luego devuelve un objeto que representa la tirada. Utilizando los objetos de rollo, puede crear su propia funcionalidad de visualización de rollo, en lugar de simplemente generar el valor final.
// 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 } ` ) ;
Consulte el resultado del resultado del rollo en la sección de tipos de salida a continuación para obtener más detalles sobre el objeto devuelto.
El método parse
toma una entrada de cadena de dados, la analiza y devuelve una representación de la entrada analizada. Esto se puede utilizar para realizar una tirada de dados o reconstruir la entrada original. El método rollParsed
toma este resultado analizado como entrada, realiza el rollo y devuelve el mismo resultado que el método 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 } ` ) ;
Consulte la salida del rollo analizado en la sección de tipos de salida a continuación para obtener más detalles sobre el objeto devuelto.
DiscordRollRenderer
La clase DiscordRollRenderer
es una clase de renderizador de ejemplo que toma una entrada enrollada representada por un objeto RollBase
y la representa en una cadena en un formato de rebajas, compatible con Discord.
// Creates a new instance of the DiceRoller class
const renderer = new DiscordRollRenderer ( ) ;
DiscordRollRenderer
expone un único método render
con un único parámetro, el objeto RollBase
a renderizar, y devuelve la cadena renderizada.
// 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 ) ;
Para desarrollar esta biblioteca, simplemente clone el repositorio, ejecute una instalación:
npm install
Luego haz una compilación:
npm run build
Esto hace cuatro cosas:
# 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
Para ejecutar el conjunto de pruebas, utilice:
npm run test
¡Eso es todo lo que hay que hacer!
Los siguientes tipos de objetos surgen de la clase DiceRoller
y están disponibles como interfaces para usuarios de mecanografiado.
El objeto devuelto por el resultado de una tirada se compone de los siguientes tipos.
RollBase
La clase base para todas las tiradas de dados, ampliada según la propiedad de tipo.
Propiedad | Tipo | Descripción |
---|---|---|
éxito | boolean | ¿Fue la tirada un éxito, para las tiradas de números objetivo? Ejemplo: 3d6 > 3 |
tipo | RollType | El tipo de tirada que representa este objeto. |
válido | boolean | ¿La tirada sigue siendo válida y está incluida en los cálculos? |
valor | number | El valor rodado o calculado de este rollo. |
etiqueta | string | La etiqueta de visualización de este rollo. Esta propiedad es opcional. |
orden | number | Una propiedad utilizada para mantener el orden de las tiradas de dados dentro de los grupos. |
RollType
Una enumeración de los tipos válidos de rollo. Los valores posibles son:
"number"
"diceexpressionroll"
"expressionroll"
"mathfunction"
"grouproll"
"fate"
"die"
"roll"
"fateroll"
GroupedRoll
Una interfaz intermedia ampliada para grupos de dados. Esta interfaz amplía RollBase
.
Propiedad | Tipo | Descripción |
---|---|---|
dados | Array< RollBase > | Los rollos incluidos como parte de este grupo. |
DiceExpressionRoll
Una representación de una expresión de dados. Esta interfaz amplía GroupedRoll
.
Ejemplo
2d20 + 6d6
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "diceexpressionroll" | El tipo de tirada que representa este objeto. |
operaciones | Array< DiceGroupMathOperation > | Las operaciones a realizar sobre los rollos. |
ExpressionRoll
Una representación de una expresión matemática. Esta interfaz amplía GroupedRoll
.
Ejemplo
20 * 17
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "expressionroll" | El tipo de tirada que representa este objeto. |
operaciones | Array< MathOperation > | Las operaciones a realizar sobre los rollos. |
MathFunctionRoll
Una representación de una función matemática. Esta interfaz amplía RollBase
.
Ejemplo
floor(20 / 17)
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "expressionfunc" | El tipo de tirada que representa este objeto. |
op | MathFunction | Las operaciones a realizar sobre los rollos. |
exprés | RollBase | La expresión sobre la que se aplica la función. |
GroupRoll
Una representación de un grupo de rollos.
Ejemplo
{4d6,3d6}. Esta interfaz amplía
GroupedRoll
.
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "grouproll" | El tipo de tirada que representa este objeto. |
DiceRollResult
El resultado lanzado de un grupo de dados. Esta interfaz amplía RollBase
.
Ejemplo
6d20
Propiedad | Tipo | Descripción |
---|---|---|
morir | RollBase | El dado que representa este resultado. |
tipo | "die" | El tipo de tirada que representa este objeto. |
rollos | DieRollBase [] | Cada tirada del dado. |
contar | RollBase | El número de tiradas del dado. |
emparejado | boolean | Si este es el resultado de un partido. |
DieRollBase
Una interfaz intermedia extendida para rollos de dados individuales (ver más abajo). Esta interfaz amplía RollBase
.
Propiedad | Tipo | Descripción |
---|---|---|
rollo | number | El resultado lanzado del dado. |
emparejado | boolean | Si esta tirada coincide. |
DieRoll
Una tirada de un dado normal. Esta interfaz amplía DieRollBase
.
Ejemplo
d20
Propiedad | Tipo | Descripción |
---|---|---|
morir | number | El número del dado que se va a lanzar. |
tipo | "roll" | El tipo de tirada que representa este objeto. |
crítico | CriticalType | Si este rol es un éxito o fracaso crítico (para renderizado). |
FateDieRoll
Una tirada de un dado del destino. Esta interfaz amplía DieRollBase
.
Ejemplo
dF
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "fateroll" | El tipo de tirada que representa este objeto. |
La biblioteca expone las siguientes interfaces como una representación de la cadena de entrada analizada. La respuesta del método parse
es un objeto RootType
y podría ser cualquiera de las interfaces que lo extienden.
ParsedObjectType
Una enumeración de los tipos válidos de rollo. Los valores posibles son:
"number"
"inline"
"success"
"failure"
"crit"
"critfail"
"match"
"keep"
"drop"
"group"
"diceExpression"
"sort"
"explode"
"compound"
"penetrate"
"reroll"
"rerollOnce"
"target"
"die"
"fate"
"expression"
"math"
"mathfunction"
ParsedType
Esta es la interfaz base para todos los tipos analizados.
Propiedad | Tipo | Descripción |
---|---|---|
tipo | string | El tipo de elemento analizado que representa este objeto. |
RootType
Esta es la interfaz base para un subconjunto de tipos analizados, solo aquellos que pueden ser el tipo raíz. Este objeto amplía la interfaz ParsedType
.
Propiedad | Tipo | Descripción |
---|---|---|
¿etiqueta? | string | La etiqueta de texto adjunta a este rollo. Esta propiedad es opcional. |
raíz | boolean | Un indicador booleano para indicar si esta es la raíz del árbol de análisis. |
NumberType
Este objeto representa un único número en la entrada. Este objeto amplía la interfaz RootType
.
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "number" | El tipo de elemento analizado que representa este objeto. |
valor | number | El valor del número. |
InlineExpression
Este objeto representa una expresión de dados en línea dentro de una cadena, entre corchetes dobles. Este objeto amplía la interfaz RootType
.
Ejemplo
I want to roll [[2d20]] dice
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "inline" | El tipo de elemento analizado que representa este objeto. |
exprés | Expression | La expresión que se analizó como la cadena en línea. |
AnyRoll
Un tipo combinado que representa cualquier tirada válida. Esta es una combinación de los siguientes tipos:
GroupedRoll
FullRoll
NumberType
ModGroupedRoll
Este objeto representa una tirada agrupada con un modificador opcional. Este objeto amplía la interfaz RootType
.
Ejemplo
{4d6+3d8}kh1
Propiedad | Tipo | Descripción |
---|---|---|
modificaciones | Array< KeepDropModType , SuccessFailureModType > | Los modificadores que se aplicarán a la tirada agrupada. |
SuccessFailureCritModType
Un objeto que representa un modificador de prueba de éxito. Este objeto amplía la interfaz ParsedType
. Un modificador de "success"
o "failure"
convierte el resultado en un resultado de tipo éxito que devuelve el número de tiradas que alcanzan el objetivo. Un modificador "crit"
o "critfail"
prueba la tirada para determinar si debe mostrarse o no como un éxito crítico o un fracaso crítico.
Ejemplo
Éxito:
3d6>3
Fracaso:3d6f<3
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "success", "failure", "crit", "critfail" | El tipo de elemento analizado que representa este objeto. |
modo | CompareOperation | El tipo de verificación que se utilizará para la condición. |
exprés | RollExpression | Una expresión que representa la condición de éxito. |
SuccessFailureModType
Equivalente a SuccessFailureCritModType
pero solo admite modificadores de "éxito" y "fracaso". Este objeto amplía la interfaz SuccessFailureCritModType
.
Ejemplo
Éxito:
3d6>3
Fracaso:3d6f<3
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "success", "failure" | El tipo de elemento analizado que representa este objeto. |
modo | CompareOperation | El tipo de verificación que se utilizará para la condición. |
exprés | RollExpression | Una expresión que representa la condición de éxito. |
MatchModType
Un objeto que representa un modificador de tipo de coincidencia, utilizado para modificar la visualización de la salida de dados en roll20. Este objeto amplía la interfaz ParsedType
.
Ejemplo
2d6m
Cuando se usa con la extensión mt
, devolverá el número de coincidencias encontradas.
Ejemplo
20d6mt
Se pueden especificar argumentos adicionales que aumenten el número requerido de coincidencias o agreguen una restricción a las coincidencias.
Ejemplo
20d6mt3 counts matches of 3 items
Ejemplo
20d6m>3 Only counts matches where the rolled value is > 3
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "match" | El tipo de elemento analizado que representa este objeto. |
mín. | NumberType | El número mínimo de coincidencias para aceptar. Esta propiedad tiene como valor predeterminado 2 como NumberType . |
contar | boolean | Si contar o no los partidos. |
mod? | CompareOperation | El tipo de verificación que se utilizará para la condición de coincidencia, si se especifica. Este campo es opcional. |
¿expr? | RollExpression | Una expresión que representa la condición de coincidencia, si se especifica. Este campo es opcional. |
KeepDropModType
Un objeto que representa un modificador de mantener o soltar, que especifica un número de tiradas de dados para mantener o soltar, ya sea la tirada más alta o la más baja. Este objeto amplía la interfaz ParsedType
.
Ejemplo
Mantener:
2d20kh1
Soltar:2d20dl1
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "keep", "drop" | El tipo de elemento analizado que representa este objeto. |
alto | HighLowType | Ya sea para mantener/eliminar la tirada más alta o más baja. |
exprés | RollExpression | Una expresión que representa el número de rollos que se conservarán o eliminarán. Esta propiedad tiene como valor predeterminado 1 como NumberType . Ejemplo: 2d6 |
GroupedRoll
Este objeto representa un grupo de tiradas combinadas, con modificadores opcionales. Este objeto amplía la interfaz ModGroupedRoll
.
Ejemplo
{2d6,3d6}
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "group" | El tipo de elemento analizado que representa este objeto. |
rollos | Array< RollExpression > | El grupo de rollos incluidos en este grupo. |
RollExpressionType
Un objeto que representa una expresión de rollo que incluye rollos y grupos complejos, solo permite operaciones de suma. Este objeto amplía la interfaz RootType
.
Ejemplo
{2d6,3d6}kh1 + {3d6 + 2d6}kh2
Propiedad | Tipo | Descripción |
---|---|---|
cabeza | RollOrExpression | El rollo o expresión inicial para la expresión de rollo. |
tipo | "diceExpression" | El tipo de elemento analizado que representa este objeto. |
operaciones | Array< MathType < RollOrExpression , DiceGroupMathOperation >> | Las operaciones a aplicar al rollo o expresión inicial. |
RollExpression
Una combinación de tipo auxiliar de una expresión de tirada compleja, una tirada o una expresión matemática. Representa los siguientes tipos:
RollExpressionType
RollOrExpression
RollOrExpression
Una combinación de tipo auxiliar de una tirada o una expresión matemática. Representa los siguientes tipos:
FullRoll
Expression
FullRoll
Un objeto que representa una tirada que incluye la tirada de dados y cualquier modificador. Este objeto amplía la interfaz DiceRoll
.
Ejemplo
2d6kh1
Propiedad | Tipo | Descripción |
---|---|---|
mods? | Array< ReRollMod , KeepDropModType > | Cualquier modificador adjunto a la tirada. Esta propiedad es opcional. |
objetivos? | Array< SuccessFailureCritModType > | Cualquier objetivo de éxito o fracaso de la tirada. Esta propiedad es opcional. |
¿fósforo? | MatchModTyp | Cualquier modificador de coincidencia para la tirada. Esta propiedad es opcional. |
¿clasificar? | SortRollType | Cualquier operación de clasificación que se aplique al rollo. Esta propiedad es opcional. |
SortRollType
Una operación de clasificación para aplicar a un rollo. Este objeto amplía la interfaz ParsedType
.
Ejemplo
10d6sa
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "sort" | El tipo de elemento analizado que representa este objeto. |
asc | boolean | Ya sea para ordenar de forma ascendente o descendente. |
ReRollMod
Un objeto que representa una operación de repetición para aplicar a una tirada. Puede ser uno de los siguientes tipos:
"explode"
: vuelve a tirar cualquier dado que alcance el objetivo y continúa si la nueva tirada coincide."compound"
: vuelve a tirar cualquier dado que cumpla con el objetivo, continúa si la nueva tirada coincide y suma los resultados en una sola tirada."penetrate"
: vuelve a tirar cualquier dado que cumpla con el objetivo restando 1 del nuevo valor y continúa si la nueva tirada coincide."reroll"
: vuelve a tirar un dado siempre que alcance el objetivo, manteniendo la tirada final"rerollOnce"
: vuelve a tirar un dado una vez si alcanza el objetivo, manteniendo la nueva tiradaEjemplo
2d6!
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "explode", "compound", "penetrate", "reroll", "rerollOnce" | El tipo de elemento analizado que representa este objeto. |
objetivo | TargetMod | El modificador de objetivo con el que comparar el valor de la tirada. |
TargetMod
Un objeto que representa un modificador de objetivo para aplicar a una tirada. Este objeto amplía la interfaz ParsedType
.
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "target" | El tipo de elemento analizado que representa este objeto. |
modo | CompareOperation | El tipo de verificación que se utilizará para la condición. |
valor | RollExpr | Una expresión que representa el valor de la condición objetivo. |
DiceRoll
La representación de una tirada de dado. Este objeto amplía la interfaz RootType
.
Ejemplo
2d6
Propiedad | Tipo | Descripción |
---|---|---|
morir | RollExpr , FateExpr | El valor del dado contra el que se debe tirar puede ser un dado de destino, un número o una expresión de tirada compleja. |
contar | RollExpr | El número de veces que se tira este dado. |
tipo | "die" | El tipo de elemento analizado que representa este objeto. |
FateExpr
La representación de una tirada de dado del destino. Este objeto amplía la interfaz ParsedType
.
Ejemplo
2dF
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "fate" | El tipo de elemento analizado que representa este objeto. |
RollExpr
Una combinación de tipo auxiliar de un número o valor que no es una expresión. Representa los siguientes tipos:
MathExpression
NumberType
Expression
Una combinación de tipo auxiliar de tipos de expresión. Representa los siguientes tipos:
InlineExpression
MathExpression
MathExpression
Una expresión de tipo matemático entre dos o más tiradas de dados. Este objeto amplía la interfaz RootType
.
Ejemplo
2d6 + 3d6 * 4d6
Propiedad | Tipo | Descripción |
---|---|---|
cabeza | AnyRoll | La tirada inicial contra la que realizar operaciones. |
tipo | "expression" | El tipo de elemento analizado que representa este objeto. |
operaciones | Array< MathType < AnyRoll >> | Las operaciones a aplicar al rollo inicial. |
MathType
Un objeto que representa una operación matemática de rollo que se aplicará y el valor al que se aplicará. Este objeto amplía la interfaz ParsedType
. La interfaz para este objeto toma un tipo de plantilla TailType
que especifica el tipo del segundo valor utilizado en la operación. Hay un segundo tipo de plantilla OpValues
que especifica el tipo de operaciones que se pueden utilizar. El valor predeterminado es Array<
MathOperation
>`.
Ejemplo
+ 3d6 (as part of 2d6 + 3d6)
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "math" | El tipo de elemento analizado que representa este objeto. |
op | OpValues | La operación matemática a realizar. |
cola | TailType | El segundo valor a utilizar en la operación. |
MathFunctionExpression
Un objeto que representa una función matemática que se aplicará y la expresión a la que se aplicará. Este objeto amplía la interfaz RootType
.
Ejemplo
floor(3d6 / 2d4)
Propiedad | Tipo | Descripción |
---|---|---|
tipo | "mathfunction" | El tipo de elemento analizado que representa este objeto. |
op | MathFunction | La función a aplicar. |
exprés | AnyRoll | La expresión sobre la que aplicar la función. |
Los siguientes son tipos de soporte utilizados por las interfaces anteriores.
DiceGroupMathOperation
Un tipo auxiliar que representa las operaciones válidas para una operación matemática en un grupo de dados.
"+" | "-"
MathOperation
Un tipo auxiliar que representa las operaciones válidas para una operación matemática.
"+" | "-" | "*" | "/" | "%" | "**"
MathFunction
Un tipo auxiliar que representa las operaciones válidas para una operación matemática.
"floor" | "ceil" | "round" | "abs"
CriticalType
Un tipo de ayuda que se utiliza al marcar una tirada como éxito o fracaso crítico.
"success" | "failure" | null
CompareOperation
Un tipo de ayuda para las operaciones disponibles para un punto de comparación.
">" | "<" | "="
HighLowType
Un tipo de ayuda utilizado para determinar qué tiradas conservar o descartar.
"h" | "l" | null