Files
dsabot/functions/CompareResults.js
TobenderZephyr d45e4faad6 Security fixes (#32)
* Generic Object Injection Sink

* (fix) "Character" is not defined.

* added eslint

* improve code quality, use refactored function

* (fix) eslint jest

* "Character" is not defined

* removed unused file Compare.js

* (fix) PointsUsed is not defined

* (fix) eslint moans jsconfig

* turn off "no-prototype-builtins"

* push code coverage
2021-05-01 20:13:15 +02:00

52 lines
1.4 KiB
JavaScript

/**
* Compares each item inside an array Throws
* with corresponding AttributeLevels (With added bonus)
*
* @param {Array} Throws=[]
* @param {Array} AttributeLevels=[8,8,8]
* @param {BigInt} Bonus=0
* @param {BigInt} PointsRemaining=0
*/
const CompareResults = (
Throws = [],
AttributeLevels = [8, 8, 8],
Bonus = 0,
PointsRemaining = 0
) => {
let Passed = 0;
let Fumbles = 0;
let CriticalHit = 0;
let AllPointsUsed = [];
Throws.forEach((Throw, key) => {
let PointsUsed = 0;
let AttributeLevel = AttributeLevels.find((v, k) => key === k);
if (Math.floor(AttributeLevel + Bonus) >= Throw) {
Passed++;
} else if (Math.floor(AttributeLevel + PointsRemaining + Bonus) >= Throw) {
Passed++;
PointsUsed = Throw - Bonus - AttributeLevel;
PointsRemaining -= PointsUsed;
} else {
PointsUsed = PointsRemaining;
PointsRemaining -= PointsUsed;
}
if (Throw === 1) {
CriticalHit++;
}
if (Throw === 20) {
Fumbles++;
}
AllPointsUsed.push(PointsUsed);
});
return {
Passed: Passed,
CriticalHit: CriticalHit,
Fumbles: Fumbles,
PointsUsed: AllPointsUsed,
PointsRemaining: PointsRemaining,
};
};
module.exports = { CompareResults };