private void buttonCheck_Click(object sender, EventArgs e) { uint hp = 0; uint atk = 0; uint def = 0; uint spa = 0; uint spd = 0; uint spe = 0; uint level = 1; var pokemon = (Pokemon) comboBoxPokemon.SelectedValue; var nature = (Nature) comboBoxNature.SelectedValue; if (maskedTextBoxHP.Text != "") hp = uint.Parse(maskedTextBoxHP.Text); if (maskedTextBoxAtk.Text != "") atk = uint.Parse(maskedTextBoxAtk.Text); if (maskedTextBoxDef.Text != "") def = uint.Parse(maskedTextBoxDef.Text); if (maskedTextBoxSpA.Text != "") spa = uint.Parse(maskedTextBoxSpA.Text); if (maskedTextBoxSpD.Text != "") spd = uint.Parse(maskedTextBoxSpD.Text); if (maskedTextBoxSpe.Text != "") spe = uint.Parse(maskedTextBoxSpe.Text); if (maskedTextBoxLevel.Text != "") level = uint.Parse(maskedTextBoxLevel.Text); var stats = new[] {hp, atk, def, spa, spd, spe}; Characteristic characteristic = null; if (comboBoxCharacteristic.SelectedItem.ToString() != "NONE") { characteristic = (Characteristic) comboBoxCharacteristic.SelectedItem; } var ivCheck = new IVCheck(pokemon, level, nature, characteristic, stats); minstats = new uint[6]; maxstats = new uint[6]; for (int statCount = 0; statCount < 6; statCount++) { if (ivCheck.Possibilities[statCount].Count == 0) { buttonOk.Enabled = false; break; } minstats[statCount] = ivCheck.Possibilities[statCount][0]; maxstats[statCount] = ivCheck.Possibilities[statCount][ivCheck.Possibilities[statCount].Count - 1]; buttonOk.Enabled = true; } // Get the results back and display them to the user textBoxResults.Text = ivCheck.ToString(); }
private void buttonFind_Stat_Click(object sender, EventArgs e) { uint year_stat = 0; uint month_stat = 1; uint date_stat = 1; uint hours_stat = 0; uint minutes_stat = 0; uint hp = 0; uint atk = 0; uint def = 0; uint spa = 0; uint spd = 0; uint spe = 0; uint level = 1; var pokemon = (Pokemon) comboBoxPokemon_Stat.SelectedValue; var nature = (Nature) comboBoxNature_Stat.SelectedValue; if (maskedTextBoxHP_Stat.Text != "") hp = uint.Parse(maskedTextBoxHP_Stat.Text); if (maskedTextBoxAtk_Stat.Text != "") atk = uint.Parse(maskedTextBoxAtk_Stat.Text); if (maskedTextBoxDef_Stat.Text != "") def = uint.Parse(maskedTextBoxDef_Stat.Text); if (maskedTextBoxSpA_Stat.Text != "") spa = uint.Parse(maskedTextBoxSpA_Stat.Text); if (maskedTextBoxSpD_Stat.Text != "") spd = uint.Parse(maskedTextBoxSpD_Stat.Text); if (maskedTextBoxSpe_Stat.Text != "") spe = uint.Parse(maskedTextBoxSpe_Stat.Text); if (maskedTextBoxLevel_Stat.Text != "") level = uint.Parse(maskedTextBoxLevel_Stat.Text); if (maskedTextBoxYear_Stat.Text != "") year_stat = uint.Parse(maskedTextBoxYear_Stat.Text); if (maskedTextBoxMonth_Stat.Text != "") month_stat = uint.Parse(maskedTextBoxMonth_Stat.Text); if (maskedTextBoxDate_Stat.Text != "") date_stat = uint.Parse(maskedTextBoxDate_Stat.Text); if (maskedTextBoxHours_Stat.Text != "") hours_stat = uint.Parse(maskedTextBoxHours_Stat.Text); if (maskedTextBoxMinutes_Stat.Text != "") minutes_stat = uint.Parse(maskedTextBoxMinutes_Stat.Text); bool showMonster = checkBoxShowMonster.Checked; var stats = new[] {hp, atk, def, spa, spd, spe}; Characteristic characteristic = null; if (comboBoxCharacteristic_Stat.SelectedItem.ToString() != "NONE") { characteristic = (Characteristic) comboBoxCharacteristic_Stat.SelectedItem; } // Run the IV checker with the stats and monster information // that were entered into the intial seed finder, var ivCheck = new IVCheck(pokemon, level, nature, characteristic, stats); // If there are any invalid IVs we need to notify the user // what we may not proceed. if (!ivCheck.IsValid) { MessageBox.Show( "There was a problem with the stats/nature/Pokemon you have entered. Please check them and try again. " + Environment.NewLine + Environment.NewLine + ivCheck, "Invalid Stats"); } else { uint minDefaultDelay = 550; if (radioButton_SS_HGSS.Checked) minDefaultDelay = 400; uint maxDefaultDelay = 1200; if (maskedTextBoxMinDelay_Stat.Text != "" && radioButton_SS_CUSTOM.Checked) minDefaultDelay = uint.Parse(maskedTextBoxMinDelay_Stat.Text); if (maskedTextBoxMaxDelay_Stat.Text != "" && radioButton_SS_CUSTOM.Checked) maxDefaultDelay = uint.Parse(maskedTextBoxMaxDelay_Stat.Text); int combinations = ivCheck.Possibilities[0].Count* ivCheck.Possibilities[1].Count* ivCheck.Possibilities[2].Count* ivCheck.Possibilities[3].Count* ivCheck.Possibilities[4].Count* ivCheck.Possibilities[5].Count; // If there are too many different combinations we need // to notify the user that they may not proceed. if (combinations > 100) { MessageBox.Show( "There were too many combinations of IV possibilities to accurately find your intitial seed (" + combinations + ") please try with a higher level Pokemon,", "To many IV Combinations"); } else { var allSeeds = new List<Seed>(); // Iterate through all of the combinations of IVs and check // so something good, first using the IvToPID. foreach (uint combo_HP in ivCheck.Possibilities[0]) foreach (uint combo_Atk in ivCheck.Possibilities[1]) foreach (uint combo_Def in ivCheck.Possibilities[2]) foreach (uint combo_SpA in ivCheck.Possibilities[3]) foreach (uint combo_SpD in ivCheck.Possibilities[4]) foreach (uint combo_Spe in ivCheck.Possibilities[5]) { List<Seed> startingSeeds = IVtoSeed.GetSeeds( combo_HP, combo_Atk, combo_Def, combo_SpA, combo_SpD, combo_Spe, (uint) nature.Number, 0); allSeeds.AddRange(startingSeeds); } // We now have a complete list of starting seeds so we can run the // same logic that we normally run here, but we might want to tone // down how much we actually search. // Now that we have developed a list of possible seeds we need to // start working those backwards and then building a list of // initial seeds that may have been possible. var seeds = new List<SeedInitial>(); bool monsterFound = false; bool initialFound = false; foreach (Seed seed in allSeeds) { if (seed.FrameType == FrameType.Method1) { if (showMonster) { seeds.Add(new SeedInitial(seed.MonsterSeed, 0, "Monster", 0, 0)); } monsterFound = true; // start backing up, we are going to back up // a grand totol of 10,000 times max for the // time being, var rng = new PokeRngR(seed.MonsterSeed); // back to 500 for (uint backCount = 1; backCount < 500; backCount++) { uint testSeed = rng.Seed; rng.GetNext32BitNumber(); uint seedAB = testSeed >> 24; uint seedCD = (testSeed & 0x00FF0000) >> 16; uint seedEFGH = testSeed & 0x0000FFFF; if (seedEFGH > (minDefaultDelay + year_stat - 2000) && seedEFGH < (maxDefaultDelay + year_stat - 2000)) { // Disqualify on hours second as it is very likely // to be a poor choice for use to work with. //wfy back to exact hour if (seedCD == hours_stat) { for (uint secondsCount = 0; secondsCount < 60; secondsCount++) { if (((month_stat*date_stat + minutes_stat + secondsCount)%0x100) == seedAB) { var initialSeed = new SeedInitial( testSeed, backCount, "Initial", secondsCount, seedEFGH - (year_stat - 2000)); seeds.Add(initialSeed); initialFound = true; } } } } } } } dataGridViewValues_Stat.DataSource = seeds; if (!monsterFound) { MessageBox.Show("No matches found for the IVs entered. Please check and try again.", "No Data Found", MessageBoxButtons.OK); } else if (!initialFound) { MessageBox.Show("No reasonable initial seed found. Please check your DATE and TIME.", "No Data Found", MessageBoxButtons.OK); } // Save our information for the next run Settings.Default.YearS = year_stat.ToString(); Settings.Default.MonthS = month_stat.ToString(); Settings.Default.DateS = date_stat.ToString(); Settings.Default.MinutesS = minutes_stat.ToString(); Settings.Default.HoursS = hours_stat.ToString(); if (maskedTextBoxMinDelay_Stat.Text != "" && radioButton_SIV_CUSTOM.Checked) { minDefaultDelay = uint.Parse(maskedTextBoxMinDelay_Stat.Text); Settings.Default.DelayMinS = minDefaultDelay.ToString(); } if (maskedTextBoxMaxDelay_Stat.Text != "" && radioButton_SIV_CUSTOM.Checked) { maxDefaultDelay = uint.Parse(maskedTextBoxMaxDelay_Stat.Text); Settings.Default.DelayMaxS = maxDefaultDelay.ToString(); } string SS_Mode = "DPP"; if (radioButton_SS_DPP.Checked) { SS_Mode = "DPP"; } else if (radioButton_SS_HGSS.Checked) { SS_Mode = "HGSS"; } else if (radioButton_SS_CUSTOM.Checked) { SS_Mode = "CUSTOM"; } Settings.Default.SSMode = SS_Mode; Settings.Default.Save(); } } }
private void buttonCheck_Click(object sender, EventArgs e) { uint hp = 0; uint atk = 0; uint def = 0; uint spa = 0; uint spd = 0; uint spe = 0; uint level = 1; var pokemon = (Pokemon) comboBoxPokemon.SelectedValue; var nature = (Nature) comboBoxNature.SelectedValue; if (maskedTextBoxHP.Text != "") hp = uint.Parse(maskedTextBoxHP.Text); if (maskedTextBoxAtk.Text != "") atk = uint.Parse(maskedTextBoxAtk.Text); if (maskedTextBoxDef.Text != "") def = uint.Parse(maskedTextBoxDef.Text); if (maskedTextBoxSpA.Text != "") spa = uint.Parse(maskedTextBoxSpA.Text); if (maskedTextBoxSpD.Text != "") spd = uint.Parse(maskedTextBoxSpD.Text); if (maskedTextBoxSpe.Text != "") spe = uint.Parse(maskedTextBoxSpe.Text); if (maskedTextBoxLevel.Text != "") level = uint.Parse(maskedTextBoxLevel.Text); var stats = new[] {hp, atk, def, spa, spd, spe}; Characteristic characteristic = null; if (comboBoxCharacteristic.SelectedItem.ToString() != "NONE") { characteristic = (Characteristic) comboBoxCharacteristic.SelectedItem; } var ivCheck = new IVCheck(pokemon, level, nature, characteristic, stats); // Get the results back and display them to the user textBoxResults.Text = ivCheck.ToString(); }