Beispiel #1
0
        private void CheckRecallingEnemies()
        {
            if (!Listing.config.Get <CheckBox>("on").CurrentValue)
            {
                return;
            }

            foreach (Listing.PortingEnemy portingEnemy in Listing.teleportingEnemies.OrderBy(x => x.Sender.Health))
            {
                var enemy = portingEnemy.Sender;
                InvisibleEventArgs invisEntry = Listing.invisEnemiesList.FirstOrDefault(x => x.sender.Equals(enemy));

                if (invisEntry == null) //enemy visible
                {
                    return;
                }

                int   recallEndTime             = portingEnemy.StartTick + portingEnemy.Duration;
                float timeLeft                  = recallEndTime - Core.GameTickCount;
                float regedHealthRecallFinished = Algorithm.SimulateHealthRegen(enemy, invisEntry.StartTime, recallEndTime);
                float totalEnemyHOnRecallEnd    = enemy.Health + regedHealthRecallFinished;
                float aioDmg = Damage.GetAioDmg(enemy, timeLeft, enemySpawn, totalEnemyHOnRecallEnd);
                float regenerationDelayTime = Algorithm.SimulateRealDelayTime(enemy, recallEndTime, aioDmg);

                bool force0Delay = Listing.config.Get <CheckBox>("humanizedDelayOff").CurrentValue;
                if (force0Delay)
                {
                    regenerationDelayTime = 0;
                }

                if (!Damage.isRegenDelaySet)
                {
                    Damage.SetRegenerationDelay(regenerationDelayTime, timeLeft);
                    //new check but now with estimated reg delay
                    float totalEnemyHpAtArrival = totalEnemyHOnRecallEnd +
                                                  (regenerationDelayTime / 1000) * Algorithm.GetFountainReg(enemy);
                    aioDmg = Damage.GetAioDmg(enemy, timeLeft, enemySpawn, totalEnemyHpAtArrival);
                }

                if (aioDmg > totalEnemyHOnRecallEnd)
                {
                    if (regenerationDelayTime < Listing.config.Get <Slider>("minDelay").CurrentValue&&
                        !Listing.config.Get <CheckBox>("humanizedDelayOff").CurrentValue)
                    {
                        Messaging.ProcessInfo(enemy.ChampionName, Messaging.MessagingType.DelayTooSmall, regenerationDelayTime);
                        continue;
                    }

                    CheckUltCast(enemy, timeLeft, aioDmg, regenerationDelayTime);
                    return; //clear every porting enemy expect the current target and return => wait for next loop run
                }

                if (aioDmg > 0)  //dmg there but not enough
                {
                    Messaging.ProcessInfo(enemy.ChampionName, Messaging.MessagingType.NotEnougDamage, aioDmg);
                }
            }
        }
Beispiel #2
0
        private void OnOnEnemyInvisible(InvisibleEventArgs args)
        {
            Listing.visibleEnemies.Remove(args.sender);
            Listing.invisEnemiesList.Add(args);

            if (Listing.snipeMenu["snipeEnabled"].Cast <CheckBox>().CurrentValue)
            {
                var spell    = me.Spellbook.GetSpell(SpellSlot.R);
                var cooldown = spell.CooldownExpires - Game.Time;

                if (cooldown <= 0 && me.Level >= 6)
                {
                    Listing.Pathing.enemySnipeProcs.Add(new SnipePrediction(args));
                }
            }
        }
Beispiel #3
0
        private void OnOnEnemyInvisible(InvisibleEventArgs args)
        {
            Listing.visibleEnemies.Remove(args.sender);
            Listing.invisEnemiesList.Add(args);

            if (Listing.snipeMenu["snipeEnabled"].Cast<CheckBox>().CurrentValue)
            {
                var spell = me.Spellbook.GetSpell(SpellSlot.R);
                var cooldown = spell.CooldownExpires - Game.Time;

                if (cooldown <= 0 && me.Level >= 6)
                    Listing.Pathing.enemySnipeProcs.Add(new SnipePrediction(args));
            }
        }