metafide-surge
Version:
Metafide Surge Game Computation
108 lines (99 loc) • 2.69 kB
text/typescript
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;
}