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; } } } }
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); } } } } }