public static void MoveEnding(AtkContext atk)
        {
            var aer = atk.Attacker;

            if (atk.Move.Id == Ms.SPIT_UP || atk.Move.Id == Ms.SWALLOW)
            {
                int i = aer.OnboardPokemon.GetCondition <int>(Cs.Stockpile);
                aer.ChangeLv7D(atk.Attacker, false, false, 0, -i, 0, -i);
                aer.OnboardPokemon.RemoveCondition(Cs.Stockpile);
                aer.ShowLogPm("DeStockpile");
            }

            MagicCoat(atk);

            atk.SetAttackerAction(atk.Move.StiffOneTurn ? PokemonAction.Stiff : PokemonAction.Done);
            if (atk.Targets != null)
            {
                foreach (var d in atk.Targets)
                {
                    ITs.Attach(d.Defender);
                    ATs.RecoverAfterMoldBreaker(d.Defender);
                }
            }
            ITs.Attach(atk.Attacker); //先树果汁后PP果

            var c = aer.Controller;
            {
                var o = atk.GetCondition(Cs.MultiTurn);
                if (o != null)
                {
                    o.Turn--;
                    if (o.Turn != 0)
                    {
                        atk.SetAttackerAction(PokemonAction.Moving);
                    }
                    else if (o.Bool)
                    {
                        aer.AddState(aer, AttachedState.Confuse, false, 0, "EnConfuse2");
                    }
                }
            }
            {
                var o = atk.GetCondition <Tile>(Cs.EjectButton);
                if (o != null)
                {
                    c.PauseForSendOutInput(o);
                    return;
                }
            }
            {
                var tile = aer.Tile;
                if (atk.Move.Switch && tile != null)
                {
                    c.Withdraw(aer, "SelfWithdraw", 0, true);
                    c.PauseForSendOutInput(tile);
                }
            }
        }
        public static void BuildDefContext(AtkContext atk, Tile select)
        {
            switch (atk.Move.Id)
            {
            case Ms.COUNTER:     //68
                Counter(atk, Cs.PhysicalDamage);
                break;

            case Ms.MIRROR_COAT:     //243
                Counter(atk, Cs.SpecialDamage);
                break;

            case Ms.METAL_BURST:     //368
                Counter(atk, Cs.Damage);
                break;

            case Ms.BIDE:
                if (atk.GetCondition(Cs.MultiTurn).Turn == 1)
                {
                    var o       = atk.GetCondition(Cs.Bide);
                    var targets = new List <DefContext>();
                    if (o.By != null)
                    {
                        var t = GetRangeTiles(atk, MoveRange.SelectedTarget, o.By.Tile).FirstOrDefault();
                        if (t != null && t.Pokemon != null)
                        {
                            targets.Add(new DefContext(atk, t.Pokemon));
                        }
                    }
                    if (!targets.Any())
                    {
                        atk.Attacker.ShowLogPm("UseMove", Ms.BIDE);                     //奇葩的战报
                    }
                    atk.SetTargets(targets);
                }
                break;

            default:
                IEnumerable <Tile> ts = GetRangeTiles(atk, atk.Move.GetRange(atk.Attacker), select);
                if (ts != null)
                {
                    var targets = new List <DefContext>();
                    foreach (Tile t in ts)
                    {
                        if (t.Pokemon != null)
                        {
                            targets.Add(new DefContext(atk, t.Pokemon));
                        }
                    }
                    atk.SetTargets(targets);
                }
                break;
            }
        }
        public static void MagicCoat(AtkContext atk)
        {
            var list = atk.GetCondition <List <PokemonProxy> >(Cs.MagicCoat);

            if (list != null)
            {
                atk.RemoveCondition(Cs.MagicCoat);
                foreach (var d in list)
                {
                    var a = new AtkContext(d);
                    a.SetCondition(Cs.IgnoreMagicCoat);
                    a.StartExecute(atk.Move, atk.Attacker.Tile, d.RaiseAbility(As.MAGIC_BOUNCE) ? "MagicBounce" : "MagicCoat");
                    if (atk.Target == null)
                    {
                        break;
                    }
                }
            }
        }