refactor(heroSpawn): 重构英雄出生点位分配逻辑
1. 新增按职业分三排出生规则:战士/坦克前排、射手/刺客中排、辅助/法师后排 2. 同职业重复召唤时按±20像素交替展开,避免落点重叠 3. 新增posIndex编码规则:role*10+n,同步登记heroGrid网格索引 4. 废弃旧的近战/远程分位逻辑,替换为职业映射规则 5. 修复旧版点位分配的槽位冲突问题,优化溢出兜底逻辑
This commit is contained in:
@@ -1,355 +0,0 @@
|
|||||||
# 英雄设计文档
|
|
||||||
> **前置约束**(已确认的设计原则):
|
|
||||||
> - 局内固定(战斗开始召唤的时候同)等级成长移交局外
|
|
||||||
> - 单场战斗 30 左右秒
|
|
||||||
> - card_lv 角色品质(1~5):初始基础数值带有品质增量,每升 1级都是按 20% 增量。
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 一、本系统可复用的"触发骨架"
|
|
||||||
|
|
||||||
| 触发类型 | 枚举 | 语义 | 几何王国对应场景 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| 战斗开始 | `SkillTriggerType.FStart` | 入场时触发 1 次 | 战吼、入场护盾 |
|
|
||||||
| 死亡触发 | `SkillTriggerType.Dead` | 死亡时触发 1 次 | 亡语、遗志 |
|
|
||||||
| 攻击触发 | `SkillTriggerType.Atking` | 普攻 N 次触发 | 概率普攻特效(t_num 模拟概率) |
|
|
||||||
| 受击触发 | `SkillTriggerType.Atked` | 被击 N 次触发 | 受击反击、叠甲 |
|
|
||||||
| 驻场光环 | `SkillTriggerType.Field` | 存活期间全局生效 | 光环类(移速/攻击/回血) |
|
|
||||||
| 复活 | `SkillTriggerType.Revive` | 死亡后复活 | 凤凰涅槃、尸骸存活 |
|
|
||||||
|
|
||||||
> **概率模拟技巧**:本系统无"概率触发"概念,用 `t_num` 计数模拟。
|
|
||||||
> - `t_num=1`:每次普攻都触发(最高频)
|
|
||||||
> - `t_num=3`:≈33% 概率
|
|
||||||
> - `t_num=4`:≈25% 概率(对应几何王国的"30% 概率")
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二、本系统可复用的"效果骨架"
|
|
||||||
|
|
||||||
### 2.1 SkillKind(技能主效果)
|
|
||||||
|
|
||||||
| 类型 | 字段 | 几何王国对应 |
|
|
||||||
|---|---|---|
|
|
||||||
| `SkillKind.Damage` | `ap` 百分比伤害 | 大招、战技伤害 |
|
|
||||||
| `SkillKind.Heal` | `ap` 治疗量 | 治疗、吸血 |
|
|
||||||
| `SkillKind.Shield` | `ap` 护盾层数(数值减免) | 暗光之盾、守护壁垒 |
|
|
||||||
| `SkillKind.Support` | `buff_type` + `timed_buff_id` | 属性强化、限时增益 |
|
|
||||||
| `SkillKind.Gold` | `gold` 金币数 | (本局不适用) |
|
|
||||||
|
|
||||||
### 2.2 击杀特效字段
|
|
||||||
|
|
||||||
| 字段 | 含义 | 几何王国对应 |
|
|
||||||
|---|---|---|
|
|
||||||
| `crt` | 额外暴击率 | 致命一击 |
|
|
||||||
| `frz` | 额外冰冻概率 | 寒冰攻击 |
|
|
||||||
| `stun` | 额外击晕概率 | 眩晕 |
|
|
||||||
| `bck` | 击退距离增量 | 击退(雷霆一击、剑刃风暴) |
|
|
||||||
| `hit_count` | 命中目标数 | 多段攻击(乱棍、剑刃风暴) |
|
|
||||||
| `puncture_chance` | 穿透概率 | 穿透(暗器大师) |
|
|
||||||
|
|
||||||
### 2.3 BuffList 已有 DoT / HoT / 控制
|
|
||||||
|
|
||||||
| Buff ID | 名称 | 类型 | 几何王国对应 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| 7002 | 灼烧 | Debuff DoT(-10 伤害/0.5s,吃 30% 攻击加成) | 剧毒利刃、火系持续伤害 |
|
|
||||||
| 7003 | 冰冻 | Control(2s) | 冰冻 |
|
|
||||||
| 7004 | 击晕 | Control(2s) | 眩晕、沉默(替代) |
|
|
||||||
| 7010 | 再生 | Buff HoT(+10 治疗/0.5s) | 持续回血 |
|
|
||||||
| 7011 | 攻击爆发 | Buff(+50% 攻击 5s) | 大圣归来、剑圣 1 觉 |
|
|
||||||
| 7012 | 暴击爆发 | Buff(+30% 暴击 5s) | 暴击强化 |
|
|
||||||
| 7017 | 击晕爆发 | Buff(+30% 击晕 5s) | 群体眩晕强化 |
|
|
||||||
| 7111 | 战前强攻 | Buff(+30 攻击 5s) | 开场增益 |
|
|
||||||
|
|
||||||
### 2.4 FieldSkillType 已有光环
|
|
||||||
|
|
||||||
| 类型 | 几何王国对应 |
|
|
||||||
|---|---|
|
|
||||||
| `HeroAtk` | 攻击光环(人鱼公主、邪恶光环) |
|
|
||||||
| `HeroCrit` / `HeroCritDamage` | 暴击光环 |
|
|
||||||
| `HeroSpeed` | 攻速光环 |
|
|
||||||
| `HeroHp` | 生命光环 |
|
|
||||||
| `HeroStun` / `HeroWindFury` / `HeroPuncture` | 特殊光环 |
|
|
||||||
| `WaveHeal` | 战后回血(30s 短局可改为局内 HoT) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 三、可直接复刻(零代码改动)
|
|
||||||
|
|
||||||
> 仅通过 `heroSet.ts` 配置 + 复用现有 SkillSet / BuffList 即可实现。
|
|
||||||
|
|
||||||
### 3.1 剧毒女王(Mage,复刻"深渊女王·剧毒利刃")
|
|
||||||
|
|
||||||
**核心机制**:普攻触发灼烧 DoT,叠加毒伤害。
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.Atking]: {
|
|
||||||
// 每次普攻上灼烧 DoT(已存在 BuffList 7002)
|
|
||||||
6101: [{ lv: 1, t_num: 1, overrides: { timed_buff_id: 7002, buff_duration: 5 } }],
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
**复刻自**:深渊女王·剧毒利刃(普攻 30% 概率 200% 法伤 + 减益)。
|
|
||||||
**适配调整**:30s 战斗节奏快,`t_num=1` 100% 触发,但单层 DoT 数值调低以平衡。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.2 猴王·乱棍(Assassin,复刻"至尊宝·大圣归来")
|
|
||||||
|
|
||||||
**核心机制**:普攻触发多段伤害+击晕。
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.Atking]: {
|
|
||||||
// 每次普攻触发 4 段 30% 伤害 + 高击晕
|
|
||||||
6006: [{ lv: 1, t_num: 1, overrides: { ap: 30, hit_count: 4, stun: 30 } }],
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
**复刻自**:至尊宝·大圣归来(乱棍 4 次 ×30% 物伤 + 眩晕)。
|
|
||||||
**适配调整**:去除"召唤虚影+攻击+25%"(与本系统能量体系冲突),保留多段+击晕核心。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.3 剑圣·疾风(Warrior,复刻"剑圣·剑刃风暴+吸血面罩")
|
|
||||||
|
|
||||||
**核心机制**:高伤范围 + 击退 + 普攻吸血。
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.Atking]: {
|
|
||||||
// 普攻触发 360% 范围伤害 + 击退
|
|
||||||
6107: [{ lv: 1, t_num: 1, overrides: { ap: 150, bck: 30 } }],
|
|
||||||
// 普攻吸血 35%
|
|
||||||
6302: [{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Self, ap: 35 } }],
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
**复刻自**:剑圣·剑刃风暴(360% 物伤 + 击退) + 吸血面罩(普攻 35% 吸血)。
|
|
||||||
**适配调整**:`t_num=1` 高频触发,单场 30s 内吸血量需调平衡。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.4 壁垒贤者(Support,复刻"哀木涕·守护壁垒")
|
|
||||||
|
|
||||||
**核心机制**:开场全队护盾 + 驻场生命光环。
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.FStart]: {
|
|
||||||
// 开场全队护盾(数值减免型)
|
|
||||||
6301: [{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Team, ap: 5 } }],
|
|
||||||
},
|
|
||||||
[SkillTriggerType.Field]: [
|
|
||||||
// 驻场生命光环
|
|
||||||
{ lv: 1, s_uuid: 7007, value: 15 }, // +15% 最大生命
|
|
||||||
],
|
|
||||||
```
|
|
||||||
|
|
||||||
**复刻自**:哀木涕·守护壁垒(开场 10% 最大生命护盾 + 防御光环)。
|
|
||||||
**适配调整**:本系统护盾是"数值减免"非"层数",ap 字段意义不同,需重新校准数值。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.5 凤凰祭司(Warrior,复刻"死亡守护 + 复活")
|
|
||||||
|
|
||||||
**核心机制**:死亡时为最低血友军回血 + 自身可复活。
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.Dead]: {
|
|
||||||
// 死亡守护:死亡时为最低血友军回血
|
|
||||||
6302: [{ lv: 1, t_num: 1, overrides: { ap: 50 } }],
|
|
||||||
},
|
|
||||||
[SkillTriggerType.Revive]: [
|
|
||||||
// 复活:死亡后 1 次 50% 血复活
|
|
||||||
{ lv: 1, s_uuid: 6501, r_num: 1, upr: 50 },
|
|
||||||
],
|
|
||||||
```
|
|
||||||
|
|
||||||
**复刻自**:通用觉醒·死亡守护(10% 最大生命回血) + 黑暗骑士 3 觉(尸骸存活)。
|
|
||||||
**适配调整**:30s 战斗中复活价值高,`r_num=1` 限定 1 次。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.6 暗影骑士(Tank,复刻"黑暗骑士·死亡缠绕")
|
|
||||||
|
|
||||||
**核心机制**:普攻治疗血少友军 + 受击反击自盾。
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.Atking]: {
|
|
||||||
// 普攻触发治疗(自动选血量最低友方,引擎已支持)
|
|
||||||
6302: [{ lv: 1, t_num: 1, overrides: { ap: 220 } }],
|
|
||||||
},
|
|
||||||
[SkillTriggerType.Atked]: {
|
|
||||||
// 受击触发自身护盾
|
|
||||||
6301: [{ lv: 1, t_num: 1, overrides: { TGroup: TGroup.Self, ap: 3 } }],
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
**复刻自**:黑暗骑士·死亡缠绕(普攻 25% 概率 220% 真伤/治疗友方)。
|
|
||||||
**适配调整**:本系统暂无"真伤",用高治疗量替代。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.7 风暴歌者(Mage,复刻"深渊女王·超声波")
|
|
||||||
|
|
||||||
**核心机制**:范围伤害 + 群体击退。
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.Atking]: {
|
|
||||||
// 范围伤害 + 群体击退
|
|
||||||
6108: [{ lv: 1, t_num: 1, overrides: { ap: 200, bck: 50, hit_count: 6 } }],
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
**复刻自**:深渊女王·超声波(伤害 + 击退控制)。
|
|
||||||
**适配调整**:`bck` 字段直接对应击退距离增量,无需新增机制。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 3.8 战吼先锋(Warrior,复刻"光明骑士·光明守护")
|
|
||||||
|
|
||||||
**核心机制**:开场全队增益 + 持续回血。
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.FStart]: {
|
|
||||||
// 开场全队攻击强化
|
|
||||||
6401: [{ lv: 1, t_num: 1, overrides: { ap: 30 } }],
|
|
||||||
// 开场全队持续回血
|
|
||||||
6502: [{ lv: 1, t_num: 1, overrides: { timed_buff_id: 7010, buff_duration: 10 } }],
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
**复刻自**:光明骑士·光明守护(清异常 + 加防 + 持续治疗)。
|
|
||||||
**适配调整**:本系统无"解控"概念,30s 战斗也不需要,改为纯增益 + HoT。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 四、需要小幅扩展即可复刻
|
|
||||||
|
|
||||||
### 4.1 反伤罗刹(Tank,复刻"剑豪·罗生门")
|
|
||||||
|
|
||||||
**缺失机制**:本系统无"反伤"属性。
|
|
||||||
|
|
||||||
**扩展方案**:
|
|
||||||
1. `HeroAttrs.ts` 的 `Attrs` 枚举新增 `thorns = "thorns"`(反伤数值)
|
|
||||||
2. `HeroAttrsComp.ts` 新增字段 `thorns: number = 0`
|
|
||||||
3. 战斗结算时,受击方对攻击者造成 `thorns` 点固定伤害
|
|
||||||
4. `SkillConfig` 新增 `thorns?: number` 用于 Support 技能附加反伤 buff
|
|
||||||
|
|
||||||
**复刻配置**:
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.Atked]: {
|
|
||||||
// 受击触发护盾 + 反伤 buff(5s 内反伤 30 点)
|
|
||||||
6301: [{ lv: 1, t_num: 1, overrides: { ap: 5 } }],
|
|
||||||
6401: [{ lv: 1, t_num: 1, overrides: { buff_type: Attrs.thorns, timed_buff_id: 7030 } }],
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 4.2 真伤刺客(Assassin,复刻"玉面狐妖·真伤")
|
|
||||||
|
|
||||||
**缺失机制**:本系统伤害公式只支持 `ap × 系数`,无"按目标最大生命百分比伤害"。
|
|
||||||
|
|
||||||
**扩展方案**:
|
|
||||||
1. `SkillConfig` 新增 `target_hp_pct?: number`(按目标最大生命百分比扣血)
|
|
||||||
2. 伤害结算时,若技能含此字段,额外造成 `target.hp_max × target_hp_pct / 100` 伤害
|
|
||||||
|
|
||||||
**复刻配置**:
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.Atking]: {
|
|
||||||
// 普攻附带 3% 目标最大生命真伤
|
|
||||||
6001: [{ lv: 1, t_num: 1, overrides: { ap: 100, /* 需新增 target_hp_pct: 3 */ } }],
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 4.3 重伤诅咒(Mage,复刻"巫妖王·重伤")
|
|
||||||
|
|
||||||
**缺失机制**:本系统无"降低治疗效果"属性。
|
|
||||||
|
|
||||||
**扩展方案**:
|
|
||||||
1. `Attrs` 新增 `heal_reduce = "heal_reduce"`(百分比降低受治疗)
|
|
||||||
2. 治疗结算时,实际治疗量 = 原治疗量 × (1 - heal_reduce/100)
|
|
||||||
|
|
||||||
**复刻配置**:
|
|
||||||
```typescript
|
|
||||||
[SkillTriggerType.Atking]: {
|
|
||||||
// 普攻附带重伤 debuff(敌方受治疗 -50%)
|
|
||||||
6101: [{ lv: 1, t_num: 1, overrides: { /* 需新增 heal_reduce 机制 */ } }],
|
|
||||||
},
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 五、不建议复刻
|
|
||||||
|
|
||||||
| 类型 | 代表技能 | 原因 |
|
|
||||||
|---|---|---|
|
|
||||||
| **能量/大招系统** | 所有英雄的"大招" | 本系统无能量条,技能全靠触发器,无法承载"释放大招"概念 |
|
|
||||||
| **解控** | 光明洗礼、暗黑盾解控 | 30s 战斗节奏快,控制时间仅 2~3s,解控价值极低 |
|
|
||||||
| **多段位移/分身** | 炼狱鬼斩、大圣虚影 | 视觉表现层复杂,ECS 弹道模型难承载"幻影穿梭" |
|
|
||||||
| **沉默 / 减能** | 潮壮壮、海拉 | 本系统无主动技能,沉默无目标可作用 |
|
|
||||||
| **长期叠层** | 剑圣 1 觉(30% 防御转攻击,永久) | 30s 战斗内永久叠层易失衡 |
|
|
||||||
| **按当前生命%伤害** | 女王尖啸(18% 当前生命) | 与"按最大生命%"相比,30s 短局内波动过大,难平衡 |
|
|
||||||
| **击退抗性 / 减速抗性** | 剑豪红武、酒仙 | 本系统已有 `knockback_res`,但减速概念不存在 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 六、复刻优先级矩阵
|
|
||||||
|
|
||||||
| 优先级 | 英雄 | 复刻难度 | 设计价值 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| **P0(必做)** | 剧毒女王 | ✅ 零代码 | 引入 DoT 体系,丰富伤害维度 |
|
|
||||||
| **P0** | 猴王·乱棍 | ✅ 零代码 | 多段伤害+击晕,近战核心 |
|
|
||||||
| **P0** | 剑圣·疾风 | ✅ 零代码 | 范围+击退+吸血,全能战士 |
|
|
||||||
| **P1(推荐)** | 壁垒贤者 | ✅ 零代码 | 团队防御核心 |
|
|
||||||
| **P1** | 凤凰祭司 | ✅ 零代码 | 复活机制已有,强化死亡触发 |
|
|
||||||
| **P1** | 暗影骑士 | ✅ 零代码 | 治疗型坦克,差异化定位 |
|
|
||||||
| **P2(可选)** | 风暴歌者 | ✅ 零代码 | 范围控制,与剧毒女王互补 |
|
|
||||||
| **P2** | 战吼先锋 | ✅ 零代码 | 开场增益,节奏型辅助 |
|
|
||||||
| **P3(扩展后做)** | 反伤罗刹 | ⚙️ 需新增 thorns | 反伤 META,针对高攻速敌人 |
|
|
||||||
| **P3** | 真伤刺客 | ⚙️ 需新增 target_hp_pct | 针对高血量 Boss |
|
|
||||||
| **P3** | 重伤诅咒 | ⚙️ 需新增 heal_reduce | 针对治疗队 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 七、新增机制工作量评估
|
|
||||||
|
|
||||||
| 机制 | 改动文件 | 改动量 | 风险 |
|
|
||||||
|---|---|---|---|
|
|
||||||
| **反伤 thorns** | HeroAttrs.ts + HeroAttrsComp.ts + 战斗结算 | ~50 行 | 低(独立属性) |
|
|
||||||
| **按最大生命%伤害** | SkillSet.ts + 伤害结算 | ~30 行 | 低(额外乘区) |
|
|
||||||
| **减疗 heal_reduce** | HeroAttrs.ts + HeroAttrsComp.ts + 治疗结算 | ~40 行 | 低(独立乘区) |
|
|
||||||
| **敌方 Support 技能** | SCastSystem.ts | ~20 行 | 中(需测试目标选择) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 八、与原"20 回合制"的兼容性
|
|
||||||
|
|
||||||
本设计文档基于 **1 回合定生死** 机制,所有数值均按 **30 秒战斗窗口** 校准:
|
|
||||||
|
|
||||||
- `t_num=1` 触发:30s 内普攻 30~50 次,技能触发 30~50 次
|
|
||||||
- DoT/HoT 持续 5s:覆盖 1/6 战斗时长,效果显著但不至于"挂上就赢"
|
|
||||||
- 复活 `r_num=1`:单场战斗最多 1 次,价值极高但可控
|
|
||||||
- 驻场光环 `value=15%`:30s 内持续生效,等价于"永久"(单场)
|
|
||||||
|
|
||||||
若未来回归多回合制,需重新校准:
|
|
||||||
- `t_num` 提高到 2~4(降低触发频率)
|
|
||||||
- DoT/HoT 持续时间延长至 10~15s
|
|
||||||
- 复活次数可放开到 2~3 次
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 九、下一步行动
|
|
||||||
|
|
||||||
1. **确认 P0 英雄清单**:是否按本方案复刻 8 个英雄?
|
|
||||||
2. **数值校准**:是否需要先用 `calcHeroPower` 公式推导每个英雄的目标强度锚点?
|
|
||||||
3. **新增机制决策**:是否在第 1 阶段引入反伤/真伤/减疗?还是先纯配置复刻?
|
|
||||||
4. **编写 heroSet.ts 配置**:确认后我可以直接输出可粘贴的 TypeScript 配置代码。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**文档版本**:v1.0
|
|
||||||
**创建日期**:2026-08-14
|
|
||||||
**作者**:AI Assistant
|
|
||||||
**关联文档**:[heroSet.ts](./heroSet.ts) / [SkillSet.ts](./SkillSet.ts) / [BuffSet.ts](./BuffSet.ts) / [几何王国英雄技能汇总.md](./几何王国英雄技能汇总.md)
|
|
||||||
123
assets/script/game/common/config/几何王国英雄复刻建议.md
Normal file
123
assets/script/game/common/config/几何王国英雄复刻建议.md
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
# 几何王国英雄复刻建议
|
||||||
|
|
||||||
|
> 依据:[英雄设计方案.md](./英雄设计方案.md) 能力池(2.1~2.6)+ 触发骨架 vs [几何王国英雄技能汇总.md](./几何王国英雄技能汇总.md)。
|
||||||
|
> 原则:技能底座纯净化,效果由 `overrides` 注入;数值仅作档位参考,落地按 30s 单场节奏调平。
|
||||||
|
|
||||||
|
## 复刻度分级说明
|
||||||
|
- **A 级(可直接复刻)**:核心机制在能力池中均有对应,仅需组合 + 数值覆盖
|
||||||
|
- **B 级(近似复刻)**:核心机制可复刻,个别特效需简化或替代
|
||||||
|
- **C 级(不建议)**:依赖本系统没有的机制(真伤/能量/沉默/减疗/护盾转治疗等)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、A 级 · 可直接复刻
|
||||||
|
|
||||||
|
### 1. 深渊女王(法师 · 群体输出+控制) ★首选
|
||||||
|
| 几何王国技能 | 本系统映射 |
|
||||||
|
|---|---|
|
||||||
|
| 大招「超声波」伤害+击退 | skills[1]=6104 气斩 + `overrides: { bck: 击退增量 }` |
|
||||||
|
| 剧毒利刃(普攻30%淬毒) | lv2 atking:6001 系普攻 + `overrides: { timed_buff_id: 7005(中毒) }`,t_num=3 模拟 30% |
|
||||||
|
| 强化声波(击退+30%) | lv3/5 提升 `bck` 档位 |
|
||||||
|
| 女王尖啸(第20秒全场失去18%当前生命+眩晕2秒,每场1次) | lv7 大招升级:6111 群体闪电 + `overrides: { timed_buff_id: 7004(击晕) }`;"失去当前生命%"简化为高 ap 直接伤害 |
|
||||||
|
| 攻击增强 +25% | lv9(card_lv 4/5)攻击光环 7002 |
|
||||||
|
|
||||||
|
**推荐配置**:普攻 6013 闪电术;大招 6104 气斩(击退)→ 6111 群体闪电(击晕);光环 HeroAtk。
|
||||||
|
|
||||||
|
### 2. 剑圣(前排输出 · 暴击+击退)
|
||||||
|
| 几何王国技能 | 本系统映射 |
|
||||||
|
|---|---|
|
||||||
|
| 大招「剑刃风暴」360%伤害+全体击退 | skills[1]=6103 光闪 / 6104 气斩 + `overrides: { ap: 360, bck }` |
|
||||||
|
| 致命一击(普攻35%造成1.5~2.2倍伤害) | lv2 atking:`crt` 提升(暴击≈双倍伤害),t_num=3 模拟 35% |
|
||||||
|
| 分身斩(每隔一段时间5次伤害) | lv5 大招升级:`overrides: { hit_count: 5 }` 或 `num: 2` 多段释放 |
|
||||||
|
| 攻防转换(防御转攻击) | lv9 攻击光环 7002(简化) |
|
||||||
|
|
||||||
|
**推荐配置**:普攻 6001 飞剑;大招 6103 光闪(可叠出血 7007 走暴击流);光环 HeroCrit 7004。
|
||||||
|
|
||||||
|
### 3. 剑豪(前排战士 · 反击+减益)
|
||||||
|
| 几何王国技能 | 本系统映射 |
|
||||||
|
|---|---|
|
||||||
|
| 大招「炼狱鬼斩」6次斩击+击退 | skills[1]=6103 光闪 + `overrides: { hit_count: 6, bck }` |
|
||||||
|
| 三十六烦恼凤(每10秒剑气500%) | lv2 fstart 或 atking:6101 火焰喷射 + `overrides: { ap: 500 }` |
|
||||||
|
| 强化斩击(命中高攻目标降15%攻击) | lv3 大招 + `overrides: { timed_buff_id: 7006(减攻) }`(取消"攻击高于自己"条件,简化为命中即降) |
|
||||||
|
| 罗生门(每损失25%生命生成屏障+反伤) | lv5 atked:6301 护盾 + `overrides: { ap: 抵挡次数 }`(反伤机制暂无,简化为纯护盾) |
|
||||||
|
| 修罗之道(斩击附加真伤+降击退抗性) | lv7:`ap` 提升 + `bck` 提升(真伤与击退抗性机制暂无,用数值替代) |
|
||||||
|
|
||||||
|
**推荐配置**:普攻 6004 攻击;大招 6103 光闪;lv5 atked 护盾;光环 AtkCount 7018。
|
||||||
|
|
||||||
|
### 4. 巫妖王(法师 · 冰冻控制)
|
||||||
|
| 几何王国技能 | 本系统映射 |
|
||||||
|
|---|---|
|
||||||
|
| 减速+冰冻能力 | lv2 atking:6014 火球术底座 + `overrides: { timed_buff_id: 7003(冰冻) }` |
|
||||||
|
| 连环霜冻(多段控制) | lv3/5 大招:6107 万剑朝宗 + `overrides: { frz }` 或 `timed_buff_id: 7003` |
|
||||||
|
| 重伤(减治疗,核心稀缺能力) | **暂无可映射**(见 B 级说明),可用减攻 7006 替代削弱敌方输出 |
|
||||||
|
|
||||||
|
**推荐配置(去重伤版)**:普攻 6014 火球术+冰冻;大招 6107 万剑朝宗+冰冻;光环 HeroStun 7003。定位为纯控制法师。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、B 级 · 近似复刻(需简化)
|
||||||
|
|
||||||
|
### 5. 黑暗骑士(前排主坦)
|
||||||
|
- **可复刻**:大招护盾→6301 护盾 + `ap` 次数;死亡后尸骸存活 3.5 秒→`SkillTriggerType.Revive` + 6501 复活(`ap` 调低如 20%,象征"短暂残存")
|
||||||
|
- **需简化**:护盾转化为生命(无此机制);缠绕的真实伤害(无真伤,用高 ap 替代);减速抗性/沉默(无对应属性)
|
||||||
|
- **建议**:定位"护盾+复活坦",大招 6301,lv7 解锁 6501 复活,光环 HeroHp 7007 + BeAtkCount 7019
|
||||||
|
|
||||||
|
### 6. 光明骑士(前排辅助)
|
||||||
|
- **可复刻**:全队防御+30%→6412 防御强化(`overrides.ap` 调档)或 7023/7024 防御 buff;每秒治疗→6302 治疗 / 7010 再生 HoT
|
||||||
|
- **需简化**:清除异常状态(无解控机制);能量回复(无能量系统)
|
||||||
|
- **建议**:大招 6302 治疗,lv2 fstart 6412 防御强化,光环 HeroHp 7007
|
||||||
|
|
||||||
|
### 7. 酒仙(推进控制)
|
||||||
|
- **可复刻**:雷霆一击(范围减速+强力击退)→6104 气斩 + `bck`;酒雾火焰(伤害+重伤)→6101 火焰喷射 + 易伤 7002("重伤"用易伤替代,同为放大伤害)
|
||||||
|
- **需简化**:击退抗性+100%/免控 75%/伤害减免(无对应抗性细分)
|
||||||
|
- **建议**:大招 6104 气斩,lv2 atking 附加 7002 易伤,光环 HeroAtk 7002
|
||||||
|
|
||||||
|
### 8. 齐天大圣(全能战士)
|
||||||
|
- **可复刻**:定海神针(前排范围眩晕)→6108 开山斧 + `overrides: { stun }` / `timed_buff_id: 7004`;高额暴击→`crt` + 暴伤爆发 7020
|
||||||
|
- **建议**:普攻 6003 飞斧;大招 6108 开山斧(击晕);lv2 `crt` 强化;光环 HeroCritDamage 7005
|
||||||
|
|
||||||
|
### 9. 斧头系坦克(斧小王觉醒模板)
|
||||||
|
- **可复刻**:坚硬皮肤(受伤叠防御,最多12层)→atked 触发 + 7023 防御强化(max_stack 覆写层数);嗜血战斧(释放技能回血)→6302 治疗自疗
|
||||||
|
- **建议**:普攻 6003 飞斧;lv2 atked 叠防御;大招 6104 气斩;光环 HeroHp 7007
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、C 级 · 不建议复刻(机制缺口)
|
||||||
|
|
||||||
|
| 英雄 | 缺失机制 | 缺口说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| 复仇者(流血穿后排) | 目标选择"后排"逻辑 | 本系统 DTType 仅 single/range/aoe_grid,无"优先后排";流血可用 7007 出血替代,但穿透定位失效 |
|
||||||
|
| 玉面狐妖 / 神罗战士 / 李白 | 真实伤害 | 无无视防御的伤害类型;可用破甲 7008 + 高 ap 近似,但失去"真伤"特色 |
|
||||||
|
| 潮壮壮 / 海拉 / 沉默 / 疾风忍者 | 沉默、减能 | 无沉默与能量系统 |
|
||||||
|
| 术士 / 爷爷(葫芦爷爷) | 回能、减能、减疗 | 无能量系统与减疗机制 |
|
||||||
|
| 骷髅王 | 敌方全体诅咒 | 可用 debuff 近似,但"诅咒"语义宽泛,缺乏特色 |
|
||||||
|
| 月之女 | 技能叠伤害成长 | 无"每次释放递增"计数器机制 |
|
||||||
|
| 铁扇公主 | 以自身为中心的范围光环 | Field 光环为全局生效,无"范围限定"概念,近似即可但特色弱化 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、复刻落地清单(按优先级)
|
||||||
|
|
||||||
|
| 优先级 | 英雄 | card_lv 建议 | 核心组合 | 一句话卖点 |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| P0 | 深渊女王 | 4 | 6104 气斩击退 + 7005 中毒 + 7004 击晕 + 攻击光环 | 群体击退+毒+控场法师 |
|
||||||
|
| P0 | 剑圣 | 5 | 6103 光闪多段 + `crt` + 7007 出血 + 暴击光环 | 暴击流血剑圣 |
|
||||||
|
| P1 | 巫妖王 | 4 | 6107 万剑朝宗 + 7003 冰冻 + 击晕光环 | 连环冰冻控制 |
|
||||||
|
| P1 | 齐天大圣 | 5 | 6108 开山斧 + `stun` + 7004 击晕 + 暴伤光环 | 范围眩晕+暴击 |
|
||||||
|
| P1 | 剑豪 | 4 | 6103 光闪 + 7006 减攻 + atked 6301 护盾 | 反击减益战士 |
|
||||||
|
| P2 | 黑暗骑士 | 5 | 6301 护盾 + 6501 复活 + 生命光环 | 不死护盾主坦 |
|
||||||
|
| P2 | 光明骑士 | 4 | 6302 治疗 + 6412 防御强化 + 生命光环 | 防御治疗辅助 |
|
||||||
|
| P2 | 酒仙 | 3 | 6104 气斩 + 7002 易伤 + 攻击光环 | 击退易伤推进 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、机制缺口备忘(若后续扩展系统可回填)
|
||||||
|
|
||||||
|
复刻中反复出现的缺失机制,按需求频次排序,供系统迭代参考:
|
||||||
|
|
||||||
|
1. **真实伤害**(复仇者/狐妖/剑圣/李白/哪吒)——可考虑新增 DType.TRUE 跳过 defense 结算
|
||||||
|
2. **沉默/减能**(潮壮壮/海拉/术士/爷爷)——需能量系统 + 控制类 control_kind 扩展
|
||||||
|
3. **减疗/重伤**(巫妖王/酒仙/剑圣)——需治疗结算钩子,按百分比衰减
|
||||||
|
4. **解控/清异常**(黑暗骑士/光明骑士)——需 buffManager 清除接口
|
||||||
|
5. **目标选择策略**(复仇者打后排、剑豪打高攻)——需 DTType 扩展目标筛选器
|
||||||
|
6. **护盾转治疗/受伤转化**(黑暗骑士/至尊宝)——需护盾结算后事件
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"ver": "1.0.1",
|
"ver": "1.0.1",
|
||||||
"importer": "text",
|
"importer": "text",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "4b91da8c-0510-4f36-a3f7-b78ec260c1f9",
|
"uuid": "523a2661-6d50-40ad-b6e0-e4994bbff9f2",
|
||||||
"files": [
|
"files": [
|
||||||
".json"
|
".json"
|
||||||
],
|
],
|
||||||
121
assets/script/game/common/config/英雄设计方案.md
Normal file
121
assets/script/game/common/config/英雄设计方案.md
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
# 英雄设计文档
|
||||||
|
> **前置约束**(已确认的设计原则):
|
||||||
|
> - 局内固定(战斗开始召唤的时候同)等级成长移交局外(局外等级与碎片数量)
|
||||||
|
> - 单场战斗 30 左右秒
|
||||||
|
> - card_lv 角色品质(1~5):初始基础数值带有品质增量,每升 1级都是按 20% 增量。
|
||||||
|
> - 初始 技能 普通攻击和大招 skills[0]、skills[1](对应"普通攻击"、"大招"),| 复活 | `SkillTriggerType.Revive` | 属于大招
|
||||||
|
> - lv2: atking/atked/fstart 提升普通攻击能力,atking/atked 附加临时buff,fstart 局内持久 buff
|
||||||
|
> - lv3/lv5/lv7: skills[1] 提升大招能力,攻击附加 buff 或 debuff
|
||||||
|
> - lv9 card_lv 4/5 英雄新增能力驻场光环;card_lv 1/2/3 额外提升基础属性30/40/50%
|
||||||
|
> - 能力的附加 采用引用+数值覆盖 skillset 和 bufflist(skillset 和 bufflist是底座,已存在能力就不能添加,只要数值替代就可以)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、本系统可复用的"触发骨架"
|
||||||
|
| 触发类型 | 枚举 | 语义 | 几何王国对应场景 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 战斗开始 | `SkillTriggerType.FStart` | 入场时触发 1 次 | 战吼、入场护盾 |
|
||||||
|
| 死亡触发 | `SkillTriggerType.Dead` | 死亡时触发 1 次 | 亡语、遗志 |
|
||||||
|
| 攻击触发 | `SkillTriggerType.Atking` | 普攻 N 次触发 | 概率普攻特效(t_num 模拟概率) |
|
||||||
|
| 受击触发 | `SkillTriggerType.Atked` | 被击 N 次触发 | 受击反击、叠甲 |
|
||||||
|
| 驻场光环 | `SkillTriggerType.Field` | 存活期间全局生效 | 光环类(移速/攻击/回血) |
|
||||||
|
| 复活 | `SkillTriggerType.Revive` | 死亡后复活 | 凤凰涅槃、尸骸存活 |
|
||||||
|
|
||||||
|
> **概率模拟技巧**:本系统无"概率触发"概念,用 `t_num` 计数模拟。
|
||||||
|
> - `t_num=1`:每次普攻都触发(最高频)
|
||||||
|
> - `t_num=3`:≈33% 概率
|
||||||
|
> - `t_num=4`:≈25% 概率(对应几何王国的"30% 概率")
|
||||||
|
---
|
||||||
|
## 二、本系统能力设计
|
||||||
|
|
||||||
|
### 2.1 Debuff 能力池(BuffList 减益类)
|
||||||
|
| 能力 | buffId | 结算方式 | 适用注入点 | 适配技能(几何王国场景) |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 易伤 | 7002 | 受伤附加固定值,可叠 5 层,持续 5s | `overrides.timed_buff_id` | 火球/火焰斩/火系技能(灼烧增伤) |
|
||||||
|
| 冰冻 | 7003 | 控制 2s,不可叠层 | `overrides.timed_buff_id` | 冰箭/冰系技能(减速控制) |
|
||||||
|
| 击晕 | 7004 | 控制 2s,不可叠层 | `overrides.timed_buff_id` | 开山斧/重击系(硬控) |
|
||||||
|
| 中毒 | 7005 | DoT 0.5s/跳,可叠 5 层,按 ap 30% 缩放 | `overrides.timed_buff_id` | 毒气弹/毒系技能(持续消耗) |
|
||||||
|
| 减攻 | 7006 | 目标 ap -10%,持续 5s | `overrides.timed_buff_id` | 战吼/虚弱类(团队减益) |
|
||||||
|
| 出血 | 7007 | 每层被暴击率 +1%,微量 DoT,可叠 5 层 | `overrides.timed_buff_id` | 光闪/多段攻击(暴击放大器) |
|
||||||
|
| 破甲 | 7008 | 目标 defense -50(加法模型),持续 5s | `overrides.timed_buff_id` + `buff_value` | 穿透/重击系(削防增伤) |
|
||||||
|
|
||||||
|
### 2.2 Buff 能力池(BuffList 增益类,可覆写)
|
||||||
|
| 能力 | buffId | 默认数值 | 成长覆写字段 | 适配场景 |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 攻击强化 | 7001 | +5% ap,10s(高阶用 `buff_value`/`buff_duration` 覆写,如 +50%/5s) | `buff_value` + `buff_duration` | 战前强攻、短时爆发 |
|
||||||
|
| 再生(HoT) | 7010 | 每 0.5s 回 10 血,5s | `buff_value` + `buff_duration` | 持续治疗 |
|
||||||
|
| 暴击爆发 | 7012 | +30% 暴击率,5s | `buff_value` + `buff_duration` | 暴击流大招联动 |
|
||||||
|
| 击退爆发 | 7013 | +30% 击退距离,5s | `buff_value` + `buff_duration` | 击退控制流 |
|
||||||
|
| 穿透爆发 | 7014 | +30% 穿透概率,5s | `buff_value` + `buff_duration` | 穿透流 |
|
||||||
|
| 攻速爆发 | 7015 | +40% 攻速,5s | `buff_value` + `buff_duration` | 攻速流 |
|
||||||
|
| 风怒爆发 | 7016 | +20% 风怒概率,5s | `buff_value` + `buff_duration` | 连击流 |
|
||||||
|
| 击晕爆发 | 7017 | +30% 击晕概率,5s | `buff_value` + `buff_duration` | 控制流 |
|
||||||
|
| 击晕抗性 | 7018 | +50% 击晕抗性,5s | `buff_value` + `buff_duration` | 防御辅助 |
|
||||||
|
| 冰冻抗性 | 7019 | +50% 冰冻抗性,5s | `buff_value` + `buff_duration` | 防御辅助 |
|
||||||
|
| 暴伤爆发 | 7020 | +30% 暴伤,5s | `buff_value` + `buff_duration` | 暴击流 |
|
||||||
|
| 冰冻概率爆发 | 7021 | +5% 冰冻概率,5s | `buff_value` + `buff_duration` | 控制流 |
|
||||||
|
| 穿透伤害爆发 | 7022 | +30% 穿透后伤害,5s | `buff_value` + `buff_duration` | 穿透流 |
|
||||||
|
| 防御强化 | 7023 / 7024 | +50 防御 10s / +100 防御 5s(加法模型) | `buff_value` + `buff_duration` | 坦克/团队减伤 |
|
||||||
|
|
||||||
|
### 2.2.1 辅助技能能力池(SkillSet 6300 段,非 buff)
|
||||||
|
| 能力 | uuid | 结算方式 | 成长覆写字段 | 适配场景 |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 护盾 | 6301 | `ap`=抵挡次数(默认 3 次),目标自身 | `overrides.ap`(次数) | 入场护盾、受击反击护盾 |
|
||||||
|
| 治疗 | 6302 | `ap`=治疗量(攻击百分比,默认 300%),目标全队 | `overrides.ap`(治疗量) | 大招治疗、持续续航 |
|
||||||
|
| 复活 | 6501 | `ap`=复活生命百分比(默认 50%),目标自身 | `overrides.ap`(复活血量) | 凤凰涅槃、尸骸存活 |
|
||||||
|
| 防御强化(永久) | 6412 | `buff_type: Attrs.defense`,全队防御 +50,持续 1 次 | `overrides.ap`(防御值) | 坦克入场、团队减伤 |
|
||||||
|
|
||||||
|
> 注:6301/6302/6501 是 `SkillKind.Shield/Heal/Support` 技能底座,**不是** BuffList buff;通过 `overrides.ap` 调整档位即可,无需新增 uuid。
|
||||||
|
|
||||||
|
### 2.3 技能概率字段(SkillConfig 内置)
|
||||||
|
| 字段 | 语义 | 注入方式 | 适配场景 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `crt` | 额外暴击率(百分点) | `overrides.crt` | 万剑朝宗、光闪 |
|
||||||
|
| `frz` | 额外冰冻概率(百分点) | `overrides.frz` | 冰系技能 |
|
||||||
|
| `stun` | 额外击晕概率(百分点) | `overrides.stun` | 开山斧、闪电术 |
|
||||||
|
| `bck` | 额外击退距离增量 | `overrides.bck` | 气斩、重击 |
|
||||||
|
|
||||||
|
### 2.4 驻场光环能力池(FieldSkillType)
|
||||||
|
| 能力 | FieldSkillType | 底座 uuid | 适用 card_lv | 几何王国对应场景 |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 战后恢复 | WaveHeal | 7001 | 4/5 | 团队续航 |
|
||||||
|
| 攻击光环 | HeroAtk | 7002 | 4/5 | 团队输出强化 |
|
||||||
|
| 击晕光环 | HeroStun | 7003 | 4/5 | 团队控制强化 |
|
||||||
|
| 暴击光环 | HeroCrit | 7004 | 4/5 | 团队暴击强化 |
|
||||||
|
| 暴伤光环 | HeroCritDamage | 7005 | 4/5 | 团队暴击强化 |
|
||||||
|
| 攻速光环 | HeroSpeed | 7006 | 4/5 | 团队攻速强化 |
|
||||||
|
| 生命光环 | HeroHp | 7007 | 4/5 | 团队生存强化 |
|
||||||
|
| 风怒光环 | HeroWindFury | 7008 | 4/5 | 团队连击强化 |
|
||||||
|
| 穿刺光环 | HeroPuncture | 7009 | 4/5 | 团队穿透强化 |
|
||||||
|
| 穿透伤害强化 | HeroPunctureDmg | 7020 | 4/5 | 团队穿透强化 |
|
||||||
|
| 召唤强化 | SummonCount | 7014 | 4/5 | 触发次数增益 |
|
||||||
|
| 死亡强化 | DeadCount | 7015 | 4/5 | 触发次数增益 |
|
||||||
|
| 开场强化 | StartCount | 7016 | 4/5 | 触发次数增益 |
|
||||||
|
| 攻击强化 | AtkCount | 7018 | 4/5 | 触发次数增益 |
|
||||||
|
| 受击强化 | BeAtkCount | 7019 | 4/5 | 触发次数增益 |
|
||||||
|
|
||||||
|
### 2.5 能力注入速查(overrides 字段)
|
||||||
|
| 需求 | 字段组合 | 示例 |
|
||||||
|
|---|---|---|
|
||||||
|
| 技能数值调整 | `ap` / `hit_count` | `overrides: { ap: 150 }` |
|
||||||
|
| 附加 debuff | `timed_buff_id` | `overrides: { timed_buff_id: 7003 }` |
|
||||||
|
| 调整 debuff 强度/时长 | `timed_buff_id` + `buff_value` + `buff_duration` | `overrides: { timed_buff_id: 7002, buff_value: 20, buff_duration: 8 }` |
|
||||||
|
| 附加概率特效 | `crt` / `frz` / `stun` / `bck` | `overrides: { crt: 30 }` |
|
||||||
|
| 永久属性强化 | `buff_type` | `overrides: { buff_type: Attrs.ap }` |
|
||||||
|
| 召唤物变更 | `call_hero` | `overrides: { call_hero: 5001 }` |
|
||||||
|
| 多段释放 | `num` | `overrides: { num: 2 }` |
|
||||||
|
|
||||||
|
### 2.6 能力组合范式(英雄设计指引)
|
||||||
|
| 英雄定位 | 普攻(lv2) | 大招(lv3/5/7) | 光环(lv9,card_lv 4/5) | 核心能力组合 |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 暴击输出 | `crt` + 攻击强化(7001) | `crt` + 出血(7007) | 暴击光环(7004)/暴伤光环(7005) | 暴击率→出血→被暴击率联动 |
|
||||||
|
| 冰冻控制 | `frz` + 冰冻(7003) | `frz` + 冰冻(7003)+ 减攻(7006) | 击晕光环(7003) | 冰冻→减攻→团队控制链 |
|
||||||
|
| 击晕控制 | `stun` + 击晕(7004) | `stun` + 击晕(7004) | 击晕光环(7003) | 高频击晕打断 |
|
||||||
|
| 中毒消耗 | 中毒(7005) | 中毒(7005)+ 易伤(7002) | 攻击光环(7002) | DoT 叠层→易伤放大 |
|
||||||
|
| 穿透破甲 | 穿透爆发(7014) | 穿透爆发(7014)+ 穿透伤害爆发(7022) | 穿刺光环(7009)/穿透强化(7020) | 穿透概率→穿透伤害 |
|
||||||
|
| 风怒连击 | 风怒爆发(7016) | 风怒爆发(7016)+ 攻击强化(7001) | 风怒光环(7008) | 风怒触发额外攻击 |
|
||||||
|
| 团队辅助 | 攻击强化(7001) | 攻击爆发(6503)/ 治疗(6302) | 生命光环(7007)/战后恢复(7001) | 团队增益/治疗 |
|
||||||
|
| 召唤流 | — | 召唤技能(call_hero) | 召唤强化(7014) | 召唤物数量/质量 |
|
||||||
|
| 生存反击 | 减攻(7006) | 护盾(6301)+ 减攻(7006)/ 防御强化(6412/7023) | 受击强化(7019) | 受击触发反击/护盾/叠防 |
|
||||||
|
| 破甲输出 | 破甲(7008) | 破甲(7008)+ 穿透爆发(7014) | 穿刺光环(7009) | 削防→穿透→团队增伤 |
|
||||||
|
| 复活续航 | — | 复活(6501) | 死亡强化(7015) | 复活+死亡触发联动 |
|
||||||
11
assets/script/game/common/config/英雄设计方案.md.meta
Normal file
11
assets/script/game/common/config/英雄设计方案.md.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.1",
|
||||||
|
"importer": "text",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "cba68700-c03f-4cd9-ac7d-449d642829ac",
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@@ -20,10 +20,17 @@
|
|||||||
* 本组件不做回合自动复活;复活由后续复活机制读取 dead_heroes 重新召唤。
|
* 本组件不做回合自动复活;复活由后续复活机制读取 dead_heroes 重新召唤。
|
||||||
* revive 系技能为"濒死回血"(血量归零时消耗次数回血续命),不触发真死。
|
* revive 系技能为"濒死回血"(血量归零时消耗次数回血续命),不触发真死。
|
||||||
*
|
*
|
||||||
|
* 出生点规则:
|
||||||
|
* 按职业(HRole)分三排:战士/坦克 → 前排(x=-200,最靠右迎敌),
|
||||||
|
* 射手/刺客 → 中排(x=-260),辅助/法师 → 后排(x=-320,最靠左)。
|
||||||
|
* 同一职业重复召唤时,从该职业基准点向两侧 ±20 依次交替展开,避免落点重叠。
|
||||||
|
* posIndex 语义:role * 10 + n(n 为同职业展开序,0=居中,1=+20,2=-20,3=+40…),
|
||||||
|
* 同步登记 heroGrid 供 SCastSystem 网格索敌使用。
|
||||||
|
*
|
||||||
* 依赖:
|
* 依赖:
|
||||||
* - Hero(hero/Hero.ts)—— 英雄 ECS 实体类
|
* - Hero(hero/Hero.ts)—— 英雄 ECS 实体类
|
||||||
* - HeroAttrsComp —— 英雄属性组件
|
* - HeroAttrsComp —— 英雄属性组件
|
||||||
* - HeroInfo / HeroPos / HType(heroSet)—— 英雄静态配置
|
* - HeroInfo / HeroPos / HType / HRole(heroSet)—— 英雄静态配置
|
||||||
* - FightSet —— 战斗常量
|
* - FightSet —— 战斗常量
|
||||||
*/
|
*/
|
||||||
import { _decorator, instantiate, Prefab, v3, Vec3, BoxCollider2D } from "cc";
|
import { _decorator, instantiate, Prefab, v3, Vec3, BoxCollider2D } from "cc";
|
||||||
@@ -33,7 +40,7 @@ import { Hero } from "../hero/Hero";
|
|||||||
import { smc } from "../common/SingletonModuleComp";
|
import { smc } from "../common/SingletonModuleComp";
|
||||||
import { Timer } from "db://oops-framework/core/common/timer/Timer";
|
import { Timer } from "db://oops-framework/core/common/timer/Timer";
|
||||||
import { GameEvent } from "../common/config/GameEvent";
|
import { GameEvent } from "../common/config/GameEvent";
|
||||||
import { HeroInfo, HeroPos, HType } from "../common/config/heroSet";
|
import { HeroInfo, HRole } from "../common/config/heroSet";
|
||||||
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
|
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
|
||||||
import { HeroAttrsComp } from "../hero/HeroAttrsComp";
|
import { HeroAttrsComp } from "../hero/HeroAttrsComp";
|
||||||
import { FacSet, FightSet, BoxSet } from "../common/config/GameSet";
|
import { FacSet, FightSet, BoxSet } from "../common/config/GameSet";
|
||||||
@@ -54,17 +61,43 @@ export class MissionHeroComp extends CCComp {
|
|||||||
// ======================== 常量 ========================
|
// ======================== 常量 ========================
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 英雄登场占位点(固定 3 列):
|
* 三排出生基准点(y 均为 BoxSet.GAME_LINE):
|
||||||
* - index 0/1/2 分别对应 x=-320/-260/-200。
|
* - 前排 x=-200(最靠右迎敌):战士 / 坦克
|
||||||
* - 分配规则:近战优先靠前(x 更大),远程/中程优先靠后(x 更小);
|
* - 中排 x=-260:射手 / 刺客
|
||||||
* 同类型按召唤先后从该类型的一侧开始依次填充。
|
* - 后排 x=-320(最靠左):辅助 / 法师
|
||||||
|
*/
|
||||||
|
public static readonly HERO_ROW_FRONT = v3(-200, BoxSet.GAME_LINE, 0)
|
||||||
|
public static readonly HERO_ROW_MID = v3(-260, BoxSet.GAME_LINE, 0)
|
||||||
|
public static readonly HERO_ROW_BACK = v3(-320, BoxSet.GAME_LINE, 0)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 英雄登场占位点(兼容旧引用,等价于后/中/前三排基准点):
|
||||||
|
* - index 0=后排、1=中排、2=前排。
|
||||||
*/
|
*/
|
||||||
public static readonly HERO_POSITIONS: Vec3[] = [
|
public static readonly HERO_POSITIONS: Vec3[] = [
|
||||||
v3(-320, BoxSet.GAME_LINE, 0),
|
MissionHeroComp.HERO_ROW_BACK,
|
||||||
v3(-260, BoxSet.GAME_LINE, 0),
|
MissionHeroComp.HERO_ROW_MID,
|
||||||
v3(-200, BoxSet.GAME_LINE, 0),
|
MissionHeroComp.HERO_ROW_FRONT,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 职业 → 出生排映射:
|
||||||
|
* 战士/坦克 → 前排,射手/刺客 → 中排,辅助/法师 → 后排。
|
||||||
|
*/
|
||||||
|
private static readonly ROLE_ROW: Record<HRole, Vec3> = {
|
||||||
|
[HRole.Tank]: MissionHeroComp.HERO_ROW_FRONT,
|
||||||
|
[HRole.Warrior]: MissionHeroComp.HERO_ROW_FRONT,
|
||||||
|
[HRole.Assassin]: MissionHeroComp.HERO_ROW_MID,
|
||||||
|
[HRole.Archer]: MissionHeroComp.HERO_ROW_MID,
|
||||||
|
[HRole.Mage]: MissionHeroComp.HERO_ROW_BACK,
|
||||||
|
[HRole.Support]: MissionHeroComp.HERO_ROW_BACK,
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 同职业重复召唤时的落点横向间隔(像素) */
|
||||||
|
private static readonly SLOT_OFFSET = 20
|
||||||
|
/** 同职业槽位步长:posIndex = role * 10 + n */
|
||||||
|
private static readonly SLOT_STRIDE = 10
|
||||||
|
|
||||||
/** 英雄出生时的掉落高度(从空中落到地面的像素差) */
|
/** 英雄出生时的掉落高度(从空中落到地面的像素差) */
|
||||||
private static readonly HERO_DROP_HEIGHT = 260
|
private static readonly HERO_DROP_HEIGHT = 260
|
||||||
|
|
||||||
@@ -200,34 +233,42 @@ export class MissionHeroComp extends CCComp {
|
|||||||
|
|
||||||
// ======================== 英雄生成 ========================
|
// ======================== 英雄生成 ========================
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 动态分配英雄上场的位置
|
* 为英雄分配出生槽位:
|
||||||
* @param excludeEids 排除计算的实体ID数组(避免复活时把自己算成占据的位置)
|
* 按职业取三排基准点(战士/坦克前排、射手/刺客中排、辅助/法师后排),
|
||||||
|
* 同职业已存在时在基准点 ±20 的倍数次交替展开(0, +20, -20, +40, -40 …)。
|
||||||
|
*
|
||||||
|
* @param role 英雄职业(决定所属排)
|
||||||
|
* @param heroes 当前存活英雄列表(spawnHeroAt 在实体创建前快照,避免复用池残留实体干扰槽位判定)
|
||||||
|
* @returns { posIndex 槽位索引(role*10+n,-1 表示分配失败), landingPos 落地点 }
|
||||||
*/
|
*/
|
||||||
private pickPositionIndexForHero(excludeEids: number[] = [], heroType: HType = HType.Melee): number {
|
private pickSpawnSlotForHero(role: HRole, heroes: Hero[]): { posIndex: number; landingPos: Vec3 } {
|
||||||
const heroes = this.getAllHeroes().filter(h => {
|
const basePos = MissionHeroComp.ROLE_ROW[role] ?? MissionHeroComp.HERO_ROW_MID;
|
||||||
const m = h.get(HeroAttrsComp);
|
|
||||||
return m && !m.is_dead && !excludeEids.includes(h.eid);
|
|
||||||
});
|
|
||||||
|
|
||||||
const occupied = new Set<number>();
|
// 只统计同职业英雄的展开序 n(posIndex % 10),避免不同职业间槽位互相挤占
|
||||||
|
const usedSlots = new Set<number>();
|
||||||
for (const h of heroes) {
|
for (const h of heroes) {
|
||||||
const m = h.get(HeroAttrsComp);
|
const m = h.get(HeroAttrsComp)!;
|
||||||
if (m && m.posIndex >= 0) occupied.add(m.posIndex);
|
if (m.role !== role || m.posIndex < 0) continue;
|
||||||
|
usedSlots.add(m.posIndex % MissionHeroComp.SLOT_STRIDE);
|
||||||
}
|
}
|
||||||
|
// DEBUG: 输出槽位判定过程,验证同职业展开是否生效(排查后删除)
|
||||||
|
console.log(`[SpawnSlot] role=${role} heroes=${heroes.length} used=[${[...usedSlots].join(",")}]`);
|
||||||
|
|
||||||
// 近战优先靠前(x 更大,索引更大);远程/中程优先靠后(x 更小,索引更小)
|
// 展开序 n:0=居中,1=+20,2=-20,3=+40 …,越界按无槽位落基准点(不写网格)
|
||||||
const slotPriority = heroType === HType.Melee
|
for (let n = 0; n < MissionHeroComp.SLOT_STRIDE; n++) {
|
||||||
? [2, 1, 0]
|
const posIndex = role * MissionHeroComp.SLOT_STRIDE + n;
|
||||||
: [0, 1, 2];
|
if (posIndex >= smc.mission.heroGrid.length) break;
|
||||||
for (const idx of slotPriority) {
|
if (!usedSlots.has(n)) {
|
||||||
if (!occupied.has(idx) && MissionHeroComp.HERO_POSITIONS[idx]) {
|
const lp = this.slotIndexToLandingPos(posIndex);
|
||||||
return idx;
|
console.log(`[SpawnSlot] → posIndex=${posIndex} landing=(${lp.x},${lp.y})`);
|
||||||
|
return { posIndex, landingPos: lp };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 溢出兜底:复用 index 0(坐标有效,避免越界崩溃)
|
// 同职业槽位占满时溢出兜底:落在该职业基准点,posIndex=-1 表示未登记网格,
|
||||||
return 0;
|
// 避免与友方技能遍历 heroGrid 时产生重复目标
|
||||||
|
return { posIndex: -1, landingPos: v3(basePos.x, basePos.y, 0) };
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -246,7 +287,7 @@ export class MissionHeroComp extends CCComp {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 在指定站位生成英雄:
|
* 在指定站位生成英雄:
|
||||||
* - posIndex < 0 时自动分配空位。
|
* - posIndex < 0 时按职业自动分配空位(三排基准点 ±20 展开)。
|
||||||
* - 计算出生点(空中)和落点(地面),播放掉落动画。
|
* - 计算出生点(空中)和落点(地面),播放掉落动画。
|
||||||
*
|
*
|
||||||
* @param uuid 英雄 UUID
|
* @param uuid 英雄 UUID
|
||||||
@@ -258,11 +299,31 @@ export class MissionHeroComp extends CCComp {
|
|||||||
private spawnHeroAt(uuid: number, hero_lv: number, card_lv: number, posIndex: number) {
|
private spawnHeroAt(uuid: number, hero_lv: number, card_lv: number, posIndex: number) {
|
||||||
let hero = ecs.getEntity<Hero>(Hero);
|
let hero = ecs.getEntity<Hero>(Hero);
|
||||||
let scale = 1
|
let scale = 1
|
||||||
const finalPosIndex = posIndex >= 0 ? posIndex : this.pickPositionIndexForHero([], HeroInfo[uuid]?.type ?? HType.Melee);
|
const role = HeroInfo[uuid]?.role ?? HRole.Warrior;
|
||||||
// 兜底:索引越界或点位缺失时复用 index 0,保证 landingPos 一定有效
|
|
||||||
const landingPos = MissionHeroComp.HERO_POSITIONS[finalPosIndex] ?? MissionHeroComp.HERO_POSITIONS[0];
|
let finalPosIndex = posIndex;
|
||||||
|
let landingPos: Vec3;
|
||||||
|
if (posIndex >= 0) {
|
||||||
|
// 指定槽位:按 role*10+n 反解排与偏移,落点与自动分配保持一致
|
||||||
|
landingPos = this.slotIndexToLandingPos(posIndex);
|
||||||
|
} else {
|
||||||
|
const heroes = this.getAllHeroes().filter(h => {
|
||||||
|
const m = h.get(HeroAttrsComp);
|
||||||
|
return !!m && !m.is_dead;
|
||||||
|
});
|
||||||
|
const slot = this.pickSpawnSlotForHero(role, heroes);
|
||||||
|
finalPosIndex = slot.posIndex;
|
||||||
|
landingPos = slot.landingPos;
|
||||||
|
}
|
||||||
|
|
||||||
let spawnPos: Vec3 = v3(landingPos.x, landingPos.y + MissionHeroComp.HERO_DROP_HEIGHT, 0);
|
let spawnPos: Vec3 = v3(landingPos.x, landingPos.y + MissionHeroComp.HERO_DROP_HEIGHT, 0);
|
||||||
hero.load(spawnPos, scale, uuid, landingPos.y, hero_lv, card_lv, finalPosIndex);
|
hero.load(spawnPos, scale, uuid, landingPos.y, hero_lv, card_lv, finalPosIndex);
|
||||||
|
// DEBUG: 验证实体创建后写入的实际槽位与节点位置(排查后删除)
|
||||||
|
{
|
||||||
|
const m = hero.get(HeroAttrsComp);
|
||||||
|
const v = hero.get(HeroViewComp);
|
||||||
|
console.log(`[SpawnSlot] spawned eid=${hero.eid} uuid=${uuid} posIndex=${m?.posIndex} node.x=${v?.node?.position.x}`);
|
||||||
|
}
|
||||||
|
|
||||||
// 召唤完成后,派发事件以更新英雄面板
|
// 召唤完成后,派发事件以更新英雄面板
|
||||||
const model = hero.get(HeroAttrsComp);
|
const model = hero.get(HeroAttrsComp);
|
||||||
@@ -354,7 +415,7 @@ export class MissionHeroComp extends CCComp {
|
|||||||
const oldView = oldHero.get(HeroViewComp);
|
const oldView = oldHero.get(HeroViewComp);
|
||||||
const birthPos = oldView?.node?.isValid
|
const birthPos = oldView?.node?.isValid
|
||||||
? oldView.node.getPosition()
|
? oldView.node.getPosition()
|
||||||
: (posIndex >= 0 ? MissionHeroComp.HERO_POSITIONS[posIndex] : MissionHeroComp.HERO_POSITIONS[1]);
|
: (posIndex >= 0 ? this.slotIndexToLandingPos(posIndex) : MissionHeroComp.HERO_ROW_MID);
|
||||||
|
|
||||||
oldHero.mergeToBirthAndDestroy(birthPos, () => {
|
oldHero.mergeToBirthAndDestroy(birthPos, () => {
|
||||||
// 旧实体销毁后 posIndex 已释放,直接按原站位生成新英雄
|
// 旧实体销毁后 posIndex 已释放,直接按原站位生成新英雄
|
||||||
@@ -364,6 +425,20 @@ export class MissionHeroComp extends CCComp {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 槽位索引 → 落点坐标(role*10+n 反解,供合成动画目标点等兜底场景使用)。
|
||||||
|
* @param posIndex 槽位索引,越界时回退到中排基准点
|
||||||
|
*/
|
||||||
|
private slotIndexToLandingPos(posIndex: number): Vec3 {
|
||||||
|
const slotRole = Math.floor(posIndex / MissionHeroComp.SLOT_STRIDE) as HRole;
|
||||||
|
const n = posIndex % MissionHeroComp.SLOT_STRIDE;
|
||||||
|
const basePos = MissionHeroComp.ROLE_ROW[slotRole] ?? MissionHeroComp.HERO_ROW_MID;
|
||||||
|
const step = Math.ceil(n / 2);
|
||||||
|
const dir = n % 2 === 1 ? 1 : -1;
|
||||||
|
const offsetX = n === 0 ? 0 : dir * step * MissionHeroComp.SLOT_OFFSET;
|
||||||
|
return v3(basePos.x + offsetX, basePos.y, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** ECS 组件移除时触发(当前不销毁节点,保留引用) */
|
/** ECS 组件移除时触发(当前不销毁节点,保留引用) */
|
||||||
reset() {
|
reset() {
|
||||||
|
|||||||
Reference in New Issue
Block a user