UNPKG

metafide-surge

Version:

Metafide Surge Game Computation

108 lines (99 loc) 2.69 kB
import { AllocationPercentages, RangePlayer, SpotPlayer, Numeric, } from './types'; /** * Default allocation percentages used if none are provided. */ export const DEFAULT_RANGE_ALLOCATION_PERCENTAGES: AllocationPercentages = { metafide_rake: 0.019875, // 1.9875% streak_pot_5: 0.01425, // 1.425% streak_pot_10: 0.0095, // 0.95% streak_pot_25: 0.002375, // 0.2375% daily_reward_pot: 0.0035, // 0.35% monthly_reward_pot: 0.0015, // 0.15% burn: 0.025, // 2.5% }; export const DEFAULT_SPOT_ALLOCATION_PERCENTAGES: AllocationPercentages = { metafide_rake: 0.019875, // 1.9875% range_rake: 0.015, // 1.5% streak_pot_5: 0.01425, // 1.425% streak_pot_10: 0.0095, // 0.95% streak_pot_25: 0.002375, // 0.2375% burn: 0.025, // 2.5% daily_reward_pot: 0.0035, // 0.35% monthly_reward_pot: 0.0015, // 0.15% }; /** * Scales down a number from 1e8, safely handling all edge cases. * @param value - The input value to scale * @returns The scaled value, or 0 if input is invalid */ export function scaleFrom1e8(value: number | undefined | null): number { if (typeof value !== 'number' || !isFinite(value)) { return 0; } if (value === 0) { return 0; } return value / 1e8; } export function serializeRangePlayer(data: RangePlayer): RangePlayer { return { gid: Number(data.gid), c: data.c, a: data.a, id: data.id, f: Number(data.f), hp: Number(data.hp), lp: Number(data.lp), cm: data.cm, cmt: data.cmt ?? null, t: data.t, w: Number(data.w), r: Number(data.r), p: Number(data.p), ex: data.ex, ex_ha: data.ex_ha ? Number(data.ex_ha) : null, ex_la: data.ex_la ? Number(data.ex_la) : null, ex_t: data.ex_t ? Number(data.ex_t) : null, pw: data.pw, win: data.win, }; } export function serializeSpotPlayer(data: SpotPlayer): SpotPlayer { return { gid: Number(data.gid), c: data.c, a: data.a, id: data.id, f: Number(data.f), cm: data.cm, cmt: data.cmt ?? null, t: data.t, w: Number(data.w), r: Number(data.r), sp: Number(data.sp), pw: data.pw, win: data.win, tx: data.tx, txid: data.txid, }; } /** * Converts a `Numeric` (string or number) to a number. * Returns 0 if the value is null, undefined, or not a valid number. * * @param {Numeric | null | undefined} value - The value to convert. * @returns {number} A valid number (or 0 if invalid). */ export function parseNumeric(value: Numeric | null | undefined): number { if (typeof value === 'number') return value; if (typeof value === 'string') { const parsed = parseFloat(value); return isNaN(parsed) ? 0 : parsed; } return 0; }