|  | @@ -1,4 +1,5 @@
 | 
	
		
			
				|  |  |  using System;
 | 
	
		
			
				|  |  | +using System.Collections.Generic;
 | 
	
		
			
				|  |  |  using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
 | 
	
		
			
				|  |  |  using Fort23.Core;
 | 
	
		
			
				|  |  |  using Fort23.UTool;
 | 
	
	
		
			
				|  | @@ -18,6 +19,8 @@ namespace GameLogic.Combat.Buff
 | 
	
		
			
				|  |  |          protected float _jianGe;
 | 
	
		
			
				|  |  |          public System.Action buffFinish;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        private List<BuffStackInfo> _buffStackInfos = new List<BuffStackInfo>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          public int buffCount
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              get { return _count; }
 | 
	
	
		
			
				|  | @@ -25,6 +28,7 @@ namespace GameLogic.Combat.Buff
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          protected int _count;
 | 
	
		
			
				|  |  |          private float _time;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          public void Init(CombatHeroEntity combatHeroEntity, CombatHeroEntity source, BuffInfo buffInfo)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              _triggerData.Source = this;
 | 
	
	
		
			
				|  | @@ -37,23 +41,53 @@ namespace GameLogic.Combat.Buff
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public void AddBuffCount(CombatHeroEntity source, BuffInfo buffInfo)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            _currTime = 0;
 | 
	
		
			
				|  |  | -            int c = buffCount + buffInfo.count;
 | 
	
		
			
				|  |  | -            if (c > buffInfo.BuffConfig.overlayCount)
 | 
	
		
			
				|  |  | +            if (buffInfo.BuffConfig.timeType == 1)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                c = buffInfo.BuffConfig.overlayCount - buffCount;
 | 
	
		
			
				|  |  | +                _currTime = 0;
 | 
	
		
			
				|  |  | +                int c = buffCount + buffInfo.count;
 | 
	
		
			
				|  |  | +                if (c > buffInfo.BuffConfig.overlayCount)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    c = buffInfo.BuffConfig.overlayCount - buffCount;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                else
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    c = buffInfo.count;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (c <= 0)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                _count += c;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              else
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                c = buffInfo.count;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +                int c = buffCount + buffInfo.count;
 | 
	
		
			
				|  |  | +                if (c > buffInfo.BuffConfig.overlayCount)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    c = buffInfo.BuffConfig.overlayCount - buffCount;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                else
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    c = buffInfo.count;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (c <= 0)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                return;
 | 
	
		
			
				|  |  | +                if (c <= 0)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                buffInfo.count = c;
 | 
	
		
			
				|  |  | +                _count += c;
 | 
	
		
			
				|  |  | +                BuffStackInfo buffStackInfo = CObjectPool.Instance.Fetch<BuffStackInfo>();
 | 
	
		
			
				|  |  | +                buffStackInfo.BuffBasic = this;
 | 
	
		
			
				|  |  | +                buffStackInfo.BuffInfo = buffInfo;
 | 
	
		
			
				|  |  | +                buffStackInfo.count = c;
 | 
	
		
			
				|  |  | +                _buffStackInfos.Add(buffStackInfo);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            _count += c;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              UpdateEffect();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -67,7 +101,6 @@ namespace GameLogic.Combat.Buff
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public void UpdateEffect()
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  |              ProUpdateEffect();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -78,11 +111,45 @@ namespace GameLogic.Combat.Buff
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public void ReduceCount(int count)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            _count -= count;
 | 
	
		
			
				|  |  | -            if (_count <= 0)
 | 
	
		
			
				|  |  | +            if (buffInf.BuffConfig.timeType == 1)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                combatHeroEntity.BuffControl.RemoveBuff(this);
 | 
	
		
			
				|  |  | -                return;
 | 
	
		
			
				|  |  | +                _count -= count;
 | 
	
		
			
				|  |  | +                if (_count <= 0)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    combatHeroEntity.BuffControl.RemoveBuff(this);
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            else
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                while (count > 0)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    if (_buffStackInfos.Count <= 0)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        combatHeroEntity.BuffControl.RemoveBuff(this);
 | 
	
		
			
				|  |  | +                        return;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    BuffStackInfo buffStackInfo = _buffStackInfos[0];
 | 
	
		
			
				|  |  | +                    if (buffStackInfo.count >= count)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        buffStackInfo.count -= count;
 | 
	
		
			
				|  |  | +                        _count -= count;
 | 
	
		
			
				|  |  | +                        count = 0;
 | 
	
		
			
				|  |  | +                        if (buffStackInfo.count == 0)
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            RemoveBuffStackInfo(buffStackInfo);
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    else
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        int c = buffStackInfo.count;
 | 
	
		
			
				|  |  | +                        count -= c;
 | 
	
		
			
				|  |  | +                        _count -= c;
 | 
	
		
			
				|  |  | +                        buffStackInfo.count = 0;
 | 
	
		
			
				|  |  | +                        RemoveBuffStackInfo(buffStackInfo);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              UpdateEffect();
 | 
	
	
		
			
				|  | @@ -126,7 +193,6 @@ namespace GameLogic.Combat.Buff
 | 
	
		
			
				|  |  |              CObjectPool.Instance.Recycle(buffInf);
 | 
	
		
			
				|  |  |              buffInf = null;
 | 
	
		
			
				|  |  |              combatHeroEntity = null;
 | 
	
		
			
				|  |  | -           
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          protected virtual void ProDormancyObj()
 | 
	
	
		
			
				|  | @@ -135,15 +201,24 @@ namespace GameLogic.Combat.Buff
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public void Update(float t)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -           
 | 
	
		
			
				|  |  | -            _currTime += t;
 | 
	
		
			
				|  |  | -            if (buffInf.buffTime > 0 && _currTime > buffInf.buffTime)
 | 
	
		
			
				|  |  | +            if (buffInf.BuffConfig.timeType == 1)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                combatHeroEntity.BuffControl.RemoveBuff(this);
 | 
	
		
			
				|  |  | -                return;
 | 
	
		
			
				|  |  | +                _currTime += t;
 | 
	
		
			
				|  |  | +                if (buffInf.buffTime > 0 && _currTime > buffInf.buffTime)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    combatHeroEntity.BuffControl.RemoveBuff(this);
 | 
	
		
			
				|  |  | +                    return;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            else
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                for (int i = 0; i < _buffStackInfos.Count; i++)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    BuffStackInfo buffStackInfo = _buffStackInfos[i];
 | 
	
		
			
				|  |  | +                    buffStackInfo.Update(t);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              if (_jianGe > 0)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  _time += t;
 | 
	
	
		
			
				|  | @@ -153,12 +228,26 @@ namespace GameLogic.Combat.Buff
 | 
	
		
			
				|  |  |                      UpdateJumping();
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              ProUpdate(t);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        public void RemoveBuffStackInfo(BuffStackInfo buffStackInfo)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            _buffStackInfos.Remove(buffStackInfo);
 | 
	
		
			
				|  |  | +            _count -= buffStackInfo.count;
 | 
	
		
			
				|  |  | +            CObjectPool.Instance.Recycle(buffStackInfo);
 | 
	
		
			
				|  |  | +            if (_buffStackInfos.Count <= 0)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                combatHeroEntity.BuffControl.RemoveBuff(this);
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            UpdateEffect();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          protected virtual void UpdateJumping()
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          protected virtual void ProUpdate(float t)
 |