* 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
52 lines
1.4 KiB
JavaScript
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 };
|