fixed # 补全部分卡牌

fixed # 修复部分已知BUG
This commit is contained in:
2026-10-04 19:32:38 +08:00
parent c448da39c2
commit 94a2a6724b
163 changed files with 14008 additions and 1537 deletions
+23 -30
View File
@@ -1,35 +1,21 @@
// 梦三永久牌组的可获得牌注册表。这里登记牌名与归属,不复制引擎中的效果定义。
// 新增武将专属牌时填写 owner 为该武将 ID;通用牌填写 owner: null。
import { cardPackDefinitions } from "./packs/data.js";
import { cardTypes, cardRarityLabels } from "./classification-types.js";
import { liubeiCardTraits } from "./packs/liubei/traits.js";
const definitions = [
{ name: "mengsan_songjianwushi", category: "utility", owner: null },
{ name: "mengsan_pomie", category: "utility", owner: null },
{ name: "mengsan_jianyi", category: "utility", owner: null },
{ name: "mengsan_fangxue", category: "utility", owner: null },
{ name: "mengsan_yujin", category: "damage", owner: null },
{ name: "mengsan_wanmeidaji", category: "damage", owner: null },
{ name: "mengsan_yubeidaji", category: "damage", owner: null },
{ name: "mengsan_tupo", category: "damage", owner: null },
{ name: "mengsan_touchui", category: "damage", owner: null },
{ name: "mengsan_tiezhanbo", category: "damage", owner: null },
{ name: "mengsan_shuangchongdaji", category: "damage", owner: null },
{ name: "mengsan_shandianpili", category: "damage", owner: null },
{ name: "sha", category: "damage", owner: null },
{ name: "mengsan_zhongsha", category: "damage", owner: null },
{ name: "mengsan_fennu", category: "damage", owner: null },
{ name: "mengsan_rongrongzhiquan", category: "damage", owner: null },
{ name: "mengsan_quanshenzhuangji", category: "damage", owner: null },
{ name: "mengsan_jianbingdaji", category: "damage", owner: null },
{ name: "mengsan_feijianhuixuanbiao", category: "damage", owner: null },
{ name: "mengsan_fangyu", category: "utility", owner: null },
{ name: "shan", category: "utility", owner: null },
{ name: "tao", category: "recovery", owner: null },
{ name: "jiu", category: "recovery", owner: null },
{ name: "guohe", category: "utility", owner: null },
{ name: "wuzhong", category: "utility", owner: null },
{ name: "juedou", category: "damage", owner: null },
{ name: "bagua", category: "utility", owner: null },
...cardPackDefinitions,
{ name: "sha", category: "damage", owner: null, ...liubeiCardTraits.sha },
{ name: "mengsan_zhongsha", category: "damage", owner: null, ...liubeiCardTraits.mengsan_zhongsha },
{ name: "shan", category: "utility", owner: null, cardType: "skill" },
{ name: "tao", category: "recovery", owner: null, cardType: "skill" },
{ name: "jiu", category: "recovery", owner: null, cardType: "skill" },
{ name: "guohe", category: "utility", owner: null, cardType: "skill" },
{ name: "wuzhong", category: "utility", owner: null, cardType: "skill" },
{ name: "juedou", category: "damage", owner: null, cardType: "attack" },
{ name: "bagua", category: "utility", owner: null, cardType: "equipment" },
// 当前仅刘备专属首关的固定奖励会永久获得【的卢】。
{ name: "dilu", category: "utility", owner: "mengsan_liubei_shuying" },
{ name: "dilu", category: "utility", owner: "mengsan_liubei_shuying", cardType: "equipment" },
];
export function createCardRegistry(entries) {
@@ -38,10 +24,16 @@ export function createCardRegistry(entries) {
if (!entry || typeof entry.name !== "string" || !/^[a-z][a-z0-9_]*$/.test(entry.name) ||
!["damage", "recovery", "utility"].includes(entry.category) ||
!(entry.owner === null || typeof entry.owner === "string" && entry.owner.length > 0) ||
!(entry.deck == null || typeof entry.deck === "string" && /^[a-z][a-z0-9_]*$/.test(entry.deck)) ||
!(entry.generatedOnly == null || typeof entry.generatedOnly === "boolean") ||
!(entry.cardType == null || typeof entry.cardType === "string" && Object.hasOwn(cardTypes, entry.cardType)) ||
!(entry.rarity == null || typeof entry.rarity === "string" && Object.hasOwn(cardRarityLabels, entry.rarity)) ||
Object.hasOwn(registry, entry.name)) {
throw new Error(`梦三牌定义无效或重复:${entry?.name}`);
}
registry[entry.name] = Object.freeze({ name: entry.name, category: entry.category, owner: entry.owner });
registry[entry.name] = Object.freeze({ name: entry.name, category: entry.category, owner: entry.owner,
cardType: entry.cardType ?? null, rarity: entry.rarity ?? "common",
deck: entry.deck || "legacy", generatedOnly: entry.generatedOnly === true });
}
return Object.freeze(registry);
}
@@ -50,5 +42,6 @@ export const cardDefinitions = createCardRegistry(definitions);
export function canAcquireCard(character, name, registry = cardDefinitions) {
const definition = Object.hasOwn(registry, name) ? registry[name] : null;
return !!definition && (definition.owner === null || definition.owner === character);
return !!definition && !definition.generatedOnly &&
(definition.owner === null || definition.owner === character);
}