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; }
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; }