Rullo di notazione dei dadi
Un vero parser da tavolo per la notazione dei dadi: digita 3d6+2, 4d6kh3 o adv e ottieni ogni singolo lancio di dado, i dadi tenuti/lasciati cadere e il totale.
Risultato
Il Dice Notation Roller legge e lancia la stessa abbreviazione usata nei giochi di ruolo da tavolo e nei libri di regole: "NdS" significa lanciare N dadi con i lati S, quindi "3d6" lancia tre dadi a sei facce. Aggiungi un modificatore semplice con +N o -N ("3d6+2"), combina diversi gruppi di dadi in un'unica espressione ("2d8+1d6-1"), o usa la scorciatoia vantaggio/svantaggio di D&D 5e ("adv" lancia due dadi a venti facce e mantiene quello più alto, "dis" mantiene quello inferiore). Anche la notazione Mantieni il più alto e Mantieni il più basso ("4d6kh3" lancia quattro dadi a sei facce e mantiene i tre più alti - il modo standard per tirare i punteggi di caratteristica di D&D) è pienamente supportata.
Sotto il cofano si tratta di un vero tokenizzatore e parser, non di un elenco di espressioni riconosciute: la notazione viene scansionata carattere per carattere in token (gruppi di dadi, parole chiave adv/dis, numeri semplici e operatori +/-), assemblati in un piccolo albero di espressioni e solo successivamente valutati. Qualsiasi combinazione sintatticamente valida funziona, inclusa la notazione per la quale nessuno ha scritto un esempio. Ogni dado viene lanciato con il generatore di numeri casuali crittografici del browser (crypto.getRandomValues, non Math.random) utilizzando il campionamento di rifiuto in modo che ogni faccia abbia esattamente la stessa probabilità e il risultato mostra ogni singolo dado, quali dadi sono stati tenuti o abbandonati per i lanci kh/kl, il modificatore applicato e il totale finale.
Per mantenere lo strumento prevedibile e veloce, i gruppi di dadi hanno un limite massimo di 100 dadi e 1000 facce per gruppo e i conteggi più alti/più bassi non possono mai superare il numero di dadi lanciati. Una notazione non corretta (un carattere sconosciuto, due operatori di fila, un + pendente alla fine) produce un messaggio di errore specifico e leggibile invece di un errore silenzioso o un arresto anomalo. Tutto viene eseguito localmente nel browser: nessuna notazione, rullo o risultato viene mai inviato da nessuna parte.