Example #1
0
        private static void ComboMode()
        {
            var targetModeKey = KeysMenu.GetKeybind("keys.changeTargeting");
            var targetMode    = targetModeKey ? TargetingMode.LowestHealth : TargetingMode.NearMouse;

            var invisibleTargets = ComboMenu.GetBoolean("combo.invisibleTargets");

            var enemiesToTarget = EntitiesManager.EnemyTeam.Where(x => x.IsValid && !x.Living.IsDead &&
                                                                  !x.PhysicsCollision.IsImmaterial && !x.IsCountering && !x.HasShield() && !x.HasConsumeBuff && !x.HasParry());

            if (!invisibleTargets)
            {
                enemiesToTarget = enemiesToTarget.Where(x => !x.CharacterModel.IsModelInvisible);
            }

            var M1Target    = TargetSelector.GetTarget(enemiesToTarget, targetMode, M1Range);
            var M2Target    = TargetSelector.GetTarget(enemiesToTarget, targetMode, M2Range);
            var SpaceTarget = TargetSelector.GetTarget(enemiesToTarget, targetMode, SpaceMaxRange);
            var ETarget     = TargetSelector.GetTarget(enemiesToTarget, targetMode, TrueERange);
            var RTarget     = TargetSelector.GetTarget(enemiesToTarget, targetMode, RRange);
            var F_M2Target  = TargetSelector.GetTarget(enemiesToTarget, targetMode, F_M2Range);

            var isCastingOrChanneling = KaanHero.AbilitySystem.IsCasting || KaanHero.IsChanneling || KaanHero.HasBuff("ConsumeBuff") || KaanHero.HasBuff("ReapingScytheBuff");

            if (isCastingOrChanneling && LastAbilityFired == null)
            {
                LastAbilityFired = CastingIndexToSlot(KaanHero.AbilitySystem.CastingAbilityIndex);
            }

            var myPos = KaanHero.MapObject.Position;

            if (isCastingOrChanneling)
            {
                LocalPlayer.EditAimPosition = true;

                switch (LastAbilityFired)
                {
                case AbilitySlot.Ability4:
                    Projectile enemyProj;
                    if (EnemyProjectileGoingToHitUnit(KaanHero, out enemyProj))
                    {
                        LocalPlayer.Aim(enemyProj.MapObject.Position);
                    }
                    else
                    {
                        LocalPlayer.Aim(InputManager.MousePosition.ScreenToWorld());
                    }
                    break;

                case AbilitySlot.Ability5:
                    if (ETarget != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(myPos, ETarget, TrueERange, ESpeed, ERadius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.Aim(pred.CastPosition);
                        }
                    }
                    else
                    {
                        LocalPlayer.PressAbility(AbilitySlot.Interrupt, true);
                    }
                    break;

                case AbilitySlot.Ability2:
                    if (!IsInUltimate)     //Normal mode
                    {
                        if (M2Target != null)
                        {
                            var pred = TestPrediction.GetNormalLinePrediction(myPos, M2Target, M2Range, M2Speed, M2Radius, true);
                            if (pred.CanHit)
                            {
                                LocalPlayer.Aim(pred.CastPosition);
                            }
                        }
                        else
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Interrupt, true);
                        }
                    }
                    else     //Ulti mode
                    {
                        if (F_M2Target != null)
                        {
                            var pred = TestPrediction.GetNormalLinePrediction(myPos, F_M2Target, F_M2Range, F_M2Speed, F_M2Radius, true);
                            if (pred.CanHit)
                            {
                                LocalPlayer.Aim(pred.CastPosition);
                            }
                        }
                        else
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Interrupt, true);
                        }
                    }
                    break;

                case AbilitySlot.Ability6:
                    if (ComboMenu.GetBoolean("combo.useR.evade") && EvadeExists && IsREvading && RTarget == null)
                    {
                        var pos = MathUtils.GetBestJumpPosition(0, 32, SpaceMaxRange);
                        LocalPlayer.Aim(pos);
                    }
                    else
                    {
                        if (RTarget != null)
                        {
                            var pred = TestPrediction.GetPrediction(myPos, RTarget, RRange, 0f, RRadius, RAirTime);
                            if (pred.CanHit)
                            {
                                LocalPlayer.Aim(pred.CastPosition);
                            }
                        }
                    }
                    break;

                case AbilitySlot.Ability3:
                    if (SpaceTarget != null)
                    {
                        var pred = TestPrediction.GetPrediction(myPos, SpaceTarget, SpaceMaxRange, 0f, SpaceRadius, SpaceAirTime);
                        if (pred.CanHit)
                        {
                            LocalPlayer.Aim(pred.CastPosition);
                        }
                    }
                    break;

                case AbilitySlot.Ability1:
                    if (M1Target != null)
                    {
                        LocalPlayer.Aim(M1Target.MapObject.Position);
                    }
                    else
                    {
                        LocalPlayer.PressAbility(AbilitySlot.Interrupt, true);
                    }
                    break;
                }
            }
            else
            {
                LocalPlayer.EditAimPosition = false;
                LastAbilityFired            = null;
            }

            if (!IsInUltimate)
            {
                if (ComboMenu.GetBoolean("combo.useQ") && MiscUtils.CanCast(AbilitySlot.Ability4) && !MiscUtils.CanCast(AbilitySlot.Ability2))
                {
                    Projectile closestProj;
                    if (EnemyProjectileGoingToHitUnit(KaanHero, out closestProj))
                    {
                        LocalPlayer.PressAbility(AbilitySlot.Ability4, true);
                        LocalPlayer.EditAimPosition = true;
                        LocalPlayer.Aim(closestProj.MapObject.Position);
                        return;
                    }
                }

                if (ComboMenu.GetBoolean("combo.useF") && MiscUtils.CanCast(AbilitySlot.Ability7))
                {
                    if (LastAbilityFired == null && KaanHero.EnemiesAroundAlive(FRange) > 0)
                    {
                        LocalPlayer.PressAbility(AbilitySlot.Ability7, true);
                        return;
                    }
                }

                if (ComboMenu.GetBoolean("combo.useE") && MiscUtils.CanCast(AbilitySlot.Ability5))
                {
                    if (LastAbilityFired == null && ETarget != null && ETarget.Distance(KaanHero) > ComboMenu.GetSlider("combo.useE.minRange"))
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(myPos, ETarget, TrueERange, ESpeed, ERadius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Ability5, true);
                            LocalPlayer.EditAimPosition = true;
                            LocalPlayer.Aim(pred.CastPosition);
                            return;
                        }
                    }
                }

                if (ComboMenu.GetBoolean("combo.useM2") && MiscUtils.CanCast(AbilitySlot.Ability2))
                {
                    if (LastAbilityFired == null && M2Target != null &&
                        KaanHero.EnemiesAroundAlive(ComboMenu.GetSlider("combo.useM2.safeRange")) == 0)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(myPos, M2Target, M2Range, M2Speed, M2Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Ability2, true);
                            LocalPlayer.EditAimPosition = true;
                            LocalPlayer.Aim(pred.CastPosition);
                            return;
                        }
                    }
                }

                if (ComboMenu.GetBoolean("combo.useR") && MiscUtils.CanCast(AbilitySlot.Ability6) && !KaanHero.IsWeaponCharged && HasNetherBlade)
                {
                    var energyRequired = ComboMenu.GetIntSlider("combo.useR.minEnergyBars") * 25;
                    if (energyRequired <= KaanHero.Energized.Energy)
                    {
                        if (LastAbilityFired == null && RTarget != null)
                        {
                            var pred = TestPrediction.GetPrediction(myPos, RTarget, RRange, 0f, RRadius, RAirTime);
                            if (pred.CanHit)
                            {
                                LocalPlayer.PressAbility(AbilitySlot.Ability6, true);
                                LocalPlayer.EditAimPosition = true;
                                LocalPlayer.Aim(pred.CastPosition);
                                return;
                            }
                        }
                    }
                }

                if (ComboMenu.GetBoolean("combo.useEX1") && MiscUtils.CanCast(AbilitySlot.EXAbility1))
                {
                    var energyRequired = ComboMenu.GetIntSlider("combo.useEX1.minEnergyBars") * 25;
                    if (energyRequired <= KaanHero.Energized.Energy)
                    {
                        if (LastAbilityFired == null && M1Target != null)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.EXAbility1, true);
                            return;
                        }
                    }
                }

                if (ComboMenu.GetBoolean("combo.useSpace") && MiscUtils.CanCast(AbilitySlot.Ability3))
                {
                    if (LastAbilityFired == null && SpaceTarget != null)
                    {
                        var pred = TestPrediction.GetPrediction(myPos, SpaceTarget, SpaceMaxRange, 0f, SpaceRadius, SpaceAirTime);
                        if (pred.CanHit)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Ability3, true);
                            LocalPlayer.EditAimPosition = true;
                            LocalPlayer.Aim(pred.CastPosition);
                            return;
                        }
                    }
                }

                if (ComboMenu.GetBoolean("combo.useM1") && MiscUtils.CanCast(AbilitySlot.Ability1))
                {
                    if (LastAbilityFired == null && M1Target != null)
                    {
                        LocalPlayer.PressAbility(AbilitySlot.Ability1, true);
                        LocalPlayer.EditAimPosition = true;
                        LocalPlayer.Aim(M1Target.MapObject.Position);
                        return;
                    }
                }
            }
            else
            {
                if (ComboMenu.GetBoolean("combo.ultiMode.useM2") && MiscUtils.CanCast(AbilitySlot.Ability2))
                {
                    if (LastAbilityFired == null && F_M2Target != null &&
                        F_M2Target.Distance(KaanHero) > ComboMenu.GetSlider("combo.ultiMode.useM2.minRange"))
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(myPos, F_M2Target, F_M2Range, F_M2Speed, F_M2Radius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.Ability2, true);
                            LocalPlayer.EditAimPosition = true;
                            LocalPlayer.Aim(pred.CastPosition);
                            return;
                        }
                    }
                }

                if (ComboMenu.GetBoolean("combo.ultiMode.useM1") && MiscUtils.CanCast(AbilitySlot.Ability1))
                {
                    if (LastAbilityFired == null && M1Target != null)
                    {
                        LocalPlayer.PressAbility(AbilitySlot.Ability1, true);
                        LocalPlayer.EditAimPosition = true;
                        LocalPlayer.Aim(M1Target.MapObject.Position);
                        return;
                    }
                }
            }
        }
