예제 #1
0
        private void saveFields()
        {
            // Save Region & Country Data
            pkm.Geo1_Region  = WinFormsUtil.getIndex(CB_Region0);
            pkm.Geo2_Region  = WinFormsUtil.getIndex(CB_Region1);
            pkm.Geo3_Region  = WinFormsUtil.getIndex(CB_Region2);
            pkm.Geo4_Region  = WinFormsUtil.getIndex(CB_Region3);
            pkm.Geo5_Region  = WinFormsUtil.getIndex(CB_Region4);
            pkm.Geo1_Country = WinFormsUtil.getIndex(CB_Country0);
            pkm.Geo2_Country = WinFormsUtil.getIndex(CB_Country1);
            pkm.Geo3_Country = WinFormsUtil.getIndex(CB_Country2);
            pkm.Geo4_Country = WinFormsUtil.getIndex(CB_Country3);
            pkm.Geo5_Country = WinFormsUtil.getIndex(CB_Country4);

            // Save 0-255 stats
            pkm.HT_Friendship = Util.ToInt32(M_CT_Friendship.Text);
            pkm.HT_Affection  = Util.ToInt32(M_CT_Affection.Text);
            pkm.OT_Friendship = Util.ToInt32(M_OT_Friendship.Text);
            pkm.OT_Affection  = Util.ToInt32(M_OT_Affection.Text);
            pkm.Fullness      = (byte)Util.ToInt32(M_Fullness.Text);
            pkm.Enjoyment     = (byte)Util.ToInt32(M_Enjoyment.Text);

            // Save Memories
            pkm.HT_Memory    = WinFormsUtil.getIndex(CB_CTMemory);
            pkm.HT_TextVar   = CB_CTVar.Enabled ? WinFormsUtil.getIndex(CB_CTVar) : 0;
            pkm.HT_Intensity = CB_CTFeel.Enabled ? CB_CTQual.SelectedIndex + 1 : 0;
            pkm.HT_Feeling   = CB_CTFeel.Enabled ? CB_CTFeel.SelectedIndex : 0;

            pkm.OT_Memory    = WinFormsUtil.getIndex(CB_OTMemory);
            pkm.OT_TextVar   = CB_OTVar.Enabled ? WinFormsUtil.getIndex(CB_OTVar) : 0;
            pkm.OT_Intensity = CB_OTFeel.Enabled ? CB_OTQual.SelectedIndex + 1 : 0;
            pkm.OT_Feeling   = CB_OTFeel.Enabled ? CB_OTFeel.SelectedIndex : 0;

            Main.pkm = pkm;
        }
예제 #2
0
        private string getMemoryString(ComboBox m, ComboBox arg, ComboBox q, ComboBox f, string tr)
        {
            string result;
            string nn  = pkm.Nickname;
            string a   = (ComboItem)arg.SelectedItem == null ? arg.Text ?? "ERROR" : ((ComboItem)arg.SelectedItem).Text;
            int    mem = WinFormsUtil.getIndex(m);

            bool enabled = false;

            if (mem == 0)
            {
                result = GameInfo.Strings.memories[38];
            }
            else
            {
                result  = string.Format(GameInfo.Strings.memories[mem + 38], nn, tr, a, f.Text, q.Text);
                enabled = true;
            }

            // Show labels if the memory allows for them.
            if (q == CB_CTQual)
            {
                L_CT_Quality.Visible = L_CT_Feeling.Visible = enabled;
            }
            else
            {
                L_OT_Quality.Visible = L_OT_Feeling.Visible = enabled;
            }

            // Show Quality and Feeling.
            q.Visible = q.Enabled = f.Visible = f.Enabled = enabled;

            return(result);
        }
예제 #3
0
        private void B_ApplyTrash_Click(object sender, EventArgs e)
        {
            string species = PKX.getSpeciesNameGeneration(WinFormsUtil.getIndex(CB_Species),
                                                          WinFormsUtil.getIndex(CB_Language), (int)NUD_Generation.Value);

            if (species == "") // no result
            {
                species = CB_Species.Text;
            }

            byte[] current = PKX.setString(TB_Text.Text, Main.SAV.Generation, Main.SAV.Japanese, bigendian, Raw.Length, Main.SAV.Language);
            byte[] data    = PKX.setString(species, Main.SAV.Generation, Main.SAV.Japanese, bigendian, Raw.Length, Main.SAV.Language);
            if (data.Length <= current.Length)
            {
                WinFormsUtil.Alert("Trash byte layer is hidden by current text.",
                                   $"Current Bytes: {current.Length}" + Environment.NewLine + $"Layer Bytes: {data.Length}");
                return;
            }
            if (data.Length > Bytes.Count)
            {
                WinFormsUtil.Alert("Trash byte layer is too long to apply.");
                return;
            }
            for (int i = current.Length; i < data.Length; i++)
            {
                Bytes[i].Value = data[i];
            }
        }
예제 #4
0
        private void updateSpecies(object sender, EventArgs e)
        {
            // Get Forms for Given Species
            setForms();

            // Check for Gender Changes
            // Get Gender Threshold
            int gt = SAV.Personal[WinFormsUtil.getIndex(CB_Species)].Gender;

            if (gt == 255)      // Genderless
            {
                genderflag = 2;
            }
            else if (gt == 254) // Female Only
            {
                genderflag = 1;
            }
            else if (gt == 0) // Male Only
            {
                genderflag = 0;
            }

            setGenderLabel();
            setAbilityList();
        }
예제 #5
0
 private void updateCountry(object sender, EventArgs e)
 {
     if (WinFormsUtil.getIndex(sender as ComboBox) > 0)
     {
         Main.setCountrySubRegion(CB_Region, "sr_" + WinFormsUtil.getIndex(sender as ComboBox).ToString("000"));
     }
 }
예제 #6
0
        private void saveFavPKM()
        {
            if (loading || !GB_PKM.Enabled)
            {
                return;
            }
            int index = currentpkm;

            byte[] pkm = new byte[0x34];

            BitConverter.GetBytes(Util.getHEXval(TB_EC.Text)).CopyTo(pkm, 0);
            BitConverter.GetBytes((ushort)WinFormsUtil.getIndex(CB_Species)).CopyTo(pkm, 8);
            BitConverter.GetBytes((ushort)WinFormsUtil.getIndex(CB_HeldItem)).CopyTo(pkm, 0xA);
            pkm[0xC]  = (byte)Array.IndexOf(abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
            pkm[0xD]  = (byte)(CB_Ability.SelectedIndex << 1);
            pkm[0x14] = (byte)WinFormsUtil.getIndex(CB_Nature);

            int fegform = 0;

            fegform  += PKX.getGender(Label_Gender.Text) << 1;
            fegform  += CB_Form.SelectedIndex << 3;
            pkm[0x15] = (byte)fegform;

            pkm[0x16] = (byte)Math.Min(Convert.ToInt32(TB_HPEV.Text), 252);
            pkm[0x17] = (byte)Math.Min(Convert.ToInt32(TB_ATKEV.Text), 252);
            pkm[0x18] = (byte)Math.Min(Convert.ToInt32(TB_DEFEV.Text), 252);
            pkm[0x19] = (byte)Math.Min(Convert.ToInt32(TB_SPAEV.Text), 252);
            pkm[0x1A] = (byte)Math.Min(Convert.ToInt32(TB_SPDEV.Text), 252);
            pkm[0x1B] = (byte)Math.Min(Convert.ToInt32(TB_SPEEV.Text), 252);

            BitConverter.GetBytes((ushort)WinFormsUtil.getIndex(CB_Move1)).CopyTo(pkm, 0x1C);
            BitConverter.GetBytes((ushort)WinFormsUtil.getIndex(CB_Move2)).CopyTo(pkm, 0x1E);
            BitConverter.GetBytes((ushort)WinFormsUtil.getIndex(CB_Move3)).CopyTo(pkm, 0x20);
            BitConverter.GetBytes((ushort)WinFormsUtil.getIndex(CB_Move4)).CopyTo(pkm, 0x22);

            pkm[0x24] = (byte)CB_PPu1.SelectedIndex;
            pkm[0x25] = (byte)CB_PPu2.SelectedIndex;
            pkm[0x26] = (byte)CB_PPu3.SelectedIndex;
            pkm[0x27] = (byte)CB_PPu4.SelectedIndex;

            pkm[0x28] = (byte)(Convert.ToByte(TB_HPIV.Text) & 0x1F);
            pkm[0x29] = (byte)(Convert.ToByte(TB_ATKIV.Text) & 0x1F);
            pkm[0x2A] = (byte)(Convert.ToByte(TB_DEFIV.Text) & 0x1F);
            pkm[0x2B] = (byte)(Convert.ToByte(TB_SPAIV.Text) & 0x1F);
            pkm[0x2C] = (byte)(Convert.ToByte(TB_SPDIV.Text) & 0x1F);
            pkm[0x2D] = (byte)(Convert.ToByte(TB_SPEIV.Text) & 0x1F);
            int shiny = (CHK_Shiny.Checked? 1 : 0) << 6;

            pkm[0x2D] |= (byte)shiny;

            pkm[0x2E] = Convert.ToByte(TB_Friendship.Text);
            pkm[0x2F] = (byte)WinFormsUtil.getIndex(CB_Ball);
            pkm[0x30] = Convert.ToByte(TB_Level.Text);

            for (int i = 0; i < 0x34; i++) // Copy data back to storage.
            {
                pkmdata[index - 1, i] = pkm[i];
            }
        }
예제 #7
0
 private void CB_Multi_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (editing)
     {
         return;
     }
     SAV.MultiplayerSpriteID = WinFormsUtil.getIndex(CB_MultiplayerSprite);
     PB_Sprite.Image         = SAV.Sprite();
 }
예제 #8
0
        private void updateShiny(object sender, EventArgs e)
        {
            if (!editing)
            {
                return; //Don't do writing until loaded
            }
            bpkx.Image = PKMUtil.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked);

            Write_Entry(null, null);
        }
예제 #9
0
        private void changeRecordSpecies(object sender, EventArgs e)
        {
            int index = listBox1.SelectedIndex;

            if (index < 0)
            {
                return;
            }
            BitConverter.GetBytes(WinFormsUtil.getIndex(CB_Species)).CopyTo(SAV.Data, offsetSpec + 4 * index);
        }
