Files
heros/assets/script/game/common/config/TalSet.ts
2025-10-27 11:17:15 +08:00

435 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 天赋系统配置文件
* 支持定义英雄的特殊能力或特性
*/
// ========== 枚举定义 ==========
/**
* 天赋类型枚举
*/
export enum TalType {
LEVEL_ATTR = 1, // 基于等级的属性增长
ACTION_COUNT_ATTR = 2, // 基于行为计数的属性变化
DAMAGE_COUNT_ATTR = 3, // 基于受伤次数的属性提升
ACTION_TRIGGER_SKILL = 4, // 基于行为触发的技能释放
}
/**
* 属性类型枚举
*/
export enum TalAttrType {
HP = "hp", // 最大生命值
MP = "mp", // 最大魔力值
AP = "ap", // 攻击力
MAP = "map", // 魔法攻击力
DEF = "def", // 防御力
MDEF = "mdef", // 魔法防御力
SPEED = "speed", // 移动速度
DODGE = "dodge", // 闪避率
CRIT = "crit", // 暴击率
}
/**
* 行为类型枚举
*/
export enum TalActionType {
ATTACK = 1, // 攻击
SKILL = 2, // 使用技能
DAMAGED = 3, // 受伤
}
// ========== 触发条件接口 ==========
/**
* 触发条件基础接口
*/
export interface ITriggerCondition {
type: "level" | "actionCount" | "damageCount";
}
/**
* 等级触发条件
* 当英雄达到指定等级时触发
*/
export interface ILevelTrigger extends ITriggerCondition {
type: "level";
level: number; // 触发的等级阈值如5级触发一次
}
/**
* 行为计数触发条件
* 当特定行为累计达到指定次数时触发
*/
export interface IActionCountTrigger extends ITriggerCondition {
type: "actionCount";
actionType: TalActionType; // 要计数的行为类型
count: number; // 触发的计数阈值
resetPerLevel?: boolean; // 是否每升一级重置计数默认false不重置
}
/**
* 受伤次数触发条件
* 当英雄累计受伤达到指定次数时触发
*/
export interface IDamageCountTrigger extends ITriggerCondition {
type: "damageCount";
count: number; // 触发的受伤次数阈值
resetPerLevel?: boolean; // 是否每升一级重置计数默认false不重置
}
// ========== 效果接口 ==========
/**
* 效果基础接口
*/
export interface ITalEffect {
type: "attrModify" | "skillTrigger";
}
/**
* 属性修改效果
* 对指定属性进行修改:增加/减少固定值或百分比
*/
export interface IAttrModifyEffect extends ITalEffect {
type: "attrModify";
attr: TalAttrType; // 修改的属性名
value: number; // 修改值(正数增加,负数减少)
percent?: boolean; // 是否为百分比修改默认false为固定值
}
/**
* 技能触发效果
* 自动触发指定的技能
*/
export interface ISkillTriggerEffect extends ITalEffect {
type: "skillTrigger";
skillId: number; // 要触发的技能ID
}
// ========== 天赋配置接口 ==========
/**
* 天赋配置接口
* 定义一个完整的天赋效果
*/
export interface ItalConf {
talId: number; // 天赋ID
name: string; // 天赋名称
desc: string; // 天赋描述(说明触发条件和效果)
talType: TalType; // 天赋类型
trigger: ITriggerCondition; // 触发条件
effect: ITalEffect; // 效果
stackable?: boolean; // 是否可堆叠效果默认true
maxStack?: number; // 最大堆叠次数(不设置表示无限制)
}
// ========== 天赋配置表 ==========
/**
* 天赋配置表
* 存储所有天赋的配置信息
*
* 使用说明:
* 1. 等级类天赋:当英雄升级到指定等级时,每次都会触发效果
* 2. 行为计数类:当特定行为累计达到阈值时触发,支持是否重置计数
* 3. 受伤计数类:当受伤累计达到阈值时触发,支持是否重置计数
* 4. 技能触发类:当特定条件满足时自动触发指定技能
*/
export const talConf: Record<number, ItalConf> = {
// ========== 等级类天赋 ==========
/**
* 剑意提升 - 刘邦专属
* 每升5级攻击力增加10%
*/
7001: {
talId: 7001,
name: "剑意提升",
desc: "每升5级攻击力增加10%",
talType: TalType.LEVEL_ATTR,
trigger: {
type: "level",
level: 5,
} as ILevelTrigger,
effect: {
type: "attrModify",
attr: TalAttrType.AP,
value: 10,
percent: true,
} as IAttrModifyEffect,
stackable: true,
maxStack: 20, // 最多堆叠到100级
},
/**
* 法力修炼 - 通用
* 每升3级最大魔力值增加15点
*/
7002: {
talId: 7002,
name: "法力修炼",
desc: "每升3级最大魔力值增加15点",
talType: TalType.LEVEL_ATTR,
trigger: {
type: "level",
level: 3,
} as ILevelTrigger,
effect: {
type: "attrModify",
attr: TalAttrType.MP,
value: 15,
percent: false,
} as IAttrModifyEffect,
stackable: true,
maxStack: 33,
},
// ========== 行为计数类天赋 ==========
/**
* 强化闪避 - 敏捷英雄
* 每攻击10次闪避率增加1%
* 不按等级重置,持续累积
*/
7101: {
talId: 7101,
name: "强化闪避",
desc: "每攻击10次闪避率增加1%",
talType: TalType.ACTION_COUNT_ATTR,
trigger: {
type: "actionCount",
actionType: TalActionType.ATTACK,
count: 10,
resetPerLevel: false,
} as IActionCountTrigger,
effect: {
type: "attrModify",
attr: TalAttrType.DODGE,
value: 1,
percent: true,
} as IAttrModifyEffect,
stackable: true,
maxStack: 20,
},
/**
* 暴击强化 - 刺客
* 每攻击15次暴击率增加2%
*/
7102: {
talId: 7102,
name: "暴击强化",
desc: "每攻击15次暴击率增加2%",
talType: TalType.ACTION_COUNT_ATTR,
trigger: {
type: "actionCount",
actionType: TalActionType.ATTACK,
count: 15,
resetPerLevel: false,
} as IActionCountTrigger,
effect: {
type: "attrModify",
attr: TalAttrType.CRIT,
value: 2,
percent: true,
} as IAttrModifyEffect,
stackable: true,
maxStack: 15,
},
/**
* 连击精通 - 战士
* 每使用技能8次攻击力增加5%
*/
7103: {
talId: 7103,
name: "连击精通",
desc: "每使用技能8次攻击力增加5%",
talType: TalType.ACTION_COUNT_ATTR,
trigger: {
type: "actionCount",
actionType: TalActionType.SKILL,
count: 8,
resetPerLevel: false,
} as IActionCountTrigger,
effect: {
type: "attrModify",
attr: TalAttrType.AP,
value: 5,
percent: true,
} as IAttrModifyEffect,
stackable: true,
maxStack: 18,
},
// ========== 受伤计数类天赋 ==========
/**
* 坚甲护体 - 重装战士
* 每受伤10次最大生命值增加100点
*/
7201: {
talId: 7201,
name: "坚甲护体",
desc: "每受伤10次最大生命值增加100点",
talType: TalType.DAMAGE_COUNT_ATTR,
trigger: {
type: "damageCount",
count: 10,
resetPerLevel: false,
} as IDamageCountTrigger,
effect: {
type: "attrModify",
attr: TalAttrType.HP,
value: 100,
percent: false,
} as IAttrModifyEffect,
stackable: true,
maxStack: 15,
},
/**
* 防御强化 - 防守型
* 每受伤12次防御力增加3%
*/
7202: {
talId: 7202,
name: "防御强化",
desc: "每受伤12次防御力增加3%",
talType: TalType.DAMAGE_COUNT_ATTR,
trigger: {
type: "damageCount",
count: 12,
resetPerLevel: false,
} as IDamageCountTrigger,
effect: {
type: "attrModify",
attr: TalAttrType.DEF,
value: 3,
percent: true,
} as IAttrModifyEffect,
stackable: true,
maxStack: 20,
},
/**
* 魔抗修炼 - 法系英雄
* 每受伤15次魔法防御增加5点
*/
7203: {
talId: 7203,
name: "魔抗修炼",
desc: "每受伤15次魔法防御增加5点",
talType: TalType.DAMAGE_COUNT_ATTR,
trigger: {
type: "damageCount",
count: 15,
resetPerLevel: false,
} as IDamageCountTrigger,
effect: {
type: "attrModify",
attr: TalAttrType.MDEF,
value: 5,
percent: false,
} as IAttrModifyEffect,
stackable: true,
maxStack: 12,
},
// ========== 技能触发类天赋 ==========
/**
* 连击反击 - 刺客
* 每攻击15次自动触发反击技能(假设技能ID为6010)
*/
7301: {
talId: 7301,
name: "连击反击",
desc: "每攻击15次自动触发反击技能",
talType: TalType.ACTION_TRIGGER_SKILL,
trigger: {
type: "actionCount",
actionType: TalActionType.ATTACK,
count: 15,
resetPerLevel: true, // 每升级重置计数
} as IActionCountTrigger,
effect: {
type: "skillTrigger",
skillId: 6010,
} as ISkillTriggerEffect,
stackable: false, // 技能触发类天赋不堆叠
},
/**
* 受伤反制 - 防守型
* 每受伤8次自动触发反制护盾技能(假设技能ID为6011)
*/
7302: {
talId: 7302,
name: "受伤反制",
desc: "每受伤8次自动触发反制护盾技能",
talType: TalType.ACTION_TRIGGER_SKILL,
trigger: {
type: "damageCount",
count: 8,
resetPerLevel: true,
} as IDamageCountTrigger,
effect: {
type: "skillTrigger",
skillId: 6011,
} as ISkillTriggerEffect,
stackable: false,
},
/**
* 技能链接 - 法师
* 每使用技能5次自动触发增强魔法技能(假设技能ID为6012)
*/
7303: {
talId: 7303,
name: "技能链接",
desc: "每使用技能5次自动触发增强魔法技能",
talType: TalType.ACTION_TRIGGER_SKILL,
trigger: {
type: "actionCount",
actionType: TalActionType.SKILL,
count: 5,
resetPerLevel: true,
} as IActionCountTrigger,
effect: {
type: "skillTrigger",
skillId: 6012,
} as ISkillTriggerEffect,
stackable: false,
},
};
// ========== 工具函数 ==========
/**
* 根据天赋ID获取天赋配置
* @param talId 天赋ID
* @returns 天赋配置不存在返回undefined
*/
export const getTalConf = (talId: number): ItalConf | undefined => {
return talConf[talId];
};
/**
* 获取指定类型的所有天赋
* @param talType 天赋类型
* @returns 天赋配置数组
*/
export const getTalConfByType = (talType: TalType): ItalConf[] => {
return Object.values(talConf).filter(tal => tal.talType === talType);
};
/**
* 获取所有天赋ID列表
* @returns 天赋ID数组
*/
export const getAllTalIds = (): number[] => {
return Object.keys(talConf).map(Number);
};