protected void DeactivatePassive(PassiveEffect passiveEffect)
        {
            if (passiveEffect.AddSkillImmunity)
            {
                var existing = SkillMetaImmunitiesID.FirstOrDefault(s => s.ID == passiveEffect.SkillImmunityID && !s.HasDuration);
                if (existing != null)
                {
                    SkillMetaImmunitiesID.Remove(existing);
                }
            }

            if (passiveEffect.AddSkillSusceptibility)
            {
                var existing = SkillMetaSusceptibilities.FirstOrDefault(s => s.ID == passiveEffect.SkillSusceptibilityID && !s.HasDuration);
                if (existing != null)
                {
                    SkillMetaSusceptibilities.Remove(existing);
                }
            }

            if (passiveEffect.VitalRegenBonuses.Count > 0)
            {
                foreach (var vitRegen in passiveEffect.VitalRegenBonuses)
                {
                    var existing = VitalRegenBonuses.FirstOrDefault(s => s.VitalID == vitRegen.VitalID && !s.HasDuration);
                    if (existing != null)
                    {
                        VitalRegenBonuses.Remove(existing);
                    }
                }
            }
            if (passiveEffect.StatusDurationReduction.Count > 0)
            {
                foreach (var statusRed in passiveEffect.StatusDurationReduction)
                {
                    var existing = StatusReductions.FirstOrDefault(s => s.StatusEffectID == statusRed.StatusEffectID && s.IsPercentageDecrease == statusRed.IsPercentageDecrease);
                    if (existing != null)
                    {
                        StatusReductions.Remove(existing);
                    }
                }
            }
        }
        public void ApplyPassiveEffect(PassiveEffect talentEffect)
        {
            foreach (var ab in talentEffect.AttributeBuffs)
            {
                GetAttributeByID(ab.AttributeID).SkillValue += ab.Amount;
            }

            foreach (var stat in talentEffect.StatisticBuffs)
            {
                GetStatByID(stat.StatisticID).SkillValue += stat.Amount;
            }

            foreach (var vit in talentEffect.VitalBuffs)
            {
                GetVitalByID(vit.VitalID).SkillValue += vit.Amount;
            }

            //skillimmunity/sus
            if (talentEffect.AddSkillImmunity)
            {
                if (SkillMetaImmunitiesID.FirstOrDefault(s => s.ID == talentEffect.SkillImmunityID) == null)
                {
                    SkillMetaImmunitiesID.Add(new SkillImmunity()
                    {
                        ID = talentEffect.SkillImmunityID
                    });
                }
            }

            if (talentEffect.AddSkillSusceptibility)
            {
                var existing = SkillMetaSusceptibilities.FirstOrDefault(s => s.ID == talentEffect.SkillSusceptibilityID);
                if (existing != null)
                {
                    existing.AdditionalDamage += talentEffect.SkillSusceptibilityAmount;
                }
                else
                {
                    var newSus = new SkillMetaSusceptibility
                    {
                        ID = talentEffect.SkillSusceptibilityID,
                        AdditionalDamage = talentEffect.SkillSusceptibilityAmount
                    };
                    SkillMetaSusceptibilities.Add(newSus);
                }
            }

            foreach (var regenBonus in talentEffect.VitalRegenBonuses)
            {
                var existing = VitalRegenBonuses.FirstOrDefault(s => s.VitalID == regenBonus.VitalID);
                if (existing != null)
                {
                    existing.RegenBonus += regenBonus.RegenBonus;
                }
                else
                {
                    var newSus = new VitalRegenBonus
                    {
                        VitalID    = regenBonus.VitalID,
                        RegenBonus = regenBonus.RegenBonus
                    };
                    VitalRegenBonuses.Add(newSus);
                }
            }

            foreach (var statusReduc in talentEffect.StatusDurationReduction)
            {
                var existing = StatusReductions.FirstOrDefault(s => s.StatusEffectID == statusReduc.StatusEffectID && s.IsPercentageDecrease == statusReduc.IsPercentageDecrease);
                if (existing != null)
                {
                    existing.DecreaseAmount += statusReduc.DecreaseAmount;
                }
                else
                {
                    var newReduc = new ReduceStatusDuration
                    {
                        StatusEffectID       = statusReduc.StatusEffectID,
                        IsPercentageDecrease = statusReduc.IsPercentageDecrease,
                        DecreaseAmount       = statusReduc.DecreaseAmount
                    };
                    StatusReductions.Add(newReduc);
                }
            }
        }