示例#1
0
        private Result7 GenerateTrade(Result7 rt)
        {
            rt.IVs = (int[])IVs.Clone();
            for (int i = 0; i < 6; i++)
            {
                if (rt.IVs[i] < 0)
                {
                    rt.IVs[i] = (int)(getrand & 0x1F);
                }
            }

            // All fixed for now
            rt.Ability = Ability;
            rt.Nature  = Synchro_Stat;
            rt.Gender  = Gender;

            rt.EC  = (uint)getrand;
            rt.PID = (uint)getrand;
            if (rt.PSV == TSV)
            {
                rt.PID ^= 0x10000000;
            }

            return(rt);
        }
示例#2
0
        private RNGSearch.EventRule geteventsetting()
        {
            int[] IVs = new int[6] {
                -1, -1, -1, -1, -1, -1
            };
            int cnt = 0;

            for (int i = 0; i < 6; i++)
            {
                if (EventIVLocked[i].Checked)
                {
                    cnt++;
                    IVs[i] = (int)EventIV[i].Value;
                }
            }
            if (IVsCount.Value > 0 && cnt + IVsCount.Value > 5)
            {
                Error(SETTINGERROR_STR[lindex] + L_IVsCount.Text);
                IVs = new int[6] {
                    -1, -1, -1, -1, -1, -1
                };
            }
            return(new RNGSearch.EventRule
            {
                IVs = (int[])IVs.Clone(),
                IVsCount = (int)IVsCount.Value,
                YourID = YourID.Checked,
                PIDType = Event_PID.SelectedIndex,
                AbilityLocked = AbilityLocked.Checked,
                NatureLocked = NatureLocked.Checked,
                GenderLocked = GenderLocked.Checked,
            });
        }
示例#3
0
        private string ParseLineMove(string line)
        {
            string moveString = line.Substring(line[1] == ' ' ? 2 : 1);

            if (!moveString.Contains(moves[237])) // Hidden Power
            {
                return(moveString);
            }

            // Defined Hidden Power
            if (moveString.Length > 13)
            {
                string type = moveString.Remove(0, 13);
                type = ReplaceAll(type, string.Empty, "[", "]", "(", ")"); // Trim out excess data
                int hpVal = Array.IndexOf(hptypes, type);                  // Get HP Type

                if (IVs.Any(z => z != 31))
                {
                    if (!HiddenPower.SetIVsForType(hpVal, IVs))
                    {
                        InvalidLines.Add($"Invalid IVs for Hidden Power Type: {type}");
                    }
                }
                else if (hpVal >= 0)
                {
                    IVs = PKX.SetHPIVs(hpVal, IVs); // Get IVs
                }
                else
                {
                    InvalidLines.Add($"Invalid Hidden Power Type: {type}");
                }
            }
            return(moves[237]);
        }
示例#4
0
文件: PKM.cs 项目: Arch9SK7/PKHeX
        public PKM convertPK1toPK7()
        {
            if (Format != 1)
            {
                return(null);
            }
            if (Species > 151)
            {
                return(null);
            }

            var pk = new PK7();

            TransferPropertiesWithReflection(this, pk);
            pk.EVs    = new int[6];
            pk.Nature = IVs.Sum() % 25;
            pk.IVs    = new[] { 31, 31, 31, 31, 31, 31 };
            pk.RefreshChecksum();
            if (!IsNicknamed)
            {
                pk.Nickname = Nickname.ToLower();
            }
            pk.Version = -1;
            pk.Ability = PersonalTable.SM[Species].Abilities[0];
            do
            {
                PID = PKX.getRandomPID(Species, Gender, Version, Nature, AltForm, PID);
            } while (!IsShiny);
            return(pk);
        }
示例#5
0
 protected void CloneArrays()
 {
     // dereference original arrays with new copies
     Moves   = (int[])Moves?.Clone();
     Relearn = (int[])Relearn.Clone();
     IVs     = (int[])IVs.Clone();
     Contest = (int[])Contest.Clone();
 }
