# 天赋系统配置文档 ## 概述 `TalSet.ts` 定义了一个灵活、可扩展的天赋系统,用于为游戏中的英雄定义特殊能力或特性。该系统支持四种主要的天赋类型,每种类型都有其独特的触发条件和效果机制。 ## 核心概念 ### 天赋系统的三个层次 1. **触发条件 (Trigger)** - 何时激发天赋效果 2. **效果 (Effect)** - 天赋产生的具体效果 3. **堆叠规则 (Stack Rules)** - 多次触发时的行为 --- ## 四种天赋类型详解 ### 1. 等级类天赋 (LEVEL_ATTR) **触发机制**:当英雄达到指定等级时触发 **使用场景**: - 角色成长里程碑 - 等级解锁的被动能力 - 固定间隔的属性增强 **配置示例**: ```typescript 7001: { talId: 7001, name: "剑意提升", desc: "每升5级,攻击力增加10%", talType: TalType.LEVEL_ATTR, trigger: { type: "level", level: 5, // 触发间隔为5级 } as ILevelTrigger, effect: { type: "attrModify", attr: TalAttrType.AP, value: 10, percent: true, // 百分比增长 } as IAttrModifyEffect, stackable: true, maxStack: 20, // 最多触发20次(到100级) } ``` **工作流程**: - 等级 5 → 触发,攻击力 +10% - 等级 10 → 再次触发,攻击力 +10%(可堆叠) - 等级 15 → 继续触发... - 最高到等级 100(20×5) --- ### 2. 行为计数类天赋 (ACTION_COUNT_ATTR) **触发机制**:当特定行为累计达到指定次数时触发 **支持的行为类型**: - `ATTACK` - 攻击动作 - `SKILL` - 技能释放 - `DAMAGED` - 受到伤害 **配置示例**: ```typescript 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, } ``` **工作流程**(假设 resetPerLevel: false): - 攻击 10 次 → 闪避率 +1% - 攻击 20 次 → 闪避率 +1%(累计 +2%) - 攻击 30 次 → 闪避率 +1%(累计 +3%) - 持续堆叠到 maxStack **resetPerLevel 选项说明**: - `true`:每升一级重置计数器 - 适合每个等级独立计算的天赋 - 示例:每升级后重新开始计数 - `false`:计数持续累积,不因升级而重置 - 适合全程累积的天赋 - 示例:整个游戏过程中累积攻击次数 --- ### 3. 受伤计数类天赋 (DAMAGE_COUNT_ATTR) **触发机制**:当英雄累计受伤达到指定次数时触发 **配置示例**: ```typescript 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, } ``` **工作流程**: - 受伤 10 次 → 生命值 +100 - 受伤 20 次 → 生命值 +100 - 受伤 30 次 → 生命值 +100 - ...最多到 15 堆叠(150 次受伤) **应用场景**: - 坦克英雄通过受伤变强 - 防御系统的成长机制 - 反伤/反制类的天赋基础 --- ### 4. 技能触发类天赋 (ACTION_TRIGGER_SKILL) **触发机制**:当特定条件达成时自动释放指定的技能 **配置示例**: ```typescript 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, // 反击技能的ID } as ISkillTriggerEffect, stackable: false, // 技能触发不堆叠 } ``` **工作流程**: - 升级 1:每攻击 15 次 → 自动释放技能 6010 - 升级 2:计数重置,再每攻击 15 次 → 释放技能 6010 - 持续每个等级都能触发 **关键特性**: - `stackable: false` - 通常技能触发不堆叠(防止过于强大) - 结合 `resetPerLevel` 控制触发频率 - 可用于创建连锁反应和特殊战斗机制 --- ## 属性类型速查表 | 属性类型 | 枚举值 | 说明 | |---------|-------|------| | HP | "hp" | 最大生命值 | | MP | "mp" | 最大魔力值 | | AP | "ap" | 攻击力 | | MAP | "map" | 魔法攻击力 | | DEF | "def" | 防御力 | | MDEF | "mdef" | 魔法防御力 | | SPEED | "speed" | 移动速度 | | DODGE | "dodge" | 闪避率 | | CRIT | "crit" | 暴击率 | --- ## 扩展天赋系统 ### 添加新的等级类天赋 ```typescript /** * 坚韧意志 - 全系列 * 每升4级,防御力增加5% */ 7003: { talId: 7003, name: "坚韧意志", desc: "每升4级,防御力增加5%", talType: TalType.LEVEL_ATTR, trigger: { type: "level", level: 4, } as ILevelTrigger, effect: { type: "attrModify", attr: TalAttrType.DEF, value: 5, percent: true, } as IAttrModifyEffect, stackable: true, maxStack: 25, }, ``` ### 添加新的行为计数类天赋 ```typescript /** * 技能精通 - 法师系 * 每使用技能12次,魔法攻击增加8% */ 7104: { talId: 7104, name: "技能精通", desc: "每使用技能12次,魔法攻击增加8%", talType: TalType.ACTION_COUNT_ATTR, trigger: { type: "actionCount", actionType: TalActionType.SKILL, count: 12, resetPerLevel: false, } as IActionCountTrigger, effect: { type: "attrModify", attr: TalAttrType.MAP, value: 8, percent: true, } as IAttrModifyEffect, stackable: true, maxStack: 12, }, ``` ### 添加新的受伤计数类天赋 ```typescript /** * 越战越强 - 战士系 * 每受伤8次,攻击力增加4% */ 7204: { talId: 7204, name: "越战越强", desc: "每受伤8次,攻击力增加4%", talType: TalType.DAMAGE_COUNT_ATTR, trigger: { type: "damageCount", count: 8, resetPerLevel: false, } as IDamageCountTrigger, effect: { type: "attrModify", attr: TalAttrType.AP, value: 4, percent: true, } as IAttrModifyEffect, stackable: true, maxStack: 18, }, ``` ### 添加新的技能触发类天赋 ```typescript /** * 治疗链 - 辅助系 * 每使用技能6次,自动释放治疗技能 */ 7304: { talId: 7304, name: "治疗链", desc: "每使用技能6次,自动释放治疗技能", talType: TalType.ACTION_TRIGGER_SKILL, trigger: { type: "actionCount", actionType: TalActionType.SKILL, count: 6, resetPerLevel: true, } as IActionCountTrigger, effect: { type: "skillTrigger", skillId: 6020, // 治疗技能ID } as ISkillTriggerEffect, stackable: false, }, ``` --- ## 使用工具函数 ### 1. 获取单个天赋配置 ```typescript import { getTalConf } from "./TalSet"; const talConfig = getTalConf(7001); console.log(talConfig?.name); // "剑意提升" ``` ### 2. 获取指定类型的所有天赋 ```typescript import { getTalConfByType, TalType } from "./TalSet"; // 获取所有等级类天赋 const levelTals = getTalConfByType(TalType.LEVEL_ATTR); // 获取所有行为计数类天赋 const actionCountTals = getTalConfByType(TalType.ACTION_COUNT_ATTR); ``` ### 3. 获取所有天赋ID ```typescript import { getAllTalIds } from "./TalSet"; const allIds = getAllTalIds(); console.log(allIds); // [7001, 7002, 7101, 7102, ...] ``` --- ## 最佳实践 ### 1. ID 命名规范 采用 **XYZZ** 的格式: - **X** - 天赋类型(7表示天赋) - **Y** - 具体分类(0=等级,1=行为计数,2=受伤计数,3=技能触发) - **ZZ** - 序列号(01-99) 示例: - `7001` - 第一个等级类天赋 - `7101` - 第一个行为计数类天赋 - `7201` - 第一个受伤计数类天赋 - `7301` - 第一个技能触发类天赋 ### 2. 堆叠配置原则 - **属性增强类天赋** - 通常可堆叠,设置合理的 maxStack - **技能触发类天赋** - 通常不堆叠(stackable: false) - **百分比效果** - 堆叠次数要控制,防止无限膨胀 ### 3. 触发计数的重置策略 - **持续累积** - resetPerLevel: false - 用于全程成长的天赋 - 例如:攻击次数计数 - **按等级重置** - resetPerLevel: true - 用于每个等级独立计算的天赋 - 例如:技能连锁、特殊触发 ### 4. 数值平衡 建议遵循以下原则: - 固定值增长 - 根据角色等级调整数值 - 百分比增长 - 通常 1-15% 范围较合理 - 触发频率 - 越高频越小效果,越低频越大效果 --- ## 与英雄系统的集成 ### 在 heroSet.ts 中添加天赋 ```typescript export interface heroInfo { uuid: number; name: string; // ... 其他属性 ... talents?: number[]; // 天赋ID数组 } // 示例:为刘邦添加天赋 5001: { uuid: 5001, name: "刘邦", // ... 其他属性 ... talents: [7001, 7202], // 剑意提升 + 防御强化 } ``` ### 在游戏系统中使用天赋 ```typescript import { getTalConf, TalType } from "./TalSet"; // 为英雄应用天赋 function applyHeroTalents(heroId: number, heroTalents: number[]) { heroTalents.forEach(talId => { const talConfig = getTalConf(talId); if (talConfig) { // 根据天赋配置应用效果 console.log(`应用天赋: ${talConfig.name}`); } }); } ``` --- ## 常见问题 ### Q: 如何创建一个多条件触发的天赋? **A**: 当前系统每个天赋只支持一种触发条件。如需复杂条件,建议在实现层面组合多个简单天赋。 ### Q: 堆叠次数达到上限后会发生什么? **A**: 这由实现层面决定。建议: - 停止触发 - 显示通知提示 - 或记录日志便于调试 ### Q: 如何实现基于时间的天赋触发? **A**: 当前系统不直接支持时间触发。建议: - 创建一个新的触发条件类型 `ITimeTrigger` - 在系统中添加相应的时间检查逻辑 ### Q: 如何让天赋在战斗中实时反应? **A**: 天赋的实际效果应该在战斗系统中实现,配置只是定义。建议: - 在战斗系统中监听相关事件 - 检查英雄的天赋配置 - 根据配置应用对应的效果 --- ## 总结 `TalSet.ts` 提供了一个强大而灵活的天赋系统框架,支持多种触发条件和效果类型。通过合理的配置和组合,可以创建出丰富多样的英雄特性,为游戏增添深度和可玩性。