예제 #10
0
        private void setForms()
        {
            int  species = WinFormsUtil.getIndex(CB_Species);
            bool hasForms = PersonalTable.AO[species].HasFormes || new[] { 664, 665, 414 }.Contains(species);

            CB_Form.Enabled = CB_Form.Visible = hasForms;

            CB_Form.DisplayMember = "Text";
            CB_Form.ValueMember   = "Value";
            CB_Form.DataSource    = PKX.getFormList(species, GameInfo.Strings.types, GameInfo.Strings.forms, Main.gendersymbols).ToList();
        }
예제 #11
0
        private void Label_Gender_Click(object sender, EventArgs e)
        {
            // Get Gender Threshold
            int gt = SAV.Personal[WinFormsUtil.getIndex(CB_Species)].Gender;

            if (gt == 255 || gt == 0 || gt == 254) // Single gender/genderless
            {
                return;
            }

            if (gt < 256) // If not a single gender(less) species:
            {
                Label_Gender.Text = Main.gendersymbols[PKX.getGender(Label_Gender.Text) ^ 1];
            }
        }
예제 #12
0
        private void changeCountryIndex(object sender, EventArgs e)
        {
            int index = Array.IndexOf(cba, sender);

            if (WinFormsUtil.getIndex(sender as ComboBox) > 0)
            {
                Main.setCountrySubRegion(mta[index], "sr_" + WinFormsUtil.getIndex(sender as ComboBox).ToString("000"));
                mta[index].Enabled = true;
            }
            else
            {
                mta[index].DataSource    = new[] { new { Text = "", Value = 0 } };
                mta[index].Enabled       = false;
                mta[index].SelectedValue = 0;
            }
        }
예제 #13
0
        private void updateGender(object sender, EventArgs e)
        {
            // Get Gender Threshold
            int species = WinFormsUtil.getIndex(CB_Species);
            int gt      = SAV.Personal[species].Gender;

            if (gt == 255)
            {
                Label_Gender.Text = gendersymbols[2];
            }
            else if (gt == 254)
            {
                Label_Gender.Text = gendersymbols[1];
            }
            else if (gt == 0)
            {
                Label_Gender.Text = gendersymbols[0];
            }

            if (gt == 255 || gt == 0 || gt == 254) // Single gender/genderless abort
            {
                return;
            }

            if (gt < 256) // If not a single gender(less) species:
            {
                Label_Gender.Text = PKX.getGender(Label_Gender.Text) == 0 ? gendersymbols[1] : gendersymbols[0];

                if (PKX.getGender(CB_Form.Text) == 0 && Label_Gender.Text != gendersymbols[0])
                {
                    CB_Form.SelectedIndex = 1;
                }
                else if (PKX.getGender(CB_Form.Text) == 1 && Label_Gender.Text != gendersymbols[1])
                {
                    CB_Form.SelectedIndex = 0;
                }
            }

            if (species == 668)
            {
                CB_Form.SelectedIndex = PKX.getGender(Label_Gender.Text);
            }

            Write_Entry(null, null);
        }
예제 #14
0
        private void B_Close_Click(object sender, EventArgs e)
        {
            int ofs = SAV.HoF;

            SAV.Data[ofs] &= 0xFE;
            SAV.Data[ofs] |= (byte)(CHK_Flag.Checked ? 1 : 0);
            BitConverter.GetBytes((ushort)NUD_Count.Value).CopyTo(SAV.Data, ofs + 2);
            for (int i = 0; i < entries.Length; i++)
            {
                int o   = ofs + 4 + i * 2;
                var cb  = entries[i];
                var val = WinFormsUtil.getIndex(cb);
                BitConverter.GetBytes((ushort)val).CopyTo(SAV.Data, o);
            }
            SAV.Data.CopyTo(Main.SAV.Data, 0);
            Main.SAV.Edited = true;
            Close();
        }
예제 #15
0
        private void setAbilityList()
        {
            int newabil = Convert.ToInt16(MT_AbilNo.Text) >> 1;
            int species = WinFormsUtil.getIndex(CB_Species);
            int formnum = CB_Form.SelectedIndex;

            int[] abils = PersonalTable.AO.getAbilities(species, formnum);

            // Build Ability List
            List <string> ability_list = new List <string>
            {
                abilitylist[abils[0]] + " (1)",
                abilitylist[abils[1]] + " (2)",
                abilitylist[abils[2]] + " (H)"
            };

            CB_Ability.DataSource = ability_list;

            CB_Ability.SelectedIndex = newabil < 3 ? newabil : 0;
        }
예제 #16
0
        private void B_Save_Click(object sender, EventArgs e)
        {
            // Copy Bags
            byte[] bagarray   = new byte[12];
            int    emptyslots = 0;

            for (int i = 0; i < 12; i++)
            {
                string bag = dataGridView1.Rows[i].Cells[1].Value.ToString();
                if (Array.IndexOf(trba, bag) == 0)
                {
                    emptyslots++;
                    continue;
                }
                bagarray[i - emptyslots] = (byte)Array.IndexOf(trba, bag);
            }
            try { BitConverter.GetBytes(float.Parse(TB_Time1.Text)).CopyTo(SAV.Data, offsetTime + 4 * 30); } catch { }
            try { BitConverter.GetBytes(float.Parse(TB_Time2.Text)).CopyTo(SAV.Data, offsetTime + 4 * 31); } catch { }
            BitConverter.GetBytes((ushort)WinFormsUtil.getIndex(CB_S2)).CopyTo(SAV.Data, offsetSpec + 4 * 30);
            bagarray.CopyTo(SAV.Data, SAV.SuperTrain + 0x308);
            Array.Copy(SAV.Data, Main.SAV.Data, Main.SAV.Data.Length);
            Main.SAV.Edited = true;
            Close();
        }
예제 #17
0
        private void updateNickname(object sender, EventArgs e)
        {
            if (!CHK_Nicknamed.Checked)
            {
                // Fetch Current Species and set it as Nickname Text
                int species = WinFormsUtil.getIndex(CB_Species);
                if (species == 0 || species > 721)
                {
                    TB_Nickname.Text = "";
                }
                else
                {
                    try
                    {
                        // get language
                        TB_Nickname.Text = PKX.getSpeciesNameGeneration(species, SAV.Language, 6);
                    }
                    catch { }
                }
            }
            TB_Nickname.ReadOnly = !CHK_Nicknamed.Checked;

            Write_Entry(null, null);
        }
예제 #18
0
 private void B_OK_Click(object sender, EventArgs e)
 {
     Result = (GameVersion)WinFormsUtil.getIndex(CB_Game);
     Close();
 }
