private static void Player_OnExecuteAction(Player sender, ExecuteOrderEventArgs args)
{
#region code for monkey
if (Menu.Item("order").GetValue<StringList>().SelectedIndex == (int)Orders.Monkey && !Menu.Item("AutoPush.Enable").GetValue<KeyBind>().Active)
{
//Game.PrintMessage(args.Order.ToString(), MessageType.ChatMessage);
if (args.Order != Order.Stop && args.Order != Order.AttackLocation && args.Order != Order.AttackTarget &&
args.Order != Order.Ability && args.Order != Order.AbilityTarget &&
args.Order != Order.AbilityLocation &&
args.Order != Order.MoveLocation && args.Order != Order.MoveTarget && args.Order != Order.Hold)
return;
// make each tempest clone copy main hero's moves
foreach (var hero in Objects.Tempest.GetCloneList(sender.Hero))
{
Ability spell;
Ability needed;
switch (args.Order)
{
case Order.Stop:
hero.Stop();
break;
case Order.AttackLocation:
hero.Attack(args.TargetPosition);
break;
case Order.AttackTarget:
var target = args.Target;
hero.Attack(target as Unit);
break;
case Order.Ability:
spell = args.Ability;
needed = hero.FindSpell(spell.Name) ?? hero.FindItem(spell.Name);
if (needed != null && needed.CanBeCasted())
{
needed.UseAbility();
}
break;
case Order.AbilityTarget:
spell = args.Ability;
needed = hero.FindSpell(spell.Name) ?? hero.FindItem(spell.Name);
if (needed != null && needed.CanBeCasted())
{
needed.UseAbility(args.Target as Unit);
}
break;
case Order.AbilityLocation:
spell = args.Ability;
needed = hero.FindSpell(spell.Name) ?? hero.FindItem(spell.Name);
if (needed != null && needed.CanBeCasted())
{
needed.UseAbility(args.TargetPosition);
}
break;
case Order.MoveLocation:
hero.Move(args.TargetPosition);
break;
case Order.MoveTarget:
hero.Move(args.TargetPosition);
break;
case Order.AbilityTargetTree:
break;
case Order.ToggleAbility:
break;
case Order.Hold:
hero.Stop();
break;
}
}
}
#endregion
#region code for ez heal
else if (Menu.Item("FirstClone").GetValue<bool>())
{
if (args.Order != Order.Ability && args.Order != Order.AbilityTarget &&
args.Order != Order.AbilityLocation)
return;
if (!CloneOnlyItems.Contains(args.Ability.Name)) return;
// use clone items instead of main hero's items
foreach (var hero in Objects.Tempest.GetCloneList(sender.Hero).Where(x => x.Distance2D(sender.Hero) <= 1000))
{
Ability spell;
Ability needed;
switch (args.Order)
{
case Order.Ability:
spell = args.Ability;
needed = hero.FindSpell(spell.Name) ?? hero.FindItem(spell.Name);
if (needed != null && needed.CanBeCasted())
{
if (needed.StoredName() == "item_dust")
needed.UseAbility();
else
needed.UseAbility(sender.Hero);
args.Process = false;
}
break;
case Order.AbilityTarget:
spell = args.Ability;
needed = hero.FindSpell(spell.Name) ?? hero.FindItem(spell.Name);
if (needed != null && needed.CanBeCasted())
{
needed.UseAbility(args.Target as Unit);
args.Process = false;
}
break;
case Order.AbilityLocation:
spell = args.Ability;
needed = hero.FindSpell(spell.Name) ?? hero.FindItem(spell.Name);
if (needed != null && needed.CanBeCasted())
{
needed.UseAbility(args.TargetPosition);
args.Process = false;
}
break;
}
}
}
#endregion
}