Some checks failed
Test and deploy staging / staging (push) Failing after 5m29s
44 lines
1.0 KiB
TypeScript
44 lines
1.0 KiB
TypeScript
import type { MasteryRules } from './mastery';
|
|
|
|
export type RankLimits = {
|
|
maxLevel: number | null;
|
|
maxPrestige: number;
|
|
canPrestigeOnlyAtMaxLevel: boolean;
|
|
rankable: boolean;
|
|
};
|
|
|
|
const capsFor = (rules: MasteryRules) => rules.rankCaps;
|
|
|
|
export function playerRankLimits(rules: MasteryRules): RankLimits {
|
|
const caps = capsFor(rules)?.player;
|
|
return {
|
|
maxLevel: caps?.level ?? null,
|
|
maxPrestige: caps?.prestige ?? 1000,
|
|
canPrestigeOnlyAtMaxLevel: false,
|
|
rankable: true
|
|
};
|
|
}
|
|
|
|
export function weaponRankLimits(
|
|
rules: MasteryRules,
|
|
weapon: Pick<{ category: string; name: string }, 'category' | 'name'>
|
|
): RankLimits {
|
|
const caps = capsFor(rules);
|
|
if (!caps) {
|
|
return {
|
|
maxLevel: null,
|
|
maxPrestige: 1000,
|
|
canPrestigeOnlyAtMaxLevel: false,
|
|
rankable: true
|
|
};
|
|
}
|
|
const maxLevel =
|
|
caps.weaponLevelOverrides?.[weapon.name] ?? caps.weaponLevelsByClass[weapon.category] ?? null;
|
|
return {
|
|
maxLevel,
|
|
maxPrestige: caps.weaponPrestige,
|
|
canPrestigeOnlyAtMaxLevel: true,
|
|
rankable: maxLevel !== null
|
|
};
|
|
}
|