docs(server/data,script): 更新技能触发组文档与文本渲染逻辑

1. 补充技能触发组desc占位符使用说明
2. 新增触发概率与保底叠加值的参数传递
3. 优化技能文本渲染,避免概率描述重复展示
This commit is contained in:
pan
2026-09-21 16:03:10 +08:00
parent cd9e7296a1
commit fdcd81c083
2 changed files with 8 additions and 3 deletions

View File

@@ -518,9 +518,13 @@ function collectTriggerTiers(hero: heroInfo, type: SkillTriggerType, skillUuid:
desc: e.desc ?? inherit, desc: e.desc ?? inherit,
ownDesc: e.desc, ownDesc: e.desc,
tNum: e.t_num, tNum: e.t_num,
tChance: e.t_chance ?? 100,
pityAdd: e.pity_add ?? 0,
}; };
}); });
const label = buildTriggerLabel(type, sorted[0].t_num, sorted[0].t_chance); // slv1 模板已显式使用 {t_chance} 时不再自动追加概率后缀,避免同一行重复展示
const firstTmpl = tiers[0]?.desc;
const label = buildTriggerLabel(type, sorted[0].t_num, firstTmpl?.includes("{t_chance}") ? undefined : sorted[0].t_chance);
return { tiers, label }; return { tiers, label };
} }
@@ -531,11 +535,11 @@ function buildTierLines(tiers: ISkillTierInfo[], triggerLabel: string): HeroSkil
const t = tiers[i]; const t = tiers[i];
if (i === 0) { if (i === 0) {
// 技能 1 级:完整能力 + 数值 // 技能 1 级:完整能力 + 数值
const text = t.desc ? renderDesc(t.desc, t.skill) : fallbackDesc(t.skill); const text = t.desc ? renderDesc(t.desc, t.skill, tierExtras(t)) : fallbackDesc(t.skill);
lines.push({ sLv: t.sLv, heroLv: t.heroLv, text: triggerLabel ? `${triggerLabel}, ${text}` : text }); lines.push({ sLv: t.sLv, heroLv: t.heroLv, text: triggerLabel ? `${triggerLabel}, ${text}` : text });
} else if (t.ownDesc) { } else if (t.ownDesc) {
// 提升档:该档显式配置了模板(如护盾/治疗等 diff 标签语义不达的技能),策划表述优先 // 提升档:该档显式配置了模板(如护盾/治疗等 diff 标签语义不达的技能),策划表述优先
lines.push({ sLv: t.sLv, heroLv: t.heroLv, text: renderDesc(t.ownDesc, t.skill) }); lines.push({ sLv: t.sLv, heroLv: t.heroLv, text: renderDesc(t.ownDesc, t.skill, tierExtras(t)) });
} else { } else {
// 提升档:未配置模板,给相对上一级的提升 // 提升档:未配置模板,给相对上一级的提升
const diff = buildTierDiff(tiers[i - 1], t); const diff = buildTierDiff(tiers[i - 1], t);

View File

@@ -75,6 +75,7 @@
- `t_num`:每 n 次普攻(atking)/受击(atked)触发一次;fstart/fend 为每回合开始/结束固定触发 1 次,`t_num` 恒填 1; - `t_num`:每 n 次普攻(atking)/受击(atked)触发一次;fstart/fend 为每回合开始/结束固定触发 1 次,`t_num` 恒填 1;
- `t_chance`:触发概率(百分点 0~100,**仅 atking/atked 生效**,其余组忽略);缺省/100 = 必触发。示例 30 表示次数条件达成后掷骰 30%; - `t_chance`:触发概率(百分点 0~100,**仅 atking/atked 生效**,其余组忽略);缺省/100 = 必触发。示例 30 表示次数条件达成后掷骰 30%;
- `pity_add`:保底叠加(百分点,仅 atking/atked 生效);未触发时为该技能累积下次概率增量,触发成功后清零、封顶 100。示例 `t_chance:30, pity_add:20` → 30/50/70/90/100 递进; - `pity_add`:保底叠加(百分点,仅 atking/atked 生效);未触发时为该技能累积下次概率增量,触发成功后清零、封顶 100。示例 `t_chance:30, pity_add:20` → 30/50/70/90/100 递进;
- 触发组 `desc` 模板可额外使用 `{t_chance}`(触发概率,缺省渲染 100)与 `{pity_add}`(保底叠加,缺省渲染 0)占位符;模板显式使用 `{t_chance}` 时触发语境不再自动追加"(N%概率)"后缀,避免重复;
- `name` 为组对外展示名(写在该组首档),留空回退底座名; - `name` 为组对外展示名(写在该组首档),留空回退底座名;
- 复活:在 `dead` 某条目 `overrides` 配 `revive_hp`(回血%)+ `revive_count`(次数上限); - 复活:在 `dead` 某条目 `overrides` 配 `revive_hp`(回血%)+ `revive_count`(次数上限);
- 无触发组时写空对象 `{}`,**不要省略字段**。 - 无触发组时写空对象 `{}`,**不要省略字段**。