feat(map, skill): 新增HInfoComp的cd_node属性并统一技能描述分隔符

为HInfoComp组件新增cd_node序列化节点引用
修正HeroSkillDesc中的技能描述分隔符,将→替换为:以对齐文档与实际输出格式
This commit is contained in:
walkpan
2026-05-25 19:56:25 +08:00
parent 58ac41feb0
commit 3fbaebbcc5
3 changed files with 1371 additions and 559 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -7,14 +7,14 @@
* 供 HInfoComp 的 info_node 显示。每行一个技能,用换行符连接。 * 供 HInfoComp 的 info_node 显示。每行一个技能,用换行符连接。
* *
* 生成格式: * 生成格式:
* {触发条件}{技能名} {效果描述} * {触发条件}:{技能名} {效果描述}
* 例: "受击2次护盾 护盾2次" * 例: "受击2次:护盾 护盾2次"
* 例: "攻击1次攻击强化 全体友方攻击力提升5点持续1次" * 例: "攻击1次:攻击强化 全体友方攻击力提升5点持续1次"
* 例: "场上存活攻击加成 英雄攻击力+20%" * 例: "场上存活:攻击加成 英雄攻击力+20%"
* *
* 依赖: * 依赖:
* - heroSet SkillTriggerDesc触发条件模板、SkillTriggerType触发类型枚举、heroInfo * - heroSet :SkillTriggerDesc触发条件模板、SkillTriggerType触发类型枚举、heroInfo
* - SkillSet SkillSet技能基础配置、mergeSkillParams合并覆盖参数、SkillKind技能类型枚举 * - SkillSet :SkillSet技能基础配置、mergeSkillParams合并覆盖参数、SkillKind技能类型枚举
* - FieldSkillSet驻场技能配置 * - FieldSkillSet驻场技能配置
*/ */
import { heroInfo, SkillTriggerDesc, SkillTriggerType } from "./heroSet"; import { heroInfo, SkillTriggerDesc, SkillTriggerType } from "./heroSet";
@@ -22,8 +22,8 @@ import { FieldSkillSet, mergeSkillParams, SkillKind, SkillOverrides, SkillSet }
/** /**
* 需要遍历的触发技能类型列表(不含 Field 和 Revive这两者结构不同需单独处理 * 需要遍历的触发技能类型列表(不含 Field 和 Revive这两者结构不同需单独处理
* Fieldnumber[](驻场技能 uuid 列表) * Field:number[](驻场技能 uuid 列表)
* Revive{ s_uuid, r_num, upr }(单个对象) * Revive:{ s_uuid, r_num, upr }(单个对象)
*/ */
const TRIGGER_KEYS: SkillTriggerType[] = [ const TRIGGER_KEYS: SkillTriggerType[] = [
SkillTriggerType.Call, // 召唤时触发 SkillTriggerType.Call, // 召唤时触发
@@ -38,11 +38,11 @@ const TRIGGER_KEYS: SkillTriggerType[] = [
* 根据合并后的技能配置生成效果描述文本 * 根据合并后的技能配置生成效果描述文本
* *
* 按 SkillKind 分类输出: * 按 SkillKind 分类输出:
* - Heal "治疗伙伴{ap}" * - Heal :"治疗伙伴{ap}"
* - Shield "护盾{ap}次"ap 表示可抵挡次数) * - Shield :"护盾{ap}次"ap 表示可抵挡次数)
* - Gold "金币+{gold}" * - Gold :"金币+{gold}"
* - Support 直接使用技能自身的 info 字段(如"全体友方攻击力提升5点持续1次" * - Support :直接使用技能自身的 info 字段(如"全体友方攻击力提升5点持续1次"
* - Damage "伤害{ap}%" + 可选的暴击/冰冻/击退/多段附加描述 * - Damage :"伤害{ap}%" + 可选的暴击/冰冻/击退/多段附加描述
* *
* @param skill 经过 mergeSkillParams 合并 overrides 后的完整技能配置 * @param skill 经过 mergeSkillParams 合并 overrides 后的完整技能配置
* @returns 效果描述字符串,各部分用空格连接 * @returns 效果描述字符串,各部分用空格连接
@@ -90,8 +90,8 @@ function buildEffectDesc(skill: ReturnType<typeof mergeSkillParams>): string {
* 3. 单独处理 revive复活技能结构与上述不同是单个对象而非数组。 * 3. 单独处理 revive复活技能结构与上述不同是单个对象而非数组。
* *
* 输出示例5006 疾风刺客): * 输出示例5006 疾风刺客):
* "攻击1次攻击强化 全体友方攻击力提升5点持续1次 * "攻击1次:攻击强化 全体友方攻击力提升5点持续1次
* 死亡时攻击强化 全体友方攻击力提升8点持续1次" * 死亡时:攻击强化 全体友方攻击力提升8点持续1次"
* *
* @param hero 英雄静态配置HeroInfo 中的条目) * @param hero 英雄静态配置HeroInfo 中的条目)
* @returns 多行技能描述文本,每行一个技能,用 \n 分隔 * @returns 多行技能描述文本,每行一个技能,用 \n 分隔
@@ -113,7 +113,7 @@ export function buildSkillDesc(hero: heroInfo): string {
const skill = mergeSkillParams(base, item.overrides); const skill = mergeSkillParams(base, item.overrides);
// 将模板中的 "n" 替换为实际触发次数 // 将模板中的 "n" 替换为实际触发次数
const trigger = tpl.replace("n", String(item.t_num)); const trigger = tpl.replace("n", String(item.t_num));
lines.push(`${trigger}${base.name} ${buildEffectDesc(skill)}`); lines.push(`${trigger}:${base.name} ${buildEffectDesc(skill)}`);
} }
} }
@@ -123,7 +123,7 @@ export function buildSkillDesc(hero: heroInfo): string {
const tpl = SkillTriggerDesc[SkillTriggerType.Field] ?? "场上存活"; const tpl = SkillTriggerDesc[SkillTriggerType.Field] ?? "场上存活";
for (const uuid of fieldUuids) { for (const uuid of fieldUuids) {
const fs = FieldSkillSet[uuid]; const fs = FieldSkillSet[uuid];
if (fs) lines.push(`${tpl}${fs.name} ${fs.info}`); if (fs) lines.push(`${tpl}:${fs.name} ${fs.info}`);
} }
} }

View File

@@ -79,6 +79,9 @@ export class HInfoComp extends CCComp {
@property(Node) @property(Node)
hp_node=null! hp_node=null!
@property(Node)
cd_node=null!
/** 绑定的英雄 ECS 实体 ID */ /** 绑定的英雄 ECS 实体 ID */
private eid: number = 0; private eid: number = 0;
/** 绑定的英雄属性数据模型引用 */ /** 绑定的英雄属性数据模型引用 */