feat(怪物系统): 重构怪物类型与属性计算系统
引入MonType枚举支持普通、精英、BOSS三种怪物类型 新增getMonAttr函数实现基于等级和类型的动态属性计算 更新Mon.ts的load和hero_init方法以支持新参数 扩展heroSet.ts添加多种新怪物类型配置 重构属性初始化流程,移除strengthMultiplier机制 更新相关文档和流程图反映最新设计
This commit is contained in:
@@ -2,16 +2,21 @@
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts) - *在最近提交中更新*
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts) - *在最近提交中更新*
|
||||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts) - *在最近提交中更新*
|
||||
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts)
|
||||
- [GameMap.ts](file://assets/script/game/map/GameMap.ts)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
|
||||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts)
|
||||
- [Mon.ts](file://assets/script/game/hero/Mon.ts)
|
||||
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts)
|
||||
- [MapModelComp.ts](file://assets/script/game/map/model/MapModelComp.ts)
|
||||
- [MapViewComp.ts](file://assets/script/game/map/view/MapViewComp.ts)
|
||||
</cite>
|
||||
|
||||
## 更新摘要
|
||||
**已做更改**
|
||||
- 全面重构关卡生成逻辑,采用新的 `MonType` 枚举替代旧的布尔标记
|
||||
- 更新关卡类型判断机制,基于 `EliteStage` 和 `BossStage` 数组配置
|
||||
- 重写怪物属性计算系统,引入 `MonAttrSet` 属性倍率配置
|
||||
- 更新随机事件系统,使用数字枚举值替代字符串
|
||||
- 同步更新调用流程和配置结构
|
||||
|
||||
## 目录
|
||||
1. [系统概述](#系统概述)
|
||||
2. [核心架构](#核心架构)
|
||||
@@ -32,107 +37,93 @@
|
||||
|
||||
### 主要特性
|
||||
|
||||
- **程序化关卡生成**:基于关卡号和等级自动计算关卡配置
|
||||
- **程序化关卡生成**:基于关卡号自动计算关卡配置
|
||||
- **动态难度曲线**:怪物数量和强度随关卡递增而增强
|
||||
- **多样化关卡类型**:普通关卡、精英关卡、Boss关卡、事件关卡
|
||||
- **多样化关卡类型**:普通关卡、精英关卡、Boss关卡
|
||||
- **随机事件系统**:包含奖励、陷阱、增益、减益等多种事件
|
||||
- **灵活配置管理**:支持快速调整难度曲线和平衡性
|
||||
|
||||
**更新** 重构了怪物生成逻辑,使用 `MonType` 枚举和数组配置替代原有实现
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L50)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L40)
|
||||
|
||||
## 核心架构
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "配置层"
|
||||
A[RogueConfig.ts] --> B[StageType枚举]
|
||||
A --> C[MonsterType枚举]
|
||||
A --> D[EventType枚举]
|
||||
A --> E[StageConfigRules]
|
||||
A --> F[EventConfig]
|
||||
A[RogueConfig.ts] --> B[MonType枚举]
|
||||
A --> C[EventType枚举]
|
||||
A --> D[StageRule配置]
|
||||
A --> E[Monster属性配置]
|
||||
end
|
||||
subgraph "逻辑层"
|
||||
G[getStageType] --> H[calculateMonsterCount]
|
||||
G --> I[calculateMonsterStrengthMultiplier]
|
||||
H --> J[generateStageConfig]
|
||||
I --> J
|
||||
J --> K[getStageMonsterConfigs]
|
||||
F[getStageMonConfigs] --> G[精英/Boss判断]
|
||||
G --> H[基础怪物数量计算]
|
||||
F --> I[精英怪物添加]
|
||||
F --> J[Boss怪物添加]
|
||||
F --> K[额外怪物生成]
|
||||
end
|
||||
subgraph "应用层"
|
||||
L[MissionMonComp.ts] --> M[GameMap.ts]
|
||||
L --> N[Mon.ts]
|
||||
L --> O[MapModelComp.ts]
|
||||
end
|
||||
A --> G
|
||||
K --> L
|
||||
A --> F
|
||||
F --> L
|
||||
M --> O
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L311)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L240)
|
||||
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L1-L36)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L50)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L40)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L173)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L200)
|
||||
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L1-L35)
|
||||
|
||||
## 关卡类型系统
|
||||
|
||||
系统定义了四种主要的关卡类型,每种类型都有独特的配置特征和挑战性。
|
||||
系统定义了三种主要的关卡类型,每种类型都有独特的配置特征和挑战性。
|
||||
|
||||
### StageType枚举结构
|
||||
### MonType枚举结构
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class StageType {
|
||||
class MonType {
|
||||
<<enumeration>>
|
||||
+NORMAL : "normal"
|
||||
+ELITE : "elite"
|
||||
+BOSS : "boss"
|
||||
+EVENT : "event"
|
||||
+NORMAL : 0
|
||||
+ELITE : 1
|
||||
+BOSS : 2
|
||||
}
|
||||
class StageConfigRules {
|
||||
+NORMAL : NormalConfig
|
||||
+ELITE : EliteConfig
|
||||
+BOSS : BossConfig
|
||||
+EVENT : EventConfig
|
||||
class IMonsConfig {
|
||||
+uuid : number
|
||||
+buff : BuffConf[]
|
||||
+level : number
|
||||
+monType : MonType
|
||||
}
|
||||
class NormalConfig {
|
||||
+description : "普通关卡"
|
||||
+monsters : MonsterGroup[]
|
||||
class StageConfig {
|
||||
+MonsNum : 5
|
||||
+extraMonsterRate : 0.3
|
||||
+eventMonsterRate : 0.25
|
||||
}
|
||||
class EliteConfig {
|
||||
+description : "精英关卡"
|
||||
+monsters : MonsterGroup[]
|
||||
}
|
||||
class BossConfig {
|
||||
+description : "Boss关卡"
|
||||
+monsters : MonsterGroup[]
|
||||
}
|
||||
class EventConfig {
|
||||
+description : "事件关卡"
|
||||
+monsters : MonsterGroup[]
|
||||
}
|
||||
StageType --> StageConfigRules : "映射到"
|
||||
StageConfigRules --> NormalConfig : "包含"
|
||||
StageConfigRules --> EliteConfig : "包含"
|
||||
StageConfigRules --> BossConfig : "包含"
|
||||
StageConfigRules --> EventConfig : "包含"
|
||||
MonType --> IMonsConfig : "用于配置"
|
||||
IMonsConfig --> StageConfig : "生成"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L35-L86)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L31-L31)
|
||||
|
||||
### 关卡类型特征对比
|
||||
|
||||
| 关卡类型 | 怪物组成 | 数量范围 | 特殊规则 |
|
||||
| 关卡类型 | 触发条件 | 怪物组成 | 特殊规则 |
|
||||
|---------|---------|---------|---------|
|
||||
| 普通关卡 | 普通怪物 | 2-6只 | 基础难度,适合新手 |
|
||||
| 精英关卡 | 精英+普通 | 3-9只 | 中等难度,包含精英怪物 |
|
||||
| Boss关卡 | Boss+精英+普通 | 4-8只 | 高难度,包含Boss |
|
||||
| 事件关卡 | 普通怪物 | 1-4只 | 包含随机事件 |
|
||||
| 普通关卡 | 非精英/Boss关卡 | 普通怪物为主 | 基础难度,适合新手 |
|
||||
| 精英关卡 | 关卡号在EliteStage数组中 | 精英+普通怪物 | 中等难度,包含精英怪物 |
|
||||
| Boss关卡 | 关卡号在BossStage数组中 | Boss+精英+普通怪物 | 高难度,包含Boss |
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L47-L86)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L18-L20)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L31-L31)
|
||||
|
||||
## 怪物类型体系
|
||||
|
||||
@@ -142,45 +133,43 @@ StageConfigRules --> EventConfig : "包含"
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class MonsterType {
|
||||
class MonType {
|
||||
<<enumeration>>
|
||||
+NORMAL : "normal"
|
||||
+ELITE : "elite"
|
||||
+BOSS : "boss"
|
||||
+NORMAL : 0
|
||||
+ELITE : 1
|
||||
+BOSS : 2
|
||||
}
|
||||
class MonsterConfig {
|
||||
+uuid : number
|
||||
+type : MonsterType
|
||||
+stageNumber : number
|
||||
+type : MonType
|
||||
+level : number
|
||||
+strengthMultiplier : number
|
||||
+buff : BuffConf[]
|
||||
}
|
||||
class MonsterPool {
|
||||
+getMonsterUUIDsByType() : number[]
|
||||
+EliteMonsterList : number[]
|
||||
+BossMonsterList : number[]
|
||||
+EliteMons : number[]
|
||||
+BossMons : number[]
|
||||
+getMonList() : number[]
|
||||
}
|
||||
MonsterType --> MonsterConfig : "生成"
|
||||
MonsterPool --> MonsterType : "提供"
|
||||
MonType --> MonsterConfig : "生成"
|
||||
MonsterPool --> MonType : "提供"
|
||||
MonsterPool --> MonsterConfig : "包含"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L28-L34)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L240-L260)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L31-L31)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L18-L20)
|
||||
|
||||
### 怪物池配置
|
||||
|
||||
系统维护三个独立的怪物池,每个池包含特定类型的怪物:
|
||||
|
||||
- **普通怪物池**:使用 `getMonList()` 方法获取所有可用的普通怪物
|
||||
- **精英怪物池**:固定配置的精英怪物列表
|
||||
- **Boss怪物池**:固定配置的Boss怪物列表
|
||||
- **精英怪物池**:固定配置的精英怪物列表 `EliteMons`
|
||||
- **Boss怪物池**:固定配置的Boss怪物列表 `BossMons`
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L18-L34)
|
||||
- [heroSet.ts](file://assets/script/game/game/common/config/heroSet.ts#L35-L40)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L18-L20)
|
||||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts#L20-L215)
|
||||
|
||||
## 关卡配置规则
|
||||
|
||||
@@ -190,45 +179,42 @@ MonsterPool --> MonsterConfig : "包含"
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[关卡号] --> B{关卡类型判断}
|
||||
B --> |第5关且等级3| C[事件关卡]
|
||||
B --> |第10关| D{等级判断}
|
||||
B --> |其他| E{等级判断}
|
||||
D --> |等级5| F[Boss关卡]
|
||||
D --> |等级4| G[精英关卡]
|
||||
D --> |其他| H[普通关卡]
|
||||
E --> |等级5| I[精英关卡]
|
||||
E --> |其他| J[普通关卡]
|
||||
C --> K[生成怪物配置]
|
||||
F --> K
|
||||
G --> K
|
||||
H --> K
|
||||
I --> K
|
||||
J --> K
|
||||
K --> L[计算怪物数量]
|
||||
K --> M[计算强度倍率]
|
||||
L --> N[生成最终配置]
|
||||
M --> N
|
||||
A[关卡号] --> B{是否为Boss关卡}
|
||||
B --> |是| C[添加Boss怪物]
|
||||
B --> |否| D{是否为精英关卡}
|
||||
D --> |是| E[添加1-2个精英怪物]
|
||||
D --> |否| F[仅添加普通怪物]
|
||||
C --> G[调整基础怪物数量]
|
||||
E --> G
|
||||
F --> G
|
||||
G --> H[添加额外怪物]
|
||||
H --> I[返回怪物配置]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L129-L168)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L95-L173)
|
||||
|
||||
### 怪物数量计算算法
|
||||
|
||||
系统采用线性递增算法计算怪物数量:
|
||||
系统采用固定基础数量加动态调整的算法计算怪物数量:
|
||||
|
||||
```typescript
|
||||
// 计算公式:基础数量 + (关卡号 ÷ 5) 的整数部分
|
||||
const increment = Math.floor(stageNumber / 5);
|
||||
let count = baseCount + increment;
|
||||
// 基础怪物数量
|
||||
let baseMonsterCount = StageRule.MonsNum; // 默认5只
|
||||
|
||||
// 确保数量在最小值和最大值范围内
|
||||
count = Math.max(minCount, Math.min(maxCount, count));
|
||||
// Boss关卡减少普通怪物数量
|
||||
if (isBossStage) {
|
||||
baseMonsterCount = Math.max(1, baseMonsterCount - 2);
|
||||
}
|
||||
|
||||
// 精英关卡减少普通怪物数量
|
||||
if (isEliteStage) {
|
||||
baseMonsterCount = Math.max(1, baseMonsterCount - eliteCount);
|
||||
}
|
||||
```
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L150-L175)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L95-L173)
|
||||
|
||||
## 随机事件系统
|
||||
|
||||
@@ -240,65 +226,44 @@ count = Math.max(minCount, Math.min(maxCount, count));
|
||||
classDiagram
|
||||
class EventType {
|
||||
<<enumeration>>
|
||||
+TREASURE : "treasure"
|
||||
+TRAP : "trap"
|
||||
+BUFF : "buff"
|
||||
+DEBUFF : "debuff"
|
||||
+TREASURE : 1
|
||||
+TRAP : 2
|
||||
+BUFF : 3
|
||||
+DEBUFF : 4
|
||||
}
|
||||
class EventConfig {
|
||||
+TREASURE : TreasureConfig
|
||||
+TRAP : TrapConfig
|
||||
+BUFF : BuffConfig
|
||||
+DEBUFF : DebuffConfig
|
||||
class StageRule {
|
||||
+eventMonsterRate : 0.25
|
||||
+specialAttributeRate : 0.4
|
||||
}
|
||||
class EventProbability {
|
||||
+TREASURE : 0.3
|
||||
+TRAP : 0.25
|
||||
+BUFF : 0.25
|
||||
+DEBUFF : 0.2
|
||||
}
|
||||
EventType --> EventConfig : "配置"
|
||||
EventConfig --> EventProbability : "概率分布"
|
||||
EventType --> StageRule : "配置概率"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L50-L75)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L35-L40)
|
||||
|
||||
### 事件触发机制
|
||||
|
||||
事件系统采用累积概率算法确保公平性:
|
||||
事件系统采用概率算法触发特殊效果:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Player as 玩家
|
||||
participant System as 事件系统
|
||||
participant RNG as 随机数生成器
|
||||
participant Effect as 效果处理器
|
||||
Player->>System : 进入事件关卡
|
||||
System->>RNG : 生成随机数(0-1)
|
||||
RNG-->>System : 返回随机值
|
||||
System->>System : 累积概率计算
|
||||
alt 随机数 ≤ 0.3
|
||||
System->>Effect : 触发宝藏事件
|
||||
Effect->>Player : 增加50金币
|
||||
else 随机数 ≤ 0.55
|
||||
System->>Effect : 触发陷阱事件
|
||||
Effect->>Player : 造成伤害
|
||||
else 随机数 ≤ 0.8
|
||||
System->>Effect : 触发增益事件
|
||||
Effect->>Player : 获得临时增益
|
||||
else 随机数 > 0.8
|
||||
System->>Effect : 触发减益事件
|
||||
Effect->>Player : 造成临时减益
|
||||
end
|
||||
```typescript
|
||||
// 额外怪物出现概率
|
||||
if (Math.random() < StageRule.extraMonsterRate) {
|
||||
// 生成第6个怪物
|
||||
}
|
||||
|
||||
// 事件怪物出现概率
|
||||
if (Math.random() < StageRule.eventMonsterRate) {
|
||||
// 替换一个普通怪物为事件怪物
|
||||
}
|
||||
|
||||
// 特殊属性怪物出现概率
|
||||
if (Math.random() < StageRule.specialAttributeRate) {
|
||||
// 为1-2个怪物添加特殊属性
|
||||
}
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L295-L311)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L50-L75)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L295-L311)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L45-L56)
|
||||
|
||||
## 动态难度计算
|
||||
|
||||
@@ -308,33 +273,32 @@ end
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[关卡号] --> B[阶段倍率计算]
|
||||
C[等级] --> D[等级倍率计算]
|
||||
B --> E[基础倍率 = 1 + (关卡号-1) × 0.1]
|
||||
D --> F[等级倍率 = 1 + (等级-1) × 0.05]
|
||||
E --> G[总倍率 = 阶段倍率 × 等级倍率]
|
||||
F --> G
|
||||
G --> H[应用到怪物属性]
|
||||
H --> I[HP = 基础HP × 总倍率]
|
||||
H --> J[AP = 基础AP × 总倍率]
|
||||
H --> K[DEF = 基础DEF × 总倍率]
|
||||
A[怪物类型] --> B[属性倍率表]
|
||||
B --> C[HP_MAX]
|
||||
B --> D[AP]
|
||||
B --> E[DEF]
|
||||
B --> F[MAP]
|
||||
B --> G[MDEF]
|
||||
C --> H[最终属性 = 基础属性 × 等级 × 类型倍率]
|
||||
D --> H
|
||||
E --> H
|
||||
F --> H
|
||||
G --> H
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L177-L185)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L69-L73)
|
||||
|
||||
### 难度曲线特征
|
||||
|
||||
| 关卡范围 | 等级要求 | 强度倍率 | 怪物数量 | 挑战特点 |
|
||||
|---------|---------|---------|---------|---------|
|
||||
| 1-9 | 1-4级 | 1.0-1.4 | 2-6只 | 渐进适应 |
|
||||
| 1-9 | 5级 | 1.4-1.8 | 3-6只 | 中等挑战 |
|
||||
| 10 | 1-3级 | 1.9-2.3 | 3-6只 | 高强度 |
|
||||
| 10 | 4级 | 2.4-2.8 | 3-6只 | 极限挑战 |
|
||||
| 10 | 5级 | 2.9-3.3 | 3-6只 | 终极考验 |
|
||||
| 怪物类型 | HP_MAX | AP | DEF | MAP | MDEF | 挑战特点 |
|
||||
|---------|-------|----|-----|-----|------|---------|
|
||||
| 普通怪物 | 1.1x | 1.05x | 1.05x | 1.05x | 1.05x | 基础挑战 |
|
||||
| 精英怪物 | 2.0x | 1.1x | 1.1x | 1.1x | 1.1x | 中等挑战 |
|
||||
| Boss怪物 | 5.0x | 2.0x | 2.0x | 2.0x | 2.0x | 终极挑战 |
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L177-L185)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L69-L73)
|
||||
|
||||
## 关卡生成流程
|
||||
|
||||
@@ -350,14 +314,9 @@ participant RC as RogueConfig
|
||||
participant MM as MapModel
|
||||
participant M as Monster
|
||||
MC->>RM : do_mon_wave()
|
||||
RM->>RC : getStageType(stageNumber, level)
|
||||
RC-->>RM : StageType
|
||||
RM->>RC : getStageMonsterConfigs(stageNumber, level)
|
||||
RC->>RC : generateStageConfig()
|
||||
RC->>RC : calculateMonsterCount()
|
||||
RC->>RC : calculateMonsterStrengthMultiplier()
|
||||
RM->>RC : getStageMonConfigs(stageNumber)
|
||||
RC-->>RM : 怪物配置数组
|
||||
RM->>RM : generateMonstersFromStageConfig()
|
||||
RM->>RM : generateMonsters()
|
||||
loop 每个怪物配置
|
||||
RM->>RM : addToStageSpawnQueue()
|
||||
end
|
||||
@@ -371,7 +330,7 @@ end
|
||||
|
||||
**图表来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L207-L247)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L95-L173)
|
||||
|
||||
### 怪物生成队列管理
|
||||
|
||||
@@ -394,10 +353,6 @@ stateDiagram-v2
|
||||
**图表来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L45-L85)
|
||||
|
||||
**章节来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L150-L180)
|
||||
|
||||
## 实际调用机制
|
||||
|
||||
系统在游戏运行时通过事件驱动的方式调用关卡配置功能。
|
||||
@@ -417,10 +372,9 @@ MC->>MC : to_fight()
|
||||
MC->>MMon : fight_ready()
|
||||
MMon->>MMon : do_mon_wave()
|
||||
Note over MMon : 开始关卡生成流程
|
||||
MMon->>RC : getStageType(currentStage, level)
|
||||
MMon->>RC : getStageMonsterConfigs(currentStage, level)
|
||||
MMon->>RC : getStageMonConfigs(currentStage)
|
||||
RC-->>MMon : 怪物配置数据
|
||||
MMon->>MMon : generateMonstersFromStageConfig()
|
||||
MMon->>MMon : generateMonsters()
|
||||
MMon->>MMon : addToStageSpawnQueue()
|
||||
loop 怪物生成循环
|
||||
MMon->>MMon : spawnNextMonster()
|
||||
@@ -457,30 +411,25 @@ end
|
||||
```typescript
|
||||
export enum EventType {
|
||||
// 现有类型...
|
||||
NEW_EVENT = "new_event" // 新增事件类型
|
||||
NEW_EVENT = 5 // 新增事件类型
|
||||
}
|
||||
```
|
||||
|
||||
2. **更新EventConfig配置**:
|
||||
2. **更新StageRule配置**:
|
||||
```typescript
|
||||
export const EventConfig = {
|
||||
export const StageRule = {
|
||||
// 现有配置...
|
||||
[EventType.NEW_EVENT]: {
|
||||
description: "新事件描述",
|
||||
probability: 0.15, // 新事件概率
|
||||
effect: "新事件效果"
|
||||
}
|
||||
newEventRate: 0.15, // 新事件概率
|
||||
specialAttributeCount: { min: 1, max: 2 }
|
||||
}
|
||||
```
|
||||
|
||||
3. **在事件处理函数中添加逻辑**:
|
||||
```typescript
|
||||
private processRandomEvent() {
|
||||
switch (this.currentEvent) {
|
||||
// 现有事件处理...
|
||||
case EventType.NEW_EVENT:
|
||||
// 实现新事件逻辑
|
||||
break;
|
||||
// 根据StageRule中的概率判断
|
||||
if (Math.random() < StageRule.newEventRate) {
|
||||
// 实现新事件逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -489,69 +438,72 @@ private processRandomEvent() {
|
||||
|
||||
可以通过修改以下参数来调整难度曲线:
|
||||
|
||||
1. **基础倍率调整**:
|
||||
1. **基础数量调整**:
|
||||
```typescript
|
||||
// 修改 StageConfigRules 中的怪物配置
|
||||
[StageType.NORMAL]: {
|
||||
monsters: [
|
||||
{ type: MonsterType.NORMAL, count: 3, minCount: 2, maxCount: 6 }
|
||||
// count: 基础数量
|
||||
// minCount/maxCount: 数量范围限制
|
||||
]
|
||||
export const StageRule = {
|
||||
MonsNum: 6, // 增加基础怪物数量
|
||||
LimitMonNum: 12, // 增加极限模式数量
|
||||
extraMonsterRate: 0.4, // 提高额外怪物概率
|
||||
}
|
||||
```
|
||||
|
||||
2. **强度倍率系数**:
|
||||
2. **属性倍率调整**:
|
||||
```typescript
|
||||
// 修改 calculateMonsterStrengthMultiplier 函数
|
||||
const stageMultiplier = 1 + (stageNumber - 1) * 0.15; // 增加每关倍率
|
||||
const levelMultiplier = 1 + (level - 1) * 0.08; // 增加每级倍率
|
||||
export const MonAttrSet = {
|
||||
[MonType.NORMAL]:{ HP_MAX:1.2, AP:1.1, MP:1.2, DEF:1.1, MDEF:1.1, MAP:1.1,},
|
||||
[MonType.ELITE]: { HP_MAX:2.5, AP:1.2, MP:1.2, DEF:1.2, MDEF:1.2, MAP:1.2,},
|
||||
[MonType.BOSS]: { HP_MAX:6, AP:2.5, MP:6, DEF:2.5, MDEF:2.5, MAP:2.5,},
|
||||
}
|
||||
```
|
||||
|
||||
### 平衡精英/Boss关卡
|
||||
|
||||
1. **调整精英怪物配置**:
|
||||
```typescript
|
||||
export const EliteMonsterList = [
|
||||
export const EliteMons = [
|
||||
5201, // 兽人战士
|
||||
5202, // 兽人刺客
|
||||
5203, // 兽人护卫
|
||||
// 添加更多精英怪物
|
||||
5204, // 新精英怪物
|
||||
5205 // 更强精英怪物
|
||||
5213, // 亡灵领主(精英)
|
||||
5214, // 死灵法师(召唤师)
|
||||
5215 // 祭司(治疗者)
|
||||
];
|
||||
```
|
||||
|
||||
2. **优化Boss关卡配置**:
|
||||
```typescript
|
||||
[StageType.BOSS]: {
|
||||
description: "Boss关卡",
|
||||
monsters: [
|
||||
{ type: MonsterType.BOSS, count: 1, minCount: 1, maxCount: 1 },
|
||||
{ type: MonsterType.ELITE, count: 3, minCount: 2, maxCount: 4 }, // 增加精英数量
|
||||
{ type: MonsterType.NORMAL, count: 4, minCount: 2, maxCount: 6 } // 增加普通怪物
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 自定义怪物池
|
||||
|
||||
如果需要添加特定类型的怪物:
|
||||
|
||||
1. **扩展怪物池**:
|
||||
```typescript
|
||||
// 在 RogueConfig.ts 中
|
||||
export const CustomMonsterList = [
|
||||
5301, // 自定义怪物1
|
||||
5302, // 自定义怪物2
|
||||
5303 // 自定义怪物3
|
||||
export const BossMons = [
|
||||
5201, // 兽人战士
|
||||
5202, // 兽人刺客
|
||||
5213, // 亡灵领主(精英)
|
||||
5216 // 光环幽灵(光环怪)
|
||||
];
|
||||
|
||||
// 在getStageMonConfigs中调整精英数量
|
||||
const eliteCount = isBossStage ? 2 : Math.floor(Math.random() * 2) + 1; // Boss关卡增加精英数量
|
||||
```
|
||||
|
||||
2. **在 getMonsterUUIDsByType 中添加分支**:
|
||||
### 自定义怪物属性
|
||||
|
||||
如果需要为特定怪物类型添加特殊属性:
|
||||
|
||||
1. **扩展Buff配置**:
|
||||
```typescript
|
||||
case MonsterType.CUSTOM:
|
||||
return CustomMonsterList;
|
||||
import { BuffConf, Attrs } from "../common/config/SkillSet";
|
||||
|
||||
// 在怪物生成时添加特殊属性
|
||||
monsterConfigs.push({
|
||||
uuid: specialUUID,
|
||||
buff: [{
|
||||
buff: Attrs.CRIT_UP,
|
||||
BType: BType.Ratio,
|
||||
value: 30,
|
||||
time: 999,
|
||||
chance: 100
|
||||
}],
|
||||
level: stage,
|
||||
monType: MonType.ELITE
|
||||
});
|
||||
```
|
||||
|
||||
## 性能优化建议
|
||||
|
||||
Reference in New Issue
Block a user