添加 天赋设置

This commit is contained in:
panw
2025-10-27 11:17:15 +08:00
parent c05e26b101
commit 16fcaeb3f3
4 changed files with 1815 additions and 0 deletions

View File

@@ -0,0 +1,454 @@
# 天赋系统配置文档
## 概述
`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 → 继续触发...
- 最高到等级 10020×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` 提供了一个强大而灵活的天赋系统框架,支持多种触发条件和效果类型。通过合理的配置和组合,可以创建出丰富多样的英雄特性,为游戏增添深度和可玩性。