✨ feat: 整合活动BOSS主题并完善捉鬼驱邪内容

✨ feat: 统一活动BOSS主题入口与武将包合并流程
✨ feat: 补充十二生肖及捉鬼驱邪武将、技能和配音资源
✨ feat: 支持更新时安全清理废弃文件与目录
This commit is contained in:
2026-08-12 03:32:07 +08:00
parent 690e55736d
commit 49cb75d813
87 changed files with 2312 additions and 356 deletions
+118 -228
View File
@@ -1,210 +1,125 @@
const bossList = {
// stage1: ["caocao_boss_shuying", "dongzhuo_boss_shuying"],
stage1: ["zishu_boss_shuying", "wuma_boss_shuying", "chenlong_boss_shuying", "weiyang_boss_shuying", "shenhou_boss_shuying", "xvgou_boss_shuying"],
stage2: ["heibaiwuchang_boss_shuying", "yvsai_boss_shuying", "huangfeng_boss_shuying", "riyeyoushen_boss_shuying"],
stage3: ["caocao_boss_shuying", "simayi_boss_shuying", "lvbu_boss_shuying", "dongzhuo_boss_shuying"],
stage4: ["shuishengonggong_boss_shuying", "shaohao_boss_shuying", "xuannv_boss_shuying", "hanba_boss_shuying"],
const difficultyOrder = [normal, hard, nightmare];
const stages = [
{
id: stage1,
name: 第一关,
// bosses: [caocao_boss_shuying, dongzhuo_boss_shuying],
bosses: [zishu_boss_shuying, chouniu_boss_shuying, yinhu_boss_shuying, maotu_boss_shuying, chenlong_boss_shuying, sishe_boss_shuying, wuma_boss_shuying, weiyang_boss_shuying, shenhou_boss_shuying, youji_boss_shuying, xvgou_boss_shuying, haizhu_boss_shuying],
},
{
id: stage2,
name: 第二关,
bosses: [mengpo_boss_shuying, baowei_boss_shuying, niaozui_boss_shuying, heibaiwuchang_boss_shuying, niutoumamian_boss_shuying, yvsai_boss_shuying, huangfeng_boss_shuying, riyeyoushen_boss_shuying, guiwang_boss_shuying, yanluowang_boss_shuying],
},
{
id: stage3,
name: 第三关,
bosses: [caocao_boss_shuying, simayi_boss_shuying, lvbu_boss_shuying, dongzhuo_boss_shuying],
},
{
id: stage4,
name: 第四关,
bosses: [shuishengonggong_boss_shuying, shaohao_boss_shuying, xuannv_boss_shuying, hanba_boss_shuying],
},
];
const bossList = Object.fromEntries(stages.map(stage => [stage.id, stage.bosses]));
const virtualIdols = {
Xiaotao: vtb_xiaotao,
Xiaosha: vtb_xiaosha,
Xiaoshan: vtb_xiaoshan,
Xiaole: vtb_xiaole,
Xiaojiu: vtb_xiaojiu,
};
const virtualIdolList = Object.values(virtualIdols);
const virtualIdolList = ["vtb_xiaotao", "vtb_xiaosha", "vtb_xiaoshan", "vtb_xiaole", "vtb_xiaojiu"];
const difficultyOrder = ["normal", "hard", "nightmare"];
// Boss 的体力与体力上限始终使用相同加成,只需在配置中填写一次。
const createDifficultyConfig = (startCards, hpBonus = 0) => ({
startCards,
hpBonus,
maxHpBonus: hpBonus,
});
const bossDifficultyTemplates = {
shiershengxiao:
{
normal: {
startCards: 4,
},
hard: {
startCards: 6,
hpBonus: 1,
maxHpBonus: 1,
},
nightmare: {
startCards: 8,
hpBonus: 4,
maxHpBonus: 4,
},
shiershengxiao: {
normal: createDifficultyConfig(4),
hard: createDifficultyConfig(6, 1),
nightmare: createDifficultyConfig(8, 4),
},
zhuoguiquxie: {
normal: {
startCards: 4,
hpBonus: 2,
maxHpBonus: 2,
},
hard: {
startCards: 6,
hpBonus: 4,
maxHpBonus: 4,
},
nightmare: {
startCards: 8,
hpBonus: 8,
maxHpBonus: 8,
},
normal: createDifficultyConfig(4, 2),
hard: createDifficultyConfig(6, 4),
nightmare: createDifficultyConfig(8, 8),
},
qingqingzijin: {
normal: {
startCards: 6,
hpBonus: 6,
maxHpBonus: 6,
},
hard: {
startCards: 8,
hpBonus: 16,
maxHpBonus: 16,
},
nightmare: {
startCards: 10,
hpBonus: 26,
maxHpBonus: 26,
},
normal: createDifficultyConfig(6, 6),
hard: createDifficultyConfig(8, 16),
nightmare: createDifficultyConfig(10, 26),
},
tianshuluandou:
{
normal: {
startCards: 6,
hpBonus: 6,
maxHpBonus: 6,
},
hard: {
startCards: 8,
hpBonus: 11,
maxHpBonus: 11,
},
nightmare: {
startCards: 12,
hpBonus: 21,
maxHpBonus: 21,
},
tianshuluandou: {
normal: createDifficultyConfig(6, 6),
hard: createDifficultyConfig(8, 11),
nightmare: createDifficultyConfig(12, 21),
},
};
// 为单个 Boss 复制模板,并按难度覆盖其补充技能。
const createBossConfig = (template, skills = {}) => ({
normal: { ...template.normal, ...(skills.normal?.length ? { skills: skills.normal } : {}) },
hard: { ...template.hard, ...(skills.hard?.length ? { skills: skills.hard } : {}) },
nightmare: { ...template.nightmare, ...(skills.nightmare?.length ? { skills: skills.nightmare } : {}) },
});
// 同组 Boss 使用相同模板,但生成彼此独立的配置对象。
const createBossGroup = (bosses, template) => Object.fromEntries(
bosses.map(boss => [boss, createBossConfig(template)])
);
const addSkillFromHard = skill => ({ hard: [skill], nightmare: [skill] });
const bossDifficulty = {
default: {
normal: {
startCards: 4,
hp: null,
maxHp: null,
hpBonus: 0,
maxHpBonus: 0,
skills: [],
},
hard: {
startCards: 5,
hp: null,
maxHp: null,
hpBonus: 2,
maxHpBonus: 2,
skills: [],
},
nightmare: {
startCards: 6,
hp: null,
maxHp: null,
hpBonus: 4,
maxHpBonus: 4,
skills: [],
},
normal: createDifficultyConfig(4),
hard: createDifficultyConfig(5, 2),
nightmare: createDifficultyConfig(6, 4),
},
bosses: {
chenlong_boss_shuying: { ...bossDifficultyTemplates.shiershengxiao, },
weiyang_boss_shuying: { ...bossDifficultyTemplates.shiershengxiao, },
shenhou_boss_shuying: { ...bossDifficultyTemplates.shiershengxiao, },
xvgou_boss_shuying: { ...bossDifficultyTemplates.shiershengxiao, },
...createBossGroup(stages[0].bosses, bossDifficultyTemplates.shiershengxiao),
heibaiwuchang_boss_shuying: {
...bossDifficultyTemplates.zhuoguiquxie,
hard: {
...bossDifficultyTemplates.zhuoguiquxie.hard,
skills: ["xixing_shuying"],
},
nightmare: {
...bossDifficultyTemplates.zhuoguiquxie.nightmare,
skills: ["xixing_shuying", "taiping_shuying"],
},
},
yvsai_boss_shuying: {
...bossDifficultyTemplates.zhuoguiquxie,
},
huangfeng_boss_shuying:
{
...bossDifficultyTemplates.zhuoguiquxie,
},
riyeyoushen_boss_shuying: {
...bossDifficultyTemplates.zhuoguiquxie,
nightmare: {
...bossDifficultyTemplates.zhuoguiquxie.nightmare,
skills: ["duane_shuying"],
},
},
...createBossGroup([yvsai_boss_shuying, huangfeng_boss_shuying], bossDifficultyTemplates.zhuoguiquxie),
mengpo_boss_shuying: createBossConfig(bossDifficultyTemplates.zhuoguiquxie, {
nightmare: [guimei_shuying],
}),
baowei_boss_shuying: createBossConfig(bossDifficultyTemplates.zhuoguiquxie, addSkillFromHard(yinsha_shuying)),
niaozui_boss_shuying: createBossConfig(bossDifficultyTemplates.zhuoguiquxie, addSkillFromHard(bingyi_shuying)),
heibaiwuchang_boss_shuying: createBossConfig(bossDifficultyTemplates.zhuoguiquxie, {
hard: [xixing_shuying],
nightmare: [xixing_shuying, taiping_shuying],
}),
riyeyoushen_boss_shuying: createBossConfig(bossDifficultyTemplates.zhuoguiquxie, {
nightmare: [duane_shuying],
}),
niutoumamian_boss_shuying: createBossConfig(bossDifficultyTemplates.zhuoguiquxie, {
hard: [xiaoshou_shuying],
nightmare: [xiaoshou_shuying, guizhao_shuying],
}),
guiwang_boss_shuying: createBossConfig(bossDifficultyTemplates.zhuoguiquxie, {
nightmare: [chihu_shuying],
}),
yanluowang_boss_shuying: createBossConfig(bossDifficultyTemplates.zhuoguiquxie, {
hard: [zhennu_shuying],
nightmare: [zhennu_shuying, xuanpan_shuying],
}),
caocao_boss_shuying:
{
...bossDifficultyTemplates.qingqingzijin,
hard: {
...bossDifficultyTemplates.qingqingzijin.hard,
skills: ["yishen_shuying"],
},
nightmare: {
...bossDifficultyTemplates.qingqingzijin.nightmare,
skills: ["yishen_shuying"],
},
},
simayi_boss_shuying:
{
...bossDifficultyTemplates.qingqingzijin,
hard: {
...bossDifficultyTemplates.qingqingzijin.hard,
skills: ["yuanlv_shuying"],
},
nightmare: {
...bossDifficultyTemplates.qingqingzijin.nightmare,
skills: ["yuanlv_shuying"],
},
},
lvbu_boss_shuying: {
...bossDifficultyTemplates.qingqingzijin,
hard: {
...bossDifficultyTemplates.qingqingzijin.hard,
skills: ["zhanjia_shuying"],
},
nightmare: {
...bossDifficultyTemplates.qingqingzijin.nightmare,
skills: ["zhanjia_shuying"],
},
},
dongzhuo_boss_shuying: {
...bossDifficultyTemplates.qingqingzijin,
hard: {
...bossDifficultyTemplates.qingqingzijin.hard,
skills: ["qubu_shuying"],
},
nightmare: {
...bossDifficultyTemplates.qingqingzijin.nightmare,
skills: ["qubu_shuying"],
},
},
shuishengonggong_boss_shuying: {
...bossDifficultyTemplates.tianshuluandou,
hard: {
...bossDifficultyTemplates.tianshuluandou.hard,
skills: ["shuishen_shuying"],
},
nightmare: {
...bossDifficultyTemplates.tianshuluandou.nightmare,
skills: ["shuishen_shuying"],
},
},
shaohao_boss_shuying: { ...bossDifficultyTemplates.tianshuluandou, },
xuannv_boss_shuying: { ...bossDifficultyTemplates.tianshuluandou, },
hanba_boss_shuying: { ...bossDifficultyTemplates.tianshuluandou, },
caocao_boss_shuying: createBossConfig(bossDifficultyTemplates.qingqingzijin, addSkillFromHard(yishen_shuying)),
simayi_boss_shuying: createBossConfig(bossDifficultyTemplates.qingqingzijin, addSkillFromHard(yuanlv_shuying)),
lvbu_boss_shuying: createBossConfig(bossDifficultyTemplates.qingqingzijin, addSkillFromHard(zhanjia_shuying)),
dongzhuo_boss_shuying: createBossConfig(bossDifficultyTemplates.qingqingzijin, addSkillFromHard(qubu_shuying)),
...createBossGroup([shaohao_boss_shuying, xuannv_boss_shuying, hanba_boss_shuying], bossDifficultyTemplates.tianshuluandou),
shuishengonggong_boss_shuying: createBossConfig(bossDifficultyTemplates.tianshuluandou, addSkillFromHard(shuishen_shuying)),
baiqi_boss_shuying: {},
pangu_boss_shuying: {},
@@ -213,37 +128,16 @@ const bossDifficulty = {
const tianshuConfig = {
bossList,
stages: [
{
id: "stage1",
name: "第一关",
bosses: bossList.stage1,
},
{
id: "stage2",
name: "第二关",
bosses: bossList.stage2,
},
{
id: "stage3",
name: "第三关",
bosses: bossList.stage3,
},
{
id: "stage4",
name: "第四关",
bosses: bossList.stage4,
},
],
stages,
difficulties: {
normal: {
name: "普通",
name: 普通,
},
hard: {
name: "困难",
name: 困难,
},
nightmare: {
name: "阴间",
name: 阴间,
},
},
difficultyOrder,
@@ -251,11 +145,7 @@ const tianshuConfig = {
virtualIdolList,
virtualIdols: {
random: virtualIdolList,
Xiaojiu: "vtb_xiaojiu",
Xiaosha: "vtb_xiaosha",
Xiaoshan: "vtb_xiaoshan",
Xiaole: "vtb_xiaole",
Xiaotao: "vtb_xiaotao",
...virtualIdols,
},
reward: {
killRecover: 1,
@@ -265,32 +155,32 @@ const tianshuConfig = {
skillChoiceCount: 5,
},
settings: {
virtualIdolConfigKey: "extension_术樱包_tianShu_Xvni",
virtualIdolRandomPoolConfigKey: "extension_术樱包_tianShu_XvniRandomPool",
virtualIdolReviveConfigKey: "extension_术樱包_tianShu_dead",
addBossConfigKey: "extension_术樱包_tianShu_addBoss",
revivePlayersConfigKey: "extension_术樱包_tianShu_revivePlayers",
difficultyStatusKey: "shuYing_tianshuDifficulty",
virtualIdolConfigKey: extension_术樱包_tianShu_Xvni,
virtualIdolRandomPoolConfigKey: extension_术樱包_tianShu_XvniRandomPool,
virtualIdolReviveConfigKey: extension_术樱包_tianShu_dead,
addBossConfigKey: extension_术樱包_tianShu_addBoss,
revivePlayersConfigKey: extension_术樱包_tianShu_revivePlayers,
difficultyStatusKey: shuYing_tianshuDifficulty,
},
skillPool: {
banned: ["huoxin", "jueqing", "qinqing", "beige", "huashen", "drlt_zhiti", "olzhiti", "xinfu_pdgyingshi", "rebeige"],
banned: [huoxin, jueqing, qinqing, beige, huashen, drlt_zhiti, olzhiti, xinfu_pdgyingshi, rebeige],
},
keywordBuffs: [
{
keyword: "杀",
keyword: 杀,
levels: [
{ count: 2, damageBonus: 1 },
{ count: 3, damageBonus: 2 },
],
},
{
keyword: "闪",
keyword: 闪,
levels: [
{ count: 2, drawAfterShan: 1 },
],
},
{
keyword: "桃",
keyword: 桃,
levels: [
{ count: 2, recoverBonus: 1 },
],