9.7 KiB
方案:怪物技能
状态:框架已落地;奔波儿灞 30105、牛魔王 30106、六耳 30107、蟹将 30205、龟丞相 30206、敖广 30207、黑无常 30305、白无常 30306、谛听 30307、千里眼 30405、顺风耳 30406、太白 30407 已落地
日期:2026-09-04
关联:方案-战斗技能逻辑层.md、方案-出怪逻辑实现.md
1. 目标(本切片)
Monster.skill关联Skill.id,出怪后按表进入 OnTick 施法。- 怪物技能
target_stage=1(敌人)默认只打 敌方阵营、Hero.herotype ≠ 2(非组合英雄 / Weapon2.type≠2 组合字)。无特殊需求时不选 type2。 - 做到播
Skill.animation(多为「技能」)并finish解锁;伤害 / 召唤 / debuff / 冲锋等 后续逐个核对。
2. 管线
UnitSpawned(波次 / 营召唤 / atk_type=8 召唤)
→ MonsterSkillHost 读 Monster.skill
→ SkillAbilityBuilder.buildMonster
→ registerAbility + AbilitySetComp + abilities.bindEntity
→ OnTick(interval=Skill.cd;普通怪 firstDelaySec=0 跳出后即放;Boss firstDelaySec=cd 跳出后先满 CD 再放)
→ PlayPresentation cue=monsterSkill
→ MonsterSkillHost 播 Spine(施法者 presentLocked 停步),结束后解锁并回走路 finish;**门神盾牌顶推期间仍同步位移**(Boss 施法锁不得把怪钉死)
不给怪物挂 Skill.ts / HeroActor。SkillController 忽略怪物 cue,避免按塔去绑 HeroActor。
3. Ability
| 项 | 约定 |
|---|---|
| id | ability_monster_{skillId}_e{entityId} |
| skillKind | monster |
| cue | monsterSkill |
| timeline | 默认仅 PlayPresentation;atk_type=8/11 挂 SummonFromSkill;非 6/9/12 且非 target_stage=2 的 atk_buff 挂 ApplySkillAtkBuff;动画结束后 hit |
被动 Skill.type=2 |
不绑定,warn |
Skill.type 非 1 且非 2 |
warn 后仍按主动绑定(例:哮天犬 40001 表里 type=0) |
4. 索敌
target_stage |
team | 本切片 |
|---|---|---|
| 1 敌人 | enemy | params.monsterEnemyHero:只保留 herotype≠2 且非多格组合的塔(atk_type=9 除外,要打组合弓将);atk_buff1 类型 12 再加 monsterBasicHero(仅 herotype=1、跳过已损毁);类型 6 再加 monsterRandomPick(全屏洗牌后再取 atk_para 个数);atk_type=9 再加 weaponType=将 id(Hero.weapon,4=弓,含组合武将) |
| 2 友军 | ally | params.monsterSameSide:同一 ownerId 且同为敌/己的怪物;skill 类型 5 再加 monsterDevourMinion(仅小怪/召唤物),stageStrategy=1 去重 |
| 3 自身 | self | 无 HasTargetInRange,到点即放 |
target_stage=1 且范围内没有非组合英雄时,不施法、看不到动画(atk_buff 类型 9 千里眼除外:目标是格子,空 Put 也可封;atk_type=9 顺风耳除外:需场上有对应将 id 的弓字,含组合武将)。验收其它 target_stage=1 的怪时场上需有基础字/功能字;self(六耳 / 蟹将 / 黑无常)与千里眼不依赖敌塔;太白射程内无其它友军时仍可对自己放。行军怪索敌圆心跟当前格,不跟出生占地。
5. 已实现技能
| Skill.id | 怪 | 表现 |
|---|---|---|
| 30105 | 奔波儿灞 | atk_type=15 atk_para=半径,伤害:射程内锁主目标(跳过蟠桃树;atk_buff1 类型6 时在非桃候选中随机),再对主目标圆心半径内敌方非组合字结算(半径按配表 83px/格 + 占地扫描);skill=9,秒 与葫芦同时在主目标格渐显 干扰迷雾(隐藏全屏紫雾槽,节点缩放 0.2×0.4;持续后渐隐);atk_buff1=6,… 迷雾起播即圆内降攻速(不挂降雨,降雨仅敖广);播「技能」同时出池 葫芦 挂怪物(预制体默认偏移),播 技能葫芦 并朝向同一目标格,播完回 45° 后回池 |
| 30106 | 牛魔王 | atk_buff1=12,概率:播「技能」后在锁定基础字格播 损毁文字,该字失效禁攻(可拖可换位,不激活),字形倒下转 -90°;不选已损毁、不选组合字;营损毁后 Host 停出怪,合成升级解除后恢复;损毁跟字块走(进背包仍倒下,交换不传染别的字;倒下只拧本格 HeroActor/字形,合成升级一把不得扶正另一把);己方与敌方字均倒下;ebg/营底框保持世界角与世界坐标;合成升级后回正 |
| 30107 | 六耳 | atk_type=8 atk_para=10002,4,0.5,2:播「技能」后在自身周围每隔 0.5 秒招 1 只猴(共 4 只),阵营与六耳一致 |
| 30205 | 蟹将 | atk_buff1=3,10000,30000,5:播「技能」后自身移速 ×4,持续 5 秒(沿路冲锋) |
| 30206 | 龟丞相 | atk_type=3 射程 208 atk_buff1=7,10000,3,5:播「技能」后降低射程内非组合字 3 级(最低 1),持续 5 秒禁合成升级、可移动;期间等级字 #bf3f48,到期恢复等级 |
| 30207 | 敖广 | atk_type=7 atk_para=3,0 atk_buff1=6,10000,-2000,5:播「技能」后随机锁最多 3 个敌方文字,格上方挂 降雨(默认动画循环),攻速 ×0.8 持续 5 秒 |
| 30305 | 黑无常 | atk_type=8 atk_para=10003,1,0,2:播「技能」后在自身周围招 1 只魂(Monster.id=10003) |
| 30306 | 白无常 | atk_type=3 射程 208 atk_buff1=8,10000,5:播「技能」后使射程内非组合字混乱 5 秒(禁攻),格上挂 混乱效果 |
| 30307 | 谛听 | skill=5,10,5000:放技能时 Host 当场扫描射程 208 内同侧小怪/召唤物(最多 10)吸入,动画结束 despawn(不发击杀桃),血上限 ×(1+只数×5000/10000) |
| 30405 | 千里眼 | atk_type=7 atk_para=1,0 atk_buff1=9:播「技能」时在 Boss 处出 千里眼技能,光束瞄向目标格并按距离拉 X 缩放,落点播默认循环;同时在被进攻玩家可放置格中随机 1 格改为可开挖(空 Put 可选),地块 fillRange 0→1(铲子开挖反向);组合武将与组合字(Weapon2.type=2,含未成将散字)跳过;格上非组合单字销毁 |
| 30406 | 顺风耳 | atk_type=9 atk_para=4,99,0 atk_buff1=8,10000,5:播「技能」后令全屏 Hero.weapon=4 的弓字(含组合武将)混乱 5 秒(禁攻),格上挂 混乱效果;无弓字则不放 |
| 30407 | 太白 | atk_type=3 射程 291 atk_buff1=3,10000,2000,3 atk_buff2=10,3000:播「技能」后给射程内**同侧友军怪(含自身)**移速 ×1.2 持续 3 秒(身上 怪_加速),并回复 30% 最大生命(怪物加血) |
| 40001 | 哮天犬 | type=0 仍按主动绑定;播「技能」后给射程 208 内同侧友军移速 ×1.2 持续 3 秒(怪_加速);己方皮 哮天犬、敌方皮 哮天犬2 |
类型 9(封格 atk_buff)不走 HasTargetInRange(封格不锁英雄)。skill 类型 9 且无 atk_type 时仍半屏迷雾、不锁英雄;atk_type=15 + skill 9 则锁主目标并扩圆。atk_type=9 指定将走 HasTargetInRange + weaponType。类型 12 只锁 herotype=1 基础字。类型 6 对每个锁定目标播降雨并加攻速(不走 ApplySkillAtkBuff);攻速写 aspd_add 万分比,负值降攻速。类型 5 范围内没有可吞小兵则不施法。target_stage=2 的 30407 对每个同侧友军上 buff(含自身)。target_stage=3 的 30107 / 30305 不锁敌。ApplySkillAtkBuff 对 ctx.targets 全部目标生效(龟丞相 / 白无常 / 顺风耳)。
6. 本切片不做
- 哮天犬 40001 战吼时机(表
Skill.type=0,仍按主动绑定;皮肤哮天犬/哮天犬2,动画「技能」已接入) - 机制怪未发
UnitSpawned的路径(白骨精等);波次 / 营 / 技能召唤已覆盖 - 改策划表、给怪物加
Skill组件
7. 关键路径
| 用途 | 路径 |
|---|---|
| 绑定 + 播动画 | assets/script/battle/combat/MonsterSkillHost.ts |
| Ability 构建 | SkillAbilityBuilder.buildMonster |
| Ability id | Weapon1BattleIds.entityMonsterAbilityId |
| 默认敌人过滤 | BattleHeroTable.isMonsterDefaultEnemyTarget → TargetResolver |
| 类型12基础字 | isMonsterBasicHeroTarget → TargetResolver;TowerRuinHost 失效至合成升级 |
| atk_type=9 指定将 | params.weaponType → isHeroWeaponTarget;monsterEnemyHero 关闭 |
| 类型6随机字 | params.monsterRandomPick → TargetResolver 洗牌;Host applyPair 降攻速;无 skill 类型9 时再播 降雨(敖广);奔波儿灞出池 葫芦 挂怪物(预制体默认偏移)、与迷雾同瞄主目标格 |
| 类型5吞噬 | params.monsterDevourMinion → TargetResolver;Host 吸入后 lifecycle.despawn + applyMaxHpCoeff |
| 类型9封格 | 施法起播:千里眼技能 根在 Boss、光束瞄格、落点默认循环;Host → pickSealablePutTiles + sealPlaceableTiles:随机 Put→Dig(跳过组合武将与 type2 组合字),单字 deploy.sell,地块 fillRange 0→1 |
| 类型7降级 | TowerLevelDownHost:钳制最低 1 级,持续秒内禁合成、可移动,到期恢复;等级字变色 |
| 类型12损毁 | TowerRuinHost:禁攻、可移动;不选已损毁 / type2 组合字;损毁写在字块上(进背包仍倒下,交换不传染;倒下只拧本格字形,升级一把不得扶正另一把);己方与敌方 AI 地图字均倒下;ebg/营底框保持世界角与世界坐标;合成升级解除。营出怪走 YingCampSummonHost,须跟 castBlockPredicate(损毁/魅惑)停出怪,解除后恢复 |
| 类型2友军 buff | params.monsterSameSide → TargetResolver;Host 扫描射程内同侧怪 applyPair + 怪_加速 |
| 表现分发 | SkillController 跳过;Host 听 PresentationCue |