diff --git a/src/modules/misc/roll.js b/src/modules/misc/roll.js index 21b1edd..c221dbf 100644 --- a/src/modules/misc/roll.js +++ b/src/modules/misc/roll.js @@ -8,6 +8,20 @@ roll.helpText = "Roll a dice"; roll.usage = ""; roll.callback = function (msg, line, [sides], {advantage, disadvantage}) { if (sides == null || sides == "") sides = 6; + let num = 1; + if (sides.indexOf("d") > -1) { + const split = sides.split("d"); + if (split[2] != null) { + num = split[1]; + sides = split[2]; + } else { + sides = split[1]; + } + } + num = Number(num); + if (Number.isNaN(num)) num = 1; + if (num < 0) num = Math.abs(num); + if (num == 0) num = 1; sides = Number(sides); if (Number.isNaN(sides)) sides = 6; if (sides < 0) sides = Math.abs(sides); @@ -15,25 +29,41 @@ roll.callback = function (msg, line, [sides], {advantage, disadvantage}) { if (sides == 0) return ":hole:"; if (sides == 1) return ":one:"; - const res = Math.floor(Math.random() * sides); + const rolls = []; + + for (let i = 0; i < num; i++) { + const res = Math.floor(Math.random() * sides); + if (sides == 2) { + rolls.push(res == 1 ? "Heads" : "Tails"); + continue; + } + + if (advantage) { + const res2 = Math.floor(Math.random() * sides); + const adv = Math.max(res + 1, res2 + 1); + + rolls.push(adv); + } else if (disadvantage) { + const res2 = Math.floor(Math.random() * sides); + const adv = Math.min(res + 1, res2 + 1); + + rolls.push(adv); + } else { + rolls.push(res + 1); + } + } + + let prefix = `:game_die: (${num > 1 ? num : ""}d${sides}):`; if (sides == 2) { - return `:coin:: ${res == 1 ? "Heads" : "Tails"}`; - } - - if (advantage) { - const res2 = Math.floor(Math.random() * sides); - const adv = Math.max(res + 1, res2 + 1); - - return `:game_die: (d${sides} with advantage): ${adv}`; + prefix = ":coin::"; + } else if (advantage) { + prefix = prefix.substring(0, prefix.length - 2) + " with advantage):"; } else if (disadvantage) { - const res2 = Math.floor(Math.random() * sides); - const adv = Math.min(res + 1, res2 + 1); - - return `:game_die: (d${sides} with disadvantage): ${adv}`; - } else { - return `:game_die: (d${sides}): ${1 + res}`; + prefix = prefix.substring(0, prefix.length - 2) + " with disadvantage):"; } + + return `${prefix} ${rolls.join(", ")}`; }; hf.registerCommand(roll); @@ -42,7 +72,7 @@ rollInteraction.helpText = "Roll a dice"; rollInteraction.options.sides = { name: "sides", type: ApplicationCommandOptionTypes.NUMBER, - description: "How many sides to pick from", + description: "How many sides to pick from (use #d# to roll multiple dice)", required: false, default: 6, };