roll: multiple dice
This commit is contained in:
parent
0a38640879
commit
7e735b93e5
1 changed files with 46 additions and 16 deletions
|
@ -8,6 +8,20 @@ roll.helpText = "Roll a dice";
|
|||
roll.usage = "<sides>";
|
||||
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,
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue