add everything
This commit is contained in:
82
js/score.js
Normal file
82
js/score.js
Normal file
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* Numbers of decimal digits to round to
|
||||
*/
|
||||
const scale = 0;
|
||||
|
||||
/**
|
||||
* Calculate the score awarded when having a certain percentage on a list level
|
||||
* @param {Number} rank Position on the list
|
||||
* @param {Number} percent Percentage of completion
|
||||
* @param {Number} minPercent Minimum percentage required
|
||||
* @returns {Number}
|
||||
*/
|
||||
export function score(rank, percent, minPercent) {
|
||||
if (rank > 150) {
|
||||
return 0;
|
||||
}
|
||||
if (rank > 75 && percent < 100) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (rank == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Old formula
|
||||
/*
|
||||
let score = (100 / Math.sqrt((rank - 1) / 50 + 0.444444) - 50) *
|
||||
((percent - (minPercent - 1)) / (100 - (minPercent - 1)));
|
||||
*/
|
||||
// New formula
|
||||
/*let score = Math.round((-49.9975*Math.pow(rank-1, 0.4) + 350) * ((percent - (minPercent - 1)) / (100 - (minPercent - 1))));
|
||||
|
||||
score = Math.max(0, score);*/
|
||||
// peter griffin formula
|
||||
|
||||
let score = Math.round((-59.9975*Math.pow(rank-1, 0.345) + 350));
|
||||
|
||||
score = Math.max(0, score);
|
||||
|
||||
if (percent != 100) {
|
||||
return round(score * 0.1);
|
||||
}
|
||||
|
||||
return Math.max(round(score), 0);
|
||||
}
|
||||
|
||||
export function packScore(levels) {
|
||||
if (!levels || !levels.length) return 0;
|
||||
|
||||
let total = 0;
|
||||
|
||||
for (const level of levels) {
|
||||
total += score(level.listRank, 100, level.percentToQualify ?? 0);
|
||||
}
|
||||
|
||||
// pack bonus multiplier
|
||||
let multiplier = 1;
|
||||
|
||||
if (levels.length >= 7) multiplier = 1.4;
|
||||
else if (levels.length >= 5) multiplier = 1.3;
|
||||
else if (levels.length >= 3) multiplier = 1.2;
|
||||
else if (levels.length >= 2) multiplier = 1.1;
|
||||
|
||||
return round((total * multiplier)/levels.length);
|
||||
}
|
||||
|
||||
export function round(num) {
|
||||
if (!('' + num).includes('e')) {
|
||||
return +(Math.round(num + 'e+' + scale) + 'e-' + scale);
|
||||
} else {
|
||||
var arr = ('' + num).split('e');
|
||||
var sig = '';
|
||||
if (+arr[1] + scale > 0) {
|
||||
sig = '+';
|
||||
}
|
||||
return +(
|
||||
Math.round(+arr[0] + 'e' + sig + (+arr[1] + scale)) +
|
||||
'e-' +
|
||||
scale
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user