Beispiel #1
0
        private async Task <bool> Moving()
        {
            EnablePulse();
            TargetingHelper.TurnCombatOn();

            if (!await NavigationCoroutine.MoveTo(_keywardenLocation, 15))
            {
                return(false);
            }

            if (_keywardenData.IsAlive)
            {
                _keywardenLocation = GetKeywardenLocation();
                if (_keywardenLocation == Vector3.Zero)
                {
                    State = States.Searching;
                }
            }
            else
            {
                Logger.Info("[Keywarden] Keywarden shish kebab!");
                State = States.Waiting;
            }
            return(false);
        }
Beispiel #2
0
        public void UpdateAuraTargets()
        {
            ClearAuraTargets();

            if (!HasAttribute(AttributeName.AuraRange))
            {
                return;
            }

            var pos   = transform.position;
            var range = GetAttributeValue(AttributeName.AuraRange);

            foreach (var auraEffect in AuraEffects)
            {
                if (auraEffect.AffectsNpcs)
                {
                    var npcsInRange = TargetingHelper.GetNpcsInRadius(pos, range);
                    npcsInRange.ForEach(npc => ApplyAuraEffect(npc, auraEffect));
                }

                if (auraEffect.AffectsTowers)
                {
                    var towersInRange = TargetingHelper.GetTowersInRadius(pos, range);
                    towersInRange.ForEach(npc => ApplyAuraEffect(npc, auraEffect));
                }
            }
        }
Beispiel #3
0
        public override CognitionState Update()
        {
            if (Map.IsPositionDangorous(Unit.LogicPosition))
            {
                return(RememberCurrent().AndChangeStateTo(StatesFactory.CreateStrafing(_target)));
            }

            if (_target.IsVisible)
            {
                if (ProbabilisticTriggering.TestOnAverageOnceEvery(0.1f))
                {
                    _path = Map.PathFinder.FindPath(Unit.LogicPosition,
                                                    _target.Position);
                }

                TargetingHelper.ManageAimingAtTheTarget(_target);

                var distanceToTarget = (_target.Position - Unit.LogicPosition).magnitude;
                if (distanceToTarget > 4)
                {
                    MovementHelper.ManageMovingAlongThePath(_path);
                }

                return(this);
            }

            return(DisposeCurrent().AndChangeStateTo(StatesFactory.CreateSearching(_target)));
        }
Beispiel #4
0
 public Moving(MovementHelper movementHelper, TargetingHelper targetingHelper, IUnit unit, IMap map,
               IVisionObserver vision, Vector3 targetPosition)
     : base(ComputerStateIds.Chasing, movementHelper, targetingHelper, unit, map, vision)
 {
     _targetPositoon = targetPosition;
     _path           = Map.PathFinder.FindPath(Unit.LogicPosition, _targetPositoon);
 }
Beispiel #5
0
 public bool IsGoodTarget(ITarget target, Player controller)
 {
     return(TargetingHelper.IsGoodTargetForSpell(
                target, OwningCard, controller, _p.TargetSelector,
                _p.Rules.Where(r => r is TargetingRule).Cast <TargetingRule>(),
                _p.DistributeAmount));
 }
Beispiel #6
0
 public Strafing(MovementHelper movementHelper, TargetingHelper targetingHelper, IUnit unit, IMap map,
                 IVisionObserver vision,
                 ITarget target)
     : base(ComputerStateIds.Chasing, movementHelper, targetingHelper, unit, map, vision)
 {
     _target = target;
     _path   = Map.PathFinder.FindSafespot(Unit.LogicPosition);
 }
Beispiel #7
0
        private List <Npc> GetRandomTargets()
        {
            var npcs = TargetingHelper.GetNpcsInRadius(Target.transform.position, 3);

            npcs.Remove(Target);
            npcs.Shuffle();

            return(npcs.Take(OtherTargetsCount).ToList());
        }
Beispiel #8
0
 public ComputerStatesFactory(IMap map, IUnit unit, IVisionObserver vision,
                              MovementHelper movementHelper,
                              TargetingHelper targetingHelper)
 {
     _map             = map;
     _unit            = unit;
     _vision          = vision;
     _movementHelper  = movementHelper;
     _targetingHelper = targetingHelper;
 }