示例#6
0
        public BattleSubwayPokemon5 Clone()
        {
            uint ivsField = (uint)(IVs.ToInt32() & 0x3fffffffu) | (IvFlags & 0xc0000000u);

            ushort[] moveset = GetArrayFromMoves(Moves);
            byte     ppUps   = GetPpUpsFromMoves(Moves);

            BattleSubwayPokemon5 result = new BattleSubwayPokemon5(m_pokedex,
                                                                   (ushort)SpeciesID, (ushort)HeldItemID, moveset,
                                                                   TrainerID, Personality, ivsField, EVs.ToArray(), ppUps,
                                                                   Language, (byte)AbilityID, Happiness, NicknameEncoded, Unknown2);

            return(result);
        }
示例#7
0
        private string ParseLineMove(string line)
        {
            const int hiddenPower = 237;
            string    moveString  = line.Substring(line[1] == ' ' ? 2 : 1).Split('/')[0].Trim();

            if (!moveString.StartsWith(Strings.Move[hiddenPower])) // Hidden Power
            {
                return(moveString);                                // regular move
            }
            if (moveString.Length <= 13)
            {
                return(Strings.Move[hiddenPower]);
            }

            // Defined Hidden Power
            string type = moveString.Substring(13);

            type = RemoveAll(type, ParenJunk);                                   // Trim out excess data
            int hpVal = StringUtil.FindIndexIgnoreCase(Strings.types, type) - 1; // Get HP Type

            HiddenPowerType = hpVal;
            if (IVs.Any(z => z != 31))
            {
                if (!HiddenPower.SetIVsForType(hpVal, IVs, Format))
                {
                    InvalidLines.Add($"Invalid IVs for Hidden Power Type: {type}");
                }
            }
            else if (hpVal >= 0)
            {
                IVs = HiddenPower.SetIVs(hpVal, IVs, Format); // Get IVs
            }
            else
            {
                InvalidLines.Add($"Invalid Hidden Power Type: {type}");
            }
            return(Strings.Move[hiddenPower]);
        }
示例#8
0
        protected override void Save(BinaryWriter writer)
        {
            writer.Write((ushort)SpeciesID);
            writer.Write((ushort)HeldItemID);

            ushort[] moveset = GetArrayFromMoves(Moves);
            for (int i = 0; i < 4; i++)
            {
                writer.Write(moveset[i]);
            }

            writer.Write(TrainerID);
            writer.Write(Personality);
            writer.Write(IVs.ToInt32() | (int)IvFlags);
            writer.Write(EVs.ToArray(), 0, 6);
            writer.Write(GetPpUpsFromMoves(Moves));
            writer.Write((byte)Language);
            writer.Write((byte)AbilityID);
            writer.Write(Happiness);
            writer.Write(NicknameEncoded.RawData, 0, 22);

            writer.Flush();
        }
示例#9
0
        public override RNGResult Generate()
        {
            // Generate Pokemon before target first
            if (Bank)
            {
                for (int i = 0; i < Target - 1; i++)
                {
                    Generate_Once(GenderList[i]);
                }
            }

            Result6 rt = new Result6();

            rt.Level = Level;

            int StartFrame = RNGPool.index;

            //Sync
            rt.Synchronize = getSync;
            if (!AlwaysSync)
            {
                Advance(60);
            }

            //Encryption Constant
            rt.EC = getrand;

            //PID
            for (int i = PIDroll_count; i > 0; i--)
            {
                rt.PID = getrand;
                if (rt.PSV == TSV)
                {
                    if (IsShinyLocked)
                    {
                        rt.PID ^= 0x10000000;
                    }
                    else
                    {
                        rt.Shiny = true;
                    }
                    break;
                }
                else if (IsForcedShiny)
                {
                    rt.Shiny = true;
                    rt.PID   = (uint)((((TSV << 4) ^ (rt.PID & 0xFFFF)) << 16) + (rt.PID & 0xFFFF)); // Not accurate
                }
            }

            //IV
            rt.IVs = (int[])IVs.Clone();
            for (int i = PerfectIVCount; i > 0;)
            {
                uint tmp = rand(6);
                if (rt.IVs[tmp] < 0)
                {
                    i--; rt.IVs[tmp] = 31;
                }
            }
            for (int i = 0; i < 6; i++)
            {
                if (rt.IVs[i] < 0)
                {
                    rt.IVs[i] = (int)(getrand >> 27);
                }
            }

            //Ability
            rt.Ability = (byte)(Ability == 0 ? (getrand >> 31) + 1 : Ability);

            //Nature
            rt.Nature = (byte)(rt.Synchronize && Synchro_Stat < 25 ? Synchro_Stat : rand(25));

            //Gender
            rt.Gender = (byte)(RandomGender ? (rand(252) >= Gender ? 1 : 2) : Gender);

            //For Pokemon Link
            rt.FrameUsed = (byte)(RNGPool.index - StartFrame);

            return(rt);
        }
示例#10
0
        private RNGResult Generate_Once()
        {
            Result6 rt = new Result6();

            rt.Level = Level;

            //Encryption Constant
            rt.EC = EC > 0 ? EC : getrand;

            //PID
            switch (PIDType)
            {
            case 0:     //Random PID
                rt.PID = getrand;
                if (rt.Shiny = rt.PSV == TSV)
                {
                    rt.SquareShiny = true;
                }
                break;

            case 1:     //Random NonShiny
                rt.PID = getrand;
                if (rt.PSV == TSV)
                {
                    rt.PID ^= 0x10000000;
                }
                break;

            case 2:     //Random Shiny
                rt.PID = getrand;
                if (OtherInfo)
                {
                    rt.PID = (uint)(((TID ^ SID ^ (rt.PID & 0xFFFF)) << 16) + (rt.PID & 0xFFFF));
                }
                rt.Shiny       = true;
                rt.SquareShiny = true;
                break;

            case 3:     //Specified
                rt.PID = PID;
                if (rt.Shiny = rt.PSV == TSV)
                {
                    rt.SquareShiny = true;
                }
                break;
            }

            //IV
            rt.IVs = (int[])IVs.Clone();
            for (int i = IVsCount; i > 0;)
            {
                uint tmp = rand(6);
                if (rt.IVs[tmp] < 0)
                {
                    i--; rt.IVs[tmp] = 31;
                }
            }
            for (int i = 0; i < 6; i++)
            {
                if (rt.IVs[i] < 0)
                {
                    rt.IVs[i] = (int)(getrand >> 27);
                }
            }

            //Ability
            rt.Ability = AbilityLocked ? Ability : (byte)(rand(Ability + 2) + 1);

            //Nature
            rt.Nature = NatureLocked ? Nature : (byte)rand(25);

            //Gender
            rt.Gender = GenderLocked ? Gender : (byte)(rand(252) >= Gender ? 1 : 2);

            //Advance
            rt.FrameUsed = (byte)(RNGPool.index + 1);

            return(rt);
        }
示例#11
0
        public override RNGResult Generate()
        {
            Result7 rt = new Result7();

            rt.Level = Level;

            if (Trade)
            {
                return(GenerateTrade(rt));
            }

            //Synchronize
            if (AlwaysSync)
            {
                rt.Synchronize = true;
            }
            else
            {
                rt.Synchronize = blink_process();
                Advance(60);
            }

            //Encryption Constant
            if (IsPelago)
            {
                Advance(60 + PelagoShift);
                rt.EC = (uint)getrand;
                Advance(1); // Random TID
            }
            else
            {
                rt.EC = (uint)getrand;
            }


            //PID
            for (int i = PIDroll_count; i > 0; i--)
            {
                rt.PID = (uint)getrand;
                if (rt.PSV == TSV)
                {
                    if (IsShinyLocked)
                    {
                        rt.PID ^= 0x10000000;
                    }
                    else
                    {
                        rt.Shiny = true;
                    }
                    break;
                }
                else if (IsForcedShiny)
                {
                    rt.Shiny = true;
                    rt.PID   = (uint)((((TSV << 4) ^ (rt.PID & 0xFFFF)) << 16) + (rt.PID & 0xFFFF)); // Not accurate
                }
            }

            //IV
            rt.IVs = (int[])IVs.Clone();
            for (int i = PerfectIVCount; i > 0;)
            {
                int tmp = (int)(getrand % 6);
                if (rt.IVs[tmp] < 0)
                {
                    i--; rt.IVs[tmp] = 31;
                }
            }
            for (int i = 0; i < 6; i++)
            {
                if (rt.IVs[i] < 0)
                {
                    rt.IVs[i] = (int)(getrand & 0x1F);
                }
            }

            //Ability
            rt.Ability = Ability > 0 ? Ability : (byte)((getrand & 1) + 1);

            //Nature
            rt.Nature = rt.Synchronize && Synchro_Stat < 25 ? Synchro_Stat : (byte)(getrand % 25);

            //Gender
            rt.Gender = RandomGender ? (byte)(getrand % 252 >= Gender ? 1 : 2) : Gender;

            return(rt);
        }
示例#12
0
        public override RNGResult Generate()
        {
            Result7 rt = new Result7();

            rt.Level = Level;

            //Synchronize
            if (AlwaysSync)
            {
                rt.Synchronize = true;
            }
            else
            {
                rt.Synchronize = blink_process();
                Advance(60);
            }

            //Encryption Constant
            if (IsPelago)
            {
                Advance(60 + PelagoShift);
                rt.EC = (uint)getrand;
                Advance(1);
            }
            else
            {
                rt.EC = (uint)getrand;
            }


            //PID
            for (int i = PIDroll_count; i > 0; i--)
            {
                rt.PID = (uint)getrand;
                if (rt.PSV == TSV)
                {
                    if (IsShinyLocked)
                    {
                        rt.PID ^= 0x10000000;
                    }
                    else
                    {
                        rt.Shiny = true;
                    }
                    break;
                }
            }

            //IV
            rt.IVs = (int[])IVs.Clone();
            for (int i = PerfectIVCount; i > 0;)
            {
                int tmp = (int)(getrand % 6);
                if (rt.IVs[tmp] < 0)
                {
                    i--; rt.IVs[tmp] = 31;
                }
            }
            for (int i = 0; i < 6; i++)
            {
                if (rt.IVs[i] < 0)
                {
                    rt.IVs[i] = (int)(getrand & 0x1F);
                }
            }

            //Ability
            rt.Ability = (byte)(blinkwhensync ? 1 : (getrand & 1) + 1);

            //Nature
            rt.Nature = (byte)(rt.Synchronize && Synchro_Stat < 25 ? Synchro_Stat : getrand % 25);

            //Gender
            rt.Gender = (byte)(RandomGender ? ((int)(getrand % 252) >= Gender ? 1 : 2) : Gender);

            return(rt);
        }
