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.
4.4 KiB
4.4 KiB
战斗系统需求说明(逻辑层 / 表现层)
本文档为战斗模块的需求与架构约束,与
接入指南.md互补。
完整技能方案见docs/方案-战斗技能逻辑层.md。
表现数据驱动见docs/方案-战斗表现数据驱动.md。
1. 术语(必读)
| 对外说法 | 配表 / 代码名 | 含义 |
|---|---|---|
| 技能 | Skill 表 / ITableSkill |
战斗技能配置:普攻形态、主动、被动、额外效果。 |
| 普攻 | Hero.atk_id[level-1] → Skill.id |
每塔 1 个,随合成等级取数组索引。 |
| 英雄技能 | Hero.act_skill[level-1] → Skill.id |
可无;按合成等级取索引。 |
| 武器技能 | Weapon.act_skill → Skill.id |
局外装备确定;type=1 主动 / type=2 被动。 |
| 词条 | — | 旧三选1表已删;遗留代码须空操作。 |
代码中历史名 weapon1Id 表示 Hero.id;新增优先用 heroId。
2. PVP:当前不实现,架构必须预留
现状:仅 solo 完整跑通;PVP 不做联机与匹配,但禁止为赶进度写死「只有一个玩家」的逻辑。
2.1 必须遵守
| 规则 | 做法 |
|---|---|
| 玩家上下文 | 业务入口用 Player / match.players / match.getPlayer(id),不要在战斗逻辑里散落 gg.game.localPlayer(UI 层可缓存 _player)。 |
| 部署与同步 | DeploySync / SkillController 均带 playerId,远端玩家无 bagSession 时走 map 扫描 fallback。 |
| 事件监听 | 每玩家一个 SkillController;表现 cue 用 _ownsEntity 过滤。 |
| 模式参数 | BattleStartParams.mode: 'solo' | 'pvp'、localPlayerId 已存在;新功能不得假设 players.length === 1。 |
2.2 刻意不做(后续 PVP 迭代)
- 词条选择的网络同步(词条玩法已移除)
- 远端
bagSession/ 背包 UI
2.3 验收标准(架构预留)
- 新增战斗逻辑函数签名包含
playerId或Player参数 - 无全局可变「本局唯一塔列表」;按玩家槽位查询
deployedUnits
3. 塔战斗能力(优先级 P0)
3.1 三槽模型
Hero
├─ atk_id[level-1] → Skill(普攻)
├─ act_skill[level-1] → Skill(英雄主动;可空)
└─ 装备武器
└─ Weapon.act_skill → Skill(武器技能;0=无)
- 允许同一塔同时挂 普攻 + 英雄主动 + 武器主动(有配置才挂)。
- 主动技(英雄+武器)按
Skill.priority降序 入队,串行释放。 - 被动(
Skill.type=2)走 condition/result,不进施法队列。
3.2 部署时初始化
- 解析武器:
getHeroDisplayWeaponId(heroId)。 - 从
Hero+level+ 武器计算CombatComp。 - 绑定普攻 / 英雄主动 / 武器主动 Ability;注册被动。
- 词条物化:空操作(表已删)。
3.3 实现模块
| 模块 | 职责 |
|---|---|
SkillAbilityBuilder |
Skill → MX AbilityDef |
TowerCombatSetup |
部署后写 Combat + Ability |
TowerLoadoutService |
实体 loadout、刷新 Ability 绑定 |
PassiveSkillRuntime |
type=2 被动 |
SkillPickApplier |
遗留空操作 |
4. 表现层需求
4.1 逻辑 → 表现
- MX 发出
PresentationCue(timeline 内PlayPresentation)。 SkillController按 cue 调用onAttack/onSkill/onWeaponSkill。- cue:普攻
attack,英雄主动skill,武器主动weaponSkill。 - 默认经
SkillPresenterRouter:按skillId覆盖或Skill.atk_type通用播控(三槽同一管线)。 - 伤害归逻辑层;表现不通过碰撞 AABB 作为唯一命中源。
4.2 表现 params
见 docs/方案-战斗技能逻辑层.md §6。
5. 配表依赖
| 表 | 用途 |
|---|---|
Hero |
塔数值、atk_id、act_skill、startweapon |
Weapon |
局外装备、atk 加成、act_skill |
Skill |
战斗技能(普攻/主动/被动) |
Text |
背包字块合成 |
Level / Monster |
关卡与出怪 |
6. 修订记录
| 日期 | 说明 |
|---|---|
| 2026-07-08 | 初版:PVP 架构预留、一塔一普攻一主动 |
| 2026-08-29 | 改为三槽(普攻+英雄技能+武器技能);Skill=战斗技能;去掉词条模型 |