public void RemoveTimedPassiveEffect(string id)
        {
            var timedEffect = TimedPassiveEffects.FirstOrDefault(s => s.ID == id);

            if (timedEffect != null)
            {
                TimedPassiveEffects.RemoveAll(s => s.ID == timedEffect.ID);
                CustomVariableHandler.HandleCvarSetters(timedEffect.CustomVariableSettersOnDisable);
                DeactivatePassive(timedEffect);
            }
        }
        public void RemoveFriendlyAura(string auraId)
        {
            var effect = FriendlyAuras.FirstOrDefault(e => e.AuraEffect.SkillId == auraId);

            if (effect != null)
            {
                FriendlyAuras.Remove(effect);
                CustomVariableHandler.HandleCvarSetters(effect.AuraEffect.PassiveEffect.CustomVariableSettersOnDisable);
                DeactivatePassive(effect.AuraEffect.PassiveEffect);
            }
        }
        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 bool ToggleAura(AuraSkill auraskill, bool onlyTurnOn = false)
        {
            var  aura         = GeneralMethods.CopyObject(auraskill.AuraEffect);
            var  foundAura    = AuraEffects.FirstOrDefault(a => a.SkillId == aura.SkillId);
            var  auraIsActive = foundAura != null;
            bool active;

            if (!auraIsActive)
            {
                AuraEffects.Add(aura);
                var foundFriendlyAura = FriendlyAuras.FirstOrDefault(a => a.AuraEffect.SkillId == aura.SkillId);
                if (foundFriendlyAura != null)
                {
                    RemoveFriendlyAura(foundFriendlyAura);
                }

                CustomVariableHandler.HandleCvarSetters(aura.PassiveEffect.CustomVariableSetters);
                active = true;

                DestroyHelper destroyCondition;
                AddEffectPrefabs(aura.PassiveEffect, out destroyCondition);
                if (destroyCondition != null)
                {
                    destroyCondition.Init(DestroyCondition.AuraEffectNotActive, CharacterMono.Controller, aura.SkillId);
                }
            }
            else
            {
                if (!onlyTurnOn)
                {
                    RemoveAuraEffect(aura);
                    active = false;
                }
                else
                {
                    active = true;
                }
            }

            FullUpdateStats();

            return(active);
        }
        public bool ToggleTalent(Talent talent)
        {
            bool active;

            if (!talent.IsActive)
            {
                talent.IsActive = true;
                CustomVariableHandler.HandleCvarSetters(talent.TalentEffect.Effect.CustomVariableSetters);
                active = true;
            }
            else
            {
                talent.IsActive = false;
                CustomVariableHandler.HandleCvarSetters(talent.TalentEffect.Effect.CustomVariableSettersOnDisable);
                DeactivatePassive(talent.TalentEffect.Effect);
                active = false;
            }

            FullUpdateStats();
            return(active);
        }
        public bool AddFriendlyAura(BaseCharacterMono source, AuraEffect auraEffect)
        {
            var aura = GeneralMethods.CopyObject(auraEffect);
            var foundFriendlyAura = FriendlyAuras.FirstOrDefault(a => a.AuraEffect.SkillId == aura.SkillId);
            var foundSelfAura     = AuraEffects.FirstOrDefault(a => a.SkillId == aura.SkillId);
            var canAddAura        = foundFriendlyAura == null && foundSelfAura == null;

            bool active;

            if (canAddAura)
            {
                var friendlyAura = new FriendlyAura
                {
                    SourceCharacter = source,
                    AuraEffect      = aura
                };
                FriendlyAuras.Add(friendlyAura);
                CustomVariableHandler.HandleCvarSetters(aura.PassiveEffect.CustomVariableSetters);
                active = true;

                DestroyHelper destroyCondition;
                AddEffectPrefabs(aura.PassiveEffect, out destroyCondition, false);
                if (destroyCondition != null)
                {
                    destroyCondition.Init(DestroyCondition.FriendlyAuraNotAvailable, CharacterMono.Controller, aura.SkillId);
                }
                FullUpdateStats();
            }
            else
            {
                active = true;
            }


            return(active);
        }
        public void AddStatusEffect(StatusEffect statusEffect)
        {
            //todo: if in status reductions we have this status, reduce status.duration by amt if status has duration
            StatusEffects.Add(statusEffect);
            CustomVariableHandler.HandleCvarSetters(statusEffect.Effect.CustomVariableSetters);


            DestroyHelper destroyCondition;

            AddEffectPrefabs(statusEffect.Effect, out destroyCondition);
            if (destroyCondition != null)
            {
                destroyCondition.Init(DestroyCondition.StatusEffectNotActive, CharacterMono.Controller, statusEffect.ID);
            }

            if (statusEffect.Effect.RemoveStatusEffect)
            {
                RemoveStatusEffect(statusEffect.Effect.RemoveStatusEffectID);
            }

            for (int index = 0; index < StatusEffects.Count; index++)
            {
                var statusEff = StatusEffects[index];
                if (statusEff.Effect.CanBeCancelled)
                {
                    if (statusEff.Effect.CancellingStatusEffectID == statusEffect.ID)
                    {
                        RemoveStatusEffect(statusEff);
                        index--;
                    }
                }
            }

            for (int index = 0; index < AuraEffects.Count; index++)
            {
                var auraEffect = AuraEffects[index];
                if (auraEffect.PassiveEffect.CanBeCancelled)
                {
                    if (auraEffect.PassiveEffect.CancellingStatusEffectID == statusEffect.ID)
                    {
                        RemoveAuraEffect(auraEffect);
                        index--;
                    }
                }
            }

            for (int index = 0; index < TimedPassiveEffects.Count; index++)
            {
                var timedPassiveEffect = TimedPassiveEffects[index];
                if (timedPassiveEffect.CanBeCancelled)
                {
                    if (timedPassiveEffect.CancellingStatusEffectID == statusEffect.ID)
                    {
                        RemoveTimedPassiveEffect(timedPassiveEffect);
                        index--;
                    }
                }
            }

            FullUpdateStats();
        }