Beispiel #9
0
        public Searching(MovementHelper movementHelper, TargetingHelper targetingHelper, IUnit unit, IMap map,
                         IVisionObserver vision,
                         ITargetMemory memory)
            : base(ComputerStateIds.Chasing, movementHelper, targetingHelper, unit, map, vision)
        {
            _targetMemory    = memory;
            _initialDistance = (_targetMemory.LastSeenPosition - Unit.LogicPosition).magnitude;

            FindPath();
        }
        private void RefreshNearbyTowers()
        {
            UnsubscribeTowerEvents();

            var radius = Attributes[AttributeName.AuraRange].Value;

            _towers = TargetingHelper.GetTowersInRadius(transform.position, radius);

            _towers.ForEach(tower => { tower.OnLevelUp += HandleTowerLevelUp; });
        }
Beispiel #11
0
            private IEnumerable <Targets> GenerateTargets()
            {
                var targetsCandidates = TargetingHelper.GenerateTargets(
                    D._p.Effect.Source.OwningCard,
                    D._p.TargetSelector,
                    D._p.MachineRules.Where(x => x is TargetingRule).Cast <TargetingRule>(),
                    force: true,
                    triggerMessage: D._p.Effect.TriggerMessage <object>());

                return(targetsCandidates.Take(Ai.CurrentTargetCount));
            }
Beispiel #12
0
    private IEnumerator ShootPlayers()
    {
        while (true)
        {
            const float MaxTargetingDistance = 15.0f;

            TargetingHelper.ShootNearestTarget(pMissile, this.transform.position, MaxTargetingDistance, true);

            yield return(new WaitForSeconds(1.0f));
        }
    }
Beispiel #13
0
    private IEnumerator ShootEnemies()
    {
        while (true)
        {
            const float MaxTargetingDistance = 15.0f;

            TargetingHelper.ShootNearestTarget(pMissile, this.transform.position, MaxTargetingDistance, false);

            yield return(new WaitForSeconds(Mathf.Lerp(10.0f, 1.0f, healthManager.GetHealthRatio())));
        }
    }
Beispiel #14
0
        protected override void Attack(bool triggering = true)
        {
            //Does not attack "regulary"
            var se = new ParticleEffectData("BlacksmithyExplosion", gameObject, new Vector3(0, WeaponHeight, 0), 5);

            GameManager.Instance.SpecialEffectManager.PlayParticleEffect(se);

            var r    = GetAttributeValue(AttributeName.AttackRange);
            var npcs = TargetingHelper.GetNpcsInRadius(transform.position, r);

            npcs.ForEach(npc => { npc.DealDamage(GetAttributeValue(AttributeName.AttackDamage), this); });
        }
Beispiel #15
0
 public Watching(MovementHelper movementHelper, TargetingHelper targetingHelper, IUnit unit, IMap map,
                 IVisionObserver vision,
                 Vector3?preferedLookDirection, float timeLimit = 0)
     : base(ComputerStateIds.Watching, movementHelper, targetingHelper, unit, map, vision)
 {
     _preferedLookDirection = preferedLookDirection;
     if (timeLimit > 0)
     {
         _isLimited = true;
         _timeLimit = timeLimit;
     }
 }
Beispiel #16
0
 protected CognitionState(ComputerStateIds id,
                          MovementHelper movementHelper, TargetingHelper targetingHelper,
                          IUnit unit, IMap map, IVisionObserver vision)
 {
     Unit              = unit;
     Id                = id;
     Map               = map;
     Vision            = vision;
     MovementHelper    = movementHelper;
     TargetingHelper   = targetingHelper;
     _nextStateBuilder = new NextStateBuilder(this);
     StatesFactory     = new ComputerStatesFactory(map, unit, vision, movementHelper, targetingHelper);
 }
Beispiel #17
0
        private void ZergCheck()
        {
            if (PluginSettings.Current.KeywardenZergMode.HasValue && !PluginSettings.Current.KeywardenZergMode.Value)
            {
                return;
            }
            var corruptGrowthDetectionRadius = ZetaDia.Me.ActorClass == ActorClass.Barbarian ? 30 : 20;
            var combatState = false;

            if (_keywardenLocation != Vector3.Zero && _keywardenLocation.Distance(AdvDia.MyPosition) <= 50f)
            {
                TargetingHelper.TurnCombatOn();
                return;
            }

            if (!combatState && ZetaDia.Me.HitpointsCurrentPct <= 0.8f)
            {
                combatState = true;
            }

            if (!combatState && _keywardenData.Act == Act.A4)
            {
                if (ZetaDia.Actors.GetActorsOfType <DiaUnit>(true).Any(
                        a =>
                        a.IsFullyValid() && KeywardenDataFactory.A4CorruptionSNOs.Contains(a.ActorSnoId) &&
                        a.IsAlive & a.Position.Distance(AdvDia.MyPosition) <= corruptGrowthDetectionRadius))
                {
                    combatState = true;
                }
            }


            if (!combatState && ZetaDia.Actors.GetActorsOfType <DiaUnit>(true).Any(u => u.IsFullyValid() && u.IsAlive && KeywardenDataFactory.GoblinSNOs.Contains(u.ActorSnoId)))
            {
                combatState = true;
            }

            if (!combatState && ZetaDia.Actors.GetActorsOfType <DiaUnit>(true).Count(u => u.IsFullyValid() && u.IsHostile && u.IsAlive && u.Position.Distance(AdvDia.MyPosition) <= 15f) >= 4)
            {
                combatState = true;
            }

            if (combatState)
            {
                TargetingHelper.TurnCombatOn();
            }
            else
            {
                TargetingHelper.TurnCombatOff();
            }
        }
