refactor: 重构技能触发逻辑,将proc_skill从命中触发改为施法后触发
1. 调整proc_skill触发时机为施法出手时判定,一次施法仅判定一次,与命中/弹道数无关 2. 移除HeroAtkSystem中旧的proc_skill触发逻辑,新增SCastSystem的tryProcSkill方法 3. 更新技能配置注释、编辑器文案与文档说明,同步调整服务端技能描述显示 4. 全局设置Element Plus组件为small尺寸,优化编辑器UI布局 5. 清理冗余的proc_skill快照传递逻辑,移除unused的reviveOptions计算属性
This commit is contained in:
@@ -92,7 +92,7 @@
|
||||
特殊存储格式(导出时由 server 还原为 TS 枚举表达式):
|
||||
- `TGroup`:JSON 存字符串(如 `"Team"`),导出还原 `TGroup.Team`;`null` 表示不覆写;
|
||||
- `buff_target`:存数字 0~3(Hit/Self/Ally/Enemy),导出还原 `BuffTarget.X`;
|
||||
- `proc_skill`:对象 `{s_uuid, chance?, overrides?}`(命中后概率触发另一技能);
|
||||
- `proc_skill`:对象 `{s_uuid, chance?, overrides?}`(施法后概率触发另一技能,出手即判定,与命中/弹道数无关);
|
||||
- `icon`:字符串图标帧名(uicons 图集),非数值;
|
||||
- 其余一律直存数值。
|
||||
|
||||
@@ -126,11 +126,11 @@
|
||||
|
||||
**语义陷阱**:`timed_buff_id` 在伤害技能上缺省挂**施法者自身**——若想"命中给敌人挂减益",必须用 `timed_debuff_id`,否则会把减益挂到自己身上。
|
||||
|
||||
### 6.2 proc_skill(命中概率触发主动技能)
|
||||
### 6.2 proc_skill(施法后概率触发主动技能)
|
||||
|
||||
**定位**:命中后概率触发一个**主动技能**(大招/触发技底座,如 6100+/6200+ 段伤害技能),以施法者身份完整释放(含伤害/弹道/特效)。它是技能触发器,不是挂 buff 的方式——debuff 注入请用 `timed_buff_id`(见 §6.1)。
|
||||
**定位**:施法出手后概率触发一个**主动技能**(大招/触发技底座,如 6100+/6200+ 段伤害技能),以施法者身份完整释放(含伤害/弹道/特效)。它是技能触发器,不是挂 buff 的方式——debuff 注入请用 `timed_buff_id`(见 §6.1)。
|
||||
|
||||
**编辑器 UI**:overrides 添加 `proc_skill 命中概率触发主动技能` 行后展开结构化编辑:
|
||||
**编辑器 UI**:overrides 添加 `proc_skill 施法后概率触发技能` 行后展开结构化编辑:
|
||||
1. `被触发技能 uuid`:下拉列出全部 SkillSet(`uuid 名称`);
|
||||
2. `概率%`:0~100 数字输入,默认 100;
|
||||
3. `被触发技能覆写`:内嵌 OverrideEditor(同套白名单),可递归覆写被触发技能的 `ap`/`TGroup`/`hit_count` 等。
|
||||
@@ -145,14 +145,16 @@
|
||||
```
|
||||
|
||||
**运行时行为**:
|
||||
- 触发链路:技能命中 → 掷 `chance` 骰(≥100 直接成功不掷骰;无 70% 封顶)→ 以施法者身份走 `forceCastTriggerSkill`(无视 CD、无施法前摇,触发类型记为 atking);
|
||||
- 触发链路:施法出手 → 掷 `chance` 骰(≥100 直接成功不掷骰;无 70% 封顶)→ 以施法者身份走 `forceCastTriggerSkill`(无视 CD、无施法前摇,触发类型记为 atking);
|
||||
- 出手即判定:**一次施法只判定一次**,与命中次数、弹道数、召唤数均无关(多弹道技能不会按实体数重复判定);
|
||||
- 不再依赖命中:即使技能落空/无目标可命中,只要施法动作出手就会判定;
|
||||
- `overrides` 与被触发技能自身 heroSet overrides 叠加,本次传入优先;
|
||||
- DoT 伤害不触发 proc;被触发的技能不再累加普攻计数(防递归);
|
||||
- 被触发的技能不再累加普攻计数(防递归);
|
||||
- 内嵌 `TGroup` 可改变被触发技能的释放对象(如触发一个友方增益)。
|
||||
|
||||
**选型指引**(对敌附带效果):
|
||||
- 挂 debuff(冰冻/中毒/易伤等)→ `timed_buff_id`:写入 SkillSet 底座,或用友方技能 + `buff_target: 3` 分流挂敌;
|
||||
- 命中后追发一个主动技能(陨石/火球等完整释放)→ `proc_skill`。
|
||||
- 施法后追发一个主动技能(陨石/火球等完整释放)→ `proc_skill`。
|
||||
|
||||
## 7. 新增英雄操作清单
|
||||
|
||||
|
||||
@@ -268,12 +268,12 @@ function overrideShort(ov, { includeAp = true } = {}) {
|
||||
const chance = ov.debuff_chance != null ? `debuff_chance${ov.debuff_chance}` : ''
|
||||
parts.push(`命中附加${val}${debuffName}${ov.timed_debuff_id}${chance}`)
|
||||
}
|
||||
// proc_skill:命中后概率触发额外技能,标注被触发技能名/概率/覆写 ap(若有)
|
||||
// proc_skill:施法后概率触发额外技能(出手即判定,与命中/弹道数无关),标注被触发技能名/概率/覆写 ap(若有)
|
||||
if (ov.proc_skill?.s_uuid != null) {
|
||||
const procName = cache?.SkillSet?.[ov.proc_skill.s_uuid]?.name || ''
|
||||
const procChance = ov.proc_skill.chance != null ? `${ov.proc_skill.chance}%` : '100%'
|
||||
const procAp = ov.proc_skill.overrides?.ap != null ? `ap${ov.proc_skill.overrides.ap}` : ''
|
||||
parts.push(`触发${procName}${ov.proc_skill.s_uuid}(${procChance}${procAp ? `;${procAp}` : ''})`)
|
||||
parts.push(`施法触发${procName}${ov.proc_skill.s_uuid}(${procChance}${procAp ? `;${procAp}` : ''})`)
|
||||
}
|
||||
return parts.join(';')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user