refactor(monster): 统一怪物与英雄的数值设定体系

1. 重构怪物配置,使用HERO_ROLE_BASE作为基础属性基准,通过card_lv应用品质系数
2. 新增怪物设计原则文档,明确数值平衡与成长逻辑
3. 修复Mon.ts中怪物属性计算,适配新的品质缩放规则与12级职业属性加成
4. 更新UI预制体的属性图标与文字显示,适配新的属性展示逻辑
This commit is contained in:
panFD
2026-09-01 23:23:53 +08:00
parent f08b0794fd
commit 2cfc2308b3
4 changed files with 96 additions and 80 deletions

View File

@@ -3,7 +3,7 @@ import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/O
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { smc } from "../common/SingletonModuleComp";
import { BoxSet, FacSet, FightSet, IndexSet } from "../common/config/GameSet";
import { HeroInfo, resolveTriggerByLv, resolveReviveByLv, resolveSkillOverrides, HeroDisVal } from "../common/config/heroSet";
import { HeroInfo, resolveTriggerByLv, resolveReviveByLv, resolveSkillOverrides, HeroDisVal, getHeroQualityCoef, HERO_LV12_SPECIAL_ATTR } from "../common/config/heroSet";
import { HeroAttrsComp } from "./HeroAttrsComp";
import { HeroViewComp } from "./HeroViewComp";
import { MoveComp } from "./MoveComp";
@@ -167,16 +167,25 @@ export class Monster extends ecs.Entity {
// 视图层参数:朝向与碰撞阵营
view.scale = scale;
view.box_group = BoxSet.MONSTER;
// 模型层参数:身份、阵营、基础数值
// 模型层参数:身份、阵营、基础数值(基础值按品质系数缩放,与英雄同一套设定)
model.hero_uuid = uuid;
model.hero_name = hero.name;
model.hp = model.hp_max = hero.hp;
model.ap = hero.ap;
const coef = getHeroQualityCoef(hero.card_lv ?? 1);
model.hp = model.hp_max = Math.round(hero.hp * coef);
model.ap = Math.round(hero.ap * coef);
// TODO: 局外升级机制落地后,此处基础值将与存档强化累加重算
model.defense = hero.def;
model.defense = Math.round(hero.def * coef);
model.speed = hero.speed ?? 800;
model.type = hero.type;
model.fac = FacSet.MON;
// lv12 职业属性专项:按 11 级当前有效值追加 50%(怪物无局内升级,初始超档直接补齐)
if (mon_lv >= 12 && hero.role) {
const sp = HERO_LV12_SPECIAL_ATTR[hero.role];
// 怪物成长由 RogueConfig 按系数全局缩放,lv11 有效值此处按品质系数后的基础值近似
if (sp === "ap") model.ap = Math.round(model.ap * 1.5);
else if (sp === "hp") { model.hp = Math.round(model.hp * 1.5); model.hp_max = model.hp; }
else model.defense = Math.round(model.defense * 1.5);
}
// 攻击距离:配置优先;未配置按攻击定位取默认值(近战100 / 中程300 / 远程450)
model.dis = hero.dis ?? HeroDisVal[hero.type as HType.Melee | HType.Mid | HType.Long];
model.posIndex = laneIndex;