Esempio n. 1
0
        public bool CanTransform(PokemonProxy target)
        {
            if (target == null)
            {
                return(false);
            }
            var to = target.OnboardPokemon;

            return(!(OnboardPokemon.HasCondition(Cs.Transform) || to.HasCondition(Cs.Illusion) || to.HasCondition(Cs.Transform) || to.HasCondition(Cs.Substitute)));
        }
Esempio n. 2
0
 public void Transform(PokemonProxy target)
 {
     OnboardPokemon.SetCondition(Cs.Transform);
     OnboardPokemon.Transform(target.OnboardPokemon);
     _moves.Clear();
     foreach (var m in target._moves)
     {
         _moves.Add(new MoveProxy(m.MoveE, this));
     }
     Controller.ReportBuilder.Transform(this);
     Controller.ReportBuilder.ShowLog(Ls.Transform, Id, target.Id);
 }
Esempio n. 3
0
 public void Transform(OnboardPokemon op)
 {
     //形态(包括种族值)、能力值、能力等级、属性、特性、技能等变为与对方怪兽一样。
     Form = op.Form;
     FiveD.Set5D(op.FiveD);
     lv5D.Set5D(op.lv5D);
     Gender      = op.Gender;
     _accuracyLv = op._accuracyLv;
     _evasionLv  = op._evasionLv;
     Type1       = op.Type1;//无视羽休
     Type2       = op.Type2;
     Ability     = op.Ability;
     _weight     = op.Weight;
 }
Esempio n. 4
0
        internal bool CheckNeedInput()
        {
            if (Action == PokemonAction.Done || State == PokemonState.SLP && Action == PokemonAction.Moving && AtkContext.Move.SkipSleepMTA)
            {
                {
                    var o = OnboardPokemon.GetCondition(Cs.Encore);
                    if (o != null)
                    {
                        foreach (var m in Moves)
                        {
                            if (m.MoveE == o.Move)
                            {
                                if (m.PP == 0)
                                {
                                    break;
                                }
                                else
                                {
                                    goto DONE1;
                                }
                            }
                        }
                        OnboardPokemon.RemoveCondition(Cs.Encore);
                    }
                }
DONE1:
                if (ITs.ChoiceItem(Item))
                {
                    var o = OnboardPokemon.GetCondition <MoveTypeE>(Cs.ChoiceItem);
                    if (o != null)
                    {
                        foreach (var m in Moves)
                        {
                            if (m.MoveE == o)
                            {
                                goto DONE2;
                            }
                        }
                        OnboardPokemon.RemoveCondition(Cs.ChoiceItem);
                    }
                }
DONE2:
                Action = PokemonAction.WaitingForInput;
                return(true);
            }
            return(false);
        }
Esempio n. 5
0
        /// <summary>
        /// 同一精灵的Outward在一段战报中可能出现多次,每次应是不同的Outward
        /// </summary>
        /// <returns></returns>
        internal PokemonOutward GetOutward()
        {
            Pokemon o    = OnboardPokemon.GetCondition <Pokemon>(Cs.Illusion);
            var     form = o == null ? OnboardPokemon.Form : o.Form;

            if (o == null)
            {
                o = Pokemon;
            }
            var name       = o.Name;
            var gender     = o.Gender;//即使对战画面中不显示性别,实际性别也与变身对象一致,可以被着迷。
            var lv         = Pokemon.Lv;
            var shiny      = o.Shiny;
            var position   = new Position(Pokemon.TeamId, OnboardPokemon.X, OnboardPokemon.CoordY);
            var substitute = OnboardPokemon.HasCondition(Cs.Substitute);
            var hp         = Pokemon.Hp;
            var state      = State;
            var outward    = new PokemonOutward(Id, Pokemon.TeamId, Pokemon.MaxHp);

            outward.SetAll(name, form, gender, lv, position, substitute, hp, state, shiny);
            return(outward);
        }
