// Will only be accurate for the host
        public override string ToString()
        {
            var sb = new StringBuilder();

            sb.AppendLine($"{Nickname}/{Species} {GenderSymbol} Lv.{Level}");
            sb.AppendLine($"HP: {HP}/{MaxHP} ({HPPercentage:P2})");
            sb.AppendLine($"Types: {PBELocalizedString.GetTypeName(Type1).English}/{PBELocalizedString.GetTypeName(Type2).English}");
            sb.AppendLine($"Position: {Team.TrainerName}'s {FieldPosition}");
            sb.AppendLine($"Status1: {Status1}");
            if (Status1 == PBEStatus1.Asleep)
            {
                sb.AppendLine($"Sleep turns: {Status1Counter}/{SleepTurns}");
            }
            else if (Status1 == PBEStatus1.BadlyPoisoned)
            {
                sb.AppendLine($"Toxic Counter: {Status1Counter}");
            }
            sb.AppendLine($"Status2: {Status2}");
            if (Status2.HasFlag(PBEStatus2.Confused))
            {
                sb.AppendLine($"Confusion turns: {ConfusionCounter}/{ConfusionTurns}");
            }
            if (Status2.HasFlag(PBEStatus2.Disguised))
            {
                sb.AppendLine($"Disguised as: {DisguisedAsPokemon.Nickname}");
            }
            if (Status2.HasFlag(PBEStatus2.Infatuated))
            {
                sb.AppendLine($"Infatuated with: {InfatuatedWithPokemon.Nickname}");
            }
            if (Status2.HasFlag(PBEStatus2.LeechSeed))
            {
                sb.AppendLine($"Seeded position: {SeededTeam.TrainerName}'s {SeededPosition}");
            }
            if (Status2.HasFlag(PBEStatus2.Substitute))
            {
                sb.AppendLine($"Substitute HP: {SubstituteHP}");
            }
            sb.AppendLine($"Stats: [A] {Attack}, [D] {Defense}, [SA] {SpAttack}, [SD] {SpDefense}, [S] {Speed}, [W] {Weight:0.0}");
            PBEStat[] statChanges = GetChangedStats();
            if (statChanges.Length > 0)
            {
                var statStrs = new List <string>(7);
                if (Array.IndexOf(statChanges, PBEStat.Attack) != -1)
                {
                    statStrs.Add($"[A] x{PBEBattle.GetStatChangeModifier(AttackChange, false):0.00}");
                }
                if (Array.IndexOf(statChanges, PBEStat.Defense) != -1)
                {
                    statStrs.Add($"[D] x{PBEBattle.GetStatChangeModifier(DefenseChange, false):0.00}");
                }
                if (Array.IndexOf(statChanges, PBEStat.SpAttack) != -1)
                {
                    statStrs.Add($"[SA] x{PBEBattle.GetStatChangeModifier(SpAttackChange, false):0.00}");
                }
                if (Array.IndexOf(statChanges, PBEStat.SpDefense) != -1)
                {
                    statStrs.Add($"[SD] x{PBEBattle.GetStatChangeModifier(SpDefenseChange, false):0.00}");
                }
                if (Array.IndexOf(statChanges, PBEStat.Speed) != -1)
                {
                    statStrs.Add($"[S] x{PBEBattle.GetStatChangeModifier(SpeedChange, false):0.00}");
                }
                if (Array.IndexOf(statChanges, PBEStat.Accuracy) != -1)
                {
                    statStrs.Add($"[AC] x{PBEBattle.GetStatChangeModifier(AccuracyChange, true):0.00}");
                }
                if (Array.IndexOf(statChanges, PBEStat.Evasion) != -1)
                {
                    statStrs.Add($"[E] x{PBEBattle.GetStatChangeModifier(EvasionChange, true):0.00}");
                }
                sb.AppendLine($"Stat changes: {string.Join(", ", statStrs)}");
            }
            sb.AppendLine($"Ability: {PBELocalizedString.GetAbilityName(Ability).English}");
            sb.AppendLine($"Known ability: {(KnownAbility == PBEAbility.MAX ? "???" : PBELocalizedString.GetAbilityName(KnownAbility).English)}");
            sb.AppendLine($"Item: {PBELocalizedString.GetItemName(Item).English}");
            sb.AppendLine($"Known item: {(KnownItem == (PBEItem)ushort.MaxValue ? "???" : PBELocalizedString.GetItemName(KnownItem).English)}");
            if (Array.IndexOf(Moves, PBEMove.Frustration) != -1 || Array.IndexOf(Moves, PBEMove.Return) != -1)
            {
                sb.AppendLine($"Friendship: {Friendship} ({Friendship / (double)byte.MaxValue:P2})");
            }
            if (Array.IndexOf(Moves, PBEMove.HiddenPower) != -1)
            {
                sb.AppendLine($"{PBELocalizedString.GetMoveName(PBEMove.HiddenPower).English}: {PBELocalizedString.GetTypeName(IndividualValues.HiddenPowerType).English}/{IndividualValues.HiddenPowerBasePower}");
            }
            string[] moveStrs = new string[Moves.Length];
            for (int i = 0; i < moveStrs.Length; i++)
            {
                moveStrs[i] = $"{PBELocalizedString.GetMoveName(Moves[i]).English} {PP[i]}/{MaxPP[i]}";
            }
            sb.AppendLine($"Moves: {string.Join(", ", moveStrs)}");
            sb.AppendLine($"Usable moves: {string.Join(", ", GetUsableMoves().Select(m => PBELocalizedString.GetMoveName(m).English))}");
            sb.Append($"Known moves: {string.Join(", ", KnownMoves.Select(m => m == PBEMove.MAX ? "???" : PBELocalizedString.GetMoveName(m).English))}");
            return(sb.ToString());
        }
        /// <summary>Sets and clears all information required for switching out.</summary>
        public void ClearForSwitch()
        {
            FieldPosition = PBEFieldPosition.None;
            switch (Ability)
            {
            case PBEAbility.NaturalCure:
            {
                Status1        = PBEStatus1.None;
                Status1Counter = SleepTurns = 0;
                break;
            }

            case PBEAbility.Regenerator:
            {
                HP           = PBEUtils.Clamp((ushort)(HP + (MaxHP / 3)), ushort.MinValue, MaxHP);
                HPPercentage = (double)HP / MaxHP;
                break;
            }
            }
            PBEPokemonData pData;

            if (Shaymin_CannotChangeBackToSkyForm)
            {
                pData   = PBEPokemonData.GetData(Species = KnownSpecies = PBESpecies.Shaymin);
                Ability = pData.Abilities[0];
            }
            else
            {
                pData   = PBEPokemonData.GetData(Species = KnownSpecies = OriginalSpecies);
                Ability = OriginalAbility;
            }
            KnownAbility = PBEAbility.MAX;
            KnownGender  = Gender;
            KnownItem    = (PBEItem)ushort.MaxValue;
            KnownMoves.SetUnknown();
            KnownNickname = Nickname;
            KnownShiny    = Shiny;
            KnownType1    = Type1 = pData.Type1;
            KnownType2    = Type2 = pData.Type2;

            AttackChange = DefenseChange = SpAttackChange = SpDefenseChange = SpeedChange = AccuracyChange = EvasionChange = 0;

            if (Status1 == PBEStatus1.Asleep)
            {
                Status1Counter = 0;
            }
            else if (Status1 == PBEStatus1.BadlyPoisoned)
            {
                Status1Counter = 1;
            }

            ConfusionCounter   = ConfusionTurns = 0;
            DisguisedAsPokemon = null;
            SeededPosition     = PBEFieldPosition.None;
            SeededTeam         = null;
            SubstituteHP       = 0;
            if (Id != byte.MaxValue && Status2.HasFlag(PBEStatus2.Transformed))
            {
                Moves.Reset(TransformBackupMoves);
                TransformBackupMoves.SetUnknown();
            }
            Status2 = PBEStatus2.None;

            TempLockedMove    = ChoiceLockedMove = PBEMove.None;
            TempLockedTargets = PBETurnTarget.None;

            ExecutedMoves.Clear();

            SpeedBoost_AbleToSpeedBoostThisTurn = false;

            if (Id != byte.MaxValue)
            {
                SetStats();
            }
        }
