feat(skill): add multi-cast override support for skills

1. 新增SkillOverrides的num字段配置,支持自定义技能额外施法次数
2. 修改施法次数计算逻辑,优先使用技能卡override配置的num值
3. 更新两张二技能卡和一张三技能卡的配置,实现双发/三发效果
This commit is contained in:
panFD
2026-08-02 17:37:03 +08:00
parent c8d15dbe00
commit da3d8015ab
3 changed files with 11 additions and 6 deletions

View File

@@ -47,7 +47,7 @@ const SkillCardData: SkillCardRaw[] = [
{ uuid: 8112, skill: 6012, card_lv: 1, icon: "Axe-FA_WP_Main_Axe_002_WoodGray", name: "飞斧·重", info: "造成攻击力150%的伤害25%击退", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, bck: 25 } },
// --- 枪矛系穿透多命中1次 ---
{ uuid: 8105, skill: 6005, card_lv: 1, icon: "Spear-FA_WP_Main_Spear_010_MetalBlue", name: "飞枪", info: "造成攻击力150%的伤害可贯穿2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, hit_count: 2 } },
{ uuid: 8106, skill: 6006, card_lv: 1, icon: "Stat_Attack_01", name: "突刺", info: "造成攻击力150%的伤害可贯穿2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, hit_count: 2 } },
{ uuid: 8106, skill: 6006, card_lv: 2, icon: "Stat_Attack_01", name: "突刺·双", info: "一次释放2发造成攻击力180%的伤害可贯穿2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 180, hit_count: 2, num: 1 } },
// --- 远程射击系:高暴击 ---
{ uuid: 8108, skill: 6008, card_lv: 1, icon: "Stat_RangedAttack", name: "射击", info: "造成攻击力150%的伤害30%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 30 } },
{ uuid: 8109, skill: 6009, card_lv: 1, icon: "Stat_RangedAttack", name: "蓝箭", info: "造成攻击力150%的伤害30%暴击", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, crt: 30 } },
@@ -60,11 +60,11 @@ const SkillCardData: SkillCardRaw[] = [
{ uuid: 8116, skill: 6016, card_lv: 1, icon: "Sub_Item-FA_WP_Sub_Potion_001_Red", name: "红药瓶", info: "造成攻击力150%的伤害25%冰冻", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150, frz: 25 } },
// ==================== card_lv 2 · 中阶范围ap:200群体附加 ====================
{ uuid: 8201, skill: 6101, card_lv: 2, icon: "Stat_FireDamage", name: "火球", info: "造成攻击力200%的伤害30%暴击可命中2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 200, crt: 30 } },
{ uuid: 8201, skill: 6101, card_lv: 2, icon: "Stat_FireDamage", name: "火球·双", info: "一次释放2发造成攻击力200%的伤害30%暴击可命中2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 200, crt: 30, num: 1 } },
{ uuid: 8202, skill: 6102, card_lv: 2, icon: "Stat_Mana", name: "飓风", info: "造成攻击力200%的伤害30%击晕可命中2个目标", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 200, stun: 30 } },
// ==================== card_lv 3 · 高阶范围ap:250群体附加 ====================
{ uuid: 8301, skill: 6201, card_lv: 3, icon: "Stat_SplashDamage", name: "陨石", info: "召唤陨石造成攻击力250%的范围伤害40%击晕", is_inst: false, t_times: 4, t_inv: 4, trigger_type: CardTriggerType.Interval, overrides: { ap: 250, stun: 40 } },
{ uuid: 8301, skill: 6201, card_lv: 3, icon: "Stat_SplashDamage", name: "陨石", info: "一次释放3发每发造成攻击力250%的范围伤害40%击晕", is_inst: false, t_times: 4, t_inv: 4, trigger_type: CardTriggerType.Interval, overrides: { ap: 250, stun: 40, num: 2 } },
];
/**

View File

@@ -178,6 +178,8 @@ export interface SkillOverrides {
buff_duration?: number;
call_hero?: number;
is_accel?: boolean;
/** 单次施法额外释放次数0=单次1=双发2=三发;弹道由 resolveRepeatCastTargetPos 分散上/中/下三路) */
num?: number;
}
/**

View File

@@ -91,7 +91,8 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
}
const sUp = SkillUpList[s_uuid] ? SkillUpList[s_uuid] : SkillUpList[1001];
const cNum = Math.min(2, Math.max(0, Math.floor(sUp.num ?? 0)));
// 优先读 overrides.num技能卡差异化多发兜底 SkillUpList.num限制在 [0, 2]
const cNum = Math.min(2, Math.max(0, Math.floor(overrides?.num ?? sUp.num ?? 0)));
const castTimes = 1 + cNum;
// 构造一个模拟的 HeroAttrsComp 用于数值计算,只包含基础卡牌伤害计算所需的属性
@@ -274,7 +275,8 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
}
const sUp = SkillUpList[s_uuid] ? SkillUpList[s_uuid] : SkillUpList[1001];
const cNum = Math.min(2, Math.max(0, Math.floor(sUp.num ?? 0)));
// 优先读 overrides.num技能卡差异化多发兜底 SkillUpList.num限制在 [0, 2]
const cNum = Math.min(2, Math.max(0, Math.floor(overrides?.num ?? sUp.num ?? 0)));
const castTimes = 1 + cNum;
let val = ""
if (castTimes > 1) {
@@ -344,7 +346,8 @@ export class SCastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
const overrides = castPlan.overrides;
let config = SkillSet[s_uuid];
const sUp = SkillUpList[s_uuid] ? SkillUpList[s_uuid] : SkillUpList[1001];
const cNum = Math.min(2, Math.max(0, Math.floor(sUp.num ?? 0)));
// 优先读 overrides.num技能卡差异化多发兜底 SkillUpList.num限制在 [0, 2]
const cNum = Math.min(2, Math.max(0, Math.floor(overrides?.num ?? sUp.num ?? 0)));
if (!config) return;
config = mergeSkillParams(config, overrides);