Esempio n. 6
0
        internal void Move()
        {
            if (SelectZmove)
            {
                Pokemon.Zmove = true;
            }
            STs.FocusPunch(Controller);
            LastMoveTurn = Controller.TurnNumber;
            STs.WillAct(this);
            switch (Action)
            {
            case PokemonAction.Stiff:
                PTs.ShowLogPm(this, "Stiff");
                Action = PokemonAction.Done;
                break;

            case PokemonAction.Moving:
                if (AtkContext.Move.Id == Ms.SKY_DROP)
                {
                    CoordY = CoordY.Plate;
                    if (AtkContext.Target.Defender.AliveOnboard)
                    {
                        AtkContext.Target.Defender.CoordY = CoordY.Plate;
                        AtkContext.Target.Defender.OnboardPokemon.RemoveCondition(Cs.SkyDrop);
                    }
                    else
                    {
                        AtkContext.SetTargets(Enumerable.Empty <DefContext>());
                    }
                }
                if (CanExecute())
                {
                    if (AtkContext.Move.Id != Ms.BIDE)
                    {
                        PTs.ShowLogPm(this, "UseMove", AtkContext.Move.Id);
                    }
                    AtkContext.ContinueExecute(SelectedTarget);
                }
                else
                {
                    Action = PokemonAction.Done;
                }
                break;

            case PokemonAction.MoveAttached:
            {
                var o = OnboardPokemon.GetCondition(Cs.Encore);
                if (o != null)
                {
                    foreach (var m in Moves)
                    {
                        if (m.MoveE == o.Move)
                        {
                            SelectedMove = m;
                        }
                    }
                }
            }
                ATs.StanceChange(this);
                if (SelectZmove && SelectedMove.MoveE.Move.Category == MoveCategory.Status)
                {
                    switch (GameHelper.ZStatus(SelectedMove.MoveE.Move.Id))
                    {
                    case 0:
                        break;

                    case 1:
                        this.ChangeLv7D(this, StatType.Atk, 1, false);
                        break;

                    case 2:
                        this.ChangeLv7D(this, StatType.Atk, 2, false);
                        break;

                    case 3:
                        this.ChangeLv7D(this, StatType.Atk, 3, false);
                        break;

                    case 4:
                        this.ChangeLv7D(this, StatType.Def, 1, false);
                        break;

                    case 5:
                        this.ChangeLv7D(this, StatType.SpAtk, 1, false);
                        break;

                    case 6:
                        this.ChangeLv7D(this, StatType.SpAtk, 2, false);
                        break;

                    case 7:
                        this.ChangeLv7D(this, StatType.SpDef, 1, false);
                        break;

                    case 8:
                        this.ChangeLv7D(this, StatType.SpDef, 2, false);
                        break;

                    case 9:
                        this.ChangeLv7D(this, StatType.Speed, 1, false);
                        break;

                    case 10:
                        this.ChangeLv7D(this, StatType.Speed, 2, false);
                        break;

                    case 11:
                        this.ChangeLv7D(this, StatType.Accuracy, 1, false);
                        break;

                    case 12:
                        this.ChangeLv7D(this, StatType.Evasion, 1, false);
                        break;

                    case 13:
                        this.ChangeLv7D(this, false, false, 1, 1, 1, 1, 1, 0, 0);
                        break;

                    case 14:
                        if (OnboardPokemon.AddCondition(Cs.FocusEnergy))
                        {
                            this.ShowLogPm("En" + Cs.FocusEnergy);
                        }
                        break;

                    case 15:
                        ITs.Reset7D(this);
                        break;

                    case 16:
                        this.HpRecover(Pokemon.MaxHp);
                        break;

                    case 17:
                        if (Pokemon.Owner.PmsAlive > Controller.GameSettings.Mode.OnboardPokemonsPerPlayer())
                        {
                            Tile.SetTurnCondition(Cs.Zheal);
                        }
                        break;

                    case 18:
                        OnboardPokemon.AddTurnCondition(Cs.FollowMe, SelectedMove.MoveE.Move.Id);
                        this.ShowLogPm(Ls.EnFollowMe);
                        break;

                    default:
                        break;
                    }
                    if (SelectedMove.MoveE.Move.Id == Ms.CURSE)
                    {
                        if (OnboardPokemon.HasType(BattleType.Ghost))
                        {
                            this.HpRecover(Pokemon.MaxHp);
                        }
                        else
                        {
                            this.ChangeLv7D(this, StatType.Atk, 1, false);
                        }
                    }
                }
                if (CanExecute() && SelectedMove.CanExecute())
                {
                    _atkContext = null;
                    SelectedMove.Execute();
                    var o = OnboardPokemon.GetCondition(Cs.LastMove);
                    if (o == null)
                    {
                        o      = new Condition();
                        o.Move = AtkContext.Move;
                        OnboardPokemon.SetCondition(Cs.LastMove, o);
                    }
                    else if (o.Move != AtkContext.Move)
                    {
                        o.Move = AtkContext.Move;
                        o.Int  = 0;
                    }
                    if (AtkContext.Fail)
                    {
                        o.Int = 0;
                    }
                    else
                    {
                        o.Int++;
                    }
                    Controller.Board.SetCondition(Cs.LastMove, o);
                }
                else
                {
                    OnboardPokemon.RemoveCondition(Cs.LastMove);
                    Action = PokemonAction.Done;
                }
                if (AtkContext != null && AtkContext.Move.Dance && AtkContext.Attacker.LastMoveTurn == Controller.TurnNumber)
                {
                    foreach (var p in Controller.Board.Pokemons)
                    {
                        if (p != null && p.AbilityE(As.Dancer) && p != AtkContext.Attacker)
                        {
                            p.RaiseAbility();
                            AtkContext dance = new AtkContext(p);
                            dance.StartExecute(AtkContext.Move, null, "UseMove", false);
                        }
                    }
                }
                break;
            } //switch(Action)
        }
