改动整体底层系统

This commit is contained in:
2026-09-29 00:29:00 +08:00
parent ced1b28cc2
commit 2e552cf17d
24 changed files with 809 additions and 53 deletions
+2 -1
View File
@@ -12,7 +12,8 @@ const act1Map = {
contentId: "act1.battle.liubeiOpening",
},
],
enemies: ["re_xiahoudun", "re_zhangliao", "re_xuzhu"],
enemies: ["mengsan_flyconid_shuying"],
eliteEnemies: ["re_xiahoudun", "re_zhangliao", "re_xuzhu"],
boss: "re_lvbu",
baseGold: 20,
};
+35
View File
@@ -0,0 +1,35 @@
// 梦三永久牌组的可获得牌注册表。这里登记牌名与归属,不复制引擎中的效果定义。
// 新增武将专属牌时填写 owner 为该武将 ID;通用牌填写 owner: null。
const definitions = [
{ name: "sha", category: "damage", 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 },
// 当前仅刘备专属首关的固定奖励会永久获得【的卢】。
{ name: "dilu", category: "utility", owner: "mengsan_liubei_shuying" },
];
export function createCardRegistry(entries) {
const registry = Object.create(null);
for (const entry of 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) ||
Object.hasOwn(registry, entry.name)) {
throw new Error(`梦三牌定义无效或重复:${entry?.name}`);
}
registry[entry.name] = Object.freeze({ name: entry.name, category: entry.category, owner: entry.owner });
}
return Object.freeze(registry);
}
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);
}
+4 -2
View File
@@ -1,3 +1,5 @@
import { createCardData } from "../runtime/card-data.js";
// Mode-owned starting decks. Existing saves always retain their actual player.deck.
export const defaultDeck = Object.freeze([
["spade", 7, "sha"], ["heart", 10, "sha"],
@@ -24,8 +26,8 @@ export function getStartingDeck(character) {
}
export function createStartingDeck(character, prefix = `mengsan_card_${Date.now()}`) {
return getStartingDeck(character).map((entry, index) => ({
return getStartingDeck(character).map((entry, index) => createCardData({
id: `${prefix}_${index}`, suit: entry[0], number: entry[1], name: entry[2],
nature: entry[3] || null, affixes: entry[4] ? entry[4].slice() : [], upgrade: 0,
}));
}, { character }));
}
+3
View File
@@ -6,6 +6,8 @@ export function createScenarioCharacters(Character) {
// 国战男性普通小兵使用原生 shibing1 立绘;实际战斗生命由怪物类或关卡配置决定。
mengsan_soldier_shuying: new Character({ sex: "male", group: "qun", hp: 4, maxHp: 4,
skills: [], img: "image/character/shibing1.jpg" }),
mengsan_flyconid_shuying: new Character({ sex: "none", group: "qun", hp: 48, maxHp: 48,
skills: [], img: "extension/术樱包/mengsan/assets/flyconid-portrait.png" }),
mengsan_sushuang_zhangshiping_shuying: new Character({ sex: "male", group: "shu", hp: 4, maxHp: 4,
skills: [], img: "extension/术樱包/mengsan/assets/sushuang-zhangshiping.png", names: "苏|双-张|世平" }),
};
@@ -13,5 +15,6 @@ export function createScenarioCharacters(Character) {
export const scenarioTranslations = {
mengsan_liubei_shuying: "界刘备", mengsan_liubei_shuying_title: "50/50生命 · 无初始技能",
mengsan_soldier_shuying: "士兵",
mengsan_flyconid_shuying: "飞蝇菌子",
mengsan_sushuang_zhangshiping_shuying: "苏双&张世平",
};
+2 -1
View File
@@ -5,6 +5,7 @@ export const rewards = {
},
"shared.reward.card.sha": { effectId: "card_sha", name: "获得一张【杀】", description: "加入独立永久牌组" },
"shared.reward.card.tao": { effectId: "card_tao", name: "获得一张【桃】", description: "加入独立永久牌组" },
"shared.reward.card.wuzhong": { card: { name: "wuzhong" }, name: "获得一张【无中生有】", description: "加入独立永久牌组" },
"shared.reward.card.upgrade": { effectId: "upgrade", name: "随机强化", description: "随机一张牌强化一级" },
"shared.reward.heal": { effectId: "heal", name: "整顿伤势", description: "回复 8 点生命" },
"shared.reward.item.handCharm": { effectId: "item_hand", name: "道具·束带", description: "基础手牌上限额外 +1" },
@@ -16,7 +17,7 @@ export const rewardPools = {
"shared.pool.battle.normal": [
"shared.reward.card.sha",
"shared.reward.card.tao",
"shared.reward.card.upgrade",
"shared.reward.card.wuzhong",
],
"shared.pool.boss.premium": [
"shared.reward.skill.heroic",