public virtual void Remove(string buffName, RemoveBuffType type = RemoveBuffType.Once) { if (buffName.IsInvStr()) { return; } if (!Table.Contains(buffName)) { return; } if (!Data.ContainsKey(buffName)) { return; } BuffGroup group = Data[buffName]; if (type == RemoveBuffType.Group) { for (int i = 0; i < group.Layer; ++i) { Remove(group[i]); } } else if (type == RemoveBuffType.Once) { if (group != null && group.Layer > 0) { Remove(group[0]); } } }
public virtual TData Add(TData buff) { if (!SelfBaseUnit.IsLive) { return(null); } TData newBuff = null; BuffGroup buffGroup = null; //有buff组的buff叠加 if (!string.IsNullOrEmpty(buff.BuffGroupID)) { if (!Data.ContainsKey(buff.BuffGroupID)) { var tempGroup = new BuffGroup(); Data.Add(buff.BuffGroupID, tempGroup); ListData.Add(tempGroup); //没有隐藏的buff加入显示队列 if (!buff.IsHide) { ShowData.Add(tempGroup); } //非永久buff加入 update队列 if (buff.IsHaveMaxTime) { UpdateData.Add(tempGroup); } } buffGroup = Data[buff.BuffGroupID]; newBuff = buffGroup.Add(buff, SelfBaseUnit); } //没有buff组的buff合并 else { if (!Data.ContainsKey(buff.TDID)) { var tempGroup = new BuffGroup(); Data.Add(buff.TDID, tempGroup); ListData.Add(tempGroup); //没有隐藏的buff加入显示队列 if (!buff.IsHide) { ShowData.Add(tempGroup); } //非永久buff加入 update队列 if (buff.IsHaveMaxTime) { UpdateData.Add(tempGroup); } } buffGroup = Data[buff.TDID]; newBuff = buffGroup.Merge(buff, SelfBaseUnit); } if (BaseGlobal.IsUnReadData) { Callback_OnBuffChange?.Invoke(); } return(newBuff); }
public static void OnBuffGroupAdd(this BuffGroup self, Unit source, Unit target) { if (self.buffList.Count > 0) { foreach (var v in self.buffList) { self.Add(in v, source, target); } } }
public virtual TData Add(TData buff, BaseUnit caster = null, float step = 0.0f, TDBaseSkillData skill = null) { if (!SelfBaseUnit.IsLive) { return(null); } TData newBuff = null; BuffGroup buffGroup = null; //有buff组的buff叠加 if (!string.IsNullOrEmpty(buff.BuffGroupID)) { if (!Data.ContainsKey(buff.BuffGroupID)) { var tempGroup = new BuffGroup(); Data.Add(buff.BuffGroupID, tempGroup); ListData.Add(tempGroup); //非永久buff加入 update队列 if (buff.MaxTime > 0) { UpdateDataList.Add(tempGroup); } } buffGroup = Data[buff.BuffGroupID]; newBuff = buffGroup.Add(buff, SelfBaseUnit, caster, skill); } //没有buff组的buff合并 else { if (!Data.ContainsKey(buff.TDID)) { var tempGroup = new BuffGroup(); Data.Add(buff.TDID, tempGroup); ListData.Add(tempGroup); //非永久buff加入 update队列 if (buff.MaxTime > 0) { UpdateDataList.Add(tempGroup); } } buffGroup = Data[buff.TDID]; newBuff = buffGroup.Merge(buff, SelfBaseUnit, caster, skill); } Callback_OnBuffChange?.Invoke(); if (newBuff != null) { newBuff.SetStep(step); } return(newBuff); }
public static int IsExist(this BuffGroup self, string buffId) { int num = 0; foreach (var v in self.buffList) { if (v.GetBuffIdType() == buffId) { num++; } } return(num); }
public List <TData> GeBuffs(List <string> buffs) { List <TData> ret = new List <TData>(); foreach (var buffid in buffs) { if (Data.ContainsKey(buffid)) { BuffGroup group = Data[buffid]; foreach (var item in group.BuffList) { ret.Add(item); } } } return(ret); }
public async void AddBuffGroup(long groupId, BuffGroup group) { try { //刷新BUFF,暂时没做叠加 if (buffGroupDic.ContainsKey(groupId)) { Log.Debug("移除原Buff"); RemoveGroup(groupId); await TimerComponent.Instance.WaitAsync(0.1F);//延迟一下防止卡顿 } BuffGroup newGroup = group; newGroup.BuffGroupId = group.BuffGroupId; Unit target = Parent as Unit; Unit source = null; if (group.sourceUnitId != 0) { source = UnitComponent.Instance.Get(group.sourceUnitId); } else { source = target; } newGroup.OnBuffGroupAdd(source, target); buffGroupDic[groupId] = newGroup; if (newGroup.duration > 0) { updateList.Add(newGroup); } } catch (Exception e) { Log.Error(e.ToString()); } }
bool DealWithBuffGroup(BuffGroup buffGroup) { TimeSpanHelper.Timer timer = TimeSpanHelper.GetTimer(buffGroup.GetHashCode()); long now = TimeHelper.Now(); if (now - timer.timing >= 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, GetParent <Unit>(), dot); break; default: break; } } } if (timer.interval <= 0) { RemoveGroup(buffGroup.BuffGroupId); TimeSpanHelper.Remove(buffGroup.GetHashCode()); return(false); } else { return(true); } }
public static void AddBuff(this BuffGroup self, BaseBuffData baseBuffData) { self.buffList.Add(baseBuffData); }
static void Add(this BuffGroup self, in BaseBuffData buff, Unit source, Unit target)