예제 #19
0
        // View Updates
        private void B_Search_Click(object sender, EventArgs e)
        {
            // Populate Search Query Result
            IEnumerable <PKM> res = RawDB;

            int format = MAXFORMAT + 1 - CB_Format.SelectedIndex;

            switch (CB_FormatComparator.SelectedIndex)
            {
            case 0: /* Do nothing */ break;

            case 1: res = res.Where(pk => pk.Format >= format); break;

            case 2: res = res.Where(pk => pk.Format == format); break;

            case 3: res = res.Where(pk => pk.Format <= format); break;
            }
            if (CB_FormatComparator.SelectedIndex != 0)
            {
                if (format <= 2) // 1-2
                {
                    res = res.Where(pk => pk.Format <= 2);
                }
                if (format >= 3 && format <= 6) // 3-6
                {
                    res = res.Where(pk => pk.Format >= 3);
                }
                if (format >= 7) // 1,3-6,7
                {
                    res = res.Where(pk => pk.Format != 2);
                }
            }

            switch (CB_Generation.SelectedIndex)
            {
            case 0: /* Do nothing */ break;

            case 1: res = res.Where(pk => pk.Gen7); break;

            case 2: res = res.Where(pk => pk.Gen6); break;

            case 3: res = res.Where(pk => pk.Gen5); break;

            case 4: res = res.Where(pk => pk.Gen4); break;

            case 5: res = res.Where(pk => pk.Gen3); break;
            }

            // Primary Searchables
            int species = WinFormsUtil.getIndex(CB_Species);
            int ability = WinFormsUtil.getIndex(CB_Ability);
            int nature  = WinFormsUtil.getIndex(CB_Nature);
            int item    = WinFormsUtil.getIndex(CB_HeldItem);

            if (species != -1)
            {
                res = res.Where(pk => pk.Species == species);
            }
            if (ability != -1)
            {
                res = res.Where(pk => pk.Ability == ability);
            }
            if (nature != -1)
            {
                res = res.Where(pk => pk.Nature == nature);
            }
            if (item != -1)
            {
                res = res.Where(pk => pk.HeldItem == item);
            }

            // Secondary Searchables
            int move1 = WinFormsUtil.getIndex(CB_Move1);
            int move2 = WinFormsUtil.getIndex(CB_Move2);
            int move3 = WinFormsUtil.getIndex(CB_Move3);
            int move4 = WinFormsUtil.getIndex(CB_Move4);

            if (move1 != -1)
            {
                res = res.Where(pk => pk.Moves.Contains(move1));
            }
            if (move2 != -1)
            {
                res = res.Where(pk => pk.Moves.Contains(move2));
            }
            if (move3 != -1)
            {
                res = res.Where(pk => pk.Moves.Contains(move3));
            }
            if (move4 != -1)
            {
                res = res.Where(pk => pk.Moves.Contains(move4));
            }
            int vers = WinFormsUtil.getIndex(CB_GameOrigin);

            if (vers != -1)
            {
                res = res.Where(pk => pk.Version == vers);
            }
            int hptype = WinFormsUtil.getIndex(CB_HPType);

            if (hptype != -1)
            {
                res = res.Where(pk => pk.HPType == hptype);
            }
            if (CHK_Shiny.CheckState == CheckState.Checked)
            {
                res = res.Where(pk => pk.IsShiny);
            }
            if (CHK_Shiny.CheckState == CheckState.Unchecked)
            {
                res = res.Where(pk => !pk.IsShiny);
            }
            if (CHK_IsEgg.CheckState == CheckState.Checked)
            {
                res = res.Where(pk => pk.IsEgg);
            }
            if (CHK_IsEgg.CheckState == CheckState.Unchecked)
            {
                res = res.Where(pk => !pk.IsEgg);
            }
            if (CHK_IsEgg.CheckState == CheckState.Checked && MT_ESV.Text != "")
            {
                res = res.Where(pk => pk.PSV == Convert.ToInt16(MT_ESV.Text));
            }

            // Tertiary Searchables
            if (TB_Level.Text != "") // Level
            {
                int level = Convert.ToInt16(TB_Level.Text);
                if (level <= 100)
                {
                    switch (CB_Level.SelectedIndex)
                    {
                    case 0: break; // Any

                    case 1:        // <=
                        res = res.Where(pk => pk.Stat_Level <= level);
                        break;

                    case 2: // ==
                        res = res.Where(pk => pk.Stat_Level == level);
                        break;

                    case 3: // >=
                        res = res.Where(pk => pk.Stat_Level >= level);
                        break;
                    }
                }
            }
            switch (CB_IV.SelectedIndex)
            {
            case 0: break; // Do nothing

            case 1:        // <= 90
                res = res.Where(pk => pk.IVs.Sum() <= 90);
                break;

            case 2:     // 91-120
                res = res.Where(pk => pk.IVs.Sum() > 90 && pk.IVs.Sum() <= 120);
                break;

            case 3:     // 121-150
                res = res.Where(pk => pk.IVs.Sum() > 120 && pk.IVs.Sum() <= 150);
                break;

            case 4:     // 151-179
                res = res.Where(pk => pk.IVs.Sum() > 150 && pk.IVs.Sum() < 180);
                break;

            case 5:     // 180+
                res = res.Where(pk => pk.IVs.Sum() >= 180);
                break;

            case 6:     // == 186
                res = res.Where(pk => pk.IVs.Sum() == 186);
                break;
            }
            switch (CB_EVTrain.SelectedIndex)
            {
            case 0: break; // Do nothing

            case 1:        // None (0)
                res = res.Where(pk => pk.EVs.Sum() == 0);
                break;

            case 2:     // Some (127-0)
                res = res.Where(pk => pk.EVs.Sum() < 128);
                break;

            case 3:     // Half (128-507)
                res = res.Where(pk => pk.EVs.Sum() >= 128 && pk.EVs.Sum() < 508);
                break;

            case 4:     // Full (508+)
                res = res.Where(pk => pk.EVs.Sum() >= 508);
                break;
            }

            // Filter for Selected Source
            if (!Menu_SearchBoxes.Checked)
            {
                res = res.Where(pk => pk.Identifier.StartsWith(DatabasePath + Path.DirectorySeparatorChar, StringComparison.Ordinal));
            }
            if (!Menu_SearchDatabase.Checked)
            {
                res = res.Where(pk => !pk.Identifier.StartsWith(DatabasePath + Path.DirectorySeparatorChar, StringComparison.Ordinal));
            }

            slotSelected = -1;                                           // reset the slot last viewed

            if (Menu_SearchLegal.Checked && !Menu_SearchIllegal.Checked) // Legal Only
            {
                res = res.Where(pk => pk.GenNumber >= 6 && new LegalityAnalysis(pk).Valid);
            }
            if (!Menu_SearchLegal.Checked && Menu_SearchIllegal.Checked) // Illegal Only
            {
                res = res.Where(pk => pk.GenNumber >= 6 && !new LegalityAnalysis(pk).Valid);
            }

            if (RTB_Instructions.Lines.Any(line => line.Length > 0))
            {
                var raw =
                    RTB_Instructions.Lines
                    .Where(line => !string.IsNullOrWhiteSpace(line))
                    .Where(line => new[] { '!', '=' }.Contains(line[0]));

                var filters = (from line in raw
                               let eval = line[0] == '='
                                          let split = line.Substring(1).Split('=')
                                                      where split.Length == 2 && !string.IsNullOrWhiteSpace(split[0])
                                                      select new BatchEditor.StringInstruction {
                    PropertyName = split[0], PropertyValue = split[1], Evaluator = eval
                }).ToArray();

                BatchEditor.screenStrings(filters);
                res = res.Where(pkm => // Compare across all filters
                {
                    foreach (var cmd in filters)
                    {
                        if (!pkm.GetType().HasPropertyAll(cmd.PropertyName))
                        {
                            return(false);
                        }
                        try { if (ReflectUtil.GetValueEquals(pkm, cmd.PropertyName, cmd.PropertyValue) == cmd.Evaluator)
                              {
                                  continue;
                              }
                        }
                        catch { Console.WriteLine($"Unable to compare {cmd.PropertyName} to {cmd.PropertyValue}."); }
                        return(false);
                    }
                    return(true);
                });
            }

            if (Menu_SearchClones.Checked)
            {
                var r      = res.ToArray();
                var hashes = r.Select(hash).ToArray();
                res = r.Where((t, i) => hashes.Count(x => x == hashes[i]) > 1).OrderBy(hash);
            }

            var results = res.ToArray();

            if (results.Length == 0)
            {
                if (!Menu_SearchBoxes.Checked && !Menu_SearchDatabase.Checked)
                {
                    WinFormsUtil.Alert("No data source to search!", "No results found!");
                }
                else
                {
                    WinFormsUtil.Alert("No results found!");
                }
            }
            setResults(new List <PKM>(results)); // updates Count Label as well.
            System.Media.SystemSounds.Asterisk.Play();
        }
예제 #20
0
        private void save()
        {
            SAV.Game   = (byte)(CB_Game.SelectedIndex + 30);
            SAV.Gender = (byte)CB_Gender.SelectedIndex;

            SAV.TID           = (ushort)Util.ToUInt32(MT_TID.Text);
            SAV.SID           = (ushort)Util.ToUInt32(MT_SID.Text);
            SAV.Money         = Util.ToUInt32(MT_Money.Text);
            SAV.SubRegion     = WinFormsUtil.getIndex(CB_Region);
            SAV.Country       = WinFormsUtil.getIndex(CB_Country);
            SAV.ConsoleRegion = WinFormsUtil.getIndex(CB_3DSReg);
            SAV.Language      = WinFormsUtil.getIndex(CB_Language);
            SAV.AlolaTime     = (ulong)WinFormsUtil.getIndex(CB_AlolaTime);

            SAV.OT = TB_OTName.Text;

            // Copy Position
            if (GB_Map.Enabled && MapUpdated)
            {
                SAV.M = (int)NUD_M.Value;
                SAV.X = (float)NUD_X.Value;
                SAV.Z = (float)NUD_Z.Value;
                SAV.Y = (float)NUD_Y.Value;
                SAV.R = (float)NUD_R.Value;
            }

            // Save PlayTime
            SAV.PlayedHours   = ushort.Parse(MT_Hours.Text);
            SAV.PlayedMinutes = ushort.Parse(MT_Minutes.Text) % 60;
            SAV.PlayedSeconds = ushort.Parse(MT_Seconds.Text) % 60;

            int seconds = (int)(CAL_AdventureStartDate.Value - new DateTime(2000, 1, 1)).TotalSeconds;

            seconds           -= seconds % 86400;
            seconds           += (int)(CAL_AdventureStartTime.Value - new DateTime(2000, 1, 1)).TotalSeconds;
            SAV.SecondsToStart = seconds;

            int fame = (int)(CAL_HoFDate.Value - new DateTime(2000, 1, 1)).TotalSeconds;

            fame -= fame % 86400;
            fame += (int)(CAL_HoFTime.Value - new DateTime(2000, 1, 1)).TotalSeconds;
            SAV.SecondsToFame = fame;

            if (SAV.LastSavedDate.HasValue)
            {
                SAV.LastSavedDate = new DateTime(CAL_LastSavedDate.Value.Year, CAL_LastSavedDate.Value.Month, CAL_LastSavedDate.Value.Day, CAL_LastSavedTime.Value.Hour, CAL_LastSavedTime.Value.Minute, 0);
            }

            SAV.BP         = (uint)NUD_BP.Value;
            SAV.FestaCoins = (uint)NUD_FC.Value;

            // Poké Finder
            SAV.PokeFinderSnapCount        = (uint)NUD_SnapCount.Value;
            SAV.PokeFinderThumbsTotalValue = (uint)NUD_ThumbsTotal.Value;
            SAV.PokeFinderThumbsHighValue  = (uint)NUD_ThumbsRecord.Value;

            SAV.PokeFinderCameraVersion = (ushort)CB_CameraVersion.SelectedIndex;
            SAV.PokeFinderGyroFlag      = CHK_Gyro.Checked;

            // Battle Tree
            SAV.setTreeStreak((int)NUD_RCStreak0.Value, 0, super: false, max: false);
            SAV.setTreeStreak((int)NUD_RCStreak1.Value, 1, super: false, max: false);
            SAV.setTreeStreak((int)NUD_RCStreak2.Value, 2, super: false, max: false);
            SAV.setTreeStreak((int)NUD_RMStreak0.Value, 0, super: false, max: true);
            SAV.setTreeStreak((int)NUD_RMStreak1.Value, 1, super: false, max: true);
            SAV.setTreeStreak((int)NUD_RMStreak2.Value, 2, super: false, max: true);

            SAV.setTreeStreak((int)NUD_SCStreak0.Value, 0, super: true, max: false);
            SAV.setTreeStreak((int)NUD_SCStreak1.Value, 1, super: true, max: false);
            SAV.setTreeStreak((int)NUD_SCStreak2.Value, 2, super: true, max: false);
            SAV.setTreeStreak((int)NUD_SMStreak0.Value, 0, super: true, max: true);
            SAV.setTreeStreak((int)NUD_SMStreak1.Value, 1, super: true, max: true);
            SAV.setTreeStreak((int)NUD_SMStreak2.Value, 2, super: true, max: true);

            // Skin changed && (gender matches || override)
            int    gender = CB_Gender.SelectedIndex & 1;
            int    skin   = CB_SkinColor.SelectedIndex & 1;
            string gStr   = CB_Gender.Items[gender].ToString();
            string sStr   = CB_Gender.Items[skin].ToString();

            if (SAV.DressUpSkinColor != CB_SkinColor.SelectedIndex &&
                (SAV.Gender == skin || DialogResult.Yes != WinFormsUtil.Prompt(MessageBoxButtons.YesNo, $"Gender-Skin mismatch:\nGender: {gStr}, Skin: {sStr}", "Save selected Skin Color?")))
            {
                SAV.DressUpSkinColor = CB_SkinColor.SelectedIndex;
            }

            SAV.FestivalPlazaName = TB_PlazaName.Text;

            // Vivillon
            if (CB_Vivillon.SelectedIndex >= 0)
            {
                SAV.Vivillon = CB_Vivillon.SelectedIndex;
            }

            SAV.DaysFromRefreshed = (byte)NUD_DaysFromRefreshed.Value;
        }
