技能&buff
1、主动技&被动技
技能:实现主动技
- 技能基础配置
- 阶段1
- 阶段基础配置
- 事件1(例:给别人加buff事件)
- 事件2(例:给自己加buff事件)
- 阶段2
- 阶段基础配置
- 事件1(例:治疗事件)
- 事件2(例:伤害事件)
Buff :实现被动技
1、当攻击时
2、当被击时
3、当暴击时
4、当被暴击时
5、当命中时
6、当被命中时
7、当出生时
8、当死亡时
9、当眩晕时
10、当被眩晕时
... ...
例如某个buff配置如下:
- buff基础配置
- 当被攻击时
- 伤害事件
- 周期性触发
- 恢复事件
2、事件通用性
技能&buff,是上层两个不同的调用入口。里面真正实现逻辑功能的,被封装成为了事件。
事件对于技能&buff是通用的。
1、伤害事件
2、给自身加buff
3、给别人加buff
4、治疗事件
5、位移事件
6、嘲讽事件
7、召唤NPC事件
8、执行lua表达式事件
9、复活事件
角色动画
警示语言
警示特效
屏幕特效
播放特效
子弹
播放声音
相机抖动
相机播放animation
武器动画
读条
动画控制
连接特效
拖尾特效
客户端表达式
3、事件的搜索
搜索的方式
1、扇形
2、圆形
3、长方形
4、环形
5、单体
搜索的规则
取出玩家在地图上所处的格子id,按照九宫格搜索附近所有的单位:
0、技能配置的目标数量是:5
1、搜索到所有满足条件的单位,然后按距离排序,返回前5个
假设附近九宫格内有20个单位,遍历后有10个单位满足距离条件,那么排序这10个单位,返回前5个单位
(一般有距离排序需求的技能是:嘲讽、治疗)
2、搜索到指定数量的对象后,结束搜索并返回搜索结果列表
假设附近有20个单位,有10个单位满足条件。
3、搜索到所有对象后,从可选列表中,随机返回指定数量
排除受击目标
朝向相关
1、朝向
2、角度
3、弧度
搜索的目标筛选配置
在SLG项目中,由于1个玩家会创建多个部队,所以需要区分[本部队]和[己方其它部队]。
enum ETarRela
{
ETR_NONE = 0 , // 无
ETR_SELF = 1<<0, //本部队
ETR_OWN = 1<<1, //己方部队
ETR_FRIEND = 1<<2, //友方部队
ETR_NEUTRAL = 1<<3, //中立部队
ETR_ENEMY = 1<<4, //敌方部队
}
4、事件的处理目标
如上图所示:玩家A释放了一个傀儡B,玩家C攻击了傀儡B,傀儡B正在攻击玩家D
此时设计不同的技能,会对buff&技能的数据结构有不同的要求。
举例设计了以下4种技能:
1、释放一个傀儡,当傀儡被攻击,回复自身100血量。
(需要记录释放者A、傀儡B)
2、释放一个傀儡,当傀儡被攻击,回复自身100血量,傀儡会对攻击者造成100的反击伤害
(需要记录释放者A、当前产生攻击行为的两方:玩家C和傀儡B)
3、释放一个傀儡,当傀儡被攻击,回复自身100血量,傀儡会对攻击者造成100的反击伤害,并且傀儡启动自毁装置,化作一道流光对傀儡当前攻击的目标造成减速效果
(需要记录释放者A、当前产生攻击行为的两方:玩家C和傀儡B、傀儡的攻击目标:玩家D)
4、释放一个傀儡,当傀儡被攻击,回复自身100血量,傀儡会对攻击者造成100的反击伤害,并且傀儡自爆,在傀儡周围选取2个目标,对其造成眩晕
(需要记录释放者A、当前产生攻击行为的两方:玩家C和傀儡B、傀儡执行一次搜索,搜索出E、F)
在程序数据结构设计上:
玩家A:被记为释放者,命名releaser
傀儡B:被记为拥有者,命名owner
玩家C:被记为互动方,命名cre
玩家D:被记为当前目标,命名curTar
所以伤害事件中,设计上需要有这4种单位,才能满足上述的技能设计:releaser、owner、cre、curTar
5、状态
状态是一个可叠加的数据,比如buff-1给玩家A添加了2s时长的眩晕,buff-2给玩家A添加了10s的眩晕。当buff-1的时长到了以后,此时不能直接将眩晕的状态清除掉,而是将眩晕状态的层数减1。当10s的时长到了以后,再减去眩晕的层数,此时层数为0,会清掉眩晕状态。
这里也一直有个有个遗留问题:不支持相同buffId叠加
int state[32];
6、伤害
伤害分担
伤害递减