public static void OnCastTumble(Obj_AI_Base target, Vector3 position)
{
var mode = Manager.MenuManager.UseQMode;
var afterTumblePosition = Variables._Player.ServerPosition.Extend(position, 300f);
var distanceToTarget = afterTumblePosition.Distance(target.ServerPosition, true);
if ((distanceToTarget < Math.Pow(Variables._Player.AttackRange + 65, 2) && distanceToTarget > 110 * 110)
|| Manager.MenuManager.SpamQ)
{
switch (mode)
{
case 0:
//To mouse
DefaultQCast(position, target);
break;
case 1:
//smart logic!
var smartQPosition = QECombo();
var smartQCheck = smartQPosition != Vector3.Zero;
var QPosition = smartQCheck ? smartQPosition : Game.CursorPos;
var QPosition2 = Provider.AkaQPosition() != Vector3.Zero ? Provider.AkaQPosition() : QPosition;
if (!Variables.UnderEnemyTower((Vector2)QPosition2) || (Variables.UnderEnemyTower((Vector2)QPosition2) && Variables.UnderEnemyTower((Vector2)Variables._Player.Position)))
{
CastQ(QPosition2);
}
break;
case 2:
//Away from melee enemies
if (Variables.MeleeEnemiesTowardsMe.Any() &&
!Variables.MeleeEnemiesTowardsMe.All(m => m.HealthPercent <= 15))
{
var Closest =
Variables.MeleeEnemiesTowardsMe.OrderBy(m => m.Distance(Variables._Player)).First();
var whereToQ = (Vector3)Closest.ServerPosition.Extend(
Variables._Player.ServerPosition, Closest.Distance(Variables._Player) + 300f);
if (whereToQ.IsTotallySafe())
{
CastQ(whereToQ);
}
}
else
{
DefaultQCast(position, target);
}
break;
case 3:
//Prada
var Target = TargetSelector.GetTarget((int)Variables._Player.GetAutoAttackRange(), DamageType.Physical);
if (Target == null) return;
var tumblePosition = Target.GetTumblePos();
CastQ(tumblePosition);
break;
case 4:
//Sebby
CastDash();
break;
}
}
}