第一次做技能时的血与泪
先上一个图。这是策划对于一个副本中关底boss 新增一个技能的需求(已简化处理)
由于对于技能模块的不熟悉,我没办法第一时间区分哪些逻辑是走的配置表,哪些逻辑需要单独建一份Lua 在运行时去调试。 哪些属于客户端的部分, 哪些需要在服务器实现,技能cd怎么处理等等。也是花了很长一段时间才基本上把项目的战斗模组搞清楚,接下来就来浅谈一下广义上的 MMO 的战斗模块的架构。
1.战斗的对象是谁?
战斗的对象是谁,又或者是谁可以参与到战斗流程中来。这句话看似是废话,当然是玩家了 还有敌人等等。不,我不是想说这个,从程序的角度来看。可以这么划分。
1.1 具有战斗行为的对象是:
- Obj_Player(玩家) 。当然还可以是和你同服的其他玩家,继承自Obj_Char (隶属于一个实体)
- Obj_Npc . 这是广义上的NPC, 包含场景中的敌人、副本中的怪物还有你的助战队友(进副本时,某些时候可以和任务NPC 一起)
- Obj_Fellow(伙伴)。
- Obj_ZombiePlayer(AI Robot)
1.2 对这些对象的解释:
- Obj_Fellow(伙伴)。是一种特殊的队友,需要强调的是,目前它只有辅助玩家的技能,可以理解都是Buff技能、没有主动攻击的行为。宠物 是一种伙伴。
- Obj_ZombiePlayer 是拷贝玩家的数据 和技能 进行攻击行为。 与玩家【在副本挂机模式】一样,会根据先决条件,将后续要释放的技能依次加入队列中。流式释放。
众所周知、战斗行为主要是通过释放技能进行表现(普通攻击属于一种技能),而技能效果主要通过Impact 表展现(配置技能效果的表格)
2.战斗行为的展现主体 – 技能
- 技能主要是来展现战斗行为还有一些特殊的操作行为(传送使用物品采集资源等)
- 技能按释放方式分为两大类:主动技能被动技能(玩家独有)
- 技能按逻辑分为:瞬发技聚气技引导技陷阱技特殊操作技能脚本技能等
- 技能的表现效果由客户端的动作逻辑和特效逻辑等客户端战斗模块展现技能的计算结果由服务端战斗模块运算
- 玩家释放技能一般由玩家客户端发起(部分特殊技能是服务端逻辑发起的比如一些传送技和使用物品的操作类技能)Obj_Npc Obj_Fellow Obj_ZobiePlayer 释放技能是由各自AI逻辑驱动(服务器发起较多)
- 服务端所有技能逻辑派 生自基类SkillBaseLogic 不同的技能逻辑通过重载基类接口实现不同的逻辑效果