wangguan
2020-12-23 aadfae81e6a511cd2c062ab0b05f3ee3419f1a7f
Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs
@@ -34,7 +34,12 @@
                new CritDamageAdd(),
                new CritBulletAdd(),
                new SlowDown(),
                new FireRateAdd()
                new FireRateAdd(),
                new SkillLevelUp(),
                new DecreaseWoodChargeTime(),
                new FrostProbabilityAdd(),
                new FrostDamageAdd(),
                new FrostTimeAdd()
            };
        }
@@ -51,16 +56,22 @@
                EndlessBuffData.RemoveFromBuffPool(buff.Config.id);
            BuffList.Add(buff);
            EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.PlayBuffPS, buff.Config.get_buff);
            EndlessBuff endlessBuff = GetBuffInstanceByType((EndlessBuffEffectType)buff.Config.buff_effect[0]);
            endlessBuff.BuffList.Add(buff);
            endlessBuff.Handle();
            // 如果是一次性生效的buff,直接移除掉
            if (buff.LifeCycleType == EndlessBuffLifeCycleType.Once)
            if (endlessBuff != null)
            {
                endlessBuff.BuffList.Remove(buff);
                RemoveBuff(buff);
                endlessBuff.BuffList.Add(buff);
                endlessBuff.Handle();
                // 如果是一次性生效的buff,直接移除掉
                if (buff.LifeCycleType == EndlessBuffLifeCycleType.Once)
                {
                    endlessBuff.BuffList.Remove(buff);
                    RemoveBuff(buff);
                }
            }
        }
@@ -72,7 +83,7 @@
        {
            BuffList.Remove(buff);
            EndlessBuff endlessBuff = GetBuffInstanceByType((EndlessBuffEffectType)buff.Config.buff_effect[0]);
            endlessBuff.LoseEffect();
            endlessBuff?.LoseEffect();
        }
        /// <summary>
@@ -111,7 +122,7 @@
        {
            List<EndlessBuffConfig> ret = new List<EndlessBuffConfig>();
            // 暂且先这么处理吧 如果1:火 2:水 3:木
            int attributeId = (int)Mathf.Floor(id / 10000f);
            int attributeId = (int)Mathf.Floor(id / 100f);
            for (int i = 0; i < BuffList.Count; ++i)
            {
@@ -147,7 +158,32 @@
        /// <returns></returns>
        public EndlessBuff GetBuffInstanceByType(EndlessBuffEffectType type)
        {
            int tmp = (int)type - 1;
            if ((int)type - 1 >= instanceList.Count) return null;
            return instanceList[(int)type - 1];
        }
        /// <summary>
        /// 处理PVE无尽模式buff增加的伤害
        /// </summary>
        /// <param name="finalDamage"></param>
        public float ProcessEndlessBuffAttack(float finalDamage, int elfId)
        {
            List<EndlessBuffConfig> list = EndlessBuffManager.instance.GetBuffListByEffectType(EndlessBuffEffectType.AttackAdd, elfId);
            if (list.Count == 0) return 0;
            float ratio = 0;
            float add = 0;
            for (int i = 0; i < list.Count; ++i)
            {
                ratio += list[i].Config.buff_effect[1];
                add += list[i].Config.buff_effect[2];
            }
            return finalDamage * (ratio / 100f) + add;
        }
    }
}