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/方案-怪物技能.md

9.7 KiB

方案:怪物技能

状态:框架已落地;奔波儿灞 30105、牛魔王 30106、六耳 30107、蟹将 30205、龟丞相 30206、敖广 30207、黑无常 30305、白无常 30306、谛听 30307、千里眼 30405、顺风耳 30406、太白 30407 已落地
日期:2026-09-04
关联:方案-战斗技能逻辑层.md、方案-出怪逻辑实现.md

1. 目标(本切片)

  1. Monster.skill 关联 Skill.id,出怪后按表进入 OnTick 施法。
  2. 怪物技能 target_stage=1(敌人)默认只打 敌方阵营、Hero.herotype ≠ 2(非组合英雄 / Weapon2.type≠2 组合字)。无特殊需求时不选 type2。
  3. 做到播 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