Files
pixelheros/.qoder/repowiki/zh/content/奖励系统/奖励配置/战斗奖励配置.md
panw 4235e3b776 refactor(game): 移除已弃用的事件常量
- 删除 UpdateHero 和 UpdateFightHero 事件
- 移除 MISSION_UPDATE 事件常量
- 优化游戏事件枚举定义
2025-10-28 16:15:47 +08:00

343 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.
# 战斗奖励配置
<cite>
**本文档引用文件**
- [Mission.ts](file://assets/script/game/common/config/Mission.ts)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts)
- [TalComp.ts](file://assets/script/game/hero/TalComp.ts)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts)
</cite>
## 目录
1. [战斗奖励机制概述](#战斗奖励机制概述)
2. [FightSet枚举常量详解](#fightset枚举常量详解)
3. [奖励触发波次机制](#奖励触发波次机制)
4. [奖励数值影响参数](#奖励数值影响参数)
5. [奖励类型配置逻辑](#奖励类型配置逻辑)
6. [配置加载与运行时访问](#配置加载与运行时访问)
7. [常见问题排查](#常见问题排查)
8. [代码示例](#代码示例)
## 战斗奖励机制概述
本系统基于Mission.ts文件中的FightSet枚举实现战斗奖励触发机制通过波次常量控制奖励生成时机结合参数配置实现多样化的奖励效果。系统通过事件驱动模式在特定战斗阶段触发相应的奖励逻辑包括属性提升、金币获取和技能解锁等。
**Section sources**
- [Mission.ts](file://assets/script/game/common/config/Mission.ts#L0-L35)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L0-L33)
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts#L0-L69)
## FightSet枚举常量详解
FightSet枚举定义了战斗中的关键配置常量主要分为三类波次触发常量、数值影响常量和资源类型常量。
### 波次触发常量
| 常量名称 | 数值 | 业务含义 |
|---------|------|---------|
| FRIEND_WAVE_UP | 3 | 伙伴登场的战斗波次 |
| BOSS_WAVE_UP_1 | 3 | 第一波BOSS登场波次 |
| BOSS_WAVE_UP_2 | 5 | 第二波BOSS登场波次 |
| BOSS_WAVE_UP_3 | 7 | 第三波BOSS登场波次 |
| EQUIP_WAVE_UP_1 | 4 | 第一波装备登场波次 |
| EQUIP_WAVE_UP_2 | 6 | 第二波装备登场波次 |
| EQUIP_WAVE_UP_3 | 8 | 第三波装备登场波次 |
| SKILL_WAVE_UP_1 | 2 | 第一波技能登场波次 |
| SKILL_WAVE_UP_2 | 5 | 第二波技能登场波次 |
| SKILL_WAVE_UP_3 | 7 | 第三波技能登场波次 |
### 数值影响常量
| 常量名称 | 数值 | 业务含义 |
|---------|------|---------|
| ATK_ADD_COUNT | 4 | 伙伴攻击力增加基数 |
| ATK_ADD_GLOD | 1 | 金币增加基数 |
| CRIT_DAMAGE | 50 | 暴击伤害百分比 |
| DOUBLE_ATK_RATE | 100 | 额外攻击默认概率 |
| ATKED_TO_POWER | 15 | 被攻击涨能量值 |
| ATK_TO_POWER | 10 | 攻击涨能量值 |
### 资源类型常量
| 常量名称 | 数值 | 业务含义 |
|---------|------|---------|
| GREEN_GOLD | 1 | 绿色金币类型 |
| BLUE_GOLD | 2 | 蓝色金币类型 |
| PURPLE_GOLD | 3 | 紫色金币类型 |
| ORANGE_GOLD | 4 | 橙色金币类型 |
**Section sources**
- [Mission.ts](file://assets/script/game/common/config/Mission.ts#L0-L35)
## 奖励触发波次机制
战斗奖励的触发与波次系统紧密关联通过FightSet中的波次常量控制不同奖励类型的出现时机。
```mermaid
sequenceDiagram
participant MissionComp as MissionComp
participant MissionMonComp as MissionMonComp
participant RogueConfig as RogueConfig
MissionComp->>MissionMonComp : dispatchEvent(FightStart)
MissionMonComp->>RogueConfig : getStageType(stage,level)
RogueConfig-->>MissionMonComp : 返回关卡类型
MissionMonComp->>RogueConfig : getStageMonsterConfigs()
RogueConfig-->>MissionMonComp : 返回怪物配置
MissionMonComp->>MissionMonComp : generateMonstersFromStageConfig()
MissionMonComp->>MissionMonComp : processRandomEvent()
alt 事件触发
MissionMonComp->>MissionMonComp : TREASURE事件
MissionMonComp->>MissionComp : 增加金币奖励
end
```
**Diagram sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L66-L116)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L129-L168)
### 波次与地图系统联动
波次常量与地图系统通过关卡配置实现联动,具体关系如下:
```mermaid
flowchart TD
A[开始战斗] --> B{判断关卡类型}
B --> |普通关卡| C[按波次生成怪物]
B --> |精英关卡| D[增加精英怪物]
B --> |BOSS关卡| E[生成BOSS怪物]
B --> |事件关卡| F[触发随机事件]
F --> G{随机事件类型}
G --> |宝箱事件| H[增加金币奖励]
G --> |陷阱事件| I[对玩家造成伤害]
G --> |增益事件| J[给予临时增益]
G --> |减益事件| K[给予临时减益]
```
**Diagram sources**
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L86-L132)
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L135-L169)
## 奖励数值影响参数
奖励数值通过FightSet中的参数进行配置影响各种奖励效果的强度。
### 攻击力与金币影响机制
```mermaid
classDiagram
class FightSet {
+FRIEND_WAVE_UP : number
+BOSS_WAVE_UP_1 : number
+EQUIP_WAVE_UP_1 : number
+SKILL_WAVE_UP_1 : number
+ATK_ADD_COUNT : number
+ATK_ADD_GLOD : number
+CRIT_DAMAGE : number
}
class HeroViewComp {
+Attrs : number[]
+base_ap : number
+hp : number
}
class TalComp {
+FStats : Stats
+checkTrigger(tal) : boolean
+doTalEffect(tal) : void
}
FightSet --> HeroViewComp : 影响属性计算
FightSet --> TalComp : 影响天赋触发
TalComp --> HeroViewComp : 修改英雄属性
```
**Diagram sources**
- [Mission.ts](file://assets/script/game/common/config/Mission.ts#L0-L35)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L0-L22)
- [TalComp.ts](file://assets/script/game/hero/TalComp.ts#L102-L139)
### 能量增长参数
| 参数 | 数值 | 触发条件 |
|------|------|---------|
| ATKED_TO_POWER | 15 | 被攻击时增长能量 |
| ATK_TO_POWER | 10 | 攻击时增长能量 |
| CRIT_TO_POWER | 15 | 暴击时增长能量 |
| DODGE_TO_POWER | 15 | 闪避时增长能量 |
这些参数在英雄战斗过程中实时影响能量值的增长,进而影响技能释放频率。
**Section sources**
- [Mission.ts](file://assets/script/game/common/config/Mission.ts#L0-L35)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L582-L622)
## 奖励类型配置逻辑
系统实现了多种奖励类型,每种类型都有特定的配置逻辑和触发条件。
### 属性提升奖励
属性提升通过天赋系统实现,当满足特定条件时触发:
```mermaid
flowchart LR
A[战斗开始] --> B{检查天赋触发条件}
B --> |等级提升| C[触发LEVEL_UP天赋]
B --> |行动次数| D[触发ACTION_COUNT天赋]
B --> |技能使用| E[触发SKILL_COUNT天赋]
B --> |受到伤害| F[触发DAMAGE_COUNT天赋]
C --> G[执行天赋效果]
D --> G
E --> G
F --> G
G --> H[属性提升]
```
**Diagram sources**
- [TalComp.ts](file://assets/script/game/hero/TalComp.ts#L134-L169)
- [HeroViewComp.ts](file://assets/script/game/hero/HeroViewComp.ts#L281-L316)
### 金币获取奖励
金币获取主要通过两种方式实现:
1. **战斗掉落**:怪物死亡时随机掉落金币
2. **事件奖励**:事件关卡触发宝箱事件获得固定金币
```mermaid
sequenceDiagram
participant Mon as Monster
participant MissionComp as MissionComp
participant TopComp as TopComp
Mon->>MissionComp : dispatchEvent(MonDead)
MissionComp->>MissionComp : do_mon_dead()
MissionComp->>MissionComp : 增加金币
MissionComp->>TopComp : dispatchEvent(GOLD_UPDATE)
TopComp->>TopComp : 更新金币UI显示
```
**Diagram sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L32-L70)
- [TopComp.ts](file://assets/script/game/map/TopComp.ts#L0-L28)
### 技能解锁奖励
技能解锁通过技能波次常量控制,在特定波次解锁新技能:
- SKILL_WAVE_UP_1=2第二波解锁第一个技能
- SKILL_WAVE_UP_2=5第五波解锁第二个技能
- SKILL_WAVE_UP_3=7第七波解锁第三个技能
**Section sources**
- [Mission.ts](file://assets/script/game/common/config/Mission.ts#L0-L35)
- [TalComp.ts](file://assets/script/game/hero/TalComp.ts#L102-L139)
## 配置加载与运行时访问
系统通过模块化方式加载和访问配置数据,确保配置的可维护性和可扩展性。
### 配置加载流程
```mermaid
flowchart TD
A[游戏启动] --> B[加载Mission.ts配置]
B --> C[初始化FightSet常量]
C --> D[加载地图配置]
D --> E[初始化关卡数据]
E --> F[战斗开始]
F --> G[运行时访问配置]
G --> H[根据波次触发奖励]
```
### 运行时访问路径
配置数据在运行时通过以下路径访问:
- FightSet常量`import { FightSet } from "../common/config/Mission"`
- 关卡配置:`import { getStageMonsterConfigs } from "./RogueConfig"`
- 事件配置:`import { getRandomEvent } from "./RogueConfig"`
**Section sources**
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L0-L33)
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L246-L281)
## 常见问题排查
### 奖励未触发的可能原因
1. **波次配置错误**
- 检查FightSet中波次常量设置是否正确
- 确认波次值与实际战斗进度匹配
2. **事件监听缺失**
- 确保MissionComp正确监听FightStart事件
- 检查事件派发是否正常
3. **配置加载失败**
- 验证Mission.ts文件是否正确导入
- 检查路径引用是否正确
4. **条件未满足**
- 天赋触发条件未达到
- 关卡类型不符合奖励条件
### 调试方法
1. **日志输出**
- 在关键节点添加console.log输出
- 监控波次变化和事件触发
2. **断点调试**
- 在MissionMonComp的do_mon_wave方法设置断点
- 检查怪物生成和事件处理逻辑
3. **配置验证**
- 确认FightSet常量值在合理范围内
- 验证关卡配置与波次设置的匹配性
**Section sources**
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L69-L105)
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L114-L150)
## 代码示例
### 调整奖励触发波次
```typescript
// 修改技能登场波次
export enum FightSet {
SKILL_WAVE_UP_1 = 1, // 提前到第一波
SKILL_WAVE_UP_2 = 4, // 提前到第四波
SKILL_WAVE_UP_3 = 6, // 提前到第六波
// 其他配置...
}
```
### 修改奖励数值
```typescript
// 增加金币奖励数值
export enum FightSet {
ATK_ADD_GLOD = 2, // 金币增加从1提升到2
CRIT_DAMAGE = 75, // 暴击伤害从50%提升到75%
// 其他配置...
}
```
### 添加新的奖励类型
```typescript
// 在Mission.ts中添加新的奖励常量
export enum FightSet {
NEW_REWARD_TYPE = 5, // 新的奖励类型
REWARD_VALUE = 100, // 奖励数值
// 其他配置...
}
```
**Section sources**
- [Mission.ts](file://assets/script/game/common/config/Mission.ts#L0-L35)
- [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L0-L74)