45 lines
1.0 KiB
JavaScript
45 lines
1.0 KiB
JavaScript
roll = function(n, d){
|
|
if (!isNaN(n)){
|
|
//first digit is a number
|
|
if (d === undefined){
|
|
d = n;
|
|
n = 1;
|
|
}
|
|
if (n > 500){
|
|
console.log(n + " > 500, cannot lift that many dice to roll them");
|
|
return;
|
|
}
|
|
var result = {sum: 0, rolls: []};
|
|
for (var i = 0; i < n; i++){
|
|
var roll = Math.floor(Random.fraction() * d + 1);
|
|
result.sum += roll;
|
|
result.rolls.push(roll);
|
|
}
|
|
return result;
|
|
}
|
|
console.log("rolling dice failed for inputs: ", n, d);
|
|
return {sum: 0, rolls: []};
|
|
};
|
|
|
|
rollDropLow = function(n, d, drop){
|
|
var r = roll(n, d);
|
|
r.rolls.sort(function(a, b){return a - b;}); //sort ascending
|
|
r.rolls.splice(0, drop); //remove the lowest elements
|
|
r.sum = 0;
|
|
for (var i = 0, l = r.rolls.length; i , l ; i++){
|
|
sum += r.rolls[i];
|
|
}
|
|
return r;
|
|
};
|
|
|
|
rollDropHigh = function(n, d, drop){
|
|
var r = roll(n, d);
|
|
r.rolls.sort(function(a, b){return b - a;}); //sort descending
|
|
r.rolls.splice(0, drop); //remove the highest elements
|
|
r.sum = 0;
|
|
for (var i = 0, l = r.rolls.length; i , l ; i++){
|
|
sum += r.rolls[i];
|
|
}
|
|
return r;
|
|
};
|