455 lines
11 KiB
Markdown
455 lines
11 KiB
Markdown
# 天赋系统配置文档
|
||
|
||
## 概述
|
||
|
||
`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` 提供了一个强大而灵活的天赋系统框架,支持多种触发条件和效果类型。通过合理的配置和组合,可以创建出丰富多样的英雄特性,为游戏增添深度和可玩性。
|