예제 #21
0
        private PKM preparePK1()
        {
            PK1 pk1 = pkm as PK1;

            if (pk1 == null)
            {
                return(null);
            }

            pk1.Species = WinFormsUtil.getIndex(CB_Species);
            pk1.TID     = Util.ToInt32(TB_TID.Text);
            pk1.EXP     = Util.ToUInt32(TB_EXP.Text);

            pk1.EV_HP  = Util.ToInt32(TB_HPEV.Text);
            pk1.EV_ATK = Util.ToInt32(TB_ATKEV.Text);
            pk1.EV_DEF = Util.ToInt32(TB_DEFEV.Text);
            pk1.EV_SPE = Util.ToInt32(TB_SPEEV.Text);
            pk1.EV_SPC = Util.ToInt32(TB_SPAEV.Text);

            if (CHK_Nicknamed.Checked)
            {
                pk1.Nickname = TB_Nickname.Text;
            }
            else
            {
                pk1.setNotNicknamed();
            }
            pk1.Move1       = WinFormsUtil.getIndex(CB_Move1);
            pk1.Move2       = WinFormsUtil.getIndex(CB_Move2);
            pk1.Move3       = WinFormsUtil.getIndex(CB_Move3);
            pk1.Move4       = WinFormsUtil.getIndex(CB_Move4);
            pk1.Move1_PP    = WinFormsUtil.getIndex(CB_Move1) > 0 ? Util.ToInt32(TB_PP1.Text) : 0;
            pk1.Move2_PP    = WinFormsUtil.getIndex(CB_Move2) > 0 ? Util.ToInt32(TB_PP2.Text) : 0;
            pk1.Move3_PP    = WinFormsUtil.getIndex(CB_Move3) > 0 ? Util.ToInt32(TB_PP3.Text) : 0;
            pk1.Move4_PP    = WinFormsUtil.getIndex(CB_Move4) > 0 ? Util.ToInt32(TB_PP4.Text) : 0;
            pk1.Move1_PPUps = WinFormsUtil.getIndex(CB_Move1) > 0 ? CB_PPu1.SelectedIndex : 0;
            pk1.Move2_PPUps = WinFormsUtil.getIndex(CB_Move2) > 0 ? CB_PPu2.SelectedIndex : 0;
            pk1.Move3_PPUps = WinFormsUtil.getIndex(CB_Move3) > 0 ? CB_PPu3.SelectedIndex : 0;
            pk1.Move4_PPUps = WinFormsUtil.getIndex(CB_Move4) > 0 ? CB_PPu4.SelectedIndex : 0;

            pk1.IV_HP  = Util.ToInt32(TB_HPIV.Text);
            pk1.IV_ATK = Util.ToInt32(TB_ATKIV.Text);
            pk1.IV_DEF = Util.ToInt32(TB_DEFIV.Text);
            pk1.IV_SPE = Util.ToInt32(TB_SPEIV.Text);
            pk1.IV_SPA = Util.ToInt32(TB_SPAIV.Text);

            pk1.OT_Name = TB_OT.Text;

            // Toss in Party Stats
            Array.Resize(ref pk1.Data, pk1.SIZE_PARTY);
            pk1.Stat_Level     = Util.ToInt32(TB_Level.Text);
            pk1.Stat_HPCurrent = Util.ToInt32(Stat_HP.Text);
            pk1.Stat_HPMax     = Util.ToInt32(Stat_HP.Text);
            pk1.Stat_ATK       = Util.ToInt32(Stat_ATK.Text);
            pk1.Stat_DEF       = Util.ToInt32(Stat_DEF.Text);
            pk1.Stat_SPE       = Util.ToInt32(Stat_SPE.Text);
            pk1.Stat_SPA       = Util.ToInt32(Stat_SPA.Text);
            pk1.Stat_SPD       = Util.ToInt32(Stat_SPD.Text);

            if (HaX)
            {
                pk1.Stat_Level = (byte)Math.Min(Convert.ToInt32(MT_Level.Text), byte.MaxValue);
            }

            // Fix Moves if a slot is empty
            pk1.FixMoves();

            pk1.RefreshChecksum();
            return(pk1);
        }
예제 #22
0
        private PKM preparePK5()
        {
            PK5 pk5 = pkm as PK5;

            if (pk5 == null)
            {
                return(null);
            }

            pk5.Species  = WinFormsUtil.getIndex(CB_Species);
            pk5.HeldItem = WinFormsUtil.getIndex(CB_HeldItem);
            pk5.TID      = Util.ToInt32(TB_TID.Text);
            pk5.SID      = Util.ToInt32(TB_SID.Text);
            pk5.EXP      = Util.ToUInt32(TB_EXP.Text);
            pk5.PID      = Util.getHEXval(TB_PID.Text);

            pk5.Nature           = (byte)WinFormsUtil.getIndex(CB_Nature);
            pk5.FatefulEncounter = CHK_Fateful.Checked;
            pk5.Gender           = PKX.getGender(Label_Gender.Text);
            pk5.AltForm          = (MT_Form.Enabled ? Convert.ToInt32(MT_Form.Text) : CB_Form.Enabled ? CB_Form.SelectedIndex : 0) & 0x1F;
            pk5.EV_HP            = Util.ToInt32(TB_HPEV.Text);
            pk5.EV_ATK           = Util.ToInt32(TB_ATKEV.Text);
            pk5.EV_DEF           = Util.ToInt32(TB_DEFEV.Text);
            pk5.EV_SPE           = Util.ToInt32(TB_SPEEV.Text);
            pk5.EV_SPA           = Util.ToInt32(TB_SPAEV.Text);
            pk5.EV_SPD           = Util.ToInt32(TB_SPDEV.Text);

            pk5.CNT_Cool   = Util.ToInt32(TB_Cool.Text);
            pk5.CNT_Beauty = Util.ToInt32(TB_Beauty.Text);
            pk5.CNT_Cute   = Util.ToInt32(TB_Cute.Text);
            pk5.CNT_Smart  = Util.ToInt32(TB_Smart.Text);
            pk5.CNT_Tough  = Util.ToInt32(TB_Tough.Text);
            pk5.CNT_Sheen  = Util.ToInt32(TB_Sheen.Text);

            pk5.PKRS_Days   = CB_PKRSDays.SelectedIndex;
            pk5.PKRS_Strain = CB_PKRSStrain.SelectedIndex;
            pk5.Nickname    = TB_Nickname.Text;
            pk5.Move1       = WinFormsUtil.getIndex(CB_Move1);
            pk5.Move2       = WinFormsUtil.getIndex(CB_Move2);
            pk5.Move3       = WinFormsUtil.getIndex(CB_Move3);
            pk5.Move4       = WinFormsUtil.getIndex(CB_Move4);
            pk5.Move1_PP    = WinFormsUtil.getIndex(CB_Move1) > 0 ? Util.ToInt32(TB_PP1.Text) : 0;
            pk5.Move2_PP    = WinFormsUtil.getIndex(CB_Move2) > 0 ? Util.ToInt32(TB_PP2.Text) : 0;
            pk5.Move3_PP    = WinFormsUtil.getIndex(CB_Move3) > 0 ? Util.ToInt32(TB_PP3.Text) : 0;
            pk5.Move4_PP    = WinFormsUtil.getIndex(CB_Move4) > 0 ? Util.ToInt32(TB_PP4.Text) : 0;
            pk5.Move1_PPUps = WinFormsUtil.getIndex(CB_Move1) > 0 ? CB_PPu1.SelectedIndex : 0;
            pk5.Move2_PPUps = WinFormsUtil.getIndex(CB_Move2) > 0 ? CB_PPu2.SelectedIndex : 0;
            pk5.Move3_PPUps = WinFormsUtil.getIndex(CB_Move3) > 0 ? CB_PPu3.SelectedIndex : 0;
            pk5.Move4_PPUps = WinFormsUtil.getIndex(CB_Move4) > 0 ? CB_PPu4.SelectedIndex : 0;

            pk5.IV_HP       = Util.ToInt32(TB_HPIV.Text);
            pk5.IV_ATK      = Util.ToInt32(TB_ATKIV.Text);
            pk5.IV_DEF      = Util.ToInt32(TB_DEFIV.Text);
            pk5.IV_SPE      = Util.ToInt32(TB_SPEIV.Text);
            pk5.IV_SPA      = Util.ToInt32(TB_SPAIV.Text);
            pk5.IV_SPD      = Util.ToInt32(TB_SPDIV.Text);
            pk5.IsEgg       = CHK_IsEgg.Checked;
            pk5.IsNicknamed = CHK_Nicknamed.Checked;

            pk5.OT_Name           = TB_OT.Text;
            pk5.CurrentFriendship = Util.ToInt32(TB_Friendship.Text);

            // Default Dates
            DateTime?egg_date     = null;
            int      egg_location = 0;

            if (CHK_AsEgg.Checked) // If encountered as an egg, load the Egg Met data from fields.
            {
                egg_date     = CAL_EggDate.Value;
                egg_location = WinFormsUtil.getIndex(CB_EggLocation);
            }
            // Egg Met Data
            pk5.EggMetDate   = egg_date;
            pk5.Egg_Location = egg_location;
            // Met Data
            pk5.MetDate      = CAL_MetDate.Value;
            pk5.Met_Location = WinFormsUtil.getIndex(CB_MetLocation);

            if (pk5.IsEgg && pk5.Met_Location == 0)    // If still an egg, it has no hatch location/date. Zero it!
            {
                pk5.MetDate = null;
            }

            pk5.Ball          = WinFormsUtil.getIndex(CB_Ball);
            pk5.Met_Level     = Util.ToInt32(TB_MetLevel.Text);
            pk5.OT_Gender     = PKX.getGender(Label_OTGender.Text);
            pk5.EncounterType = WinFormsUtil.getIndex(CB_EncounterType);
            pk5.Version       = WinFormsUtil.getIndex(CB_GameOrigin);
            pk5.Language      = WinFormsUtil.getIndex(CB_Language);

            pk5.NPokémon = CHK_NSparkle.Checked;

            // Toss in Party Stats
            Array.Resize(ref pk5.Data, pk5.SIZE_PARTY);
            pk5.Stat_Level     = Util.ToInt32(TB_Level.Text);
            pk5.Stat_HPCurrent = Util.ToInt32(Stat_HP.Text);
            pk5.Stat_HPMax     = Util.ToInt32(Stat_HP.Text);
            pk5.Stat_ATK       = Util.ToInt32(Stat_ATK.Text);
            pk5.Stat_DEF       = Util.ToInt32(Stat_DEF.Text);
            pk5.Stat_SPE       = Util.ToInt32(Stat_SPE.Text);
            pk5.Stat_SPA       = Util.ToInt32(Stat_SPA.Text);
            pk5.Stat_SPD       = Util.ToInt32(Stat_SPD.Text);

            if (HaX)
            {
                pk5.Ability    = (byte)WinFormsUtil.getIndex(DEV_Ability);
                pk5.Stat_Level = (byte)Math.Min(Convert.ToInt32(MT_Level.Text), byte.MaxValue);
            }
            else
            {
                pk5.Ability       = (byte)Array.IndexOf(GameInfo.Strings.abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
                pk5.HiddenAbility = CB_Ability.SelectedIndex > 1; // not 0 or 1
            }

            // Fix Moves if a slot is empty
            pk5.FixMoves();

            pk5.RefreshChecksum();
            return(pk5);
        }
예제 #23
0
        private void save()
        {
            SAV.Game   = (byte)(CB_Game.SelectedIndex + 0x18);
            SAV.Gender = (byte)CB_Gender.SelectedIndex;

            SAV.TID           = (ushort)Util.ToUInt32(MT_TID.Text);
            SAV.SID           = (ushort)Util.ToUInt32(MT_SID.Text);
            SAV.Money         = Util.ToUInt32(MT_Money.Text);
            SAV.SubRegion     = WinFormsUtil.getIndex(CB_Region);
            SAV.Country       = WinFormsUtil.getIndex(CB_Country);
            SAV.ConsoleRegion = WinFormsUtil.getIndex(CB_3DSReg);
            SAV.Language      = WinFormsUtil.getIndex(CB_Language);

            SAV.OT = TB_OTName.Text;

            SAV.Saying1 = TB_Saying1.Text;
            SAV.Saying2 = TB_Saying2.Text;
            SAV.Saying3 = TB_Saying3.Text;
            SAV.Saying4 = TB_Saying4.Text;
            SAV.Saying5 = TB_Saying5.Text;

            // Copy Maison Data in
            if (SAV.MaisonStats > -1)
            {
                for (int i = 0; i < MaisonRecords.Length; i++)
                {
                    SAV.setMaisonStat(i, ushort.Parse(MaisonRecords[i].Text));
                }
            }

            // Copy Position
            if (GB_Map.Enabled)
            {
                SAV.M = (int)NUD_M.Value;
                SAV.X = (float)NUD_X.Value;
                SAV.Z = (float)NUD_Z.Value;
                SAV.Y = (float)NUD_Y.Value;
            }

            SAV.BP = ushort.Parse(TB_BP.Text);
            // Set Current PokéMiles
            SAV.setPSSStat(0xFC / 4, Util.ToUInt32(TB_PM.Text));
            // Set Max Obtained Pokémiles
            SAV.setPSSStat(0x100 / 4, Util.ToUInt32(TB_PM.Text));
            SAV.Style = byte.Parse(TB_Style.Text);

            // Copy Badges
            int badgeval = 0;

            for (int i = 0; i < 8; i++)
            {
                badgeval |= (cba[i].Checked ? 1 : 0) << i;
            }
            SAV.Badges = badgeval;

            // Save PlayTime
            SAV.PlayedHours   = ushort.Parse(MT_Hours.Text);
            SAV.PlayedMinutes = ushort.Parse(MT_Minutes.Text) % 60;
            SAV.PlayedSeconds = ushort.Parse(MT_Seconds.Text) % 60;

            // Sprite
            SAV.MultiplayerSpriteID = Convert.ToByte(CB_MultiplayerSprite.SelectedValue);

            // Appearance
            if (SAV.XY)
            {
                SAV.Data[SAV.TrainerCard + 0x30] = byte.Parse(MT_14030.Text);
                SAV.Data[SAV.TrainerCard + 0x31] = (byte)(byte.Parse(MT_HairColor.Text) | (byte.Parse(MT_Hat.Text) << 3));
                SAV.Data[SAV.TrainerCard + 0x32] = byte.Parse(MT_14032.Text);
                SAV.Data[SAV.TrainerCard + 0x33] = byte.Parse(MT_14033.Text);
                SAV.Data[SAV.TrainerCard + 0x34] = byte.Parse(MT_14034.Text);
                SAV.Data[SAV.TrainerCard + 0x35] = byte.Parse(MT_14035.Text);
                SAV.Data[SAV.TrainerCard + 0x36] = byte.Parse(MT_14036.Text);
                SAV.Data[SAV.TrainerCard + 0x37] = byte.Parse(MT_14037.Text);
                SAV.Data[SAV.TrainerCard + 0x38] = byte.Parse(MT_14038.Text);
                SAV.Data[SAV.TrainerCard + 0x39] = byte.Parse(MT_14039.Text);
                SAV.Data[SAV.TrainerCard + 0x3A] = byte.Parse(MT_1403A.Text);
                SAV.Data[SAV.TrainerCard + 0x3B] = byte.Parse(MT_1403B.Text);
                SAV.Data[SAV.TrainerCard + 0x3C] = byte.Parse(MT_1403C.Text);
                SAV.Data[SAV.TrainerCard + 0x3D] = byte.Parse(MT_1403D.Text);
                SAV.Data[SAV.TrainerCard + 0x3E] = byte.Parse(MT_1403E.Text);
                SAV.Data[SAV.TrainerCard + 0x3F] = byte.Parse(MT_1403F.Text);

                SAV.OT_Nick = TB_TRNick.Text;
            }

            // Vivillon
            SAV.Vivillon = CB_Vivillon.SelectedIndex;

            int seconds = (int)(CAL_AdventureStartDate.Value - new DateTime(2000, 1, 1)).TotalSeconds;

            seconds           -= seconds % 86400;
            seconds           += (int)(CAL_AdventureStartTime.Value - new DateTime(2000, 1, 1)).TotalSeconds;
            SAV.SecondsToStart = seconds;

            int fame = (int)(CAL_HoFDate.Value - new DateTime(2000, 1, 1)).TotalSeconds;

            fame -= fame % 86400;
            fame += (int)(CAL_HoFTime.Value - new DateTime(2000, 1, 1)).TotalSeconds;
            SAV.SecondsToFame = fame;

            if (SAV.LastSavedDate.HasValue)
            {
                SAV.LastSavedDate = new DateTime(CAL_LastSavedDate.Value.Year, CAL_LastSavedDate.Value.Month, CAL_LastSavedDate.Value.Day, CAL_LastSavedTime.Value.Hour, CAL_LastSavedTime.Value.Minute, 0);
            }
        }
예제 #24
0
        private void changeMemory(object sender, EventArgs e)
        {
            ComboBox m = (ComboBox)sender;

            if (m == CB_CTMemory || m == CB_OTMemory)
            {
                int memory = WinFormsUtil.getIndex(m);
                switch (memory) // Memory Case Switchtable
                {
                case 0: getMemoryArguments("NONE", m); break;

                case 1: getMemoryArguments("GENLOC", m); break;

                case 2: getMemoryArguments("GENLOC", m); break;

                case 3: getMemoryArguments("GENLOC", m); break;

                case 4: getMemoryArguments("GENLOC", m); break;

                case 5: getMemoryArguments("ITEM", m); break;

                case 6: getMemoryArguments("LOCATION", m); break;

                case 7: getMemoryArguments("PKM", m); break;

                case 8: getMemoryArguments("NONE", m); break;

                case 9: getMemoryArguments("PKM", m); break;

                case 10: getMemoryArguments("NONE", m); break;

                case 11: getMemoryArguments("NONE", m); break;

                case 12: getMemoryArguments("MOVE", m); break;

                case 13: getMemoryArguments("PKM", m); break;

                case 14: getMemoryArguments("PKM", m); break;

                case 15: getMemoryArguments("ITEM", m); break;

                case 16: getMemoryArguments("MOVE", m); break;

                case 17: getMemoryArguments("PKM", m); break;

                case 18: getMemoryArguments("PKM", m); break;

                case 19: getMemoryArguments("GENLOC", m); break;

                case 20: getMemoryArguments("NONE", m); break;

                case 21: getMemoryArguments("PKM", m); break;

                case 22: getMemoryArguments("NONE", m); break;

                case 23: getMemoryArguments("NONE", m); break;

                case 24: getMemoryArguments("GENLOC", m); break;

                case 25: getMemoryArguments("PKM", m); break;

                case 26: getMemoryArguments("ITEM", m); break;

                case 27: getMemoryArguments("NONE", m); break;

                case 28: getMemoryArguments("NONE", m); break;

                case 29: getMemoryArguments("PKM", m); break;

                case 30: getMemoryArguments("NONE", m); break;

                case 31: getMemoryArguments("GENLOC", m); break;

                case 32: getMemoryArguments("GENLOC", m); break;

                case 33: getMemoryArguments("GENLOC", m); break;

                case 34: getMemoryArguments("ITEM", m); break;

                case 35: getMemoryArguments("GENLOC", m); break;

                case 36: getMemoryArguments("GENLOC", m); break;

                case 37: getMemoryArguments("GENLOC", m); break;

                case 38: getMemoryArguments("GENLOC", m); break;

                case 39: getMemoryArguments("GENLOC", m); break;

                case 40: getMemoryArguments("ITEM", m); break;

                case 41: getMemoryArguments("NONE", m); break;

                case 42: getMemoryArguments("GENLOC", m); break;

                case 43: getMemoryArguments("NONE", m); break;

                case 44: getMemoryArguments("PKM", m); break;

                case 45: getMemoryArguments("PKM", m); break;

                case 46: getMemoryArguments("NONE", m); break;

                case 47: getMemoryArguments("NONE", m); break;

                case 48: getMemoryArguments("MOVE", m); break;

                case 49: getMemoryArguments("MOVE", m); break;

                case 50: getMemoryArguments("PKM", m); break;

                case 51: getMemoryArguments("ITEM", m); break;

                case 52: getMemoryArguments("GENLOC", m); break;

                case 53: getMemoryArguments("NONE", m); break;

                case 54: getMemoryArguments("NONE", m); break;

                case 55: getMemoryArguments("NONE", m); break;

                case 56: getMemoryArguments("NONE", m); break;

                case 57: getMemoryArguments("NONE", m); break;

                case 58: getMemoryArguments("NONE", m); break;

                case 59: getMemoryArguments("GENLOC", m); break;

                case 60: getMemoryArguments("PKM", m); break;

                case 61: getMemoryArguments("NONE", m); break;

                case 62: getMemoryArguments("NONE", m); break;

                case 63: getMemoryArguments("NONE", m); break;

                case 64: getMemoryArguments("NONE", m); break;

                default: getMemoryArguments("NONE", m); break;
                }
            }

            if (!init)
            {
                return;
            }
            RTB_OT.Text = getMemoryString(CB_OTMemory, CB_OTVar, CB_OTQual, CB_OTFeel, pkm.OT_Name);
            RTB_CT.Text = getMemoryString(CB_CTMemory, CB_CTVar, CB_CTQual, CB_CTFeel, pkm.HT_Name);
        }
예제 #25
0
        private void Write_Entry(object sender, EventArgs e)
        {
            if (!editing)
            {
                return; //Don't do writing until loaded
            }
            Validate_TextBoxes();

            int index       = LB_DataEntry.SelectedIndex;
            int partymember = Convert.ToInt32(NUP_PartyIndex.Value) - 1;
            int offset      = index * 0x1B4 + partymember * 0x48;

            BitConverter.GetBytes(Convert.ToUInt16(CB_Species.SelectedValue)).CopyTo(data, offset + 0x00);
            BitConverter.GetBytes(Convert.ToUInt16(CB_HeldItem.SelectedValue)).CopyTo(data, offset + 0x02);
            BitConverter.GetBytes(Convert.ToUInt16(CB_Move1.SelectedValue)).CopyTo(data, offset + 0x04);
            BitConverter.GetBytes(Convert.ToUInt16(CB_Move2.SelectedValue)).CopyTo(data, offset + 0x06);
            BitConverter.GetBytes(Convert.ToUInt16(CB_Move3.SelectedValue)).CopyTo(data, offset + 0x08);
            BitConverter.GetBytes(Convert.ToUInt16(CB_Move4.SelectedValue)).CopyTo(data, offset + 0x0A);
            BitConverter.GetBytes(Convert.ToUInt32(TB_EC.Text, 16)).CopyTo(data, offset + 0x0C);

            BitConverter.GetBytes(Convert.ToUInt16(TB_TID.Text)).CopyTo(data, offset + 0x10);
            BitConverter.GetBytes(Convert.ToUInt16(TB_SID.Text)).CopyTo(data, offset + 0x12);

            uint rawslgf = BitConverter.ToUInt32(data, offset + 0x14);
            uint slgf    = 0;

            slgf |= (uint)(CB_Form.SelectedIndex & 0x1F);
            slgf |= (uint)((PKX.getGender(Label_Gender.Text) & 0x3) << 5);
            slgf |= (uint)((Convert.ToUInt16(TB_Level.Text) & 0x7F) << 7);
            if (CHK_Shiny.Checked)
            {
                slgf |= 1 << 14;
            }

            slgf |= rawslgf & 0x8000;
            Array.Copy(BitConverter.GetBytes(slgf), 0, data, offset + 0x14, 2);

            uint nick = 0;

            if (CHK_Nicknamed.Checked)
            {
                nick = 1;
            }
            Array.Copy(BitConverter.GetBytes(nick), 0, data, offset + 0x16, 2);

            //Mimic in-game behavior of not clearing strings. It's awful, but accuracy > good.
            string pk = TB_Nickname.Text; if (pk.Length != 12)
            {
                pk = pk.PadRight(pk.Length + 1, '\0');
            }
            string ot = TB_OT.Text; if (ot.Length != 12)

            {
                ot = ot.PadRight(pk.Length + 1, '\0');
            }

            Encoding.Unicode.GetBytes(pk).CopyTo(data, offset + 0x18);
            Encoding.Unicode.GetBytes(ot).CopyTo(data, offset + 0x30);

            offset = index * 0x1B4;

            uint vnd  = 0;
            uint date = 0;

            vnd  |= Convert.ToUInt32(TB_VN.Text) & 0xFF;
            date |= (uint)((CAL_MetDate.Value.Year - 2000) & 0xFF);
            date |= (uint)((CAL_MetDate.Value.Month & 0xF) << 8);
            date |= (uint)((CAL_MetDate.Value.Day & 0x1F) << 12);
            vnd  |= (date & 0x1FFFF) << 14;
            //Fix for top bit
            uint rawvnd = BitConverter.ToUInt32(data, offset + 0x1B0);

            vnd |= rawvnd & 0x80000000;
            Array.Copy(BitConverter.GetBytes(vnd), 0, data, offset + 0x1B0, 4);

            bpkx.Image = PKMUtil.getSprite(WinFormsUtil.getIndex(CB_Species), CB_Form.SelectedIndex & 0x1F, PKX.getGender(Label_Gender.Text), WinFormsUtil.getIndex(CB_HeldItem), false, CHK_Shiny.Checked);
            displayEntry(null, null); // refresh text view
        }
예제 #26
0
        private PKM preparePK7()
        {
            PK7 pk7 = pkm as PK7;

            if (pk7 == null)
            {
                return(null);
            }

            // Repopulate PK6 with Edited Stuff
            if (WinFormsUtil.getIndex(CB_GameOrigin) < 24)
            {
                uint EC  = Util.getHEXval(TB_EC.Text);
                uint PID = Util.getHEXval(TB_PID.Text);
                uint SID = Util.ToUInt32(TB_TID.Text);
                uint TID = Util.ToUInt32(TB_TID.Text);
                uint LID = PID & 0xFFFF;
                uint HID = PID >> 16;
                uint XOR = TID ^ LID ^ SID ^ HID;

                // Ensure we don't have a shiny.
                if (XOR >> 3 == 1) // Illegal, fix. (not 16<XOR>=8)
                {
                    // Keep as shiny, so we have to mod the PID
                    PID        ^= XOR;
                    TB_PID.Text = PID.ToString("X8");
                    TB_EC.Text  = PID.ToString("X8");
                }
                else if ((XOR ^ 0x8000) >> 3 == 1 && PID != EC)
                {
                    TB_EC.Text = (PID ^ 0x80000000).ToString("X8");
                }
                else // Not Illegal, no fix.
                {
                    TB_EC.Text = PID.ToString("X8");
                }
            }

            pk7.EncryptionConstant = Util.getHEXval(TB_EC.Text);
            pk7.Checksum           = 0; // 0 CHK for now

            // Block A
            pk7.Species  = WinFormsUtil.getIndex(CB_Species);
            pk7.HeldItem = WinFormsUtil.getIndex(CB_HeldItem);
            pk7.TID      = Util.ToInt32(TB_TID.Text);
            pk7.SID      = Util.ToInt32(TB_SID.Text);
            pk7.EXP      = Util.ToUInt32(TB_EXP.Text);
            string selectedAbility = (string)CB_Ability.SelectedItem;

            pk7.Ability       = (byte)Array.IndexOf(GameInfo.Strings.abilitylist, (selectedAbility != "" && selectedAbility != null) ? selectedAbility.Remove(selectedAbility.Length - 4) : "(None)");
            pk7.AbilityNumber = Util.ToInt32(TB_AbilityNumber.Text);   // Number
            // pkx[0x16], pkx[0x17] are handled by the Medals UI (Hits & Training Bag)
            pk7.PID              = Util.getHEXval(TB_PID.Text);
            pk7.Nature           = (byte)WinFormsUtil.getIndex(CB_Nature);
            pk7.FatefulEncounter = CHK_Fateful.Checked;
            pk7.Gender           = PKX.getGender(Label_Gender.Text);
            pk7.AltForm          = (MT_Form.Enabled ? Convert.ToInt32(MT_Form.Text) : CB_Form.Enabled ? CB_Form.SelectedIndex : 0) & 0x1F;
            pk7.EV_HP            = Util.ToInt32(TB_HPEV.Text); // EVs
            pk7.EV_ATK           = Util.ToInt32(TB_ATKEV.Text);
            pk7.EV_DEF           = Util.ToInt32(TB_DEFEV.Text);
            pk7.EV_SPE           = Util.ToInt32(TB_SPEEV.Text);
            pk7.EV_SPA           = Util.ToInt32(TB_SPAEV.Text);
            pk7.EV_SPD           = Util.ToInt32(TB_SPDEV.Text);

            pk7.CNT_Cool   = Util.ToInt32(TB_Cool.Text);     // CNT
            pk7.CNT_Beauty = Util.ToInt32(TB_Beauty.Text);
            pk7.CNT_Cute   = Util.ToInt32(TB_Cute.Text);
            pk7.CNT_Smart  = Util.ToInt32(TB_Smart.Text);
            pk7.CNT_Tough  = Util.ToInt32(TB_Tough.Text);
            pk7.CNT_Sheen  = Util.ToInt32(TB_Sheen.Text);

            pk7.PKRS_Days   = CB_PKRSDays.SelectedIndex;
            pk7.PKRS_Strain = CB_PKRSStrain.SelectedIndex;
            // Already in buff (then transferred to new pkx)
            // 0x2C, 0x2D, 0x2E, 0x2F
            // 0x30, 0x31, 0x32, 0x33
            // 0x34, 0x35, 0x36, 0x37
            // 0x38, 0x39

            // Unused
            // 0x3A, 0x3B
            // 0x3C, 0x3D, 0x3E, 0x3F

            // Block B
            // Convert Nickname field back to bytes
            pk7.Nickname     = TB_Nickname.Text;
            pk7.Move1        = WinFormsUtil.getIndex(CB_Move1);
            pk7.Move2        = WinFormsUtil.getIndex(CB_Move2);
            pk7.Move3        = WinFormsUtil.getIndex(CB_Move3);
            pk7.Move4        = WinFormsUtil.getIndex(CB_Move4);
            pk7.Move1_PP     = WinFormsUtil.getIndex(CB_Move1) > 0 ? Util.ToInt32(TB_PP1.Text) : 0;
            pk7.Move2_PP     = WinFormsUtil.getIndex(CB_Move2) > 0 ? Util.ToInt32(TB_PP2.Text) : 0;
            pk7.Move3_PP     = WinFormsUtil.getIndex(CB_Move3) > 0 ? Util.ToInt32(TB_PP3.Text) : 0;
            pk7.Move4_PP     = WinFormsUtil.getIndex(CB_Move4) > 0 ? Util.ToInt32(TB_PP4.Text) : 0;
            pk7.Move1_PPUps  = WinFormsUtil.getIndex(CB_Move1) > 0 ? CB_PPu1.SelectedIndex : 0;
            pk7.Move2_PPUps  = WinFormsUtil.getIndex(CB_Move2) > 0 ? CB_PPu2.SelectedIndex : 0;
            pk7.Move3_PPUps  = WinFormsUtil.getIndex(CB_Move3) > 0 ? CB_PPu3.SelectedIndex : 0;
            pk7.Move4_PPUps  = WinFormsUtil.getIndex(CB_Move4) > 0 ? CB_PPu4.SelectedIndex : 0;
            pk7.RelearnMove1 = WinFormsUtil.getIndex(CB_RelearnMove1);
            pk7.RelearnMove2 = WinFormsUtil.getIndex(CB_RelearnMove2);
            pk7.RelearnMove3 = WinFormsUtil.getIndex(CB_RelearnMove3);
            pk7.RelearnMove4 = WinFormsUtil.getIndex(CB_RelearnMove4);
            // 0x72 - Ribbon editor sets this flag (Secret Super Training)
            // 0x73
            pk7.IV_HP       = Util.ToInt32(TB_HPIV.Text);
            pk7.IV_ATK      = Util.ToInt32(TB_ATKIV.Text);
            pk7.IV_DEF      = Util.ToInt32(TB_DEFIV.Text);
            pk7.IV_SPE      = Util.ToInt32(TB_SPEIV.Text);
            pk7.IV_SPA      = Util.ToInt32(TB_SPAIV.Text);
            pk7.IV_SPD      = Util.ToInt32(TB_SPDIV.Text);
            pk7.IsEgg       = CHK_IsEgg.Checked;
            pk7.IsNicknamed = CHK_Nicknamed.Checked;

            // Block C
            pk7.HT_Name = TB_OTt2.Text;

            // 0x90-0xAF
            pk7.HT_Gender = PKX.getGender(Label_CTGender.Text) & 1;
            // Plus more, set by MemoryAmie (already in buff)

            // Block D
            pk7.OT_Name           = TB_OT.Text;
            pk7.CurrentFriendship = Util.ToInt32(TB_Friendship.Text);

            DateTime?egg_date     = null;
            int      egg_location = 0;

            if (CHK_AsEgg.Checked)      // If encountered as an egg, load the Egg Met data from fields.
            {
                egg_date     = CAL_EggDate.Value;
                egg_location = WinFormsUtil.getIndex(CB_EggLocation);
            }
            // Egg Met Data
            pk7.EggMetDate   = egg_date;
            pk7.Egg_Location = egg_location;
            // Met Data
            pk7.MetDate      = CAL_MetDate.Value;
            pk7.Met_Location = WinFormsUtil.getIndex(CB_MetLocation);

            if (pk7.IsEgg && pk7.Met_Location == 0)    // If still an egg, it has no hatch location/date. Zero it!
            {
                pk7.MetDate = null;
            }

            // 0xD7 Unknown

            pk7.Ball          = WinFormsUtil.getIndex(CB_Ball);
            pk7.Met_Level     = Util.ToInt32(TB_MetLevel.Text);
            pk7.OT_Gender     = PKX.getGender(Label_OTGender.Text);
            pk7.EncounterType = WinFormsUtil.getIndex(CB_EncounterType);
            pk7.Version       = WinFormsUtil.getIndex(CB_GameOrigin);
            pk7.Country       = WinFormsUtil.getIndex(CB_Country);
            pk7.Region        = WinFormsUtil.getIndex(CB_SubRegion);
            pk7.ConsoleRegion = WinFormsUtil.getIndex(CB_3DSReg);
            pk7.Language      = WinFormsUtil.getIndex(CB_Language);
            // 0xE4-0xE7

            // Toss in Party Stats
            Array.Resize(ref pk7.Data, pk7.SIZE_PARTY);
            pk7.Stat_Level     = Util.ToInt32(TB_Level.Text);
            pk7.Stat_HPCurrent = Util.ToInt32(Stat_HP.Text);
            pk7.Stat_HPMax     = Util.ToInt32(Stat_HP.Text);
            pk7.Stat_ATK       = Util.ToInt32(Stat_ATK.Text);
            pk7.Stat_DEF       = Util.ToInt32(Stat_DEF.Text);
            pk7.Stat_SPE       = Util.ToInt32(Stat_SPE.Text);
            pk7.Stat_SPA       = Util.ToInt32(Stat_SPA.Text);
            pk7.Stat_SPD       = Util.ToInt32(Stat_SPD.Text);

            // Unneeded Party Stats (Status, Flags, Unused)
            pk7.Data[0xE8]              = pk7.Data[0xE9] = pk7.Data[0xEA] = pk7.Data[0xEB] =
                pk7.Data[0xED]          = pk7.Data[0xEE] = pk7.Data[0xEF] =
                    pk7.Data[0xFE]      = pk7.Data[0xFF] = pk7.Data[0x100] =
                        pk7.Data[0x101] = pk7.Data[0x102] = pk7.Data[0x103] = 0;

            // Hax Illegality
            if (HaX)
            {
                pk7.Ability    = (byte)WinFormsUtil.getIndex(DEV_Ability);
                pk7.Stat_Level = (byte)Math.Min(Convert.ToInt32(MT_Level.Text), byte.MaxValue);
            }

            // Fix Moves if a slot is empty
            pk7.FixMoves();
            pk7.FixRelearn();

            // Fix Handler (Memories & OT) -- no foreign memories for Pokemon without a foreign trainer (none for eggs)
            if (Menu_ModifyPKM.Checked)
            {
                pk7.FixMemories();
            }

            // PKX is now filled
            pk7.RefreshChecksum();
            return(pk7);
        }
예제 #27
0
파일: MainPK2.cs 프로젝트: tkfltkgk/PKHeX
        private PKM preparePK2()
        {
            PK2 pk2 = pkm as PK2;

            if (pk2 == null)
            {
                return(null);
            }

            pk2.Species           = WinFormsUtil.getIndex(CB_Species);
            pk2.TID               = Util.ToInt32(TB_TID.Text);
            pk2.EXP               = Util.ToUInt32(TB_EXP.Text);
            pk2.HeldItem          = WinFormsUtil.getIndex(CB_HeldItem);
            pk2.IsEgg             = CHK_IsEgg.Checked;
            pk2.CurrentFriendship = Util.ToInt32(TB_Friendship.Text);
            pk2.Met_Level         = Util.ToInt32(TB_MetLevel.Text);
            pk2.Met_Location      = WinFormsUtil.getIndex(CB_MetLocation);
            pk2.Met_TimeOfDay     = CB_MetTimeOfDay.SelectedIndex;

            pk2.EV_HP  = Util.ToInt32(TB_HPEV.Text);
            pk2.EV_ATK = Util.ToInt32(TB_ATKEV.Text);
            pk2.EV_DEF = Util.ToInt32(TB_DEFEV.Text);
            pk2.EV_SPE = Util.ToInt32(TB_SPEEV.Text);
            pk2.EV_SPC = Util.ToInt32(TB_SPAEV.Text);

            if (CHK_Nicknamed.Checked)
            {
                pk2.Nickname = TB_Nickname.Text;
            }
            else
            {
                pk2.setNotNicknamed();
            }
            pk2.Move1       = WinFormsUtil.getIndex(CB_Move1);
            pk2.Move2       = WinFormsUtil.getIndex(CB_Move2);
            pk2.Move3       = WinFormsUtil.getIndex(CB_Move3);
            pk2.Move4       = WinFormsUtil.getIndex(CB_Move4);
            pk2.Move1_PP    = WinFormsUtil.getIndex(CB_Move1) > 0 ? Util.ToInt32(TB_PP1.Text) : 0;
            pk2.Move2_PP    = WinFormsUtil.getIndex(CB_Move2) > 0 ? Util.ToInt32(TB_PP2.Text) : 0;
            pk2.Move3_PP    = WinFormsUtil.getIndex(CB_Move3) > 0 ? Util.ToInt32(TB_PP3.Text) : 0;
            pk2.Move4_PP    = WinFormsUtil.getIndex(CB_Move4) > 0 ? Util.ToInt32(TB_PP4.Text) : 0;
            pk2.Move1_PPUps = WinFormsUtil.getIndex(CB_Move1) > 0 ? CB_PPu1.SelectedIndex : 0;
            pk2.Move2_PPUps = WinFormsUtil.getIndex(CB_Move2) > 0 ? CB_PPu2.SelectedIndex : 0;
            pk2.Move3_PPUps = WinFormsUtil.getIndex(CB_Move3) > 0 ? CB_PPu3.SelectedIndex : 0;
            pk2.Move4_PPUps = WinFormsUtil.getIndex(CB_Move4) > 0 ? CB_PPu4.SelectedIndex : 0;

            pk2.IV_HP  = Util.ToInt32(TB_HPIV.Text);
            pk2.IV_ATK = Util.ToInt32(TB_ATKIV.Text);
            pk2.IV_DEF = Util.ToInt32(TB_DEFIV.Text);
            pk2.IV_SPE = Util.ToInt32(TB_SPEIV.Text);
            pk2.IV_SPA = Util.ToInt32(TB_SPAIV.Text);

            pk2.OT_Name = TB_OT.Text;

            // Toss in Party Stats
            Array.Resize(ref pk2.Data, pk2.SIZE_PARTY);
            pk2.Stat_Level     = Util.ToInt32(TB_Level.Text);
            pk2.Stat_HPCurrent = Util.ToInt32(Stat_HP.Text);
            pk2.Stat_HPMax     = Util.ToInt32(Stat_HP.Text);
            pk2.Stat_ATK       = Util.ToInt32(Stat_ATK.Text);
            pk2.Stat_DEF       = Util.ToInt32(Stat_DEF.Text);
            pk2.Stat_SPE       = Util.ToInt32(Stat_SPE.Text);
            pk2.Stat_SPA       = Util.ToInt32(Stat_SPA.Text);
            pk2.Stat_SPD       = Util.ToInt32(Stat_SPD.Text);

            if (HaX)
            {
                pk2.Stat_Level = (byte)Math.Min(Convert.ToInt32(MT_Level.Text), byte.MaxValue);
            }

            // Fix Moves if a slot is empty
            pk2.FixMoves();

            return(pk2);
        }
예제 #28
0
        // View Updates
        private void B_Search_Click(object sender, EventArgs e)
        {
            // Populate Search Query Result
            IEnumerable <MysteryGift> res = RawDB;

            int format = MAXFORMAT + 1 - CB_Format.SelectedIndex;

            switch (CB_FormatComparator.SelectedIndex)
            {
            case 0: /* Do nothing */ break;

            case 1: res = res.Where(mg => mg.Format >= format); break;

            case 2: res = res.Where(mg => mg.Format == format); break;

            case 3: res = res.Where(mg => mg.Format <= format); break;
            }

            // Primary Searchables
            int species = WinFormsUtil.getIndex(CB_Species);
            int item    = WinFormsUtil.getIndex(CB_HeldItem);

            if (species != -1)
            {
                res = res.Where(pk => pk.Species == species);
            }
            if (item != -1)
            {
                res = res.Where(pk => pk.HeldItem == item);
            }

            // Secondary Searchables
            int move1 = WinFormsUtil.getIndex(CB_Move1);
            int move2 = WinFormsUtil.getIndex(CB_Move2);
            int move3 = WinFormsUtil.getIndex(CB_Move3);
            int move4 = WinFormsUtil.getIndex(CB_Move4);

            if (move1 != -1)
            {
                res = res.Where(pk => pk.Moves.Contains(move1));
            }
            if (move2 != -1)
            {
                res = res.Where(pk => pk.Moves.Contains(move2));
            }
            if (move3 != -1)
            {
                res = res.Where(pk => pk.Moves.Contains(move3));
            }
            if (move4 != -1)
            {
                res = res.Where(pk => pk.Moves.Contains(move4));
            }
            if (CHK_Shiny.CheckState == CheckState.Checked)
            {
                res = res.Where(pk => pk.IsShiny);
            }
            if (CHK_Shiny.CheckState == CheckState.Unchecked)
            {
                res = res.Where(pk => !pk.IsShiny);
            }
            if (CHK_IsEgg.CheckState == CheckState.Checked)
            {
                res = res.Where(pk => pk.IsEgg);
            }
            if (CHK_IsEgg.CheckState == CheckState.Unchecked)
            {
                res = res.Where(pk => !pk.IsEgg);
            }

            slotSelected = -1; // reset the slot last viewed

            if (RTB_Instructions.Lines.Any(line => line.Length > 0))
            {
                var raw =
                    RTB_Instructions.Lines
                    .Where(line => !string.IsNullOrWhiteSpace(line))
                    .Where(line => new[] { '!', '=' }.Contains(line[0]));

                var filters = (from line in raw
                               let eval = line[0] == '='
                                          let split = line.Substring(1).Split('=')
                                                      where split.Length == 2 && !string.IsNullOrWhiteSpace(split[0])
                                                      select new BatchEditor.StringInstruction {
                    PropertyName = split[0], PropertyValue = split[1], Evaluator = eval
                }).ToArray();

                if (filters.Any(z => string.IsNullOrWhiteSpace(z.PropertyValue)))
                {
                    WinFormsUtil.Error("Empty Filter Value detected."); return;
                }

                res = res.Where(gift => // Compare across all filters
                {
                    foreach (var cmd in filters)
                    {
                        if (!gift.GetType().HasPropertyAll(cmd.PropertyName))
                        {
                            return(false);
                        }
                        try { if (ReflectUtil.GetValueEquals(gift, cmd.PropertyName, cmd.PropertyValue) == cmd.Evaluator)
                              {
                                  continue;
                              }
                        }
                        catch { Console.WriteLine($"Unable to compare {cmd.PropertyName} to {cmd.PropertyValue}."); }
                        return(false);
                    }
                    return(true);
                });
            }

            var results = res.ToArray();

            if (results.Length == 0)
            {
                WinFormsUtil.Alert("No results found!");
            }
            setResults(new List <MysteryGift>(results)); // updates Count Label as well.
            System.Media.SystemSounds.Asterisk.Play();
        }
예제 #29
0
        private PKM preparePK3()
        {
            PK3 pk3 = pkm as PK3;

            if (pk3 == null)
            {
                return(null);
            }

            pk3.Species       = WinFormsUtil.getIndex(CB_Species);
            pk3.HeldItem      = WinFormsUtil.getIndex(CB_HeldItem);
            pk3.TID           = Util.ToInt32(TB_TID.Text);
            pk3.SID           = Util.ToInt32(TB_SID.Text);
            pk3.EXP           = Util.ToUInt32(TB_EXP.Text);
            pk3.PID           = Util.getHEXval(TB_PID.Text);
            pk3.AbilityNumber = 1 << CB_Ability.SelectedIndex; // to match gen6+

            pk3.FatefulEncounter = CHK_Fateful.Checked;
            pk3.Gender           = PKX.getGender(Label_Gender.Text);
            pk3.EV_HP            = Util.ToInt32(TB_HPEV.Text);
            pk3.EV_ATK           = Util.ToInt32(TB_ATKEV.Text);
            pk3.EV_DEF           = Util.ToInt32(TB_DEFEV.Text);
            pk3.EV_SPE           = Util.ToInt32(TB_SPEEV.Text);
            pk3.EV_SPA           = Util.ToInt32(TB_SPAEV.Text);
            pk3.EV_SPD           = Util.ToInt32(TB_SPDEV.Text);

            pk3.CNT_Cool   = Util.ToInt32(TB_Cool.Text);
            pk3.CNT_Beauty = Util.ToInt32(TB_Beauty.Text);
            pk3.CNT_Cute   = Util.ToInt32(TB_Cute.Text);
            pk3.CNT_Smart  = Util.ToInt32(TB_Smart.Text);
            pk3.CNT_Tough  = Util.ToInt32(TB_Tough.Text);
            pk3.CNT_Sheen  = Util.ToInt32(TB_Sheen.Text);

            pk3.PKRS_Days   = CB_PKRSDays.SelectedIndex;
            pk3.PKRS_Strain = CB_PKRSStrain.SelectedIndex;
            pk3.Nickname    = TB_Nickname.Text;
            pk3.Move1       = WinFormsUtil.getIndex(CB_Move1);
            pk3.Move2       = WinFormsUtil.getIndex(CB_Move2);
            pk3.Move3       = WinFormsUtil.getIndex(CB_Move3);
            pk3.Move4       = WinFormsUtil.getIndex(CB_Move4);
            pk3.Move1_PP    = WinFormsUtil.getIndex(CB_Move1) > 0 ? Util.ToInt32(TB_PP1.Text) : 0;
            pk3.Move2_PP    = WinFormsUtil.getIndex(CB_Move2) > 0 ? Util.ToInt32(TB_PP2.Text) : 0;
            pk3.Move3_PP    = WinFormsUtil.getIndex(CB_Move3) > 0 ? Util.ToInt32(TB_PP3.Text) : 0;
            pk3.Move4_PP    = WinFormsUtil.getIndex(CB_Move4) > 0 ? Util.ToInt32(TB_PP4.Text) : 0;
            pk3.Move1_PPUps = WinFormsUtil.getIndex(CB_Move1) > 0 ? CB_PPu1.SelectedIndex : 0;
            pk3.Move2_PPUps = WinFormsUtil.getIndex(CB_Move2) > 0 ? CB_PPu2.SelectedIndex : 0;
            pk3.Move3_PPUps = WinFormsUtil.getIndex(CB_Move3) > 0 ? CB_PPu3.SelectedIndex : 0;
            pk3.Move4_PPUps = WinFormsUtil.getIndex(CB_Move4) > 0 ? CB_PPu4.SelectedIndex : 0;

            pk3.IV_HP       = Util.ToInt32(TB_HPIV.Text);
            pk3.IV_ATK      = Util.ToInt32(TB_ATKIV.Text);
            pk3.IV_DEF      = Util.ToInt32(TB_DEFIV.Text);
            pk3.IV_SPE      = Util.ToInt32(TB_SPEIV.Text);
            pk3.IV_SPA      = Util.ToInt32(TB_SPAIV.Text);
            pk3.IV_SPD      = Util.ToInt32(TB_SPDIV.Text);
            pk3.IsEgg       = CHK_IsEgg.Checked;
            pk3.IsNicknamed = CHK_Nicknamed.Checked;

            pk3.OT_Name           = TB_OT.Text;
            pk3.CurrentFriendship = Util.ToInt32(TB_Friendship.Text);

            pk3.Ball      = WinFormsUtil.getIndex(CB_Ball);
            pk3.Met_Level = Util.ToInt32(TB_MetLevel.Text);
            pk3.OT_Gender = PKX.getGender(Label_OTGender.Text);
            pk3.Version   = WinFormsUtil.getIndex(CB_GameOrigin);
            pk3.Language  = WinFormsUtil.getIndex(CB_Language);

            pk3.Met_Location = WinFormsUtil.getIndex(CB_MetLocation);

            // Toss in Party Stats
            Array.Resize(ref pk3.Data, pk3.SIZE_PARTY);
            pk3.Stat_Level     = Util.ToInt32(TB_Level.Text);
            pk3.Stat_HPCurrent = Util.ToInt32(Stat_HP.Text);
            pk3.Stat_HPMax     = Util.ToInt32(Stat_HP.Text);
            pk3.Stat_ATK       = Util.ToInt32(Stat_ATK.Text);
            pk3.Stat_DEF       = Util.ToInt32(Stat_DEF.Text);
            pk3.Stat_SPE       = Util.ToInt32(Stat_SPE.Text);
            pk3.Stat_SPA       = Util.ToInt32(Stat_SPA.Text);
            pk3.Stat_SPD       = Util.ToInt32(Stat_SPD.Text);

            if (HaX)
            {
                pk3.Stat_Level = (byte)Math.Min(Convert.ToInt32(MT_Level.Text), byte.MaxValue);
            }

            // Fix Moves if a slot is empty
            pk3.FixMoves();

            pk3.RefreshChecksum();
            return(pk3);
        }