24 lines
1.1 KiB
TypeScript
24 lines
1.1 KiB
TypeScript
// Left-to-right slot weights. Integer units preserve the supplied percentages exactly.
|
|
export const PYRAMID_WEIGHTS = [
|
|
[49, 5, 4946, 4946, 5, 49],
|
|
[49, 4949, 4, 4949, 49],
|
|
[97, 9797, 9, 97],
|
|
[1, 1, 1],
|
|
[1, 1]
|
|
];
|
|
|
|
/** Presentation only: the server remains responsible for choosing the drawn reward. */
|
|
export function remainingProbabilities(level: number, rewards: Array<{ gain: boolean; weight?: number }>): number[] {
|
|
if (level === 6) return rewards.map(() => 0);
|
|
const defaults = PYRAMID_WEIGHTS[level - 1];
|
|
const configured = rewards.every(r => Number.isFinite(r.weight) && r.weight > 0);
|
|
if (!configured && (!defaults || defaults.length !== rewards.length)) return rewards.map(() => 0);
|
|
const weights = rewards.map((r, i) => r.gain ? 0 : configured ? r.weight : defaults[i]);
|
|
const sum = weights.reduce((a, b) => a + b, 0);
|
|
return weights.map(weight => sum ? weight / sum : 0);
|
|
}
|
|
|
|
export function probabilityText(probability: number, level: number): string {
|
|
return Number((probability * 100).toFixed(level === 4 ? 1 : 2)) + "%";
|
|
}
|