Buff相关备注

buff相关个人备注

bonus:游戏对象指定类型属性值,一般和逻辑有强耦合关系。

最终值 = 基础属性值+offset值

value = (BaseValue+ AddValue)*(1+MulValue)

其中:AddValue = addValue_base + addValue_dynamic

Mulvalue = mulValue_base+mulValue_dynamic

其中BaseValue是默认初始值

addValue_base,mulValue_base是记录在服务器的add类型的target初始值

 

buff:游戏对象持续性的一段逻辑

1.Add 2.Remove 3.Refresh

一:Add:

添加Buff A到 Target 对象上:

能否真正添加进去?

是否移除已有的buff?

如果已经有此buffA,怎么处理?

buff消失类型:时间、触发次数、永久。

 

  1. 如果A可被场景禁止,当前又是场景禁加buff状态;加不上

  2. Target有禁止addBuff的bonus,加不上

  3. AddBuffCD概念。A有CD属性,并且还在CD内。 加不上

  4. Target已有A,进行Refresh叠加规则

  5. 唯一BuffExclusiveID的概念,用于进行Buff之间的交互规则(下面6、7、8条)

  6. Target已有Buff_B并且B禁止添加A 加不上

  7. A移除列表中有buff_B,则移除buff_B

  8. A和B的BuffExclusiveID相同,保留谁?1.什么也不做,A和B无关,加A留B 2.A替换B 3.选择配置level高的 4.A被B屏蔽,A加不上

  9. A消失类型是时间控制,target有影响lifeTime的Bonus属性,,判断两者值的大小,如果A的lifeTime小于reduceCD,则A加不上

  10. A的BuffValue是有意义的,target有影响BuffValue的Bonus属性,则判断受reduceValue影响后BuffValue是否还有意义, 无意义(一般是value<0)则A加不上

 

二:Remove:

buff消失三种类型:时间、触发次数、永久。

统一在fixedUpdate内进行CheckRemove

  1. 时间类型 每个buff进行倒计时

  2. 触发次数类型

 

三:Refresh:

buffLayer叠加规则。会影响到buffValue的值。进而影响具体buffLogic的执行。

 

四:Effect效果:

每个buff实现的logic差异化,有logicType,继承baseBuffLogic。

目前基类BaseBuffLogic针对常用的bonus类型做了layer_bonus处理。

  1. bonus相关比较常用,直接放入到baseBuffLogic内

  2. A加上后执行独立类型logicType的buffLogic类进行 buffEnter Refresh Update Trigger

  3. 如果有BuffTriggerType的话,会被event触发执行Trigger逻辑。 比如:308 BuffControlType类型为 次数类型的,BuffTriggerType=CfgTriggerType.BeHurt TriggerTimes=1 表示为 targert受伤一次就移除这个buff

比如:50014 使用N张卡牌后,给target添加指定buff并移除50014

 

五:统一在BuffManager内管理:

1.target+bufflist(游戏对象映射buffLogicList)

2.BuffManager里进行Update刷新,检测所有target的buffList内的buff是否合法、更新。

 

总结:

1.bonus在进入战斗后伴随游戏对象执行具体逻辑。区分基础值和动态添加。

2.buff的添加是否成功,需要考虑全局场景buffCD、buffCD、buff互斥、buff叠加

  1. buff的移除:时间or触发次数or永久

  2. trigger的概念,执行OnTrigger,进行和其它逻辑进行交互。并在buffTriggerCount记录次数。

  3. layer的概念,执行onRefresh,进行同buff的叠加规则。

  4. exParams扩展参数概念,进行logicType指定可配置逻辑处理

  5. buff的添加、移除最好统一放在Update内,外部的Addbuff和removebuff针对list进行临时操作,在下一帧Update内进行真正的操作。可以避免出现:在Update buff delete内remove其它buff导致出现buffList长度变化,在for循环内的异常。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:echarts关系图


下一篇:1.俩数之和