// 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)) + "%"; }