protected void mod_TickOnUnit(UnitEntityData unit)
        {
            if (unit.ActivatableAbilities.RawFacts.Count <= 0)
            {
                return;
            }

            foreach (Fact fact in unit.ActivatableAbilities.RawFacts)
            {
                var ability = (ActivatableAbility)fact;

                if (ability.IsWaitingForTarget)
                {
                    continue;
                }

                bool flag = ability.Blueprint.DeactivateIfOwnerDisabled && !ability.Owner.State.CanAct || ability.Blueprint.DeactivateIfOwnerUnconscious && !ability.Owner.State.IsConscious || Kingmaker.Game.Instance.CurrentMode == GameModeType.Rest;

                if (ability.IsRunning)
                {
                    if (flag)
                    {
                        ability.Stop();
                    }
                    else
                    {
                        ability.TimeToNextRound -= Kingmaker.Game.Instance.TimeController.GameDeltaTime;

                        if (ability.TimeToNextRound <= 0f)
                        {
                            ability.OnNewRound();

                            if (KingmakerPatchSettings.Cheats.InstantCooldowns && ability.Owner.Unit.IsDirectlyControllable)
                            {
                                UnitCooldownsHelper.Reset(ability.Owner.Unit.CombatState.Cooldown);
                            }

                            ability.TimeToNextRound = 6f;
                        }
                    }
                }
                else if (ability.IsOn && (ability.Blueprint.ActivateImmediately || ability.ReadyToStart))
                {
                    if (ability.Blueprint.ActivateOnCombatStarts && !unit.IsInCombat || flag)
                    {
                        continue;
                    }

                    ability.TryStart();
                }
            }

            var unitPartActivatableAbility = unit.Get <UnitPartActivatableAbility>();

            unitPartActivatableAbility?.Update();
        }
Пример #2
0
        public void mod_OnNewRound()
        {
            if (!KingmakerPatchSettings.Cheats.InstantCooldowns)
            {
                this.source_OnNewRound();
                return;
            }

            if (this.Unit.IsDirectlyControllable)
            {
                // this.Cooldown.Clear()
                UnitCooldownsHelper.Reset(this.Cooldown);
            }

            this.source_OnNewRound();
        }
Пример #3
0
        protected void mod_TickOnUnit(UnitEntityData unit)
        {
            if (!KingmakerPatchSettings.Cheats.InstantCooldowns)
            {
                this.source_TickOnUnit(unit);
            }

            if (unit.IsDirectlyControllable)
            {
                UnitCombatState combatState = unit.CombatState;
                UnitCooldownsHelper.Reset(combatState.Cooldown);
                combatState.OnNewRound();
                EventBus.RaiseEvent((IUnitNewCombatRoundHandler h) => h.HandleNewCombatRound(unit));
                return;
            }

            this.source_TickOnUnit(unit);
        }