Files
heros/.qoder/repowiki/zh/content/技能配置表结构.md
2025-10-30 16:49:19 +08:00

524 lines
16 KiB
Markdown
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.

# 技能配置表结构
<cite>
**本文档中引用的文件**
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts)
- [SkillEnt.ts](file://assets/script/game/skill/SkillEnt.ts)
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts)
- [AtkConCom.ts](file://assets/script/game/skill/AtkConCom.ts)
- [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts)
- [BuffComp.ts](file://assets/script/game/hero/BuffComp.ts)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构概览](#项目结构概览)
3. [核心接口定义](#核心接口定义)
4. [枚举类型详解](#枚举类型详解)
5. [技能配置实例分析](#技能配置实例分析)
6. [技能系统架构](#技能系统架构)
7. [战斗系统集成](#战斗系统集成)
8. [新增技能配置流程](#新增技能配置流程)
9. [验证方法与最佳实践](#验证方法与最佳实践)
10. [总结](#总结)
## 简介
SkillSet.ts是游戏技能系统的核心配置文件定义了完整的技能配置表结构和相关的枚举类型。该系统采用ECS架构模式支持多种技能类型、目标群体、伤害类型和效果配置为游戏战斗系统提供了灵活而强大的技能管理框架。
## 项目结构概览
技能系统在项目中的组织结构如下:
```mermaid
graph TB
subgraph "配置层"
SkillSet["SkillSet.ts<br/>技能配置表"]
HeroAttrs["HeroAttrs.ts<br/>属性系统"]
end
subgraph "技能实体层"
SkillEnt["SkillEnt.ts<br/>技能实体"]
SkillViewCom["SkillViewCom.ts<br/>技能视图组件"]
end
subgraph "控制层"
SkillConComp["SkillConComp.ts<br/>技能控制器"]
AtkConCom["AtkConCom.ts<br/>攻击控制器"]
end
subgraph "战斗层"
HeroViewComp["HeroViewComp.ts<br/>英雄视图组件"]
BuffComp["BuffComp.ts<br/>Buff组件"]
end
SkillSet --> SkillEnt
SkillEnt --> SkillViewCom
SkillConComp --> SkillEnt
AtkConCom --> SkillEnt
HeroViewComp --> BuffComp
SkillSet --> HeroViewComp
```
**图表来源**
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts#L1-L148)
- [SkillEnt.ts](file://assets/script/game/skill/SkillEnt.ts#L1-L78)
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts#L1-L177)
## 核心接口定义
### SkillConfig接口结构
SkillConfig是技能配置的核心接口包含了技能的所有属性定义
```mermaid
classDiagram
class SkillConfig {
+number uuid
+string name
+string sp_name
+AtkedName AtkedName
+string path
+TGroup TGroup
+SType SType
+string act
+DTType DTType
+DType DType
+number ap
+number cd
+number t_num
+number hit_num
+number hit
+number hitcd
+number speed
+number cost
+number with
+BuffConf[] buffs
+NeAttrsConf[] neAttrs
+string info
+number hero
}
class BuffConf {
+Attrs buff
+BType BType
+number value
+number time
+number chance
}
class NeAttrsConf {
+NeAttrs neAttrs
+number value
+number time
}
SkillConfig --> BuffConf : "包含多个"
SkillConfig --> NeAttrsConf : "包含多个"
```
**图表来源**
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts#L127-L148)
### 字段详细说明
| 字段名 | 类型 | 描述 | 默认值 |
|--------|------|------|--------|
| uuid | number | 技能唯一标识符 | - |
| name | string | 技能显示名称 | - |
| sp_name | string | 特效资源名称 | - |
| AtkedName | AtkedName | 受伤动画类型 | - |
| path | string | 图片资源路径 | - |
| TGroup | TGroup | 目标群体类型 | - |
| SType | SType | 技能效果类型 | - |
| act | string | 角色执行动画 | - |
| DTType | DTType | 伤害类型 | - |
| DType | DType | 伤害属性类型 | - |
| ap | number | 攻击力百分比 | - |
| cd | number | 冷却时间(秒) | - |
| t_num | number | 目标数量 | - |
| hit_num | number | 范围攻击伤害敌人数量 | - |
| hit | number | 穿刺次数 | - |
| hitcd | number | 持续伤害间隔 | - |
| speed | number | 移动速度 | - |
| cost | number | 资源消耗 | - |
| with | number | 暂时无用 | - |
| buffs | BuffConf[] | 附加效果列表 | [] |
| neAttrs | NeAttrsConf[] | 负面状态列表 | [] |
| info | string | 技能描述信息 | - |
| hero | number | 关联英雄ID | - |
**章节来源**
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts#L127-L148)
## 枚举类型详解
### TGroup - 目标群体枚举
目标群体决定了技能的作用范围和目标选择策略:
```mermaid
graph LR
TGroup --> Self["Self<br/>自身"]
TGroup --> Ally["Ally<br/>所有友方"]
TGroup --> Team["Team<br/>所有友方"]
TGroup --> Enemy["Enemy<br/>敌方单位"]
TGroup --> All["All<br/>所有单位"]
Self --> SelfDesc["对自己生效<br/>如:治疗技能"]
Ally --> AllyDesc["对所有友方单位<br/>如:增益技能"]
Team --> TeamDesc["同Ally历史遗留"]
Enemy --> EnemyDesc["对敌方单位<br/>如:攻击技能"]
All --> AllDesc["对所有单位<br/>如:全地图技能"]
```
**图表来源**
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts#L2-L7)
### SType - 技能类型枚举
技能类型定义了技能的主要效果分类:
```mermaid
graph TB
SType --> Damage["damage<br/>伤害型"]
SType --> Heal["heal<br/>治疗型"]
SType --> Shield["shield<br/>护盾型"]
SType --> AtkSpeed["atk_speed<br/>攻速型"]
SType --> PowerUp["power_up<br/>力量型"]
SType --> ApUp["ap_up<br/>攻击型"]
SType --> DodUp["dod_up<br/>闪避型"]
SType --> CritUp["crit_up<br/>暴击型"]
SType --> CritDmgUp["crit_dmg_up<br/>暴击伤害型"]
SType --> WfunyUp["wfuny_up<br/>风怒型"]
SType --> Zhaohuan["zhaohuan<br/>召唤型"]
SType --> Buff["buff<br/>增益型"]
Damage --> DamageDesc["造成物理/魔法伤害"]
Heal --> HealDesc["恢复生命值"]
Shield --> ShieldDesc["生成护盾保护"]
AtkSpeed --> AtkSpeedDesc["提升攻击速度"]
PowerUp --> PowerUpDesc["提升基础属性"]
ApUp --> ApUpDesc["提升攻击力"]
DodUp --> DodUpDesc["提升闪避率"]
CritUp --> CritUpDesc["提升暴击率"]
CritDmgUp --> CritDmgUpDesc["提升暴击伤害"]
WfunyUp --> WfunyUpDesc["提升风怒效果"]
Zhaohuan --> ZhaohuanDesc["召唤单位"]
Buff --> BuffDesc["提供各种增益效果"]
```
**图表来源**
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts#L34-L43)
### DType - 伤害类型枚举
伤害类型决定了技能的属性分类:
| 枚举值 | 数值 | 描述 | 应用场景 |
|--------|------|------|----------|
| ATK | 0 | 物理伤害 | 物理攻击技能 |
| MAGE | 1 | 魔法伤害 | 法术攻击技能 |
### AtkedName - 受伤动画枚举
定义了不同类型的受伤动画效果:
| 枚举值 | 动画名称 | 效果描述 |
|--------|----------|----------|
| atked | atked | 普通受伤动画 |
| ice | atked_ice | 冰冻受伤动画 |
| fire | atked_fire | 火焰受伤动画 |
| wind | atked_wind | 风元素受伤动画 |
| crit | atked_crit | 暴击受伤动画 |
**章节来源**
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts#L45-L52)
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts#L106-L110)
## 技能配置实例分析
### 代码示例6001 - 挥击
挥击是最基础的物理攻击技能,展示了技能配置的基本要素:
**配置特点:**
- **目标群体**: Enemy敌方单位
- **技能类型**: damage伤害型
- **伤害属性**: ATK物理伤害
- **攻击力百分比**: 100%
- **冷却时间**: 1秒
- **资源消耗**: 0
- **特效名称**: atk_s1
**应用场景**
- 单体物理攻击
- 最基础的普攻技能
- 无附加效果
### 代码示例6005 - 火球术
火球术是一个典型的魔法攻击技能,具有更复杂的配置:
**配置特点:**
- **目标群体**: Enemy敌方单位
- **技能类型**: damage伤害型
- **伤害属性**: MAGE魔法伤害
- **攻击力百分比**: 100%
- **冷却时间**: 5秒
- **资源消耗**: 20
- **特效名称**: atk_fires
- **特殊效果**: 有一定几率施加灼烧状态
**应用场景**
- 单体魔法攻击
- 高资源消耗的强力技能
- 具有附加状态效果
**章节来源**
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts#L130-L148)
## 技能系统架构
### 系统架构图
```mermaid
sequenceDiagram
participant Player as 玩家输入
participant SkillCon as 技能控制器
participant SkillEnt as 技能实体
participant SkillView as 技能视图
participant HeroView as 英雄视图
participant BuffSys as Buff系统
Player->>SkillCon : 发起技能请求
SkillCon->>SkillCon : 检查冷却时间
SkillCon->>SkillCon : 验证资源消耗
SkillCon->>SkillEnt : 创建技能实体
SkillEnt->>SkillView : 加载特效资源
SkillView->>HeroView : 播放技能动画
HeroView->>HeroView : 计算伤害效果
HeroView->>BuffSys : 应用附加效果
BuffSys-->>HeroView : 更新属性状态
HeroView-->>Player : 显示技能效果
```
**图表来源**
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts#L40-L80)
- [SkillEnt.ts](file://assets/script/game/skill/SkillEnt.ts#L15-L70)
### 技能执行流程
```mermaid
flowchart TD
Start([技能请求开始]) --> CheckCD["检查冷却时间"]
CheckCD --> CDReady{"冷却完成?"}
CDReady --> |否| WaitCD["等待冷却"]
CDReady --> |是| CheckCost["检查资源消耗"]
CheckCost --> CostOK{"资源充足?"}
CostOK --> |否| NotEnough["资源不足"]
CostOK --> |是| SelectTarget["选择目标"]
SelectTarget --> LoadEffect["加载特效"]
LoadEffect --> PlayAnim["播放动画"]
PlayAnim --> CalcDamage["计算伤害"]
CalcDamage --> ApplyEffects["应用附加效果"]
ApplyEffects --> UpdateStatus["更新状态"]
UpdateStatus --> End([技能执行完成])
WaitCD --> CheckCD
NotEnough --> End
```
**图表来源**
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts#L45-L85)
- [AtkConCom.ts](file://assets/script/game/skill/AtkConCom.ts#L147-L186)
**章节来源**
- [SkillConComp.ts](file://assets/script/game/hero/SkillConComp.ts#L1-L177)
- [SkillEnt.ts](file://assets/script/game/skill/SkillEnt.ts#L1-L78)
## 战斗系统集成
### Buff系统集成
技能系统与Buff系统紧密集成支持复杂的附加效果
```mermaid
classDiagram
class HeroViewComp {
+Record~number,BuffInfo[]~ BUFFS
+Record~number,BuffInfo[]~ BUFFS_TEMP
+addBuff(buffConf : BuffConf)
+removeBuff(attrIndex : number, value : number, isPermanent : boolean)
+recalculateSingleAttr(attrIndex : number)
}
class BuffConf {
+Attrs buff
+BType BType
+number value
+number time
+number chance
}
class SkillConfig {
+BuffConf[] buffs
+NeAttrsConf[] neAttrs
}
HeroViewComp --> BuffConf : "管理"
SkillConfig --> BuffConf : "定义"
```
**图表来源**
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L20-L84)
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts#L112-L126)
### 属性计算机制
技能系统支持基于属性的动态计算:
| 属性类型 | 计算方式 | 示例 |
|----------|----------|------|
| 数值型属性 | 基础值 + 所有数值型buff之和 | HP = 100 + 20 + 15 = 135 |
| 百分比型属性 | 基础值 × (1 + 所有百分比buff之和/100) | AP = 50 × (1 + 0.2) = 60 |
| 混合型属性 | (基础值 + 数值型总和) × (1 + 百分比总和/100) | DEF = (100 + 10) × (1 + 0.1) = 121 |
**章节来源**
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L217-L251)
- [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts#L150-L199)
## 新增技能配置流程
### 完整配置步骤
1. **确定技能UUID**
- 确保UUID唯一性
- 按功能分类分配范围如6001-6099为基础攻击
2. **定义基础属性**
```typescript
// 示例配置模板
const newSkill: SkillConfig = {
uuid: 6006,
name: "新技能名称",
sp_name: "特效名称",
AtkedName: AtkedName.atked,
path: "图片资源路径",
TGroup: TGroup.Enemy,
SType: SType.damage,
act: "技能动画名称",
DTType: DTType.single,
DType: DType.ATK,
ap: 150,
cd: 3,
t_num: 1,
hit_num: 1,
hit: 1,
hitcd: 0.2,
speed: 720,
cost: 15,
with: 0,
buffs: [],
neAttrs: [],
info: "技能描述信息",
hero: 1001
};
```
3. **配置目标群体**
- 根据技能效果选择合适的TGroup
- 考虑团队协作和平衡性
4. **设置技能类型**
- 选择最符合技能效果的SType
- 注意与其他技能的差异化
5. **定义数值参数**
- 攻击力百分比(ap)通常在50-200%之间
- 冷却时间(cd):根据技能强度调整
- 资源消耗(cost):平衡技能使用频率
6. **配置附加效果**
- 添加BuffConf数组定义增益效果
- 添加NeAttrsConf数组定义负面效果
- 注意效果的平衡性和独特性
7. **编写技能描述**
- 清晰描述技能效果
- 包含关键数值信息
- 说明使用策略
### 验证检查清单
| 检查项 | 验证内容 | 通过标准 |
|--------|----------|----------|
| UUID唯一性 | 确保uuid不重复 | 不与其他技能冲突 |
| 参数合理性 | 数值在合理范围内 | 符合游戏平衡 |
| 效果一致性 | 描述与实际效果一致 | 文字描述准确 |
| 性能影响 | 对游戏性能影响最小 | 无明显卡顿 |
| 资源完整性 | 所有资源文件存在 | 无缺失资源 |
## 验证方法与最佳实践
### 开发阶段验证
1. **编译时验证**
- TypeScript类型检查确保字段完整
- 枚举值范围验证
- 必填字段检查
2. **运行时验证**
```typescript
// 验证函数示例
function validateSkillConfig(config: SkillConfig): boolean {
// 检查必填字段
if (!config.uuid || !config.name || !config.sp_name) return false;
// 检查数值范围
if (config.ap <= 0 || config.cd <= 0) return false;
// 检查目标群体有效性
if (config.TGroup < 0 || config.TGroup > 4) return false;
return true;
}
```
3. **单元测试**
- 测试各种技能类型的执行
- 验证Buff效果的正确应用
- 检查目标选择逻辑
### 平衡性测试
1. **强度评估**
- 与其他同类技能对比
- 在不同场景下的表现
- 对游戏整体平衡的影响
2. **使用频率测试**
- 冷却时间对玩家体验的影响
- 资源消耗的合理性
- 技能组合的可行性
3. **视觉效果验证**
- 特效资源的质量
- 动画流畅度
- 视觉反馈的清晰度
### 性能优化建议
1. **资源管理**
- 合理控制特效资源大小
- 使用对象池减少内存分配
- 及时释放不再使用的资源
2. **算法优化**
- 优化目标选择算法
- 减少不必要的计算
- 使用空间换时间的策略
3. **网络同步**
- 确保技能效果在网络环境下的同步
- 处理延迟和丢包情况
- 保证客户端和服务端的一致性
## 总结
SkillSet.ts定义了一个完整而灵活的技能配置系统通过精心设计的接口和枚举类型为游戏战斗系统提供了强大的技能管理能力。该系统的主要优势包括
1. **结构化配置**通过SkillConfig接口实现了技能属性的标准化管理
2. **灵活扩展**:枚举类型和接口设计支持未来功能扩展
3. **类型安全**TypeScript类型系统确保配置的正确性
4. **性能优化**ECS架构和组件化设计提高了系统效率
5. **易于维护**:清晰的代码结构和完善的注释便于维护
通过遵循本文档提供的配置流程和最佳实践,开发者可以快速创建高质量的游戏技能,并确保其在游戏系统中的稳定运行。技能系统的持续优化和完善将为玩家带来更加丰富和有趣的游戏体验。