Files
heros/assets/script/Design.md

368 lines
11 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.

# 英雄等级成长系统设计文档
## 概述
本文档总结了游戏中英雄等级成长系统的设计,包括经验值计算、属性增长机制和英雄类型分类。
## 英雄类型分类
### 基础类型 (HType)
- **战士 (warrior = 0)**: 近战物理输出,高生存能力
- **远程 (remote = 1)**: 远程物理输出,中等生存能力
- **法师 (mage = 2)**: 魔法输出,低生存能力但高伤害
### 元素类型 (HeroKind)
- **烈焰 (fire = 1)**: 攻击带击退效果
- **寒冰 (water = 2)**: 攻击带速度效果
- **自然 (nature = 3)**: 攻击偷取生命
- **暗影 (shadow = 4)**: 攻击偷取攻击
- **神圣 (holy = 5)**: 攻击带2倍伤害
## 经验值系统
### 经验值计算公式
- **基础经验值**: 100
- **递增值规律**: 每级递增10且递增值本身也会递增
- **公式**: 基础经验值 + 递增值累加
- **递增值规律**: 第1级递增值=10第2级递增值=20第3级递增值=30...
### 升级经验示例
- 1级→2级: 100经验
- 2级→3级: 110经验
- 3级→4级: 120经验
- 4级→5级: 130经验
- 以此类推...
## 属性增长机制
### 攻击力增长 (AP Growth)
根据英雄类型采用不同的增长模式:
| 英雄类型 | 增长公式 | 说明 |
|---------|---------|------|
| 战士 | `Math.floor(baseAp * 0.05) + 3` | 固定增长为主(每级+3+5% |
| 远程 | `Math.floor(baseAp * 0.10) + 2` | 平衡增长(每级+2+10% |
| 法师 | `Math.floor(baseAp * 0.15) + 1` | 百分比增长为主(每级+1+15% |
### 生命值增长 (HP Growth)
根据英雄类型采用不同的增长模式:
| 英雄类型 | 增长公式 | 说明 |
|---------|---------|------|
| 战士 | `Math.floor(baseHp * 0.08) + 10` | 高增长(每级+10+8% |
| 远程 | `Math.floor(baseHp * 0.05) + 5` | 中等增长(每级+5+5% |
| 法师 | `Math.floor(baseHp * 0.03) + 3` | 低增长(每级+3+3% |
## 英雄成长特点分析
### 战士型英雄
- **特点**: 高生存能力,稳定输出
- **AP增长**: 固定增长为主,适合持续战斗
- **HP增长**: 高增长,提供优秀的生存能力
- **适用场景**: 前排坦克,持续输出
### 远程型英雄
- **特点**: 平衡型输出,中等生存能力
- **AP增长**: 平衡增长,既有固定加成又有百分比提升
- **HP增长**: 中等增长,提供基本生存能力
- **适用场景**: 后排输出,灵活战斗
### 法师型英雄
- **特点**: 高伤害输出,低生存能力
- **AP增长**: 百分比增长为主,后期伤害爆发
- **HP增长**: 低增长,需要保护
- **适用场景**: 后排爆发输出,需要团队保护
## 核心函数说明
### 经验值相关函数
- `getUpExp(currentLevel)`: 获取指定等级升级所需经验
- `getTotalUpExp(currentLevel, targetLevel)`: 获取从当前等级升级到目标等级所需总经验
### 属性增长相关函数
- `getUpAp(heroId)`: 获取英雄升级增加的攻击力
- `getUpHp(heroId)`: 获取英雄升级增加的生命值
- `getHeroTotalAp(heroId, level)`: 获取英雄在指定等级的总攻击力
- `getHeroTotalHp(heroId, level)`: 获取英雄在指定等级的总生命值
- `getLevelUpStats(heroId, currentLevel, targetLevel)`: 获取升级后的完整属性信息
## 初始怪物配置分析
### 英雄基础属性分析
#### 主将英雄 (5001-5007)
- **HP**: 50 (所有主将)
- **AP**: 10 (所有主将)
- **攻击距离**: 700
- **冷却时间**: 1.5秒
- **移动速度**: 50
#### 伙伴英雄 (5021-5028)
- **HP**: 50 (所有伙伴)
- **AP**: 10-15 (大部分10远程15)
- **攻击距离**: 700
- **冷却时间**: 1.5秒
- **移动速度**: 50
### 当前怪物配置分析
#### 普通怪物 (5201-5206, 5219-5224)
- **HP**: 200 (是英雄的4倍)
- **AP**: 5 (是英雄的1/2-1/3)
- **攻击距离**: 250 (比英雄短很多)
- **冷却时间**: 1.5秒
- **移动速度**: 50
#### 精英怪物 (5225-5227)
- **HP**: 200
- **AP**: 5
- **攻击距离**: 250
- **冷却时间**: 1.5秒
- **移动速度**: 50
### 初始怪物配置建议
**重要前提**: 初始英雄只有一个人需要在3次攻击内击杀普通怪物
#### 计算分析
- **英雄AP**: 10
- **3次攻击总伤害**: 10 × 3 = 30
- **怪物HP上限**: 30 (确保3次攻击击杀)
#### 1. 普通怪物 (5201-5206) - 重新配置
```typescript
// 兽人战士、兽人刺客、兽人护卫、石卫、土卫、树人
{
hp: 25, // 降低到英雄的0.5倍确保3次攻击击杀 (10×3=30)
ap: 8, // 提升到英雄的80% (原5)
dis: 300, // 提升攻击距离 (原250)
cd: 1.5, // 保持不变
speed: 45 // 稍微降低移动速度 (原50)
}
```
#### 2. 远程怪物 (5203, 5220, 5224) - 重新配置
```typescript
// 兽人护卫、牛头战士(远程)、独眼巨人(远程)
{
hp: 20, // 降低到英雄的0.4倍确保3次攻击击杀
ap: 12, // 提升到英雄的120%
dis: 500, // 提升远程攻击距离
cd: 1.5, // 保持不变
speed: 50 // 保持移动速度
}
```
#### 3. 法师怪物 (5216-5218, 5225-5227) - 重新配置
```typescript
// 元素1-3、精英独眼、精英牛头、精英兽人
{
hp: 18, // 降低到英雄的0.36倍确保3次攻击击杀
ap: 15, // 提升到英雄的150%
dis: 600, // 提升法师攻击距离
cd: 1.2, // 降低冷却时间
speed: 40 // 降低移动速度
}
```
### 平衡性考虑
#### 战斗时长控制
- **目标**: 英雄3次攻击击杀普通怪物
- **普通怪物**: 25HP ÷ 10AP = 2.5次攻击 (3次内击杀)
- **远程怪物**: 20HP ÷ 10AP = 2次攻击 (3次内击杀)
- **法师怪物**: 18HP ÷ 10AP = 1.8次攻击 (3次内击杀)
#### 伤害输出平衡
- **英雄**: AP 103次攻击总伤害 30
- **普通怪物**: AP 8对英雄威胁适中
- **远程怪物**: AP 12对英雄威胁较高
- **法师怪物**: AP 15对英雄威胁最高
#### 生存压力分析
- **英雄HP**: 50
- **普通怪物**: 需要6.25次攻击击杀英雄 (50÷8)
- **远程怪物**: 需要4.17次攻击击杀英雄 (50÷12)
- **法师怪物**: 需要3.33次攻击击杀英雄 (50÷15)
### 配置调整原则
1. **HP配置**: 怪物HP ≤ 英雄AP × 3确保3次攻击击杀
2. **AP配置**: 怪物AP = 英雄AP × (0.8-1.5倍),提供适当威胁
3. **攻击距离**: 远程怪物 > 法师怪物 > 战士怪物
4. **移动速度**: 战士怪物 > 远程怪物 > 法师怪物
5. **冷却时间**: 法师怪物 < 其他类型体现爆发特性
### 难度递进设计
#### 第一波怪物 (推荐)
- **普通怪物**: HP 25, AP 8
- **特点**: 基础威胁适合新手熟悉战斗机制
#### 第二波怪物 (推荐)
- **远程怪物**: HP 20, AP 12
- **特点**: 增加攻击距离威胁需要战术考虑
#### 第三波怪物 (推荐)
- **法师怪物**: HP 18, AP 15
- **特点**: 高伤害但脆弱需要优先击杀
### 注意事项
- 所有怪物HP都确保在英雄3次攻击内击杀
- 怪物AP根据类型递增提供递进式挑战
- 保持攻击距离和移动速度的差异化
- 为后续多人团队战斗预留调整空间
## 怪物经验值系统设计
### 经验值设置原则
#### 1. 基于怪物威胁度设置
- **普通怪物**: 基础经验值适合新手
- **远程怪物**: 中等经验值提供战术挑战
- **法师怪物**: 高经验值高风险高回报
#### 2. 基于英雄升级需求
- **英雄升级经验**: 1级2级需要100经验
- **怪物经验分配**: 确保合理的升级节奏
### 推荐经验值配置
#### 1. 普通怪物 (战士型) - 推荐经验值
```typescript
// 兽人战士、兽人刺客、石卫、土卫、树人、牛头战士、独眼巨人
{
exp: 15, // 基础经验值
reason: "普通怪物,基础威胁,适合新手"
}
```
#### 2. 远程怪物 - 推荐经验值
```typescript
// 兽人护卫、牛头战士(远程)、独眼巨人(远程)
{
exp: 25, // 中等经验值
reason: "远程威胁,需要战术考虑"
}
```
#### 3. 法师怪物 - 推荐经验值
```typescript
// 元素1-3、精英独眼、精英牛头、精英兽人
{
exp: 35, // 高经验值
reason: "高伤害但脆弱,高风险高回报"
}
```
### 升级节奏分析
#### 单人英雄升级路径
- **1级2级**: 需要100经验
- **击杀普通怪物**: 需要7只 (100÷156.67)
- **击杀远程怪物**: 需要4只 (100÷25=4)
- **击杀法师怪物**: 需要3只 (100÷352.86)
#### 混合怪物组合升级
- **2只普通 + 2只远程**: 15×2 + 25×2 = 80经验
- **1只普通 + 1只远程 + 2只法师**: 15 + 25 + 35×2 = 110经验
- **3只法师**: 35×3 = 105经验
### 经验值平衡考虑
#### 1. 战斗时长与经验值平衡
- **普通怪物**: 3次攻击击杀15经验
- **远程怪物**: 2次攻击击杀25经验
- **法师怪物**: 1.8次攻击击杀35经验
- **效率比**: 法师怪物 > 远程怪物 > 普通怪物
#### 2. 风险与回报平衡
- **普通怪物**: 低风险,低回报
- **远程怪物**: 中等风险,中等回报
- **法师怪物**: 高风险,高回报
#### 3. 新手友好性
- **第一波**: 普通怪物,让新手熟悉机制
- **第二波**: 远程怪物,引入战术考虑
- **第三波**: 法师怪物,提供高经验奖励
### 经验值计算公式建议
#### 基础公式
```typescript
// 基于怪物类型和等级的经验值计算
const getMonsterExp = (monsterType: HType, level: number = 1): number => {
const baseExp = {
[HType.warrior]: 15, // 普通怪物
[HType.remote]: 25, // 远程怪物
[HType.mage]: 35 // 法师怪物
};
return baseExp[monsterType] * level;
};
```
#### 等级递增公式
```typescript
// 高等级怪物经验值递增
const getLeveledMonsterExp = (baseExp: number, level: number): number => {
if (level <= 1) return baseExp;
return Math.floor(baseExp * (1 + (level - 1) * 0.5));
};
```
### 经验值配置示例
#### 1级怪物经验值
| 怪物类型 | 基础经验值 | 说明 |
|---------|-----------|------|
| 普通怪物 | 15 | 基础威胁,适合新手 |
| 远程怪物 | 25 | 中等威胁,需要战术 |
| 法师怪物 | 35 | 高威胁,高风险高回报 |
#### 2级怪物经验值 (等级递增)
| 怪物类型 | 2级经验值 | 说明 |
|---------|-----------|------|
| 普通怪物 | 22 | 15 × 1.5 |
| 远程怪物 | 37 | 25 × 1.5 |
| 法师怪物 | 52 | 35 × 1.5 |
### 实现建议
#### 1. 在怪物配置中添加经验值字段
```typescript
// 在HeroInfo中添加exp字段
5201: {
uuid: 5201,
name: "兽人战士",
// ... 其他属性
exp: 15, // 新增经验值字段
info: "普通怪物-战士型"
}
```
#### 2. 经验值获取函数
```typescript
// 获取怪物经验值
export const getMonsterExp = (monsterId: number): number => {
const monsterInfo = HeroInfo[monsterId];
return monsterInfo?.exp || 10; // 默认10经验
};
```
#### 3. 升级检查函数
```typescript
// 检查英雄是否可以升级
export const checkLevelUp = (currentExp: number, currentLevel: number): boolean => {
const requiredExp = getUpExp(currentLevel);
return currentExp >= requiredExp;
};
```
### 注意事项
- 经验值设置要考虑游戏节奏,避免升级过快或过慢
- 不同类型怪物提供不同的经验值,增加战术选择
- 为后续多人团队和高级怪物预留经验值空间
- 经验值要与怪物的威胁度和击杀难度成正比