Пример #1
0
        private void calcRTC(uint initialSeed, uint targetSeed, int minFrame, int maxFrame)
        {
            isSearching = true;

            var back = new XdRngR(targetSeed);

            back.GetNext32BitNumber(minFrame);
            targetSeed = back.Seed;

            var rng = new XdRng(initialSeed);

            int  seconds      = 0;
            int  secoundCount = 0;
            bool targetHit    = false;
            int  minutes      = 0;

            while (!targetHit)
            {
                searchText.Invoke((MethodInvoker)(() => searchText.Text = "Minutes added to RTC: " + minutes.ToString()));
                rng.Seed = initialSeed;

                for (int x = 0; x < maxFrame; x++)
                {
                    if (rng.GetNext32BitNumber() == targetSeed)
                    {
                        DateTime finalTime = date + new TimeSpan(0, 0, 0, seconds);
                        seedTime.Add(new RTCTime {
                            Time = finalTime.ToString(), Frame = x + 2 + minFrame, Seed = initialSeed.ToString("X8")
                        });
                        isSearching = false;

                        searchText.Invoke((MethodInvoker)(() => searchText.Text = "Finish. Awaiting command"));
                        dataGridViewValues.Invoke((MethodInvoker)(() => dataGridViewValues.DataSource = seedTime));
                        dataGridViewValues.Invoke((MethodInvoker)(() => dataGridViewValues.AutoResizeColumns()));
                        return;
                    }
                }

                initialSeed  += 40500000;
                seconds      += 1;
                secoundCount += 1;

                if (secoundCount == 60)
                {
                    minutes     += 1;
                    secoundCount = 0;
                }
            }
        }
Пример #2
0
        //Credits to amab for this
        private String calcProbable(uint seed)
        {
            String genlistout = (seed >> 30).ToString();
            uint   f          = seed >> 30;

            uint[] checker  = { 0, 0, 0, 0 };
            uint[] compare  = { 0, 1, 1, 1 };
            uint   backseed = seed;
            var    rng      = new XdRngR(backseed);
            uint   advance  = 8;
            bool   xCheck   = false;

            for (uint m = 0; m < 35; m++)
            {
                backseed   = rng.GetNext32BitNumber();
                genlistout = (backseed >> 30).ToString() + "|" + genlistout;

                if (m == (advance - 1))
                {
                    f          = backseed >> 30;
                    genlistout = " M: " + genlistout;
                }
            }

            String genlistend = genlistout.Substring(genlistout.Length - 7);
            int    intAdvance = 3;

            if (genlistend[0] == '0')
            {
                intAdvance = 7;
            }
            if (genlistend[2] == '0' && intAdvance == 3)
            {
                intAdvance = 5;
            }
            if (genlistend[4] == '0' && intAdvance == 3)
            {
                intAdvance = 3;
            }
            if (genlistend[6] == '0' && intAdvance == 3)
            {
                intAdvance = 3;
            }
            int mm = genlistout.IndexOf('M');

            genlistout = genlistout.Substring(0, mm + intAdvance) + "T:" + genlistout.Substring(mm + intAdvance);
            genlistout = genlistout.Substring(2);
            genlistout = genlistout.Replace("M:", "");
            genlistout = genlistout.Replace(" ", "");
            int    index         = genlistout.IndexOf(':') + 1;
            char   targetNum     = genlistout[index];
            String string2Search = genlistout.Substring(0, index);

            genlistend    = genlistout.Substring(index);
            string2Search = flip(string2Search);
            checker[int.Parse(targetNum.ToString())] = 1;
            for (int x = 0; x < string2Search.Length; x++)
            {
                if (!xCheck)
                {
                    if (string2Search[x] == '1' || string2Search[x] == '2' || string2Search[x] == '3')
                    {
                        if (string2Search[x] == targetNum)
                        {
                            if (checker[0] == 1 || checker[1] == 0 || checker[2] == 0 || checker[3] == 0)
                            {
                                string2Search = string2Search.Substring(0, x) + "XXX" + string2Search.Substring(x);
                                xCheck        = true;
                            }
                        }
                        else
                        {
                            checker[int.Parse(string2Search[x].ToString())] = 1;
                        }
                    }
                }
            }

            string2Search = flip(string2Search);
            genlistout    = string2Search + genlistend;

            return(genlistout);
        }
