public void ApplyToPKM(PKM pkm) { if (Species < 0) { return; } pkm.Species = Species; if (Nickname != null && Nickname.Length <= pkm.NickLength) { pkm.Nickname = Nickname; } else { pkm.Nickname = PKX.GetSpeciesName(pkm.Species, pkm.Language); } int gender = PKX.GetGenderFromString(Gender); pkm.Gender = Math.Max(0, gender); var list = PKX.GetFormList(pkm.Species, types, forms, genders); int formnum = Array.IndexOf(list, Form); pkm.AltForm = Math.Max(0, formnum); var abils = pkm.PersonalInfo.Abilities; int index = Array.IndexOf(abils, Ability); pkm.RefreshAbility(Math.Max(0, Math.Min(2, index))); if (Shiny && !pkm.IsShiny) { pkm.SetShinyPID(); } else if (!Shiny && pkm.IsShiny) { pkm.PID = Util.Rand32(); } pkm.CurrentLevel = Level; pkm.HeldItem = Math.Max(0, HeldItem); pkm.CurrentFriendship = Friendship; pkm.Nature = Nature; pkm.EVs = EVs; pkm.IVs = IVs; pkm.Moves = Moves; }
private static PKM IntermediaryConvert(PKM pk, Type PKMType, int toFormat, ref string comment) { switch (pk) { // Non-sequential case PK1 pk1 when toFormat >= 7: return(pk1.ConvertToPK7()); case PK2 pk2 when toFormat >= 7: return(pk2.ConvertToPK7()); case PK3 pk3 when PKMType == typeof(CK3): return(pk3.ConvertToCK3()); case PK3 pk3 when PKMType == typeof(XK3): return(pk3.ConvertToXK3()); case PK4 pk4 when PKMType == typeof(BK4): return(pk4.ConvertToBK4()); // Invalid case PK2 pk2 when pk.Species > Legal.MaxSpeciesID_1: var lang = pk2.Japanese ? (int)LanguageID.Japanese : (int)LanguageID.English; var name = PKX.GetSpeciesName(pk2.Species, lang); comment = string.Format(MsgPKMConvertFailFormat, name, PKMType.Name); return(null); // Sequential case PK1 pk1: return(pk1.ConvertToPK2()); case PK2 pk2: return(pk2.ConvertToPK1()); case CK3 ck3: return(ck3.ConvertToPK3()); case XK3 xk3: return(xk3.ConvertToPK3()); case PK3 pk3: return(pk3.ConvertToPK4()); case BK4 bk4: return(bk4.ConvertToPK4()); case PK4 pk4: return(pk4.ConvertToPK5()); case PK5 pk5: return(pk5.ConvertToPK6()); case PK6 pk6: return(pk6.ConvertToPK7()); // None default: comment = MsgPKMConvertFailNoMethod; return(null); } }
/// <summary> /// Converts a PKM from one Generation 3 format to another. If it matches the destination format, the conversion will automatically return. /// </summary> /// <param name="pk">PKM to convert</param> /// <param name="PKMType">Format/Type to convert to</param> /// <param name="comment">Comments regarding the transfer's success/failure</param> /// <returns>Converted PKM</returns> public static PKM ConvertToType(PKM pk, Type PKMType, out string comment) { if (pk == null) { comment = $"Bad {nameof(pk)} input. Aborting."; return(null); } Type fromType = pk.GetType(); if (fromType == PKMType) { comment = "No need to convert, current format matches requested format."; return(pk); } if (IsNotTransferrable(pk, out comment)) { return(null); } Debug.WriteLine($"Trying to convert {fromType.Name} to {PKMType.Name}."); int fromFormat = int.Parse(fromType.Name.Last().ToString()); int toFormat = int.Parse(PKMType.Name.Last().ToString()); if (fromFormat > toFormat && fromFormat != 2) { comment = $"Cannot convert a {fromType.Name} to a {PKMType.Name}."; return(null); } PKM pkm = pk.Clone(); if (pkm.IsEgg) { ForceHatchPKM(pkm); } switch (fromType.Name) { case nameof(PK1): if (toFormat == 7) // VC->Bank { pkm = ((PK1)pk).ConvertToPK7(); } else if (toFormat == 2) // GB<->GB { pkm = ((PK1)pk).ConvertToPK2(); } break; case nameof(PK2): if (toFormat == 7) // VC->Bank { pkm = ((PK2)pk).ConvertToPK7(); } else if (toFormat == 1) // GB<->GB { if (pk.Species > 151) { comment = $"Cannot convert a {PKX.GetSpeciesName(pkm.Species, pkm.Japanese ? 1 : 2)} to {PKMType.Name}"; return(null); } pkm = ((PK2)pk).ConvertToPK1(); pkm.ClearInvalidMoves(); } break; case nameof(CK3): case nameof(XK3): // interconverting C/XD needs to visit main series format // ends up stripping purification/shadow etc stats pkm = pkm.ConvertToPK3(); goto case nameof(PK3); // fall through case nameof(PK3): if (toFormat == 3) // Gen3 Inter-trading { pkm = InterConvertPK3(pkm, PKMType); break; } if (fromType.Name != nameof(PK3)) { pkm = pkm.ConvertToPK3(); } pkm = ((PK3)pkm).ConvertToPK4(); if (toFormat == 4) { break; } goto case nameof(PK4); case nameof(BK4): pkm = ((BK4)pkm).ConvertToPK4(); if (toFormat == 4) { break; } goto case nameof(PK4); case nameof(PK4): if (PKMType == typeof(BK4)) { pkm = ((PK4)pkm).ConvertToBK4(); break; } pkm = ((PK4)pkm).ConvertToPK5(); if (toFormat == 5) { break; } goto case nameof(PK5); case nameof(PK5): pkm = ((PK5)pkm).ConvertToPK6(); if (toFormat == 6) { break; } goto case nameof(PK6); case nameof(PK6): if (pkm.Species == 25 && pkm.AltForm != 0) // cosplay pikachu { comment = "Cannot transfer Cosplay Pikachu forward."; return(null); } pkm = ((PK6)pkm).ConvertToPK7(); if (toFormat == 7) { break; } goto case nameof(PK7); case nameof(PK7): break; } comment = pkm == null ? $"Cannot convert a {fromType.Name} to a {PKMType.Name}." : $"Converted from {fromType.Name} to {PKMType.Name}."; return(pkm); }
public static PKM ConvertToType(PKM pk, Type PKMType, out string comment) { if (pk == null || pk.Species == 0) { comment = "Null input. Aborting."; return(null); } Type fromType = pk.GetType(); int fromFormat = int.Parse(fromType.Name.Last().ToString()); int toFormat = int.Parse(PKMType.Name.Last().ToString()); Debug.WriteLine($"Trying to convert {fromType.Name} to {PKMType.Name}."); PKM pkm = null; if (fromType == PKMType) { comment = "No need to convert, current format matches requested format."; return(pk); } if (fromFormat <= toFormat || fromFormat == 2) { pkm = pk.Clone(); if (pkm.IsEgg) // force hatch { pkm.IsEgg = false; if (pkm.AO) { pkm.Met_Location = 318; // Battle Resort } else if (pkm.XY) { pkm.Met_Location = 38; // Route 7 } else if (pkm.Gen5) { pkm.Met_Location = 16; // Route 16 } else { pkm.Met_Location = 30001; // Pokétransfer } pkm.IsNicknamed = false; pkm.Nickname = PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, fromFormat); } switch (fromType.Name) { case nameof(PK1): if (toFormat == 2) { pkm = PKMType == typeof(PK2) ? ((PK1)pk).ConvertToPK2() : null; break; } if (toFormat == 7) { pkm = ((PK1)pk).ConvertToPK7(); } break; case nameof(PK2): if (PKMType == typeof(PK1)) { if (pk.Species > 151) { comment = $"Cannot convert a {PKX.GetSpeciesName(pkm.Species, ((PK2)pkm).Japanese ? 1 : 2)} to {PKMType.Name}"; return(null); } pkm = ((PK2)pk).ConvertToPK1(); pkm.ClearInvalidMoves(); } else { pkm = null; } break; case nameof(CK3): case nameof(XK3): // interconverting C/XD needs to visit main series format // ends up stripping purification/shadow etc stats pkm = pkm.ConvertToPK3(); goto case nameof(PK3); // fall through case nameof(PK3): if (toFormat == 3) // Gen3 Inter-trading { switch (PKMType.Name) { case nameof(CK3): pkm = pkm.ConvertToCK3(); break; case nameof(XK3): pkm = pkm.ConvertToXK3(); break; case nameof(PK3): pkm = pkm.ConvertToPK3(); break; // already converted, instantly returns default: throw new FormatException(); } break; } if (fromType.Name != nameof(PK3)) { pkm = pkm.ConvertToPK3(); } pkm = ((PK3)pkm).ConvertToPK4(); if (toFormat == 4) { break; } goto case nameof(PK4); case nameof(BK4): pkm = ((BK4)pkm).ConvertToPK4(); if (toFormat == 4) { break; } goto case nameof(PK4); case nameof(PK4): if (PKMType == typeof(BK4)) { pkm = ((PK4)pkm).ConvertToBK4(); break; } if (pkm.Species == 172 && pkm.AltForm != 0) { comment = "Cannot transfer Spiky-Eared Pichu forward."; return(null); } pkm = ((PK4)pkm).ConvertToPK5(); if (toFormat == 5) { break; } goto case nameof(PK5); case nameof(PK5): pkm = ((PK5)pkm).ConvertToPK6(); if (toFormat == 6) { break; } goto case nameof(PK6); case nameof(PK6): if (pkm.Species == 25 && pkm.AltForm != 0) // cosplay pikachu { comment = "Cannot transfer Cosplay Pikachu forward."; return(null); } pkm = ((PK6)pkm).ConvertToPK7(); if (toFormat == 7) { break; } goto case nameof(PK7); case nameof(PK7): break; } } comment = pkm == null ? $"Cannot convert a {fromType.Name} to a {PKMType.Name}." : $"Converted from {fromType.Name} to {PKMType.Name}."; return(pkm); }
private static PKM ConvertPKM(PKM pk, Type PKMType, Type fromType, int toFormat, ref string comment) { PKM pkm = pk.Clone(); if (pkm.IsEgg) { ForceHatchPKM(pkm); } switch (fromType.Name) { case nameof(PK1): if (toFormat == 7) // VC->Bank { pkm = ((PK1)pk).ConvertToPK7(); } else if (toFormat == 2) // GB<->GB { pkm = ((PK1)pk).ConvertToPK2(); } break; case nameof(PK2): if (toFormat == 7) // VC->Bank { pkm = ((PK2)pk).ConvertToPK7(); } else if (toFormat == 1) // GB<->GB { if (pk.Species > 151) { comment = $"Cannot convert a {PKX.GetSpeciesName(pkm.Species, pkm.Japanese ? 1 : 2)} to {PKMType.Name}"; return(pkm); } pkm = ((PK2)pk).ConvertToPK1(); pkm.ClearInvalidMoves(); } break; case nameof(CK3): case nameof(XK3): // interconverting C/XD needs to visit main series format // ends up stripping purification/shadow etc stats pkm = pkm.ConvertToPK3(); goto case nameof(PK3); // fall through case nameof(PK3): if (toFormat == 3) // Gen3 Inter-trading { pkm = InterConvertPK3(pkm, PKMType); break; } if (fromType.Name != nameof(PK3)) { pkm = pkm.ConvertToPK3(); } pkm = ((PK3)pkm).ConvertToPK4(); if (toFormat == 4) { break; } goto case nameof(PK4); case nameof(BK4): pkm = ((BK4)pkm).ConvertToPK4(); if (toFormat == 4) { break; } goto case nameof(PK4); case nameof(PK4): if (PKMType == typeof(BK4)) { pkm = ((PK4)pkm).ConvertToBK4(); break; } pkm = ((PK4)pkm).ConvertToPK5(); if (toFormat == 5) { break; } goto case nameof(PK5); case nameof(PK5): pkm = ((PK5)pkm).ConvertToPK6(); if (toFormat == 6) { break; } goto case nameof(PK6); case nameof(PK6): if (pkm.Species == 25 && pkm.AltForm != 0) // cosplay pikachu { comment = "Cannot transfer Cosplay Pikachu forward."; return(pkm); } pkm = ((PK6)pkm).ConvertToPK7(); if (toFormat == 7) { break; } goto case nameof(PK7); case nameof(PK7): break; } return(pkm); }
private static PKM ConvertPKM(PKM pk, Type PKMType, Type fromType, int toFormat, ref string comment) { PKM pkm = pk.Clone(); if (pkm.IsEgg) { pkm.ForceHatchPKM(); } switch (fromType.Name) { case nameof(PK1): if (toFormat == 7) // VC->Bank { pkm = ((PK1)pk).ConvertToPK7(); } else if (toFormat == 2) // GB<->GB { pkm = ((PK1)pk).ConvertToPK2(); } break; case nameof(PK2): if (toFormat == 7) // VC->Bank { pkm = ((PK2)pk).ConvertToPK7(); } else if (toFormat == 1) // GB<->GB { if (pk.Species > 151) { comment = $"Cannot convert a {PKX.GetSpeciesName(pkm.Species, pkm.Japanese ? 1 : 2)} to {PKMType.Name}"; return(pkm); } pkm = ((PK2)pk).ConvertToPK1(); pkm.ClearInvalidMoves(); } break; case nameof(CK3): pkm = ((CK3)pkm).ConvertToPK3(); goto case nameof(PK3); // fall through case nameof(XK3): pkm = ((XK3)pkm).ConvertToPK3(); goto case nameof(PK3); // fall through case nameof(PK3): if (toFormat == 3) { if (PKMType == typeof(CK3)) { pkm = ((PK3)pkm).ConvertToCK3(); } else if (PKMType == typeof(XK3)) { pkm = ((PK3)pkm).ConvertToXK3(); } break; } pkm = ((PK3)pkm).ConvertToPK4(); if (toFormat == 4) { break; } goto case nameof(PK4); case nameof(BK4): pkm = ((BK4)pkm).ConvertToPK4(); if (toFormat == 4) { break; } goto case nameof(PK4); case nameof(PK4): if (PKMType == typeof(BK4)) { pkm = ((PK4)pkm).ConvertToBK4(); break; } pkm = ((PK4)pkm).ConvertToPK5(); if (toFormat == 5) { break; } goto case nameof(PK5); case nameof(PK5): pkm = ((PK5)pkm).ConvertToPK6(); if (toFormat == 6) { break; } goto case nameof(PK6); case nameof(PK6): if (pkm.Species == 25 && pkm.AltForm != 0) // cosplay pikachu { comment = "Cannot transfer Cosplay Pikachu forward."; return(pkm); } pkm = ((PK6)pkm).ConvertToPK7(); if (toFormat == 7) { break; } goto case nameof(PK7); case nameof(PK7): break; } return(pkm); }