Esempio n. 7
0
        internal void Move()
        {
            STs.FocusPunch(Controller);
            LastMoveTurn = Controller.TurnNumber;
            STs.WillAct(this);
            switch (Action)
            {
            case PokemonAction.Stiff:
                PTs.ShowLogPm(this, "Stiff");
                Action = PokemonAction.Done;
                break;

            case PokemonAction.Moving:
                if (AtkContext.Move.Id == Ms.SKY_DROP)
                {
                    CoordY = CoordY.Plate;
                    if (AtkContext.Target.Defender.AliveOnboard)
                    {
                        AtkContext.Target.Defender.CoordY = CoordY.Plate;
                        AtkContext.Target.Defender.OnboardPokemon.RemoveCondition(Cs.SkyDrop);
                    }
                    else
                    {
                        AtkContext.SetTargets(Enumerable.Empty <DefContext>());
                    }
                }
                if (CanExecute())
                {
                    if (AtkContext.Move.Id != Ms.BIDE)
                    {
                        PTs.ShowLogPm(this, "UseMove", AtkContext.Move.Id);
                    }
                    AtkContext.ContinueExecute(SelectedTarget);
                }
                else
                {
                    Action = PokemonAction.Done;
                }
                break;

            case PokemonAction.MoveAttached:
            {
                var o = OnboardPokemon.GetCondition(Cs.Encore);
                if (o != null)
                {
                    foreach (var m in Moves)
                    {
                        if (m.MoveE == o.Move)
                        {
                            SelectedMove = m;
                        }
                    }
                }
            }
                ATs.StanceChange(this);
                if (CanExecute() && SelectedMove.CanExecute())
                {
                    _atkContext = null;
                    SelectedMove.Execute();
                    var o = OnboardPokemon.GetCondition(Cs.LastMove);
                    if (o == null)
                    {
                        o      = new Condition();
                        o.Move = AtkContext.Move;
                        OnboardPokemon.SetCondition(Cs.LastMove, o);
                    }
                    else if (o.Move != AtkContext.Move)
                    {
                        o.Move = AtkContext.Move;
                        o.Int  = 0;
                    }
                    if (AtkContext.Fail)
                    {
                        o.Int = 0;
                    }
                    else
                    {
                        o.Int++;
                    }
                    Controller.Board.SetCondition(Cs.LastMove, o);
                }
                else
                {
                    OnboardPokemon.RemoveCondition(Cs.LastMove);
                    Action = PokemonAction.Done;
                }
                break;
            } //switch(Action)
        }