feat(hero-config): 新增英雄额外属性加成档位的图鉴展示支持

本次变更完成了英雄bonus属性加成系统的图鉴可视化改造:
1. 扩展LvBonusAttrsEntry类型,新增name/icon/info配置字段
2. 服务端渲染兼容新增字段,仅在配置存在时输出
3. 更新英雄配置文档,补充bonus字段的新参数说明
4. 新增属性加成编辑器表单,支持配置名称、图标和自定义描述
5. 实现英雄图鉴的bonus档位图标渲染逻辑,支持锁定状态和点击弹窗
6. 新增bonus效果文案生成工具,支持自定义模板和属性自动生成
7. 为技能弹窗新增bonus专属渲染逻辑,适配属性加成档位的展示
8. 为部分测试英雄配置了bonus档位的名称属性
This commit is contained in:
panFD
2026-09-07 23:58:44 +08:00
parent 771b0aad26
commit dbc013a20f
9 changed files with 183 additions and 19 deletions

View File

@@ -32,6 +32,7 @@ import {
HeroInfo, heroInfo, SkillTriggerType, SkillTriggerName, HSkillInfo, LvTriggerEntry, FieldEntry,
TriggerGrouped, resolveSkillOverrides, resolveTriggerByLv, resolveFieldByLv,
getGroupedTriggerName, getFieldSkillName, getTriggerGroupName, getFieldGroupName,
LvBonusAttrsEntry, BonusAttrKey,
} from "./config/heroSet";
import { SkillSet, mergeSkillParams, SkillConfig, SkillKind, TGroup, FieldSkillSet } from "./config/SkillSet";
import { BuffList } from "./config/BuffSet";
@@ -714,3 +715,35 @@ function resolveTriggerSkillName(hero: heroInfo, skillUuid: number): string {
}
return SkillSet[skillUuid]?.name ?? "";
}
/* ==================== bonus(额外属性加成)展示文案 ==================== */
/** bonus 属性键 → 中文展示名与单位(hp/ap/def 为百分比,概率类为固定百分点) */
const BONUS_ATTR_LABEL: Record<BonusAttrKey, { name: string; suffix: string }> = {
hp: { name: "生命", suffix: "%" },
ap: { name: "攻击", suffix: "%" },
def: { name: "防御", suffix: "%" },
crt: { name: "暴击率", suffix: "" },
frz: { name: "冰冻", suffix: "" },
stun: { name: "击晕", suffix: "" },
para: { name: "麻痹", suffix: "" },
};
/**
* 生成单个 bonus 档位的效果描述(富文本)。
* entry.info 显式配置时优先渲染(占位符 {lv} 替换为解锁等级);否则按 attrs 键自动生成。
* @param entry bonus 档位配置
* @returns 富文本效果串(不含名称与解锁等级,由调用方拼接)
*/
export function buildBonusEffectDesc(entry: LvBonusAttrsEntry): string {
if (entry.info) return entry.info.replace(/\{lv\}/g, `${entry.lv}`);
const parts: string[] = [];
for (const key of Object.keys(entry.attrs) as BonusAttrKey[]) {
const v = entry.attrs[key];
if (v === undefined || v === 0) continue;
const meta = BONUS_ATTR_LABEL[key];
const sign = v > 0 ? "+" : "";
parts.push(`${meta.name} ${valueRich(`${sign}${v}${meta.suffix}`)}`);
}
return parts.join(",") || "无效果";
}

View File

@@ -519,6 +519,12 @@ export type BonusAttrKey = 'hp' | 'ap' | 'def' | 'crt' | 'frz' | 'stun' | 'para'
export interface LvBonusAttrsEntry {
lv: number;
attrs: Partial<Record<BonusAttrKey, number>>;
/** 展示名(图鉴技能图标/弹窗用,如「钢铁壁垒」);缺省不出图标 */
name?: string;
/** 图标帧名(gui/ui7 图集);缺省该档不在图鉴出图标 */
icon?: string;
/** 自定义描述模板(可选);缺省由 attrs 自动生成效果文案 */
info?: string;
}
/*
*=============英雄配置列表================