Ejemplo n.º 1
0
        private void createtimeline()
        {
            SFMT sfmt    = new SFMT((uint)Seed.Value);
            bool Isevent = Poke.SelectedIndex == 1;

            for (int i = 0; i < (int)Frame_min.Value; i++)
            {
                sfmt.NextUInt64();
            }

            List <DataGridViewRow> list = new List <DataGridViewRow>();

            DGV.Rows.Clear();

            var st      = CreateNPCStatus(sfmt);
            var setting = getSettings();
            var rng     = getRNGSettings();

            RNGSearch.ResetNPCStatus();
            RNGSearch.CreateBuffer(sfmt);

            if (Isevent)
            {
                e = geteventsetting();
            }

            int totaltime    = (int)TimeSpan.Value * 30;
            int frame        = (int)Frame_min.Value;
            int frameadvance = 0;

            for (int i = 0; i <= totaltime; i++)
            {
                RNGSearch.remain_frame = (int[])st.remain_frame.Clone();
                RNGSearch.blink_flag   = (bool[])st.blink_flag.Clone();

                RNGSearch.RNGResult result = Isevent ? rng.GenerateEvent(e) : rng.Generate();

                result.realtime = i;
                frameadvance    = st.NextState();
                frame          += frameadvance;

                for (int j = 0; j < frameadvance; j++)
                {
                    RNGSearch.Rand.RemoveAt(0);
                    RNGSearch.Rand.Add(sfmt.NextUInt64());
                }

                if (!frameMatch(result, setting))
                {
                    continue;
                }

                list.Add(getRow_Sta(frame - frameadvance, rng, result, DGV));

                if (list.Count > 100000)
                {
                    break;
                }
            }
            DGV.Rows.AddRange(list.ToArray());
            DGV.CurrentCell = null;
        }
Ejemplo n.º 2
0
        private void StationarySearch()
        {
            int max, min;

            if (AroundTarget.Checked)
            {
                min = (int)Time_max.Value - 100;
                max = (int)Time_max.Value + 100;
            }
            else
            {
                min = (int)Frame_min.Value;
                max = (int)Frame_max.Value;
            }

            bool Isevent = Poke.SelectedIndex == 1;

            SFMT sfmt = new SFMT((uint)Seed.Value);
            List <DataGridViewRow> list = new List <DataGridViewRow>();

            DGV.Rows.Clear();

            var setting = getSettings();
            var rng     = getRNGSettings();

            //Blink flag history
            int blink_flag  = 0;
            int UnsafeRange = 41 * (int)NPC.Value;

            if (UnsafeRange == 0)
            {
                for (int i = 0; i < min - 2; i++)
                {
                    sfmt.NextUInt64();
                }
                for (int i = 0; i < 2; i++)
                {
                    switch (blink_flag)
                    {
                    case 0:
                        if ((sfmt.NextUInt64() & 0x7F) == 0)
                        {
                            blink_flag = 1;
                        }
                        break;

                    case 1:
                        blink_flag = (sfmt.NextUInt64() % 3) == 0 ? 36 : 30; break;
                    }
                }
            }
            else if (!Honey.Checked)
            {
                for (int i = 0; i < Math.Max(418, min - UnsafeRange); i++)
                {
                    sfmt.NextUInt64();
                }
                for (int i = Math.Max(418, min - UnsafeRange); i < min; i++)
                {
                    if ((sfmt.NextUInt64() & 0x7F) == 0)
                    {
                        blink_flag = UnsafeRange;
                    }
                    else
                    if (blink_flag > 0)
                    {
                        blink_flag--;
                    }
                }
            }
            else
            {
                for (int i = 0; i < min; i++)
                {
                    sfmt.NextUInt64();
                }
            }

            RNGSearch.CreateBuffer(sfmt);

            if (Isevent)
            {
                e = geteventsetting();
            }

            for (int i = min; i <= max; i++, RNGSearch.Rand.RemoveAt(0), RNGSearch.Rand.Add(sfmt.NextUInt64()))
            {
                RNGSearch.RNGResult result = Isevent ? rng.GenerateEvent(e) : rng.Generate();

                if (NPC.Value == 0)
                {
                    switch (blink_flag)
                    {
                    case 0:
                        if (result.Blink == 1)
                        {
                            blink_flag = 1;
                        }
                        break;

                    case 1:
                        blink_flag = (result.row_r % 3) == 0 ? 36 : 30; result.Blink = 5; break;

                    default:
                        result.Blink = blink_flag; blink_flag = 0; break;
                    }
                }
                else if (!Honey.Checked)
                {
                    if (result.Blink == 1)
                    {
                        if (blink_flag > 0)
                        {
                            result.Blink = -2;
                        }
                        blink_flag = UnsafeRange;
                    }
                    else if (blink_flag > 0)
                    {
                        blink_flag--;
                        result.Blink = -1;
                    }
                }

                if (!frameMatch(result, setting))
                {
                    continue;
                }

                list.Add(getRow_Sta(i, rng, result, DGV));

                if (list.Count > 100000)
                {
                    break;
                }
            }
            DGV.Rows.AddRange(list.ToArray());
            DGV.CurrentCell = null;
        }