using UnityEngine; using XGame.Database; using XGame.Framework.Time; namespace FL.Battle.Buffs { public class DotDebuff : Buff { /// /// buff事件触发定时器 /// dot类型使用 /// private ITimer _tickTimer; protected override void OnInited() { _tickTimer = Context.Time.AddLooperTimer(Table.BuffTypeNum[1], OnBuffTick); } protected override void OnDispose() { _tickTimer?.Cancel(); _tickTimer = null; } private void OnBuffTick(int times) { // 已经死亡 if (Context.Entity.IsDead) return; var damage = Mathf.RoundToInt(Layers * Table.BuffTypeNum[0].ToRealFloat() * Context.Entity.Attr.HpLimit); Context.Calculation.Damage(-damage, ElementType); //Log.Debug($"OnBuffTick EntityId:{Context.Entity.EntityId} BuffId:{buff.TableId} Overlay:{buff.Overlays} Damage:{damage}"); } public bool TryTickLayer5() { // 毒的5层直接引爆伤害 if (ElementType != EElementType.Poison || Layers < LayerLimit) return false; //伤害:dot总跳数*层数*单层伤害值 var count = Duration / Table.BuffTypeNum[1]; var damage = Mathf.RoundToInt(count * Layers * Table.BuffTypeNum[0].ToRealFloat() * Context.Entity.Attr.HpLimit); Context.Calculation.Damage(-damage, ElementType); Listener?.OnCompleted(TableId); return true; } } }