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:
@@ -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(",") || "无效果";
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
/*
|
||||
*=============英雄配置列表================
|
||||
|
||||
Reference in New Issue
Block a user