11 KiB
11 KiB
天赋系统配置文档
概述
TalSet.ts 定义了一个灵活、可扩展的天赋系统,用于为游戏中的英雄定义特殊能力或特性。该系统支持四种主要的天赋类型,每种类型都有其独特的触发条件和效果机制。
核心概念
天赋系统的三个层次
- 触发条件 (Trigger) - 何时激发天赋效果
- 效果 (Effect) - 天赋产生的具体效果
- 堆叠规则 (Stack Rules) - 多次触发时的行为
四种天赋类型详解
1. 等级类天赋 (LEVEL_ATTR)
触发机制:当英雄达到指定等级时触发
使用场景:
- 角色成长里程碑
- 等级解锁的被动能力
- 固定间隔的属性增强
配置示例:
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- 受到伤害
配置示例:
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)
触发机制:当英雄累计受伤达到指定次数时触发
配置示例:
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)
触发机制:当特定条件达成时自动释放指定的技能
配置示例:
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" | 暴击率 |
扩展天赋系统
添加新的等级类天赋
/**
* 坚韧意志 - 全系列
* 每升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,
},
添加新的行为计数类天赋
/**
* 技能精通 - 法师系
* 每使用技能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,
},
添加新的受伤计数类天赋
/**
* 越战越强 - 战士系
* 每受伤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,
},
添加新的技能触发类天赋
/**
* 治疗链 - 辅助系
* 每使用技能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. 获取单个天赋配置
import { getTalConf } from "./TalSet";
const talConfig = getTalConf(7001);
console.log(talConfig?.name); // "剑意提升"
2. 获取指定类型的所有天赋
import { getTalConfByType, TalType } from "./TalSet";
// 获取所有等级类天赋
const levelTals = getTalConfByType(TalType.LEVEL_ATTR);
// 获取所有行为计数类天赋
const actionCountTals = getTalConfByType(TalType.ACTION_COUNT_ATTR);
3. 获取所有天赋ID
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 中添加天赋
export interface heroInfo {
uuid: number;
name: string;
// ... 其他属性 ...
talents?: number[]; // 天赋ID数组
}
// 示例:为刘邦添加天赋
5001: {
uuid: 5001,
name: "刘邦",
// ... 其他属性 ...
talents: [7001, 7202], // 剑意提升 + 防御强化
}
在游戏系统中使用天赋
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 提供了一个强大而灵活的天赋系统框架,支持多种触发条件和效果类型。通过合理的配置和组合,可以创建出丰富多样的英雄特性,为游戏增添深度和可玩性。