refactor(monster): 统一怪物与英雄的数值设定体系
1. 重构怪物配置,使用HERO_ROLE_BASE作为基础属性基准,通过card_lv应用品质系数 2. 新增怪物设计原则文档,明确数值平衡与成长逻辑 3. 修复Mon.ts中怪物属性计算,适配新的品质缩放规则与12级职业属性加成 4. 更新UI预制体的属性图标与文字显示,适配新的属性展示逻辑
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user