// 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(); } }
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) }); } } }