You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
AdLike2048/docs/方案-Skill额外效果.md

122 lines
9.8 KiB

# 方案:Skill.skill 额外效果
> 状态:type 1/2/3/4/5/6/7/8 已落地(2026-09-04)
> 关联:[方案-战斗技能逻辑层.md](./方案-战斗技能逻辑层.md)、[方案-战斗表现数据驱动.md](./方案-战斗表现数据驱动.md)
## 1. 字段
`Skill.skill`:主动技额外效果。格式 `类型,参数…`。与 `atk_type` 正交:索敌仍走 `atk_type`,额外效果由 `skill` 头部分发。
| 类型 | 含义 | 参数 |
|------|------|------|
| 1 | 哪吒反向冲锋(只配哪吒) | 冲锋速度(px/s),持续时间(s),伤害系数(万分比) |
| 2 | 万箭齐发(只配弓) | 发射间隔(s),每格箭数,伤害系数(万分比) |
| 3 | 额外给友军加速 | 加速系数(万分比),加速时间(s) |
| 4 | 额外给友军加血 | 加血比例(万分比,相对最大生命) |
| 5 | 吞噬本方小兵(谛听 30307) | 最大数量,每个额外加成(血上限万分比,加法) |
| 6 | 法相天地 | 放大比例,加攻万分比,加攻时间(s),缩小比例,减攻万分比,减攻时间(s) |
| 7 | 挑飞砸地 | 圆形半径(px),伤害系数(万分比),眩晕时间(s) |
| 8 | 距离越远伤害越高 | 距离系数(px),伤害加值(万分比),最大加值(万分比) |
例:`1,166,4,10000` → 166 像素/秒、持续 4 秒、伤害 100%。
## 2. type 1 流程
1. 释放英雄主动后:哪吒 HeroActor 保持可见,播「待机单字」,隐藏预制体「阴影」第二节点(吒影)与武器。开战不锁敌(`team=self`),CD 到即可放。
2. 在「吒」格世界坐标加载 `battleHero/prefab/skill/哪吒冲锋`。冲锋 `disarmAnimComplete`,旧武器动画 complete 不得收掉跳出。
3. 从吒位先蹲再弹,跳到**攻本阵营进路**上离吒最近的格(格距;不先找任意可走格再二次吸附)。
4. 沿**攻本阵营**怪物进路反向冲锋(`Pathfinder.buildRetreatPath`,朝敌方出怪口 / 敌营)。
5. `默认` 播「哪吒技能2」,`冲锋枪` 播预制体默认「哪吒技能」,皮肤切当前 `Weapon.skin`(回池还原 defaultSkin);节点角对准冲锋前方(0° 右 / 90° 上 / 180° 左,540°/s)。
6. 沿途对敌对存活怪各伤一次,系数取配表第 4 段。
7. 时长到或路径走完:回池、英雄回「待机」、恢复阴影第二节点。
## 2b. type 2 流程
1. 场上无敌方行军怪(非塔)则不放,CD 保持就绪;有怪才开战。不锁具体目标,伤害仍由落点结算。
2. 释放弓武器/英雄主动:不写 Ability 直伤,表现层按间隔射箭。
3. 目标为**攻向施法者**的敌方来路 `isCanWalk` 格(多阵营图不含己方出怪路径)。`MapGrid.AreaID` 与阵营区域独立:阵营格可跨区域;通行格出现多种 AreaID 时,再限**己方主区域**(owner0→1、owner1→2),即只打己方区域内的敌方阵营格。每格 `每格箭数` 发,落点在格心附近随机偏移,**发射顺序打乱**。
4. 投掷物为当前武器弓的「箭」(与普攻同一套模板/皮肤),从攻击单位处出发;**每发播一次发射动画**,间隔短于动画时长则加快倍速。
5. 抛物线飞向落点,贝塞尔顶点高于目标坐标;落地消失。
6. 落点附近有敌对存活怪则按伤害系数结算。
例:`2,0.05,2,10000` → 间隔 0.05 秒、每格 2 箭、伤害 100%。
## 2c. type 3 / 4 流程
类型 3、4 是**附加效果**,不注册 exclusive extra presenter,避免吃掉 `atk_type` / skillId 表现(玉帝仍走 atk_type 7;阎王 10206–10208 走 atk_type 7 + extra type 4)。
1. 仅英雄/武器主动(`skillKind` 为 `hero` / `weapon`)。无 `showeffect` 时在 Router.dispatch 之后立刻执行;有预兆则等预兆起播后 `PRES_HIT_AT_BASE`(0.33s)再执行。
2. 目标为施法者友军怪物:己方出怪口行军怪(owner 0→port 1,owner 1→port 2),以及 `BattleTeamId.isFriendly` 的友方召唤。不含攻向自己的敌方来路怪。
3. 类型 3:`move_speed_mul` ×(1+万分比/10000),持续秒数;友军身上循环播 `怪_加速`。
4. 类型 4:当前生命 += maxHp×万分比/10000(封顶 maxHp),`syncMxHp`;友军身上播 `怪物加血`。
5. 特效优先 `battleHero/prefab/buff/`,缺失则用 `battleGameMonster/prefab/`(并 warn)。
例:`3,2000,3` → 移速 +20%、持续 3 秒;`4,2000` → 回复 20% 最大生命。
## 2c2. type 5 流程
类型 5 由 `MonsterSkillHost` 承接(谛听 30307),不写 DealDamage。
1. `target_stage=2` 友军圈选,只留 `Monster.type` 1/3;`stageStrategy=1` 去重,个数取 `skill` 第 2 段。
2. 播「技能」同时 `presentLocked` 吸入锁定小兵。
3. 动画结束 `lifecycle.despawn`(不发击杀桃);施法者血上限 `×(1+吞噬数×加成万分比/10000)`,当前血按原比例同步。
例:`5,10,5000` → 最多 10 只,每只 +50% 上限。
## 2d. type 6 流程
类型 6 是**附加效果**(如青锋宝剑 20104),不注册 exclusive extra presenter;`target_stage=3` 为自身,**不写 DealDamage**,避免打自己。
1. 仅英雄/武器主动。无 `showeffect` 时在 Router.dispatch 之后立刻执行;有预兆则等预兆起播后 0.33s 再执行。
2. 先对施法者 `attack` ×(1+加攻万分比/10000) 持续加攻时间;同时武器插值缩放到 `默认×放大比例`,英雄「动画」「阴影」保持默认缩放(最大 1 倍,与原放大段一致)。
3. 再 `attack` ×(1+减攻万分比/10000) 持续减攻时间;武器、「动画」、「阴影」插值缩放到各自 `默认×缩小比例`。品质框、等级标签等 UI 不缩放。缩放目标始终相对首次绑定的默认值,禁止把当前缩放再乘一遍。
4. 两段结束后清攻击加成,武器与动画/阴影插值恢复默认缩放;结束时打回默认,避免残留缩放叠进下一次。
5. 缩放由 `FaXiangHost.tick` 与阶段同一时钟写入(约 0.4 秒插值后保持),不走 `SkillTransformDriver`,避免武器出手 `cancelNode(武器根)` 把缩放掐掉导致与英雄错相。
例:`6,1.5,20000,5,0.5,-3300,5` → 5 秒攻击 ×3、武器 1.5 倍;再 5 秒攻击 ×0.67、武器与字形缩到 0.5 倍;然后恢复。
## 2e. type 7 流程
类型 7 注册 exclusive extra presenter(红缨枪 20205、三尖两面刀 20506),**不写 DealDamage**,砸地时由表现层结算。武器主动与其它 `type=1` 主动一样走 `OnTick` + `cd`(勿留空 triggers)。哪吒英雄技仍是 type 1 冲锋:两槽独立 CD,同时就绪按 priority 排队串行,谁都不丢。
1. 释放武器/英雄主动,播 `Skill.animation`(`三尖两面刀技能`)。
2. 主目标无论当前坐标,吸入武器枪尖骨骼 `bone3`(缺失则 warn 后用朝向节点),配合挑飞段贴枪尖。
3. 砸地关键帧:枪尖世界坐标 → 最近可行走格,怪物加速砸向该格脚底。
4. 落点播 `battleHero/prefab/skill/挑飞砸地效果`(`三尖两面刀技能2`),半径内敌对存活怪按伤害系数结算并上 `debuff_4` 眩晕。
5. 被挑飞怪即使死亡也占用节点不回收,砸地表现结束后若已死才回收;仍存活则写入落点格并 `assignPath`。
例:`7,100,10000,2` → 半径 100、伤害 100%、眩晕 2 秒。
## 2f. type 8 流程
类型 8 是**附加乘区**(震天弓 20511:`8,40,1000,10000`),不注册 exclusive extra presenter。武器 `Skill.type=2` 时写到施法者 `AtkHookComp`,每次普攻命中按距离加伤;主动技自身带 `skill=8` 时走 `DealDamage.skillParts`。
1. 距离取施法者与当前目标逻辑像素(`DamagePipeline.distancePx`)。
2. 加值万分比 = `min(最大加值, floor(距离/距离系数) × 伤害加值)`。
3. 最终伤害 × `(1 + 加值万分比/10000)`,与已有 `__distDmgMul` 相乘。
4. 毒/灼烧等 DoT(`skipEntryHooks`)不加。
例:`8,40,1000,10000` → 每 40 像素 +10%,最多 +100%。
## 3. 实现
| 模块 | 职责 |
|------|------|
| `SkillAbilityBuilder` | extra=1/2/6/7 不写 DealDamage;3/4/6/8 不发 extraSkill cue |
| `SkillPresenterRouter` | extra=1/2/7 头优先于 `atk_type`;3/4/6 不注册 exclusive |
| `NezhaChargePresenter` / Host | 显隐、预制体、路径、朝向、命中 |
| `ArrowRainPresenter` / Host | 通行格排队、武器箭抛物线、落地伤 |
| `SpearTossPresenter` / Host | extra=7 吸枪尖、挑飞、砸地范围伤与眩晕 |
| `AllySkillExtraHost` | extra=3/4 友军加速/加血与特效 |
| `FaXiangHost` | extra=6 法相天地加攻/减攻与缩放 |
## 4. 验收
- 哪吒主动(10146~10148)放出后场上只留「哪」,冲锋体从吒位跳到路上再沿敌方来路反冲
- 冲锋枪保持预制体默认动画,节点朝向跟着冲锋方向转
- 沿途怪吃到 `10000` 万分比伤害;结束后英雄与双字恢复
- 弓主动(如 10186~10188、10216~10218)场上无敌方行军怪则不放;有怪后**敌方来路**通行格陆续落下与普攻相同的箭;己方出怪路径不射;空格仍空落消失
- 玉帝主动(10196~10198)放出后己方行军怪加速 3 秒并播 `怪_加速`(表内暂无 showeffect,仍立刻施加);阎王主动(10206~10208)`0.1,生死簿` 预兆起播后 0.33s:对敌直伤身上播 `怪_流血`,己方行军怪回 20% 最大生命并播 `怪物加血`;攻向自己的敌怪不受益
- 法相天地(20104/20106:`6,1.5,20000,5,0.5,-3300,5`)先 5 秒武器放大加攻(英雄保持 1 倍),再 5 秒武器+动画+阴影缩到默认×0.5、品质框不跟缩,结束后平滑恢复;不打自己;多次释放武器不会越缩越小
- 挑飞砸地(20205/20506:`7,100,10000,2`)把目标吸到枪尖挑起再砸到枪尖最近可行走格,圆形范围伤 + 眩晕 2 秒;死亡怪等砸地特效结束再回收
- 震天弓(20511:`8,40,1000,10000`)普攻距离每 40 像素伤害 +10%,最多 +100%;射程仍走 `atk_buff1` type 11