示例#13
0
        public override RNGResult Generate()
        {
            Result7 rt = new Result7();

            rt.Level = Level;

            //Encryption Constant
            rt.EC = EC > 0 ? EC : (uint)getrand;

            //PID
            switch (PIDType)
            {
            case 0:     //Random PID
                rt.PID   = (uint)getrand;
                rt.Shiny = rt.PSV == TSV;
                break;

            case 1:     //Random NonShiny
                rt.PID = (uint)getrand;
                if (rt.PSV == TSV)
                {
                    rt.PID ^= 0x10000000;
                }
                break;

            case 2:     //Random Shiny
                rt.PID   = (uint)getrand;
                rt.Shiny = true;
                if (OtherInfo)
                {
                    rt.PID = (uint)(((TID ^ SID ^ (rt.PID & 0xFFFF)) << 16) + (rt.PID & 0xFFFF));
                }
                break;

            case 3:     //Specified
                rt.PID   = PID;
                rt.Shiny = rt.PSV == TSV;
                break;
            }

            //IV
            rt.IVs = (int[])IVs.Clone();
            for (int i = IVsCount; i > 0;)
            {
                int tmp = (int)(getrand % 6);
                if (rt.IVs[tmp] < 0)
                {
                    i--; rt.IVs[tmp] = 31;
                }
            }
            for (int i = 0; i < 6; i++)
            {
                if (rt.IVs[i] < 0)
                {
                    rt.IVs[i] = (int)(getrand & 0x1F);
                }
            }

            //Ability
            rt.Ability = AbilityLocked ? Ability : (byte)(Ability == 0 ? (getrand & 1) + 1 : getrand % 3 + 1);

            //Nature
            rt.Nature = NatureLocked ? Nature : (byte)(getrand % 25);

            //Gender
            rt.Gender = GenderLocked ? Gender : (byte)(getrand % 252 >= Gender ? 1 : 2);
            return(rt);
        }
示例#14
0
 public Pokemon Clone()
 {
     return(new Pokemon(Base, Gender, Nature, Ability, IVs.Clone() as IVSet, EVs.Clone() as EVSet, Moves.Clone(), Level));
 }