Example #2
0
        private static void HealTeammate()
        {
            var minAllyHp      = HealMenu.GetSlider("heal.minHpOther");
            var energyRequired = HealMenu.GetIntSlider("heal.minEnergyBars") * 25;

            var possibleAllies = EntitiesManager.LocalTeam.Where(x => !x.IsLocalPlayer && !x.Living.IsDead && !x.PhysicsCollision.IsImmaterial &&
                                                                 x.Living.HealthPercent <= minAllyHp);

            var allyToTarget = TargetSelector.GetTarget(possibleAllies, TargetingMode.NearMouse, TrueERange);

            var isCastingOrChanneling = KaanHero.AbilitySystem.IsCasting || KaanHero.IsChanneling || KaanHero.HasBuff("ConsumeBuff") || KaanHero.HasBuff("ReapingScytheBuff");

            if (isCastingOrChanneling && LastAbilityFired == null)
            {
                LastAbilityFired = CastingIndexToSlot(KaanHero.AbilitySystem.CastingAbilityIndex);
            }

            var myPos = KaanHero.MapObject.Position;

            if (isCastingOrChanneling)
            {
                LocalPlayer.EditAimPosition = true;

                switch (LastAbilityFired)
                {
                case AbilitySlot.EXAbility2:
                    if (allyToTarget != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(myPos, allyToTarget, TrueERange, ESpeed, ERadius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.Aim(pred.CastPosition);
                        }
                    }
                    break;
                }
            }
            else
            {
                LocalPlayer.EditAimPosition = false;
                LastAbilityFired            = null;
            }

            if (MiscUtils.CanCast(AbilitySlot.EXAbility2))
            {
                if (energyRequired <= KaanHero.Energized.Energy)
                {
                    if (LastAbilityFired == null && allyToTarget != null)
                    {
                        var pred = TestPrediction.GetNormalLinePrediction(myPos, allyToTarget, TrueERange, ESpeed, ERadius, true);
                        if (pred.CanHit)
                        {
                            LocalPlayer.PressAbility(AbilitySlot.EXAbility2, true);
                            LocalPlayer.EditAimPosition = true;
                            LocalPlayer.Aim(pred.CastPosition);
                        }
                    }
                }
            }
        }