🎉 2.0.1.0版本发布

✨ 重构活动BOSS武将包并新增独立PVP武将包

✨ 完善天书动态难度、过关奖励与羁绊系统

🎨 新增自定义技能选择、羁绊谱册及移动端适配

🔊 整理BOSS配音、图片与模块资源路径

🐛 修复天书关卡、伤害保护及武将包加载问题
This commit is contained in:
2026-08-13 17:25:11 +08:00
parent 49cb75d813
commit b256c0f8e4
54 changed files with 8508 additions and 970 deletions
+15 -15
View File
@@ -6,7 +6,7 @@ const characters = {
skills: ["aotang_shuying", "yunju_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/mengpo_boss_shuying.png"
img: "extension/术樱包/pve/images/驱鬼逐邪/mengpo_boss_shuying.png"
},
baowei_boss_shuying:
@@ -17,7 +17,7 @@ const characters = {
skills: ["eli_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/baowei_boss_shuying.png"
img: "extension/术樱包/pve/images/驱鬼逐邪/baowei_boss_shuying.png"
},
niaozui_boss_shuying:
@@ -28,7 +28,7 @@ const characters = {
skills: ["suoxue_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/niaozui_boss_shuying.png"
img: "extension/术樱包/pve/images/驱鬼逐邪/niaozui_boss_shuying.png"
},
heibaiwuchang_boss_shuying:
@@ -39,8 +39,8 @@ const characters = {
skills: ["mizui_shuying", "qiangzheng_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/heibaiwuchang_boss_shuying.png",
dieAudios: ["ext:术樱包/pve/audio/dead/捉鬼驱邪/heibaiwuchang.mp3"]
img: "extension/术樱包/pve/images/驱鬼逐邪/heibaiwuchang_boss_shuying.png",
dieAudios: ["ext:术樱包/pve/audio/dead/驱鬼逐邪/heibaiwuchang.mp3"]
},
niutoumamian_boss_shuying: {
@@ -50,8 +50,8 @@ const characters = {
skills: ["manji_shuying", "shiyv_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/niutoumamian_boss_shuying.png",
dieAudios: ["ext:术樱包/pve/audio/dead/捉鬼驱邪/niutoumamian.mp3"]
img: "extension/术樱包/pve/images/驱鬼逐邪/niutoumamian_boss_shuying.png",
dieAudios: ["ext:术樱包/pve/audio/dead/驱鬼逐邪/niutoumamian.mp3"]
},
yvsai_boss_shuying: {
@@ -61,7 +61,7 @@ const characters = {
skills: ["anchao_shuying", "guixi_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/yvsai_boss_shuying.png"
img: "extension/术樱包/pve/images/驱鬼逐邪/yvsai_boss_shuying.png"
},
huangfeng_boss_shuying: {
@@ -71,7 +71,7 @@ const characters = {
skills: ["mingchong_shuying", "duzhen_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/huangfeng_boss_shuying.png"
img: "extension/术樱包/pve/images/驱鬼逐邪/huangfeng_boss_shuying.png"
},
riyeyoushen_boss_shuying: {
@@ -81,8 +81,8 @@ const characters = {
skills: ["huiyun_shuying", "yezhong_shuying", "zhoucha_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/riyeyoushen_boss_shuying.png",
dieAudios: ["ext:术樱包/pve/audio/dead/捉鬼驱邪/riyeyoushen.mp3"]
img: "extension/术樱包/pve/images/驱鬼逐邪/riyeyoushen_boss_shuying.png",
dieAudios: ["ext:术樱包/pve/audio/dead/驱鬼逐邪/riyeyoushen.mp3"]
},
guiwang_boss_shuying: {
@@ -92,18 +92,18 @@ const characters = {
skills: ["jizhou_shuying", "danshi_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/guiwang_boss_shuying.png",
dieAudios: ["ext:术樱包/pve/audio/dead/捉鬼驱邪/guiwang.mp3"]
img: "extension/术樱包/pve/images/驱鬼逐邪/guiwang_boss_shuying.png",
dieAudios: ["ext:术樱包/pve/audio/dead/驱鬼逐邪/guiwang.mp3"]
},
yanluowang_boss_shuying: {
sex: "male",
group: "qun",
hp: 4,
skills: ["jizhou_shuying", "danshi_shuying"],
skills: ["dianwei_shuying", "xingpan_shuying"],
isHiddenBoss: true,
isBossAllowed: true,
img: "extension/术樱包/pve/images/捉鬼驱邪/yanluowang_boss_shuying.png"
img: "extension/术樱包/pve/images/驱鬼逐邪/yanluowang_boss_shuying.png"
},
};
+1 -1
View File
@@ -11,7 +11,7 @@ import perfectPairs from "./perfectPairs.js";
import voices from "./voices.js";
import { characterSort, characterSortTranslate } from "./sort.js";
// 捉鬼驱邪主题数据片段,由活动 BOSS 根入口统一注册。
// 驱鬼逐邪主题数据片段,由活动 BOSS 根入口统一注册。
export default {
character: characters,
card: cards,
+91 -5
View File
@@ -511,6 +511,7 @@ const skills = {
return player.getEnemies(null, false).some(target => target.isIn());
},
async content(event, trigger, player) {
const difficulty = getTianshuDifficulty();
const enemies = player.getEnemies(null, false).filter(target => target.isIn());
if (difficulty == "nightmare") {
@@ -667,7 +668,7 @@ const skills = {
},
},
},
shiyu_shuying: {
shiyv_shuying: {
mode: ["boss"],
audio: "ext:术樱包/pve/audio/skill/驱鬼逐邪:1",
trigger: {
@@ -1457,22 +1458,107 @@ const skills = {
},
forced: true,
locked: true,
silent: true,
popup: false,
mark: true,
filter(event, player) {
return (
getTianshuDifficulty() != "normal" &&
!player.storage.zhennu_shuying_used &&
event.changedHp < 0 &&
player.hp <= player.maxHp / 2 &&
player.hp - event.changedHp > player.maxHp / 2
event.originalHp > event.originalMaxHp / 2 &&
event.originalHp + event.changedHp <= event.originalMaxHp / 2
);
},
async content(event, trigger, player) {
player.storage.zhennu_shuying_used = true;
player.storage.zhennu_shuying_pending = true;
player.storage.zhennu_shuying_pending_type = trigger.getParent()?.name;
trigger.zhennu_shuying_pending = true;
player.markSkill("zhennu_shuying");
},
group: "zhennu_shuying_takeover",
subSkill: {
takeover: {
charlotte: true,
forced: true,
silent: true,
popup: false,
forceDie: true,
trigger: {
player: [
"changeHpAfter",
"damageAfter",
"loseHpAfter",
"dyingAfter",
],
},
filter(event, player, name) {
if (
!player.storage.zhennu_shuying_pending ||
!player.isIn() ||
player.hp <= 0
) {
return false;
}
await player.draw(4);
player.insertPhase();
if (name == "dyingAfter") return true;
if (name == "changeHpAfter") {
return (
event.zhennu_shuying_pending === true &&
!["damage", "loseHp"].includes(
player.storage.zhennu_shuying_pending_type
)
);
}
return (
(name == "damageAfter" &&
player.storage.zhennu_shuying_pending_type ==
"damage") ||
(name == "loseHpAfter" &&
player.storage.zhennu_shuying_pending_type ==
"loseHp")
);
},
async content(event, trigger, player) {
delete player.storage.zhennu_shuying_pending;
delete player.storage.zhennu_shuying_pending_type;
player.logSkill("zhennu_shuying");
const phase = event.getParent("phase");
const phaseLoop = event.getParent("phaseLoop");
if (phase && phaseLoop) {
player.insertPhase("zhennu_shuying");
phaseLoop.player = player;
let activeChild = event;
let current = event.getParent();
while (current && current != phaseLoop) {
const pendingEvents = [
...(current.next || []),
...(current.after || []),
];
for (const pendingEvent of pendingEvents) {
if (pendingEvent == activeChild) continue;
pendingEvent.finish();
pendingEvent.untrigger(true);
}
current.finish();
current.untrigger(true);
if (current == phase) break;
activeChild = current;
current = current.getParent();
}
}
await player.draw(4);
if (!phase || !phaseLoop) {
player.insertPhase("zhennu_shuying", true);
}
},
},
},
intro: {
content(storage, player) {
+1 -1
View File
@@ -9,7 +9,7 @@ const characterSort = {
};
const characterSortTranslate = {
shuYing_pve_zhuoguiquxie: "捉鬼驱邪",
shuYing_pve_zhuoguiquxie: "驱鬼逐邪",
};
export { characterSort, characterSortTranslate };
+34 -1
View File
@@ -1,3 +1,36 @@
const voices = {};
const voices = {
"#aotang_shuying1": "品汤消愁,情怨断念。",
"#yunju_shuying1": "云雾缭绕,飓风意动。",
"#guimei_shuying1": "鬼魅生惑,迷乱心神。",
"#eli_shuying1": "豹贲之象,先锋之将。",
"#bingyi_shuying1": "疑难杂病,入天则安。",
"#suoxue_shuying1": "鸟穴虽小,亦有探索之地。",
"#guixi_shuying1": "吸灵唤魂,游鱼而走。",
"#anchao_shuying1": "暗潮涌动,感水知行。",
"#duzhen_shuying1": "毒针入骨,百药难医。",
"#mingchong_shuying1": "虫身虽小,威力无限。",
"#xingpan_shuying1": "你的罪过,只能用刑偿还。",
"#dianwei_shuying1": "阎罗立矩,斧钺杀威!",
"#xuanpan_shuying1": "阎罗殿上杀威棒,判惩凶宵降猢狲!",
"#xuanpan_shuying2": "本王要尔三更死,安能留汝到五更!",
"#xixing_shuying1": "勾魂夺命,震骨吸星!",
"#taiping_shuying1": "一见发财,天下太平!",
"#qiangzheng_shuying1": "敲骨吸髓,征财索命!",
"#mizui_shuying1": "凡间人世百般苦,唯有西方最极乐!",
"#heibaiwuchang_boss_shuying:die": "索命鬼,终被捉!",
"#xiaoshou_shuying1": "冥府鬼域,岂容尔等放肆!",
"#manji_shuying1": "阴兵蛮霸,力大欺理!",
"#shiyu_shuying1": "生财自有道,香烛狱中取!",
"#guizhao_shuying1": "凡夫俗子,安识诡域之计!",
"#niutoumamian_boss_shuying:die": "当牛做马数百载,只求为人一朝夕!",
"#zhoucha_shuying1": "红煞蔽日,凶兵择噬!",
"#yezhong_shuying1": "黑煞出冢,百鬼夜行!",
"#huiyun_shuying1": "附骨之厄,追魂夺魄!",
"#duane_shuying1": "幽冥之馈,尔等安敢弃之!",
"#riyeyoushen_boss_shuying:die": "山河倒悬,阴阳相逆。",
"#jizhou_shuying1": "鬼王凝咒,言出法随!",
"#danshi_shuying1": "猛鬼食人,择魂而噬!",
"#guiwang_boss_shuying:die": "阎罗殿里说枉死,忘川桥头叹奈何!",
};
export default voices;