/// <summary>
        /// Add an effect into the holder then execute it, a copy will be made internaly to avoid references issues.
        /// </summary>
        /// <param name="ActiveSkillEffect"></param>
        /// <param name="ActiveSkillName"></param>
        public void AddAndExecuteEffect(BaseEffect ActiveSkillEffect, string ActiveSkillName)
        {
            ActiveSkillEffect = ActiveSkillEffect.Copy();

            //Add the SkillEffect to the DicActiveEffect to activate them later.
            if (!DicActiveEffect.ContainsKey(ActiveSkillName))
            {
                DicActiveEffect.Add(ActiveSkillName, new List <BaseEffect>());
            }

            int EffectCount = 0;

            for (int i = DicActiveEffect[ActiveSkillName].Count - 1; i >= 0; --i)
            {
                if (DicActiveEffect[ActiveSkillName][i].Equals(ActiveSkillEffect))
                {
                    ++EffectCount;
                }
            }

            if ((ActiveSkillEffect.IsStacking && EffectCount < ActiveSkillEffect.MaximumStack) ||
                EffectCount <= 0)
            {
                DicActiveEffect[ActiveSkillName].Add(ActiveSkillEffect);
                ActiveSkillEffect.ExecuteEffect();
            }
        }
 /// <summary>
 /// Add an effect into the holder then execute it.
 /// </summary>
 /// <param name="ActiveSkillEffect"></param>
 /// <param name="ActiveSkillName"></param>
 public void AddAndExecuteEffectWithoutCopy(BaseEffect ActiveSkillEffect, string ActiveSkillName)
 {
     if (CanAddEffect(ActiveSkillEffect, ActiveSkillName))
     {
         ActiveSkillEffect.Lifetime = ActiveSkillEffect.LifetimeTypeValue;
         DicActiveEffect[ActiveSkillName].Add(ActiveSkillEffect);
         ActiveSkillEffect.ExecuteEffect();
     }
 }
        /// <summary>
        /// Add an effect into the holder then execute it, a copy will be made internaly to avoid references issues.
        /// </summary>
        /// <param name="ActiveSkillEffect"></param>
        /// <param name="ActiveSkillName"></param>
        public void AddAndExecuteEffect(BaseEffect ActiveSkillEffect, string ActiveSkillName, string NewLifetimeType = "")
        {
            ActiveSkillEffect = ActiveSkillEffect.Copy();

            if (CanAddEffect(ActiveSkillEffect, ActiveSkillName))
            {
                if (NewLifetimeType != string.Empty)
                {
                    ActiveSkillEffect.LifetimeType = NewLifetimeType;
                }

                ActiveSkillEffect.Lifetime = ActiveSkillEffect.LifetimeTypeValue;
                DicActiveEffect[ActiveSkillName].Add(ActiveSkillEffect);
                ActiveSkillEffect.ExecuteEffect();
            }
        }
        public void ExecuteAllEffects(List <string> ListIgnoreSkill = null)
        {
            foreach (KeyValuePair <string, List <BaseEffect> > ActiveListEffect in DicActiveEffect)
            {
                if (ListIgnoreSkill != null && ListIgnoreSkill.Contains(ActiveListEffect.Key))
                {
                    continue;
                }

                for (int E = ActiveListEffect.Value.Count - 1; E >= 0; --E)
                {
                    BaseEffect ActiveEffect = ActiveListEffect.Value[E];

                    ActiveEffect.ExecuteEffect();
                }
            }
        }