Skip to content

vcrini/diceroll

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

diceroll

Utility Go per parsing e lancio di espressioni dadi (stile D&D), usata da lazy5e ma riusabile in qualunque progetto.

Installazione

go get github.com/vcrini/diceroll@latest

API

  • ExpandRollInput(input string) ([]string, error)
    • Espande input multipli separati da , e moltiplicatore xN.
  • ParseRollBatch(input string) (expr string, times int, err error)
    • Parla una singola entry batch (1d6x3 -> 1d6, 3).
  • RollExpression(expr string) (total int, breakdown string, err error)
    • Esegue il tiro e ritorna totale + breakdown testuale.
  • ChooseMode(mode byte, a int, b int) int
    • v sceglie il maggiore, s il minore.

Sintassi supportata

Termini base

  • Dado: NdM (es. 2d6, d20)
  • Dado speciale: d (alias per 2d12)
    • Se il primo tiro > secondo: speranza
    • Se il primo tiro < secondo: paura
    • Se uguali: critico
  • Somma/sottrazione: 2d6+d4+3, 1d8-1
  • Costanti: +5, -2
  • Clamp a zero: se il totale è negativo, ritorna 0.

Varianti dado

Suffissi sul dado:

  • v: tira 2 volte e prende il valore maggiore (d20v)
  • s: tira 2 volte e prende il valore minore (d20s)
  • c: abilita il comportamento critico usato con >/>= (solo sul primo termine dado)
  • cd: critico stile daggerheart sul primo dado (solo con >/>= e successExpr)
    • alias compatibile: cp

Esempi:

  • d20v+5
  • d20s+1
  • d20c>15 2d6+3
  • d20cd>10 1d6+2

Condizioni > e >=

Formato:

  • expr > soglia
  • expr >= soglia
  • expr > soglia successExpr
  • expr >= soglia successExpr

Comportamento:

  • senza successExpr: append ok/ko al breakdown
  • con successExpr: se condizione vera, valuta anche successExpr e lo appende (-> ...)
  • con suffisso c sul primo dado e tiro massimo sul primo termine: in successExpr raddoppia il numero di dadi (1d6 -> 2d6)
  • con suffisso cd sul primo dado e tiro massimo sul primo termine: in successExpr aggiunge la massimizzazione del primo dado di successExpr
    • esempio: d20cd >10 1d6+2 con critico sul d20 equivale a 1d6+8 (+2 originale + +6 da dado massimizzato)
  • con dado speciale d in un confronto (>/>=), d è trattato come cd automaticamente
    • il trigger avviene su critico del dado d (i due d12 uguali)
    • con critico, il check è sempre un successo anche se la soglia non è superata
    • esempio: d > 11 d6+2

Esempi:

  • 1d20+5 > 12
  • 1d20 >= 10 2d6+1
  • d20c>15 d6+1
  • d20cd>10 1d6+2
  • d > 11 d6+2

Batch e input multipli

  • Moltiplicatore: 1d6 x3 oppure 1d6x3
  • Multipli separati da virgola: d4,d6,d8
  • Combinabile: 1d20+5>10x2,d6

Esempio rapido

package main

import (
	"fmt"
	"github.com/vcrini/diceroll"
)

func main() {
	exprs, _ := diceroll.ExpandRollInput("1d20+5>12,d6x2")
	for _, e := range exprs {
		total, breakdown, err := diceroll.RollExpression(e)
		if err != nil {
			fmt.Printf("%s -> errore: %v\n", e, err)
			continue
		}
		fmt.Printf("%s => %d (%s)\n", e, total, breakdown)
	}
}

Limiti e validazioni

  • batch xN: N deve essere > 0 e <= 200
  • numero dadi per termine <= 1000
  • facce dado per termine <= 100000
  • input vuoto o token invalidi ritornano errore

Test

go test ./...

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors