예제 #1
0
        private static PKM ConvertPKM(PKM pk, Type PKMType, int toFormat, ref string comment)
        {
            PKM pkm = pk.Clone();

            if (pkm.IsEgg)
            {
                pkm.ForceHatchPKM();
            }
            while (true)
            {
                pkm = IntermediaryConvert(pkm, PKMType, toFormat, ref comment);
                if (pkm == null) // fail convert
                {
                    return(null);
                }
                if (pkm.GetType() == PKMType) // finish convert
                {
                    return(pkm);
                }
            }
        }
예제 #2
0
        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);
        }