public void AddEffectPrefabs(TimedPassiveEffect timedPassiveEffect, out DestroyHelper destroyCondition, bool destroyAfterDuration = true)
        {
            destroyCondition = null;
            if (!string.IsNullOrEmpty(timedPassiveEffect.OnActivatePrefab))
            {
                var o = SpawnPrefab(timedPassiveEffect.OnActivatePrefab, CharacterMono.transform.position, Quaternion.identity, CharacterMono.transform);
                o.GetComponent <DestroyHelper>().Init(DestroyCondition.Time, ImpactPrefabTime);
            }

            if (!string.IsNullOrEmpty(timedPassiveEffect.ActivePrefab))
            {
                var o = SpawnPrefab(timedPassiveEffect.ActivePrefab, CharacterMono.transform.position, Quaternion.identity, CharacterMono.transform);
                var firstCondition = o.GetComponent <DestroyHelper>();
                if (destroyAfterDuration)
                {
                    firstCondition.Init(DestroyCondition.Time, timedPassiveEffect.Duration);
                    var secondCondition = o.AddComponent <DestroyHelper>();
                    destroyCondition = secondCondition;
                }
                else
                {
                    destroyCondition = firstCondition;
                }
            }
        }
 public StatusEffect()
 {
     ID             = Guid.NewGuid().ToString();
     Effect         = new TimedPassiveEffect();
     Name           = "New Status Effect";
     DamageOverTime = new DamageOverTime();
     CauseSilence   = CauseStun = CauseAnimationFreeze = false;
     Image          = new ImageContainer();
     HasSkillMeta   = false;
 }
        public void AddTimedPassiveEffect(TimedPassiveEffect timedPassiveEffect)
        {
            TimedPassiveEffects.Add(timedPassiveEffect);
            CustomVariableHandler.HandleCvarSetters(timedPassiveEffect.CustomVariableSetters);
            if (timedPassiveEffect.RemoveStatusEffect)
            {
                RemoveStatusEffect(timedPassiveEffect.RemoveStatusEffectID);
            }

            DestroyHelper destroyCondition;

            AddEffectPrefabs(timedPassiveEffect, out destroyCondition);
            if (destroyCondition != null)
            {
                destroyCondition.Init(DestroyCondition.TimedPassiveNotActive, CharacterMono.Controller, timedPassiveEffect.ID);
            }

            FullUpdateStats();
        }
        public void ApplyTimedPassiveEffect(TimedPassiveEffect timedPassiveEffect)
        {
            foreach (var ab in timedPassiveEffect.AttributeBuffs)
            {
                GetAttributeByID(ab.AttributeID).SkillValue += ab.Amount;
            }

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

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

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

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

            foreach (var regenBonus in timedPassiveEffect.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 timedPassiveEffect.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);
                }
            }
        }
 private void DeactivatePassive(TimedPassiveEffect passiveEffect)
 {
     DeactivatePassive(passiveEffect as PassiveEffect);
 }
 public void RemoveTimedPassiveEffect(TimedPassiveEffect timedEffect)
 {
     RemoveTimedPassiveEffect(timedEffect.ID);
 }