refactor(hero): 新增英雄技能文案生成模块HeroSkillText
1. 新增HeroSkillText.ts,实现基于内联模板的实时技能文案渲染,解决数值与文案不同步问题 2. 为HSkillInfo、LvSkillEntry、LvTriggerEntry新增desc模板字段,配置技能描述模板 3. 重构HeroSkillDesc.ts,新增buildEffectOnlyRich方法,兼容旧UI引用 4. 为所有英雄配置添加技能描述模板,替换原硬编码文案逻辑
This commit is contained in:
@@ -2,6 +2,11 @@
|
||||
* @file HeroSkillDesc.ts
|
||||
* @description 英雄技能/能力描述的【唯一文字表达标准层】
|
||||
*
|
||||
* @deprecated 已被 HeroSkillText.ts(heroInfo 内联 desc 模板驱动)取代。
|
||||
* 本文件暂时保留兼容旧 UI 引用(HerosListComp/CHeroComp/HeroBoxComp/HeroMoreCom/
|
||||
* SCardComp/ItemListComp/IBoxComp/EquipListComp/SinfoComp),待各面板迁移至
|
||||
* buildHeroSkillDesc / buildHeroSkillTierDesc 后移除。新代码请勿再引用本模块。
|
||||
*
|
||||
* 设计目标:
|
||||
* heroSet / SkillSet 中的 info / infos 仅作"基础备注",不再承担面板展示。
|
||||
* 所有功能性描述(触发技能、驻场光环、复活、等级额外属性加成)统一由本模块
|
||||
@@ -30,7 +35,7 @@
|
||||
*/
|
||||
import { SkillTriggerName, SkillTriggerType, TriggerGrouped, LvTriggerEntry, LvFieldEntry, LvReviveEntry, LvBonusEntry, FieldEntry, resolveTriggerByLv, resolveFieldByLv, resolveReviveByLv, resolveSkillOverrides, getGroupedTriggerName, getFieldSkillName, getReviveSkillName, HGrowType, calcGrowBonus, HSkillInfo } from "./heroSet";
|
||||
import { FieldSkillSet, mergeSkillParams, SkillConfig, SkillKind, SkillOverrides, SkillSet, TGroup } from "./SkillSet";
|
||||
import { FieldDescSet, FieldValueFmt, SkillDescSet } from "./SkillDescSet";
|
||||
import { FieldDescSet, FieldValueFmt, SkillDescSet, SkillDescConfig } from "./SkillDescSet";
|
||||
import { BuffList } from "./BuffSet";
|
||||
import { Attrs } from "./HeroAttrs";
|
||||
import { CardConfig } from "./CardSet";
|
||||
@@ -203,8 +208,8 @@ function makeLine(head: string, rendered: string): ISkillLine {
|
||||
* overrides 仅给 timed_buff_id 而未覆写 buff_value / buff_duration 时,
|
||||
* 从 BuffList[timed_buff_id] 取默认值,保证 1 级基础档文案完整。
|
||||
*/
|
||||
function buildEffectLine(head: string, skill: SkillConfig): ISkillLine {
|
||||
const desc = SkillDescSet[skill.uuid];
|
||||
function buildEffectLine(head: string, skill: SkillConfig, descOverride?: SkillDescConfig): ISkillLine {
|
||||
const desc = descOverride ?? SkillDescSet[skill.uuid];
|
||||
// 未入表技能回退基础备注 info,无法抽出数值,整行不高亮
|
||||
if (!desc) return { prefix: `${head}${String(skill.info ?? "")}`, value: "", suffix: "" };
|
||||
|
||||
@@ -541,6 +546,24 @@ export function buildSingleSkillRich(skillUuid: number, overrides?: SkillOverrid
|
||||
return cdTag ? `${nameTag} ${cdTag}\n${effect}` : `${nameTag}\n${effect}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 单个技能纯效果富文本(SInfo 提升面板用):不含技能名与 Lv 前缀,仅输出效果描述。
|
||||
* @param skillUuid SkillSet 技能 UUID
|
||||
* @param overrides 可选覆写参数
|
||||
* @param desc 可选 SkillDescConfig(heroSet 技能项自带说明,优先于 SkillDescSet)
|
||||
* @returns 单行富文本串:如 "造成攻击力<color=#27AE60>250%</color>的伤害"
|
||||
*/
|
||||
export function buildEffectOnlyRich(skillUuid: number, overrides?: SkillOverrides, desc?: SkillDescConfig): string {
|
||||
const base = SkillSet[skillUuid];
|
||||
if (!base) return "未知技能";
|
||||
const skill = mergeSkillParams(base, overrides);
|
||||
const line = buildEffectLine("", skill, desc);
|
||||
const prefix = line.prefix.replace(SKILL_NAME_PATTERN, (m, g1) => skillNameRich(g1));
|
||||
return line.value
|
||||
? `${prefix}${valueRich(line.value)}${line.suffix}`
|
||||
: `${prefix}${line.suffix}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 装备/驻场光环详情富文本:展示全部词条,数值绿色高亮。
|
||||
* @param entries 驻场光环词条数组(uuid 指向 FieldSkillSet 底座,value 为生效数值)
|
||||
|
||||
Reference in New Issue
Block a user