rarity.js 1.01 KB
// ponytail: 赏金区间与等级上限先写成常量;PRD 说「由运营配置」,要在后台改时换成配置表(W5 等级系统一起做)。
/** 稀有度 n(1–10)的赏金下限;低于第二档的都是 1。 */
const RARITY_MIN_REWARD = Object.freeze([1, 50, 100, 200, 400, 800, 1600, 3200, 6400, 12800])

/**
 * 稀有度按赏金区间自动得出:1 最小,10 最大。
 * @param {number} reward 正整数
 * @returns {number}
 */
export function rarityForReward(reward) {
  if (!Number.isSafeInteger(reward) || reward < 1) throw new Error(`rarityForReward: reward invalid: ${reward}`)
  return RARITY_MIN_REWARD.findLastIndex((min) => reward >= min) + 1
}

/**
 * 等级决定可接的稀有度上限:1 级可接到 3,每升一级 +1,封顶 10。
 * @param {number} level 从 1 起
 * @returns {number}
 */
export function maxRarityForLevel(level) {
  if (!Number.isSafeInteger(level) || level < 1) throw new Error(`maxRarityForLevel: level invalid: ${level}`)
  return Math.min(10, level + 2)
}