5.8 KiB
Quick Design Spec: 英雄强度评分公式
Type: Addition
System: 英雄/技能配置系统(assets/script/game/common/config/heroSet.ts)
GDD Reference: 暂无项目级 GDD;本规范作为英雄强度锚定的临时设计依据。
Date: 2026-08-01
Change Summary
在 heroSet.ts 中新增一个纯函数 calcHeroPower(hero, targetLv),将现有 heroInfo 配置(含普攻、触发技能、evolve 成长、驻场光环)转换为无量纲强度分。该分数用于:
- 对比同
card_lv英雄的相对强度; - 为关卡怪物总强度提供英雄侧锚定基准;
- 为抽卡/经济定价提供量化参考。
不改变现有英雄配置、战斗行为或技能效果。
Motivation
当前英雄池已从 6 名扩展至 11 名,且每名英雄拥有 6 级成长。策划仅靠基础 HP/AP 判断强度已不够用,尤其 evolve 带来的触发阈值变化、驻场光环、复活等机制难以横向比较。一个统一的评分函数可以让关卡难度和卡池分级有据可依。
Design Delta
现有 heroSet.ts 只有静态配置,无强度量化。本规范新增 calcHeroPower 函数,读取 heroInfo、SkillSet、FieldSkillSet、BuffList 等配置,输出标量 power。
New Rules / Values
1. 核心公式
calcHeroPower(hero: heroInfo, targetLv: number = 1): number
P = HP_EFF * W_HP
+ DPS_EFF * W_DPS
+ Σ triggerPower(trigger, hero, targetLv)
| 符号 | 计算方式 |
|---|---|
HP_EFF |
(hero.hp + sumHpBonus) * HERO_LV_MULTIPLIER^(targetLv - 1) |
AP_EFF |
(hero.ap + sumApBonus) * HERO_LV_MULTIPLIER^(targetLv - 1) |
DPS_EFF |
AP_EFF / hero.skills[0].cd |
sumHpBonus |
targetLv 之前所有 evolve[l].hp_bonus 之和 |
sumApBonus |
targetLv 之前所有 evolve[l].ap_bonus 之和 |
2. 触发技能估值 triggerPower
对 heroInfo 中的每种触发字段分别求和:
| 触发类型 | 公式 |
|---|---|
atking |
effectValue(skill, overrides) * (1 / t_num) * scopeMul * W_atking |
atked |
effectValue(skill, overrides) * (1 / t_num) * scopeMul * W_atked |
fstart |
effectValue(skill, overrides) * scopeMul * W_fstart |
fend |
effectValue(skill, overrides) * scopeMul * W_fend |
dead |
effectValue(skill, overrides) * scopeMul * W_dead |
field |
Σ fieldSkillPower(uuid) * W_field_alive |
revive |
HP_EFF * upr * r_num * W_revive |
scopeMul:
TGroup.Self= 1TGroup.Ally/TGroup.Team=HERO_MAX_NUM(当前为 3)
3. 技能效果估值 effectValue
基于 SkillConfig.kind:
| Kind | 估值 |
|---|---|
| Damage | ap_pct / 100 * AP_EFF |
| Heal | ap_pct / 100 * AP_EFF * W_heal |
| Shield | shield_layers * expectedEnemyDmg * W_shield(shield_layers 取 SkillConfig.ap) |
| Support | 按 buff_type 折算:• AP → value / CD * W_DPS• HP → value * W_HP• crit/crit_dmg → 按期望 DPS 增量折算 • stun 等控制 → value * W_control |
| Gold | 忽略(非战斗强度) |
对于计时 buff(timed_buff_id 存在),先计算其永久等效值,再按覆盖率折算:
timedValue = permanentEquivalent * min(buff_duration / FIGHT_TIME, 1)
其中 FIGHT_TIME 取 GameSet.FiIGHT_TIME(30 秒)。
4. 调参旋钮
所有旋钮以常量对象形式放在 heroSet.ts 顶部,方便运行时热调:
| 旋钮 | 默认值 | 建议范围 | 说明 |
|---|---|---|---|
W_HP |
1.0 | 0.5–2.0 | 每点有效 HP 的强度价值 |
W_DPS |
30.0 | 10–100 | 每秒有效伤害的强度价值 |
W_atking |
1.0 | 0.5–2.0 | 攻击触发技能频率折算 |
W_atked |
0.8 | 0.3–1.5 | 受击触发技能频率折算(低于 atking,因依赖敌方攻击频率) |
W_fstart |
1.0 | 0.5–2.0 | 每波开始一次性技能价值 |
W_fend |
1.2 | 0.5–2.0 | 每波结束一次性技能价值 |
W_dead |
0.6 | 0.2–1.0 | 死亡一次性技能价值 |
W_field_alive |
1.0 | 0.5–2.0 | 驻场光环存活期间价值 |
W_revive |
1.0 | 0.5–2.0 | 每次复活的价值系数 |
W_heal |
0.8 | 0.5–1.2 | 治疗相对直接伤害的折价 |
W_shield |
1.0 | 0.5–2.0 | 护盾相对 HP 的折价/溢价 |
W_control |
0.5 | 0.1–1.0 | 控制效果(击晕等)的强度折算 |
expectedEnemyDmg |
20 | 10–100 | 估算护盾价值时假设的敌方单次伤害 |
5. 归一化(可选)
函数返回原始分。如需以某个英雄为 100 分基准,可额外提供:
calcHeroPowerNormalized(hero: heroInfo, targetLv = 1, baseHeroId = 5011, baseScore = 100): number
即 calcHeroPower(hero) / calcHeroPower(HeroInfo[baseHeroId]) * baseScore。
Affected Systems
| 系统 | 影响 | 所需操作 |
|---|---|---|
heroSet.ts |
新增 calcHeroPower 及调参常量 |
实现时写入 |
SkillSet.ts |
读取技能配置计算触发价值 | 无需改动 |
BuffSet.ts |
读取计时 buff 默认数值 | 无需改动 |
| 关卡/经济系统 | 获得英雄强度量化输入 | 后续消费端按需调用 |
Acceptance Criteria
calcHeroPower(HeroInfo[5011], 1)返回可复现的正数分数。- 同
card_lv英雄中,功能更全面的角色分数普遍更高(如 5045 不灭战魂 > 5011 小铁卫)。 targetLv从 1 提升到 6 时,分数随HERO_LV_MULTIPLIER与evolve加成单调上升。- 对怪物调用时不报错,且分数趋势与基础 HP/AP 一致。
- 不改变现有
heroInfo、HeroList任何字段。 - 无回归:现有战斗逻辑、UI 展示不依赖新增函数。
GDD Update Required?
No。项目暂无 design/gdd/ 文档,本 Quick Design Spec 作为英雄强度锚定的临时设计依据。后续若建立系统 GDD,需将本公式合并进 Formulas 与 Tuning Knobs 章节。