Example #1
0
        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]);
                }
            }
        }
Example #2
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);
         }
     }
 }
Example #4
0
        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);
    }
Example #6
0
        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)