Beispiel #18
0
        public void EnforceNearbyTower(int goldAmount)
        {
            var range  = GetAttributeValue(AttributeName.AuraRange);
            var towers = TargetingHelper.GetTowersInRadius(transform.position, range);

            towers.Add(this);

            var tower = towers[_rng.Next(towers.Count)];

            if (tower.HasAttribute(AttributeName.AttackDamage))
            {
                var effect = new AttributeEffect(0.5f, AttributeName.AttackDamage, AttributeEffectType.Flat, this);
                tower.Attributes[AttributeName.AttackDamage].AddAttributeEffect(effect);
            }
        }
Beispiel #19
0
 public override CognitionState Update()
 {
     if (!Map.IsPositionDangorous(Unit.LogicPosition))
     {
         return(DisposeCurrent().AndReturnToThePreviousState());
     }
     ProbabilisticTriggering.PerformOnAverageOnceEvery(0.3f,
                                                       () => _path = Map.PathFinder.FindSafespot(Unit.LogicPosition));
     MovementHelper.ManageMovingAlongThePath(_path);
     if (_target.IsVisible)
     {
         TargetingHelper.ManageAimingAtTheTarget(_target);
     }
     return(this);
 }
        private bool NotStarted()
        {
            DisablePulse();
            _keywardenLocation = Vector3.Zero;

            if (!_keywardenData.IsAlive)
            {
                State = States.Completed;
                return(false);
            }
            TargetingHelper.TurnCombatOn();
            Logger.Info("[Keywarden] Lets go find da guy with da machina, shall we?");
            State = AdvDia.CurrentLevelAreaId == _keywardenData.LevelAreaId ? States.Searching : States.TakingWaypoint;
            return(false);
        }
Beispiel #21
0
        private void CheckExplode(Npc npc, NpcHitData hitData)
        {
            if (_stunTriggered)
            {
                return;
            }
            if (npc.CurrentHealth > npc.Attributes[AttributeName.MaxHealth].Value / 2.0f)
            {
                return;
            }

            var towers = TargetingHelper.GetTowersInRadius(transform.position, _stunRadius);

            towers.ForEach(tower =>
            {
                tower.Stun(_stunDuration, this);
            });

            _stunTriggered = true;
        }
Beispiel #22
0
        private async Task <bool> Moving()
        {
            EnablePulse();
            TargetingHelper.TurnCombatOn();

            if (!await NavigationCoroutine.MoveTo(_keywardenLocation, 15))
            {
                return(false);
            }

            if (NavigationCoroutine.LastResult == CoroutineResult.Failure && (NavigationCoroutine.LastMoveResult == MoveResult.Failed || NavigationCoroutine.LastMoveResult == MoveResult.PathGenerationFailed))
            {
                var canClientPathTo = await AdvDia.Navigator.CanFullyClientPathTo(_keywardenLocation);

                if (!canClientPathTo)
                {
                    State             = States.Searching;
                    MoveCooldownUntil = DateTime.UtcNow.AddSeconds(10);
                    Core.Logger.Debug("[Keywarden] Can't seem to get to the keywarden!");
                }
                return(false);
            }

            if (_keywardenData.IsAlive)
            {
                _keywardenLocation = GetKeywardenLocation();
                if (_keywardenLocation == Vector3.Zero)
                {
                    State = States.Searching;
                }
            }
            else
            {
                Core.Logger.Log("[Keywarden] Keywarden shish kebab!");
                State = States.Waiting;
            }
            return(false);
        }
Beispiel #23
0
        private Npc AquireTargetInRange(float range)
        {
            var npcs = TargetingHelper.GetNpcsInRadius(transform.position, range);

            return(npcs.FirstOrDefault());
        }