Exemple #3
0
        private void CreateFilteredMoves()
        {
            var moves   = Pokemon.GetElement("Moves");
            var levelup = moves.GetElement("Levelup");
            var TMs     = moves.GetElement("TMs");
            var eggs    = moves.GetElement("Egg");
            var tutor   = moves.GetElement("Tutor");

            if (levelup != null)
            {
                foreach (var item in levelup.Children.OrderBy(m => Convert.ToInt32(m.GetAttributeValue("Level"))).Where(m => !KnownMoves.Contains(m.GetAttributeValue("Name"))))
                {
                    var name        = item.GetAttributeValue("Name");
                    var level       = item.GetAttributeValue("Level");
                    var moveResults = MoveElement.Children.Where(m => m.GetAttributeValue("name") == name);
                    ManagedXml.Element move;

                    try
                    {
                        if (name == "Curse")
                        {
                            if (IsGhostType())
                            {
                                move = moveResults.First(m => m.GetAttributeValue("Type") == "Ghost");
                            }
                            else
                            {
                                move = moveResults.First(m => m.GetAttributeValue("Type") != "Ghost");
                            }
                        }
                        else
                        {
                            move = moveResults.First();
                        }
                        lvMoves.Items.Add(new ListViewItem()
                        {
                            Text     = string.Format("{0} - Level {1}", name, level),
                            Tag      = move,
                            Group    = lvMoves.Groups[0],
                            ImageKey = GetImageFromName(name, true, move.GetAttributeValue("Type"))
                        });
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Level Move " + name + " is broken.");
                    }
                }
            }

            if (tutor != null)
            {
                if (tutor.Children.Count == 1 && tutor.Children[0].GetAttributeValue("Name") == "*")
                {
                    foreach (var item in MoveElement.Children)
                    {
                        var name = item.GetAttributeValue("name");
                        var move = item;
                        lvMoves.Items.Add(new ListViewItem()
                        {
                            Text     = name,
                            Tag      = move,
                            Group    = lvMoves.Groups[1],
                            ImageKey = GetImageFromName(name, true, move.GetAttributeValue("Type"))
                        });
                    }
                }
                else
                {
                    foreach (var item in tutor.Children.OrderBy(m => m.GetAttributeValue("Name")).Where(m => !KnownTutor.Contains(m.GetAttributeValue("Name"))))
                    {
                        var name        = item.GetAttributeValue("Name");
                        var moveResults = MoveElement.Children.Where(m => m.GetAttributeValue("name") == name);
                        ManagedXml.Element move;

                        try
                        {
                            if (name == "Curse")
                            {
                                if (IsGhostType())
                                {
                                    move = moveResults.First(m => m.GetAttributeValue("Type") == "Ghost");
                                }
                                else
                                {
                                    move = moveResults.First(m => m.GetAttributeValue("Type") != "Ghost");
                                }
                            }
                            else
                            {
                                move = moveResults.First();
                            }
                            lvMoves.Items.Add(new ListViewItem()
                            {
                                Text     = name,
                                Tag      = move,
                                Group    = lvMoves.Groups[1],
                                ImageKey = GetImageFromName(name, true, move.GetAttributeValue("Type"))
                            });
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("Tutor Move " + name + " is broken.");
                        }
                    }
                }
            }
            if (eggs != null)
            {
                foreach (var item in eggs.Children.OrderBy(m => m.GetAttributeValue("Name")).Where(m => !KnownEgg.Contains(m.GetAttributeValue("Name"))))
                {
                    var name        = item.GetAttributeValue("Name");
                    var moveResults = MoveElement.Children.Where(m => m.GetAttributeValue("name") == name);
                    ManagedXml.Element move;

                    try
                    {
                        if (name == "Curse")
                        {
                            if (IsGhostType())
                            {
                                move = moveResults.First(m => m.GetAttributeValue("Type") == "Ghost");
                            }
                            else
                            {
                                move = moveResults.First(m => m.GetAttributeValue("Type") != "Ghost");
                            }
                        }
                        else
                        {
                            move = moveResults.First();
                        }
                        lvMoves.Items.Add(new ListViewItem()
                        {
                            Text     = name,
                            Tag      = move,
                            Group    = lvMoves.Groups[2],
                            ImageKey = GetImageFromName(name, true, move.GetAttributeValue("Type"))
                        });
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Egg Move " + name + " is broken.");
                    }
                }
            }
            if (TMs != null)
            {
                foreach (var item in TMs.Children.OrderBy(m => m.Value).Where(m => !KnownTM.Contains(m.GetAttributeValue("Name"))))
                {
                    var name = item.Value;

                    lvMoves.Items.Add(new ListViewItem()
                    {
                        Text     = name,
                        Tag      = item,
                        Group    = lvMoves.Groups[3],
                        ImageKey = GetImageFromName(name)
                    });
                }
            }
        }