Пример #3
0
        //  We need a function to return a list of monster seeds,
        //  which will be updated to include a method.

        public static List <Seed> GetSeeds(
            uint hp,
            uint atk,
            uint def,
            uint spa,
            uint spd,
            uint spe,
            uint nature,
            uint tid,
            FrameType type)
        {
            var seeds = new List <Seed>();
            Dictionary <uint, uint> keys;
            var rng     = new PokeRngR(0);
            var forward = new XdRng(0);
            var back    = new XdRngR(0);

            uint first  = (hp | (atk << 5) | (def << 10)) << 16;
            uint second = (spe | (spa << 5) | (spd << 10)) << 16;

            uint pid1, pid2, pid, seed;

            uint search1, search2;

            ulong t, kmax;

            switch (type)
            {
            case FrameType.Method1:
                keys = new Dictionary <uint, uint>();
                for (uint i = 0; i < 256; i++)
                {
                    uint   right = (0x41c64e6d * i) + 0x6073;
                    ushort val   = (ushort)(right >> 16);

                    keys[val]   = i;
                    keys[--val] = i;
                }

                search1 = second - (first * 0x41c64e6d);
                search2 = second - ((first ^ 0x80000000) * 0x41c64e6d);
                for (uint cnt = 0; cnt < 256; ++cnt, search1 -= 0xc64e6d00, search2 -= 0xc64e6d00)
                {
                    uint test = search1 >> 16;

                    if (keys.ContainsKey(test))
                    {
                        rng.Seed = (first | (cnt << 8) | keys[test]);
                        if ((((rng.Seed * 0x41c64e6d) + 0x6073) & 0x7FFF0000) == second)
                        {
                            pid2 = rng.GetNext16BitNumber();
                            pid1 = rng.GetNext16BitNumber();
                            pid  = (pid1 << 16) | pid2;
                            seed = rng.GetNext32BitNumber();
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 1",
                                    Pid         = pid,
                                    MonsterSeed = seed,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }

                            pid ^= 0x80000000;
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 1",
                                    Pid         = pid,
                                    MonsterSeed = seed ^ 0x80000000,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }
                        }
                    }

                    test = search2 >> 16;

                    if (keys.ContainsKey(test))
                    {
                        rng.Seed = (first | (cnt << 8) | keys[test]);
                        if ((((rng.Seed * 0x41c64e6d) + 0x6073) & 0x7FFF0000) == second)
                        {
                            pid2 = rng.GetNext16BitNumber();
                            pid1 = rng.GetNext16BitNumber();
                            pid  = (pid1 << 16) | pid2;
                            seed = rng.GetNext32BitNumber();
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 1",
                                    Pid         = pid,
                                    MonsterSeed = seed,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }

                            pid ^= 0x80000000;
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 1",
                                    Pid         = pid,
                                    MonsterSeed = seed ^ 0x80000000,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }
                        }
                    }
                }

                break;

            case FrameType.Method2:
                keys = new Dictionary <uint, uint>();
                for (uint i = 0; i < 256; i++)
                {
                    uint   right = (0x41c64e6d * i) + 0x6073;
                    ushort val   = (ushort)(right >> 16);

                    keys[val]   = i;
                    keys[--val] = i;
                }

                search1 = second - (first * 0x41c64e6d);
                search2 = second - ((first ^ 0x80000000) * 0x41c64e6d);
                for (uint cnt = 0; cnt < 256; ++cnt, search1 -= 0xc64e6d00, search2 -= 0xc64e6d00)
                {
                    uint test = search1 >> 16;

                    if (keys.ContainsKey(test))
                    {
                        rng.Seed = (first | (cnt << 8) | keys[test]);
                        if ((((rng.Seed * 0x41c64e6d) + 0x6073) & 0x7FFF0000) == second)
                        {
                            rng.GetNext32BitNumber();
                            pid2 = rng.GetNext16BitNumber();
                            pid1 = rng.GetNext16BitNumber();
                            pid  = (pid1 << 16) | pid2;
                            seed = rng.GetNext32BitNumber();
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 2",
                                    Pid         = pid,
                                    MonsterSeed = seed,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }

                            pid ^= 0x80000000;
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 2",
                                    Pid         = pid,
                                    MonsterSeed = seed ^ 0x80000000,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }
                        }
                    }

                    test = search2 >> 16;

                    if (keys.ContainsKey(test))
                    {
                        rng.Seed = (first | (cnt << 8) | keys[test]);
                        if ((((rng.Seed * 0x41c64e6d) + 0x6073) & 0x7FFF0000) == second)
                        {
                            pid2 = rng.GetNext16BitNumber();
                            pid1 = rng.GetNext16BitNumber();
                            pid  = (pid1 << 16) | pid2;
                            seed = rng.GetNext32BitNumber();
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 2",
                                    Pid         = pid,
                                    MonsterSeed = seed,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }

                            pid ^= 0x80000000;
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 2",
                                    Pid         = pid,
                                    MonsterSeed = seed ^ 0x80000000,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }
                        }
                    }
                }

                break;

            case FrameType.Method4:
                keys = new Dictionary <uint, uint>();
                for (uint i = 0; i < 256; i++)
                {
                    uint   right = (0xc2a29a69 * i) + 0xe97e7b6a;
                    ushort val   = (ushort)(right >> 16);

                    keys[val]   = i;
                    keys[--val] = i;
                }

                search1 = second - (first * 0x41c64e6d);
                search2 = second - ((first ^ 0x80000000) * 0x41c64e6d);
                for (uint cnt = 0; cnt < 256; ++cnt, search1 -= 0xc64e6d00, search2 -= 0xc64e6d00)
                {
                    uint test = search1 >> 16;

                    if (keys.ContainsKey(test))
                    {
                        rng.Seed = (first | (cnt << 8) | keys[test]);
                        if ((((rng.Seed * 0x41c64e6d) + 0x6073) & 0x7FFF0000) == second)
                        {
                            pid2 = rng.GetNext16BitNumber();
                            pid1 = rng.GetNext16BitNumber();
                            pid  = (pid1 << 16) | pid2;
                            seed = rng.GetNext32BitNumber();
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 4",
                                    Pid         = pid,
                                    MonsterSeed = seed,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }

                            pid ^= 0x80000000;
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 4",
                                    Pid         = pid,
                                    MonsterSeed = seed ^ 0x80000000,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }
                        }
                    }

                    test = search2 >> 16;

                    if (keys.ContainsKey(test))
                    {
                        rng.Seed = (first | (cnt << 8) | keys[test]);
                        if ((((rng.Seed * 0x41c64e6d) + 0x6073) & 0x7FFF0000) == second)
                        {
                            pid2 = rng.GetNext16BitNumber();
                            pid1 = rng.GetNext16BitNumber();
                            pid  = (pid1 << 16) | pid2;
                            seed = rng.GetNext32BitNumber();
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 4",
                                    Pid         = pid,
                                    MonsterSeed = seed,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }

                            pid ^= 0x80000000;
                            if (pid % 25 == nature)
                            {
                                var newSeed = new Seed
                                {
                                    Method      = "Method 4",
                                    Pid         = pid,
                                    MonsterSeed = seed ^ 0x80000000,
                                    Sid         = (tid ^ pid1 ^ pid2)
                                };
                                seeds.Add(newSeed);
                            }
                        }
                    }
                }

                break;

            case FrameType.ColoXD:

                t    = (second - (0x343fd * first) - 0x259ec4) & 0xFFFFFFFF;
                kmax = (0x343fabc02 - t) / 0x80000000;

                for (ulong k = 0; k <= kmax; k++, t += 0x80000000)
                {
                    if ((t % 0x343fd) < 0x10000)
                    {
                        forward.Seed = back.Seed = (uint)(first | (t / 0x343fd));
                        forward.GetNext32BitNumber(2);
                        pid1 = forward.GetNext16BitNumber();
                        pid2 = forward.GetNext16BitNumber();
                        pid  = (pid1 << 16) | pid2;
                        seed = back.GetNext32BitNumber();
                        if (pid % 25 == nature)
                        {
                            var newSeed = new Seed
                            {
                                Method      = "Colosseum/XD",
                                Pid         = pid,
                                MonsterSeed = seed,
                                Sid         = (tid ^ pid1 ^ pid2)
                            };
                            seeds.Add(newSeed);
                        }

                        pid ^= 0x80008000;
                        if (pid % 25 == nature)
                        {
                            var newSeed = new Seed
                            {
                                Method      = "Colosseum/XD",
                                Pid         = pid,
                                MonsterSeed = seed ^ 0x80000000,
                                Sid         = (tid ^ pid1 ^ pid2)
                            };
                            seeds.Add(newSeed);
                        }
                    }
                }

                break;

            case FrameType.Channel:
                first = hp << 27;

                t    = ((spd << 27) - (0x284A930D * first) - 0x9A974C78) & 0xFFFFFFFF;
                kmax = ((0x142549847b56cf2 - t) / 0x100000000);

                for (uint k = 0; k <= kmax; k++, t += 0x100000000)
                {
                    if ((t % 0x284A930D) >= 0x8000000)
                    {
                        continue;
                    }

                    forward.Seed = back.Seed = first | (uint)(t / 0x284A930D);
                    if (forward.GetNext32BitNumber() >> 27 != atk)
                    {
                        continue;
                    }

                    if (forward.GetNext32BitNumber() >> 27 != def)
                    {
                        continue;
                    }

                    if (forward.GetNext32BitNumber() >> 27 != spe)
                    {
                        continue;
                    }

                    if (forward.GetNext32BitNumber() >> 27 != spa)
                    {
                        continue;
                    }

                    back.GetNext32BitNumber(3);
                    pid2 = back.GetNext16BitNumber();
                    pid1 = back.GetNext16BitNumber();
                    uint sid = back.GetNext16BitNumber();
                    pid = (pid1 << 16) | pid2;
                    if ((pid2 > 7 ? 0 : 1) != (pid1 ^ sid ^ 40122))
                    {
                        pid ^= 0x80000000;
                    }
                    if (pid % 25 == nature)
                    {
                        var newSeed = new Seed
                        {
                            Method      = "Channel",
                            Pid         = pid,
                            MonsterSeed = back.GetNext32BitNumber(),
                            Sid         = (tid ^ pid1 ^ pid2)
                        };
                        seeds.Add(newSeed);
                    }
                }

                break;
            }

            return(seeds);
        }