public static void ClearBuffGroupOnBattleEnd(this BuffMgrComponent self) { if (self.updateList.Count > 0) { for (int i = 0; i < self.updateList.Count; i++) { self.RemoveGroup(self.updateList[i].BuffGroupId); } self.updateList.Clear(); } //TODO:后续如果出现诸如冰冻等限制类类型的DEBUFF,会在这里统一去除 }
public static async void AddBuffGroup(this BuffMgrComponent self, long groupId, BuffGroup group) { try { //刷新BUFF,暂时没做叠加 if (self.buffGroupDic.ContainsKey(groupId)) { Log.Debug("移除原Buff"); self.RemoveGroup(groupId); await TimerComponent.Instance.WaitAsync(0.1F);//延迟一下防止卡顿 } BuffGroup newGroup = group; newGroup.BuffGroupId = group.BuffGroupId; Unit target = self.Parent as Unit; Unit source = null; if (group.sourceUnitId != 0) { source = UnitComponent.Instance.Get(group.sourceUnitId); } else { source = target; } newGroup.OnBuffGroupAdd(source, target); self.buffGroupDic[groupId] = newGroup; if (newGroup.duration > 0) { self.updateList.Add(newGroup); } } catch (Exception e) { Log.Error(e.ToString()); } }
static bool DealWithBuffGroup(this BuffMgrComponent self, BuffGroup buffGroup) { TimeSpanHelper.Timer timer = TimeSpanHelper.GetTimer(buffGroup.GetHashCode()); long now = TimeHelper.Now(); if (now - timer.timing >= BuffMgrComponent.calSpan) { timer.timing = now; } if (buffGroup.buffList.Count > 0) { foreach (var v in buffGroup.buffList) { switch (v) { case Buff_DOT dot: GameCalNumericTool.CalDotDamage(buffGroup.sourceUnitId, self.GetParent <Unit>(), dot); break; default: break; } } } if (timer.interval <= 0) { self.RemoveGroup(buffGroup.BuffGroupId); TimeSpanHelper.Remove(buffGroup.GetHashCode()); return(false); } else { return(true); } }