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.usage = "<sides>";
|
||||||
roll.callback = function (msg, line, [sides], {advantage, disadvantage}) {
|
roll.callback = function (msg, line, [sides], {advantage, disadvantage}) {
|
||||||
if (sides == null || sides == "") sides = 6;
|
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);
|
sides = Number(sides);
|
||||||
if (Number.isNaN(sides)) sides = 6;
|
if (Number.isNaN(sides)) sides = 6;
|
||||||
if (sides < 0) sides = Math.abs(sides);
|
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 == 0) return ":hole:";
|
||||||
if (sides == 1) return ":one:";
|
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) {
|
if (sides == 2) {
|
||||||
return `:coin:: ${res == 1 ? "Heads" : "Tails"}`;
|
rolls.push(res == 1 ? "Heads" : "Tails");
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (advantage) {
|
if (advantage) {
|
||||||
const res2 = Math.floor(Math.random() * sides);
|
const res2 = Math.floor(Math.random() * sides);
|
||||||
const adv = Math.max(res + 1, res2 + 1);
|
const adv = Math.max(res + 1, res2 + 1);
|
||||||
|
|
||||||
return `:game_die: (d${sides} with advantage): ${adv}`;
|
rolls.push(adv);
|
||||||
} else if (disadvantage) {
|
} else if (disadvantage) {
|
||||||
const res2 = Math.floor(Math.random() * sides);
|
const res2 = Math.floor(Math.random() * sides);
|
||||||
const adv = Math.min(res + 1, res2 + 1);
|
const adv = Math.min(res + 1, res2 + 1);
|
||||||
|
|
||||||
return `:game_die: (d${sides} with disadvantage): ${adv}`;
|
rolls.push(adv);
|
||||||
} else {
|
} else {
|
||||||
return `:game_die: (d${sides}): ${1 + res}`;
|
rolls.push(res + 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let prefix = `:game_die: (${num > 1 ? num : ""}d${sides}):`;
|
||||||
|
|
||||||
|
if (sides == 2) {
|
||||||
|
prefix = ":coin::";
|
||||||
|
} else if (advantage) {
|
||||||
|
prefix = prefix.substring(0, prefix.length - 2) + " with advantage):";
|
||||||
|
} else if (disadvantage) {
|
||||||
|
prefix = prefix.substring(0, prefix.length - 2) + " with disadvantage):";
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${prefix} ${rolls.join(", ")}`;
|
||||||
};
|
};
|
||||||
hf.registerCommand(roll);
|
hf.registerCommand(roll);
|
||||||
|
|
||||||
|
@ -42,7 +72,7 @@ rollInteraction.helpText = "Roll a dice";
|
||||||
rollInteraction.options.sides = {
|
rollInteraction.options.sides = {
|
||||||
name: "sides",
|
name: "sides",
|
||||||
type: ApplicationCommandOptionTypes.NUMBER,
|
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,
|
required: false,
|
||||||
default: 6,
|
default: 6,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue