refactor(card-config): 重构技能卡配置逻辑
1. 移除wave过滤逻辑,所有技能卡均可直接抽取 2. 改为显式配置card_lv,不再通过wave推导档位 3. 新增t_times字段配置触发次数,不再默认永久生效 4. 移除对SKILL_CARD_WAVES的依赖
This commit is contained in:
@@ -6,53 +6,49 @@
|
|||||||
* 维护所有技能卡(CardType.Skill)的原始数据,并构建为标准 CardConfig[]。
|
* 维护所有技能卡(CardType.Skill)的原始数据,并构建为标准 CardConfig[]。
|
||||||
*
|
*
|
||||||
* 设计:
|
* 设计:
|
||||||
* - 技能卡不再按 wave 过滤,所有技能卡均可被抽取(长期存在)。
|
* - 技能卡不再按 wave 过滤,所有技能卡均可被抽取。
|
||||||
* - 保留 wave / card_lv 字段仅用于 UI 排序与档位展示,不参与抽卡过滤。
|
* - 所有技能卡均按次数触发(t_times),不再永久存在。
|
||||||
|
* - card_lv 直接显式配置,不再依赖 wave 推导。
|
||||||
*
|
*
|
||||||
* 依赖:
|
* 依赖:
|
||||||
* - CardSet —— CardConfig / CardType / CKind / CardLV / CardTriggerType
|
* - CardSet —— CardConfig / CardType / CKind / CardLV / CardTriggerType
|
||||||
* - GameSet —— SKILL_CARD_WAVES(档位定义)
|
|
||||||
* - SkillSet —— SkillOverrides
|
* - SkillSet —— SkillOverrides
|
||||||
*/
|
*/
|
||||||
import { CardConfig, CardType, CardLV, CKind, CardTriggerType } from "./CardSet";
|
import { CardConfig, CardType, CardLV, CKind, CardTriggerType } from "./CardSet";
|
||||||
import { SKILL_CARD_WAVES } from "./GameSet";
|
|
||||||
import { SkillOverrides } from "./SkillSet";
|
import { SkillOverrides } from "./SkillSet";
|
||||||
|
|
||||||
// wave→card_lv 映射由 SKILL_CARD_WAVES 索引+1 自动生成(wave 1→lv1, wave 5→lv2, wave 8→lv3)
|
|
||||||
const waveToCardLv: Record<number, number> = {};
|
|
||||||
SKILL_CARD_WAVES.forEach((w, i) => { waveToCardLv[w] = i + 1; });
|
|
||||||
|
|
||||||
/** 技能卡原始数据(平铺字段,构建后转为 CardConfig) */
|
/** 技能卡原始数据(平铺字段,构建后转为 CardConfig) */
|
||||||
interface SkillCardRaw {
|
interface SkillCardRaw {
|
||||||
uuid: number;
|
uuid: number;
|
||||||
skill: number;
|
skill: number;
|
||||||
wave: number;
|
card_lv: number;
|
||||||
name: string;
|
name: string;
|
||||||
info: string;
|
info: string;
|
||||||
is_inst: boolean;
|
is_inst: boolean;
|
||||||
|
t_times?: number; // 触发次数(未设置时按 is_inst 取默认值:即时=1,定时=3)
|
||||||
t_inv?: number;
|
t_inv?: number;
|
||||||
keep_waves?: number;
|
keep_waves?: number; // 维持波次数(默认 0=仅本波次)
|
||||||
trigger_type: CardTriggerType;
|
trigger_type: CardTriggerType;
|
||||||
overrides?: SkillOverrides;
|
overrides?: SkillOverrides;
|
||||||
}
|
}
|
||||||
|
|
||||||
const SkillCardData: SkillCardRaw[] = [
|
const SkillCardData: SkillCardRaw[] = [
|
||||||
// ==================== wave 5 档(强度 ×2) ====================
|
// ==================== card_lv 2 档(强度 ×2) ====================
|
||||||
// --- 范围攻击卡(ap 递增,间隔缩短) ---
|
// --- 范围攻击卡(ap 递增,间隔缩短) ---
|
||||||
{ uuid: 8261, skill: 6201, wave: SKILL_CARD_WAVES[1], name: "雷墙+", info: "召唤雷墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
{ uuid: 8261, skill: 6201, card_lv: 2, name: "雷墙+", info: "召唤雷墙阻挡敌人,有概率击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
||||||
{ uuid: 8262, skill: 6202, wave: SKILL_CARD_WAVES[1], name: "火墙+", info: "召唤火墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
{ uuid: 8262, skill: 6202, card_lv: 2, name: "火墙+", info: "召唤火墙阻挡敌人,有概率击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
||||||
{ uuid: 8263, skill: 6203, wave: SKILL_CARD_WAVES[1], name: "飓风+", info: "召唤飓风攻击敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
{ uuid: 8263, skill: 6203, card_lv: 2, name: "飓风+", info: "召唤飓风攻击敌人,有概率击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
||||||
{ uuid: 8264, skill: 6204, wave: SKILL_CARD_WAVES[1], name: "水墙+", info: "召唤水墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
{ uuid: 8264, skill: 6204, card_lv: 2, name: "水墙+", info: "召唤水墙阻挡敌人,有概率击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
||||||
{ uuid: 8265, skill: 6205, wave: SKILL_CARD_WAVES[1], name: "风墙+", info: "召唤风墙困住敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
{ uuid: 8265, skill: 6205, card_lv: 2, name: "风墙+", info: "召唤风墙困住敌人,有概率击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
||||||
{ uuid: 8266, skill: 6206, wave: SKILL_CARD_WAVES[1], name: "陨石术+", info: "召唤陨石范围攻击敌人,有概率击晕", is_inst: false, t_inv: 5, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
{ uuid: 8266, skill: 6206, card_lv: 2, name: "陨石术+", info: "召唤陨石范围攻击敌人,有概率击晕", is_inst: false, t_times: 3, t_inv: 5, trigger_type: CardTriggerType.Interval, overrides: { ap: 150 } },
|
||||||
|
|
||||||
// ==================== wave 8 档(强度 ×3) ====================
|
// ==================== card_lv 3 档(强度 ×3) ====================
|
||||||
{ uuid: 8361, skill: 6201, wave: SKILL_CARD_WAVES[2], name: "雷墙++", info: "召唤雷墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
{ uuid: 8361, skill: 6201, card_lv: 3, name: "雷墙++", info: "召唤雷墙阻挡敌人,有概率击晕", is_inst: false, t_times: 4, t_inv: 4, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
||||||
{ uuid: 8362, skill: 6202, wave: SKILL_CARD_WAVES[2], name: "火墙++", info: "召唤火墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
{ uuid: 8362, skill: 6202, card_lv: 3, name: "火墙++", info: "召唤火墙阻挡敌人,有概率击晕", is_inst: false, t_times: 4, t_inv: 4, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
||||||
{ uuid: 8363, skill: 6203, wave: SKILL_CARD_WAVES[2], name: "飓风++", info: "召唤飓风攻击敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
{ uuid: 8363, skill: 6203, card_lv: 3, name: "飓风++", info: "召唤飓风攻击敌人,有概率击晕", is_inst: false, t_times: 4, t_inv: 4, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
||||||
{ uuid: 8364, skill: 6204, wave: SKILL_CARD_WAVES[2], name: "水墙++", info: "召唤水墙阻挡敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
{ uuid: 8364, skill: 6204, card_lv: 3, name: "水墙++", info: "召唤水墙阻挡敌人,有概率击晕", is_inst: false, t_times: 4, t_inv: 4, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
||||||
{ uuid: 8365, skill: 6205, wave: SKILL_CARD_WAVES[2], name: "风墙++", info: "召唤风墙困住敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
{ uuid: 8365, skill: 6205, card_lv: 3, name: "风墙++", info: "召唤风墙困住敌人,有概率击晕", is_inst: false, t_times: 4, t_inv: 4, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
||||||
{ uuid: 8366, skill: 6206, wave: SKILL_CARD_WAVES[2], name: "陨石术++", info: "召唤陨石范围攻击敌人,有概率击晕", is_inst: false, t_inv: 4, keep_waves: -1, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
{ uuid: 8366, skill: 6206, card_lv: 3, name: "陨石术++", info: "召唤陨石范围攻击敌人,有概率击晕", is_inst: false, t_times: 4, t_inv: 4, trigger_type: CardTriggerType.Interval, overrides: { ap: 250 } },
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,7 +56,8 @@ const SkillCardData: SkillCardRaw[] = [
|
|||||||
* 不再按 wave 过滤,所有技能卡均可被抽取。
|
* 不再按 wave 过滤,所有技能卡均可被抽取。
|
||||||
*/
|
*/
|
||||||
export const SkillCardList: CardConfig[] = SkillCardData.map(data => {
|
export const SkillCardList: CardConfig[] = SkillCardData.map(data => {
|
||||||
const cardLv = waveToCardLv[data.wave] ?? 1;
|
// 触发次数:显式配置优先;未配置时即时=1,定时=3
|
||||||
|
const defaultTimes = data.is_inst ? 1 : 3;
|
||||||
return {
|
return {
|
||||||
uuid: data.uuid,
|
uuid: data.uuid,
|
||||||
skill: data.skill || undefined,
|
skill: data.skill || undefined,
|
||||||
@@ -68,15 +65,14 @@ export const SkillCardList: CardConfig[] = SkillCardData.map(data => {
|
|||||||
cost: 0,
|
cost: 0,
|
||||||
weight: 10,
|
weight: 10,
|
||||||
pool_lv: CardLV.LV1,
|
pool_lv: CardLV.LV1,
|
||||||
wave: data.wave,
|
|
||||||
kind: CKind.Skill,
|
kind: CKind.Skill,
|
||||||
card_lv: cardLv,
|
card_lv: data.card_lv,
|
||||||
name: data.name,
|
name: data.name,
|
||||||
info: data.info,
|
info: data.info,
|
||||||
is_inst: data.is_inst,
|
is_inst: data.is_inst,
|
||||||
t_times: data.is_inst ? 1 : 999,
|
t_times: data.t_times ?? defaultTimes,
|
||||||
t_inv: data.t_inv || 0,
|
t_inv: data.t_inv || 0,
|
||||||
keep_waves: data.keep_waves,
|
keep_waves: data.keep_waves ?? 0,
|
||||||
overrides: data.overrides,
|
overrides: data.overrides,
|
||||||
trigger_type: data.trigger_type,
|
trigger_type: data.trigger_type,
|
||||||
} as CardConfig;
|
} as CardConfig;
|
||||||
|
|||||||
Reference in New Issue
Block a user