Files
noname-shuying/mengsan/cards/upgrades.js
T
Diuse 9e1732d2f8 fixed # 补全部分卡牌
fixed # 修复部分已知BUG
2026-10-04 19:32:38 +08:00

49 lines
1.8 KiB
JavaScript

import { cardPackUpgradeRules } from "./packs/data.js";
const upgrades = Object.freeze({
...cardPackUpgradeRules,
sha: Object.freeze({ maxLevel: 1, damage: 9 }),
mengsan_zhongsha: Object.freeze({ maxLevel: 1, damage: 10,
vulnerable: 3 }),
});
export const cardUpgradeRule = name =>
Object.hasOwn(upgrades, name) ? upgrades[name] : null;
function upgradeData(card) {
if(card?.cards?.length===1 && card.cards[0]?.name===card.name && card.cards[0].storage?.mengsanCard_shuying)card=card.cards[0];
const data=card?.storage?.mengsanCard_shuying || card;
return data && data.name===card?.name ? data : null;
}
export function cardUpgradeLevel(card) {
const data = upgradeData(card);
if (!data || data.name !== card?.name) return 0;
const limit = cardUpgradeRule(card.name)?.maxLevel || 0;
return Number.isInteger(data.upgrade) && data.upgrade > 0
? Math.min(data.upgrade, limit) : 0;
}
export function canUpgradeCard(card) {
const rule = cardUpgradeRule(card?.name);
const data = upgradeData(card), level = data?.upgrade ?? 0;
// 永恒只禁止移除和变化;是否可强化由强化规则及真实等级决定。
return Boolean(data && rule && Number.isInteger(level) && level >= 0 &&
level < rule.maxLevel);
}
export const hasUpgradeableCard = deck =>
Array.isArray(deck) && deck.some(canUpgradeCard);
export function upgradeRandomCard(deck, random) {
const eligible = Array.isArray(deck) ? deck.filter(canUpgradeCard) : [];
if (!eligible.length) return null;
const value = random();
if (!Number.isFinite(value) || value < 0 || value >= 1) {
throw new RangeError("梦三强化随机数必须位于[0, 1)");
}
const card = eligible[Math.floor(value * eligible.length)];
const data=upgradeData(card);
data.upgrade = (data.upgrade || 0) + 1;
return card;
}