refactor(hero): 重构英雄数值系统,支持品质系数与12级职业属性加成

1. 调整英雄最大等级为99,实现近似无限升级
2. 新增防御属性加成系统,补充def_bonus相关配置与计算
3. 引入英雄品质系数机制,相邻品质基础属性相差5%
4. 新增12级职业属性专项加成:坦克加防、战士辅助加血、输出加攻
5. 更新英雄设计文档与配置示例,统一数值计算逻辑
6. 重构成长计算函数,支持防御属性成长与加成
This commit is contained in:
panFD
2026-09-01 20:47:36 +08:00
parent d943bc05ce
commit 1dbb3bd90d
6 changed files with 185 additions and 68 deletions

View File

@@ -54,7 +54,7 @@ import { MissSkillsComp } from "./MissSkillsComp";
import { oops } from "db://oops-framework/core/Oops";
import { HeroAttrsComp } from "../hero/HeroAttrsComp";
import { smc } from "../common/SingletonModuleComp";
import { HeroInfo, HType, resolveTriggerByLv, resolveFieldByLv, resolveReviveByLv, resolveSkillOverrides, calcGrowBonus } from "../common/config/heroSet";
import { HeroInfo, HType, resolveTriggerByLv, resolveFieldByLv, resolveReviveByLv, resolveSkillOverrides, calcGrowBonus, getHeroQualityCoef, getEffectiveStats, HERO_LV12_SPECIAL_LV, HERO_LV12_BASE_LV, HERO_LV12_SPECIAL_ATTR } from "../common/config/heroSet";
import { applyTalentBonuses } from "../common/config/TalentSet";
import { HeroViewComp } from "../hero/HeroViewComp";
import { FacSet, FightSet } from "../common/config/GameSet";
@@ -2151,9 +2151,10 @@ export class MissionCardComp extends CCComp {
const hpRate = model.hp_max > 0 ? model.hp / model.hp_max : 1;
model.lv = nextLv;
// 同步 base 快照(与 Hero.load 同公式:固定基础值,成长由 grow_type 指数递增提供)
const base_ap = hero.ap;
const base_hp = hero.hp;
// 同步 base 快照(与 Hero.load 同公式:固定基础值 × 品质系数,成长由 grow_type 线性递增提供)
const qualityCoef = getHeroQualityCoef(hero.card_lv ?? 1);
const base_ap = Math.round(hero.ap * qualityCoef);
const base_hp = Math.round(hero.hp * qualityCoef);
model.base_ap = base_ap;
model.base_hp = base_hp;
@@ -2166,7 +2167,7 @@ export class MissionCardComp extends CCComp {
model.hp_max = base_hp;
}
// 按 ≤nextLv 累加:成长类型每级递增 + hp_bonus/ap_bonus 一次性奖励(沿用 Hero.load 的加法区规则)
// 按 ≤nextLv 累加:成长类型每级递增 + hp/ap/def_bonus 一次性奖励(沿用 Hero.load 的加法区规则)
const grow = calcGrowBonus(hero, nextLv);
model.hp_max += grow.hp;
model.ap += grow.ap;
@@ -2184,7 +2185,20 @@ export class MissionCardComp extends CCComp {
// 天赋加成层(与 Hero.load 对齐):先重置天赋可能修改的字段,避免升级重算时重复叠加
// Why: ap/hp_max 已由上方公式从 base 重算(天然幂等),但 defense 与概率类字段是累加语义,必须先归零再注入
if (model.fac === FacSet.HERO) {
model.defense = hero.def;
// defense 从品质系数后的基础值重算,叠加 def 成长 + def_bonus + lv12 专项,幂等
let base_def = Math.round(hero.def * qualityCoef) + grow.def;
if (model.def_bonus) {
for (const e of model.def_bonus) { if (e.lv <= nextLv) base_def += e.value; }
}
// lv12 职业属性专项:达到 12 级时按职业对单项基础属性 +50%(基数为 lv11 有效值)
if (nextLv >= HERO_LV12_SPECIAL_LV && model.role !== undefined) {
const lv11 = getEffectiveStats(hero, HERO_LV12_BASE_LV);
const attr = HERO_LV12_SPECIAL_ATTR[model.role];
if (attr === "def") base_def += Math.round(lv11.def * 0.5);
else if (attr === "hp") model.hp_max += Math.round(lv11.hp * 0.5);
else if (attr === "ap") model.ap += Math.round(lv11.ap * 0.5);
}
model.defense = base_def;
model.critical = 0;
model.critical_damage = 0;
model.stun_chance = 0;