public void AddStatus(eStatusEffect s, int duration)
 {
     statusHandler.AddStatus(StatusEffect.Create(s));
     tickHandler.AddOrder(new RemoveStatusOrder(node as ISufferStatusEffects, s), duration);
 }
        protected virtual void UpdateNew()
        {
            if (this.CooldownType == GenericAbility.CooldownMode.PerEncounter && !GameState.InCombat && this.m_perEncounterResetTimer > 0f)
            {
                this.m_perEncounterResetTimer -= Time.deltaTime;
                if (this.m_perEncounterResetTimer <= 0f)
                {
                    this.m_cooldownCounter = 0;

                    this.m_perEncounterResetTimer = 0f;
                }
            }

            if (this.m_activated)
            {
                if (this.ClearsOnMovement && this.IsMoving)
                {
                    this.HideFromCombatLog = true;
                    this.Deactivate(this.m_owner);
                    return;
                }
                //MOD (Remove combat-only restrictions) - changed this condition:
                if (this.CombatOnly && !GameState.InCombat && !(IEModOptions.CombatOnlyMod))
                {
                    this.Deactivate(this.m_owner);
                    return;
                }
                if (this.NonCombatOnly && GameState.InCombat)
                {
                    this.Deactivate(this.m_owner);
                    return;
                }
            }
            if (!GameState.Paused)
            {
                if (this.m_statusEffectsNeeded && !this.m_statusEffectsActivated)
                {
                    this.ActivateStatusEffects();
                }
                else if (!this.m_statusEffectsNeeded && this.m_statusEffectsActivated)
                {
                    this.DeactivateStatusEffects();
                }
            }
            if (this.m_activated && !this.m_applied)
            {
                if (this.CanApply())
                {
                    if (this.m_target != null)
                    {
                        this.Apply(this.m_target);
                    }
                    else
                    {
                        this.Apply(this.m_targetPoint);
                    }
                }
                return;
            }
            if (!this.Passive && this.Modal)
            {
                bool flag = this.m_ownerHealth && (this.m_ownerHealth.Dead || this.m_ownerHealth.Unconscious);
                if (this.m_activatedLaunching)
                {
                    if (flag || !this.m_UITriggered)
                    {
                        this.m_activatedLaunching = false;
                        this.m_rez_modal_cooldown = 5f;
                    }
                    else if (this.m_UITriggered && this.CombatOnly && GameState.InCombat && !this.m_activated && this.m_rez_modal_cooldown <= 0f)
                    {
                        PartyMemberAI component = this.m_owner.GetComponent <PartyMemberAI>();
                        if (component)
                        {
                            Ability ability = component.StateManager.FindState(typeof(Ability)) as Ability;
                            if (ability == null || ability.QueuedAbility != this)
                            {
                                this.m_activatedLaunching = false;
                            }
                        }
                        else
                        {
                            this.m_activatedLaunching = false;
                        }
                    }
                    else if (this.m_UITriggered && this.NonCombatOnly && !GameState.InCombat && !this.m_activated && this.m_rez_modal_cooldown <= 0f)
                    {
                        PartyMemberAI component2 = this.m_owner.GetComponent <PartyMemberAI>();
                        if (component2)
                        {
                            Ability ability2 = component2.StateManager.FindState(typeof(Ability)) as Ability;
                            if (ability2 == null || ability2.QueuedAbility != this)
                            {
                                this.m_activatedLaunching = false;
                            }
                        }
                        else
                        {
                            this.m_activatedLaunching = false;
                        }
                    }
                    else if (this.m_rez_modal_cooldown > 0f)
                    {
                        this.m_rez_modal_cooldown -= Time.deltaTime;
                    }
                }
                if (this.m_activated && this.CombatOnly && flag)
                {
                    this.Deactivate(this.m_owner);
                    this.m_activatedLaunching = false;
                }
                if (!GameState.Paused && this.m_ownerPartyAI != null && this.m_ownerPartyAI.gameObject.activeInHierarchy && this.m_UITriggered != (this.m_activated || this.m_activatedLaunching))
                {
                    if (this.m_activated)
                    {
                        this.Deactivate(this.m_owner);
                    }
                    else if (this.m_ownerPartyAI != null && this.m_ownerPartyAI.QueuedAbility == this)
                    {
                        this.m_ownerPartyAI.QueuedAbility = null;
                    }
                    else if (this.m_UITriggered && !flag)
                    {
                        if (this.Ready)
                        {
                            this.LaunchAttack(base.gameObject, false, null, null, null);
                        }
                    }
                    else
                    {
                        this.m_rez_modal_cooldown = 5f;
                        this.m_activatedLaunching = false;
                    }
                }
            }
            else if (!this.Passive && this.m_UITriggered)
            {
                this.m_UITriggered = false;
                if (this.m_ownerPartyAI != null && this.m_ownerPartyAI.Selected)
                {
                    if (this.TriggerOnHit)
                    {
                        this.m_activated = true;
                        return;
                    }
                    if (this.UsePrimaryAttack || this.UseFullAttack)
                    {
                        Equipment component3 = this.m_owner.GetComponent <Equipment>();
                        if (component3 != null)
                        {
                            AttackBase primaryAttack = component3.PrimaryAttack;
                            if (primaryAttack != null && this.m_ownerStats != null)
                            {
                                GenericAbility component4 = base.gameObject.GetComponent <GenericAbility>();
                                AttackBase     component5 = base.gameObject.GetComponent <AttackBase>();
                                if (this.m_attackBase != null)
                                {
                                    StatusEffect[]     array = new StatusEffect[1];
                                    StatusEffectParams statusEffectParams = new StatusEffectParams();
                                    statusEffectParams.AffectsStat  = StatusEffect.ModifiedStat.ApplyAttackEffects;
                                    statusEffectParams.AttackPrefab = this.m_attackBase;
                                    statusEffectParams.OneHitUse    = true;
                                    GenericAbility.AbilityType abType = GenericAbility.AbilityType.Ability;
                                    if (this is GenericSpell)
                                    {
                                        abType = GenericAbility.AbilityType.Spell;
                                    }
                                    array[0] = StatusEffect.Create(this.m_owner, this, statusEffectParams, abType, null, true);
                                    if (this.m_attackBase.UseAttackVariationOnFullAttack && this.UseFullAttack)
                                    {
                                        this.LaunchAttack(primaryAttack.gameObject, this.UseFullAttack, component4, array, component5, this.m_attackBase.AttackVariation);
                                    }
                                    else
                                    {
                                        this.LaunchAttack(primaryAttack.gameObject, this.UseFullAttack, component4, array, component5);
                                    }
                                }
                                else
                                {
                                    this.LaunchAttack(primaryAttack.gameObject, this.UseFullAttack, component4, null, component5);
                                }
                            }
                        }
                    }
                    else
                    {
                        this.LaunchAttack(base.gameObject, false, null, null, null);
                    }
                }
            }
            else if (this.m_activated && this.m_applied && !this.Passive && !this.Modal && !this.m_permanent && !this.UseFullAttack && !this.UsePrimaryAttack && (this.m_attackBase == null || this.AttackComplete))
            {
                this.m_activated          = false;
                this.m_activatedLaunching = false;
                this.m_applied            = false;
                this.OnInactive();
            }
            if (this.IsTriggeredPassive)
            {
                if (this.EffectTriggeredThisFrame)
                {
                    if (this.m_owner && FogOfWar.PointVisibleInFog(this.m_owner.transform.position))
                    {
                        this.ReportActivation();
                    }
                    this.EffectTriggeredThisFrame = false;
                }
                if (this.EffectUntriggeredThisFrame)
                {
                    if (this.m_owner && FogOfWar.PointVisibleInFog(this.m_owner.transform.position))
                    {
                        this.ReportDeactivation();
                    }
                    this.EffectUntriggeredThisFrame = false;
                }
            }
        }