示例#15
0
文件: WC6.cs 项目: cybercarrot/PKHeX
        public PK6 convertToPK6(SAV6 SAV)
        {
            if (!IsPokémon)
            {
                return(null);
            }

            int currentLevel = Level > 0 ? Level : (int)(Util.rnd32() % 100 + 1);
            PK6 pk           = new PK6
            {
                Species            = Species,
                HeldItem           = HeldItem,
                TID                = TID,
                SID                = SID,
                Met_Level          = currentLevel,
                Nature             = Nature != 0xFF ? Nature : (int)(Util.rnd32() % 25),
                Gender             = PKX.Personal[Species].Gender == 255 ? 2 : (Gender != 3 ? Gender : PKX.Personal[Species].RandomGender),
                AltForm            = Form,
                EncryptionConstant = EncryptionConstant == 0 ? Util.rnd32() : EncryptionConstant,
                Version            = OriginGame == 0 ? SAV.Game : OriginGame,
                Language           = Language == 0 ? SAV.Language : Language,
                Ball               = Pokéball,
                Country            = SAV.Country,
                Region             = SAV.SubRegion,
                ConsoleRegion      = SAV.ConsoleRegion,
                Move1              = Move1, Move2 = Move2, Move3 = Move3, Move4 = Move4,
                Move1_PP           = PKX.getBasePP(Move1),
                Move2_PP           = PKX.getBasePP(Move2),
                Move3_PP           = PKX.getBasePP(Move3),
                Move4_PP           = PKX.getBasePP(Move4),
                RelearnMove1       = RelearnMove1, RelearnMove2 = RelearnMove2,
                RelearnMove3       = RelearnMove3, RelearnMove4 = RelearnMove4,
                Met_Location       = MetLocation,
                Met_Day            = (int)Day,
                Met_Month          = (int)Month,
                Met_Year           = (int)Year - 2000,
                Egg_Location       = EggLocation,
                CNT_Cool           = CNT_Cool,
                CNT_Beauty         = CNT_Beauty,
                CNT_Cute           = CNT_Cute,
                CNT_Smart          = CNT_Smart,
                CNT_Tough          = CNT_Tough,
                CNT_Sheen          = CNT_Sheen,

                OT_Name        = OT.Length > 0 ? OT : SAV.OT,
                OT_Gender      = OTGender != 3 ? OTGender % 2 : SAV.Gender,
                HT_Name        = OT.Length > 0 ? SAV.OT : "",
                HT_Gender      = OT.Length > 0 ? SAV.Gender : 0,
                CurrentHandler = OT.Length > 0 ? 1 : 0,

                EXP = PKX.getEXP(Level, Species),

                // Ribbons
                RIB2_6 = RIB0_3, // Country Ribbon
                RIB2_7 = RIB0_4, // National Ribbon

                RIB3_0 = RIB0_5, // Earth Ribbon
                RIB3_1 = RIB0_6, // World Ribbon
                RIB3_2 = RIB1_5, // Classic Ribbon
                RIB3_3 = RIB1_6, // Premier Ribbon
                RIB3_4 = RIB0_7, // Event Ribbon
                RIB3_5 = RIB1_1, // Birthday Ribbon
                RIB3_6 = RIB1_2, // Special Ribbon
                RIB3_7 = RIB1_3, // Souvenir Ribbon

                RIB4_0 = RIB1_4, // Wishing Ribbon
                RIB4_1 = RIB0_0, // Battle Champ Ribbon
                RIB4_2 = RIB0_1, // Regional Champ Ribbon
                RIB4_3 = RIB0_2, // National Champ Ribbon
                RIB4_4 = RIB1_0, // World Champ Ribbon

                OT_Friendship    = PKX.getBaseFriendship(Species),
                FatefulEncounter = true,
            };

            if (pk.CurrentHandler == 0) // OT
            {
                pk.OT_Memory    = 3;
                pk.OT_TextVar   = 9;
                pk.OT_Intensity = 1;
                pk.OT_Feeling   = Util.rand.Next(0, 9);
            }
            else
            {
                pk.HT_Memory     = 3;
                pk.HT_TextVar    = 9;
                pk.HT_Intensity  = 1;
                pk.HT_Feeling    = Util.rand.Next(0, 9);
                pk.HT_Friendship = pk.OT_Friendship;
            }
            pk.IsNicknamed = IsNicknamed;
            pk.Nickname    = IsNicknamed ? Nickname : PKX.getSpeciesName(Species, pk.Language);

            // More 'complex' logic to determine final values

            // Dumb way to generate random IVs.
            int[] finalIVs = new int[6];
            do
            {
                for (int i = 0; i < 6; i++)
                {
                    switch (IVs[i])
                    {
                    case 0xFE:
                        finalIVs[i] = 31;
                        break;

                    case 0xFF:
                        finalIVs[i] = (int)(Util.rnd32() & 0x1F);
                        break;

                    default:
                        finalIVs[i] = IVs[i];
                        break;
                    } // more than 3 definable IVs and not enough flawless IVs
                }
            } while (IVs.Count(r => r > 31) > 3 && finalIVs.Count(r => r == 31) < 3);
            pk.IVs = finalIVs;

            int av = 0;

            switch (AbilityType)
            {
            case 00:     // 0 - 0
            case 01:     // 1 - 1
            case 02:     // 2 - H
                av = AbilityType;
                break;

            case 03:     // 0/1
            case 04:     // 0/1/H
                av = (int)(Util.rnd32() % (AbilityType - 1));
                break;
            }
            pk.Ability       = PKX.Personal[PKX.Personal[Species].FormeIndex(Species, pk.AltForm)].Abilities[av];
            pk.AbilityNumber = 1 << av;

            switch (PIDType)
            {
            case 00:     // Specified
                pk.PID = PID;
                break;

            case 01:     // Random
                pk.PID = Util.rnd32();
                break;

            case 02:     // Random Shiny
                pk.PID = Util.rnd32();
                pk.PID = (uint)(((TID ^ SID ^ (PID & 0xFFFF)) << 16) + (PID & 0xFFFF));
                break;

            case 03:     // Random Nonshiny
                do
                {
                    pk.PID = Util.rnd32();
                } while ((uint)(((TID ^ SID ^ (PID & 0xFFFF)) << 16) + (PID & 0xFFFF)) < 16);
                break;
            }

            if (IsEgg)
            {
                pk.IsEgg     = true;
                pk.Egg_Day   = (int)Day;
                pk.Egg_Month = (int)Month;
                pk.Egg_Year  = (int)Year;
            }

            pk.RefreshChecksum();
            return(pk);
        }