ArcAnnihilation.Core.Player_OnExecuteAction C# (CSharp) Метод

Player_OnExecuteAction() приватный статический Метод

private static Player_OnExecuteAction ( Player sender, ExecuteOrderEventArgs args ) : void
sender Player
args ExecuteOrderEventArgs
Результат void
        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
        }