PKHeX.PKX.Simulator.Set.Set C# (CSharp) Method

Set() public method

public Set ( string input, string species, string items, string natures, string moves, string abilities ) : System
input string
species string
items string
natures string
moves string
abilities string
return System
                public Set(string input, string[] species, string[] items, string[] natures, string[] moves, string[] abilities)
                {
                    Nickname = null;
                    Species = -1;
                    Form = null;
                    Gender = null;
                    Item = 0;
                    Ability = 0;
                    Level = 100;
                    Shiny = false;
                    Friendship = 255;
                    Nature = 0;
                    EVs = new byte[6];
                    IVs = new[] { 31, 31, 31, 31, 31, 31 };
                    Moves = new int[4];
                    string[] stats =  { "HP", "Atk", "Def", "SpA", "SpD", "Spe" };

                    string[] lines = input.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None);
                    for (int i = 0; i < lines.Length; i++) lines[i] = lines[i].Replace("'", "’").Trim(); // Sanitize apostrophes

                    // Seek for start of set
                    int start = -1;
                    for (int i = 0; i < lines.Length; i++)
                        if (lines[i].Contains(" @ ")) { start = i; break; }
                    lines = lines.Skip(start).Take(lines.Length - start).ToArray();

                    // Abort if no text is found
                    if (start == -1)
                    {
                        // Try to parse the first line if it does not have any item
                        string ld = lines[0];
                        // Gender Detection
                        string last3 = ld.Substring(ld.Length - 3);
                        if (last3 == "(M)" || last3 == "(F)")
                        {
                            Gender = last3.Substring(1, 1);
                            ld = ld.Substring(0, ld.Length - 3);
                        }
                        // Nickname Detection
                        string spec = ld;
                        if (spec.Contains("("))
                        {
                            int index = spec.LastIndexOf("(", StringComparison.Ordinal);
                            string n1 = spec.Substring(0, index - 1);
                            string n2 = spec.Substring(index).Replace("(", "").Replace(")", "").Replace(" ", "");

                            bool inverted = Array.IndexOf(species, n2.Replace(" ", "")) > -1 || (Species = Array.IndexOf(species, n2.Split('-')[0])) > 0;
                            spec = inverted ? n2 : n1;
                            Nickname = inverted ? n1 : n2;
                        }
                        Species = Array.IndexOf(species, spec.Replace(" ", ""));
                        if (
                            (Species = Array.IndexOf(species, spec)) < 0 // Not an Edge Case
                            &&
                            (Species = Array.IndexOf(species, spec.Replace(" ", ""))) < 0 // Has Form
                            ) 
                        {
                            string[] tmp = spec.Split(new[] { "-" }, StringSplitOptions.None);
                            if (tmp.Length < 2) return;
                            Species = Array.IndexOf(species, tmp[0].Replace(" ", ""));
                            Form = tmp[1].Replace(" ", "");
                        }
                        if (Species < -1)
                            return;
                        else
                            lines = lines.Skip(1).Take(lines.Length - 1).ToArray();
                    }
                    int movectr = 0;
                    // Detect relevant data
                    foreach (string line in lines)
                    {
                        if (line.Length < 2) continue;
                        if (line.Contains("- "))
                        {
                            string moveString = line.Substring(2);
                            if (moveString.Contains("Hidden Power"))
                            {
                                if (moveString.Length > 13) // Defined Hidden Power
                                {
                                    string type = moveString.Remove(0, 13).Replace("[", "").Replace("]", ""); // Trim out excess data
                                    int hpVal = Array.IndexOf(hptypes, type); // Get HP Type
                                    if (hpVal >= 0) IVs = setHPIVs(hpVal, IVs); // Get IVs
                                }
                                moveString = "Hidden Power";
                            }
                            Moves[movectr++] = Array.IndexOf(moves, moveString);
                            continue;
                        }

                        string[] brokenline = line.Split(new[] { ": " }, StringSplitOptions.None);
                        switch (brokenline[0])
                        {
                            case "Ability": { Ability = Array.IndexOf(abilities, brokenline[1]); break; }
                            case "Level": { Level = Util.ToInt32(brokenline[1]); break; }
                            case "Shiny": { Shiny = (brokenline[1] == "Yes"); break; }
                            case "Happiness": { Friendship = Util.ToInt32(brokenline[1]); break; }
                            case "EVs":
                                {
                                    // Get EV list String
                                    string[] evlist = brokenline[1].Replace("SAtk", "SpA").Replace("SDef", "SpD").Replace("Spd", "Spe").Split(new[] { " / ", " " }, StringSplitOptions.None);
                                    for (int i = 0; i < evlist.Length / 2; i++)
                                        EVs[Array.IndexOf(stats, evlist[1 + i * 2])] = (byte)Util.ToInt32(evlist[0 + 2 * i]);
                                    break;
                                }
                            case "IVs":
                                {
                                    // Get IV list String
                                    string[] ivlist = brokenline[1].Split(new[] { " / ", " " }, StringSplitOptions.None);
                                    for (int i = 0; i < ivlist.Length / 2; i++)
                                        IVs[Array.IndexOf(stats, ivlist[1 + i * 2])] = (byte)Util.ToInt32(ivlist[0 + 2 * i]);
                                    break;
                                }
                            default:
                                {
                                    // Either Nature or Gender ItemSpecies
                                    if (brokenline[0].Contains(" @ "))
                                    {
                                        string[] ld = line.Split(new[] { " @ " }, StringSplitOptions.None);
                                        Item = Array.IndexOf(items, ld.Last());
                                        // Gender Detection
                                        string last3 = ld[0].Substring(ld[0].Length - 3);
                                        if (last3 == "(M)" || last3 == "(F)")
                                        {
                                            Gender = last3.Substring(1, 1);
                                            ld[0] = ld[0].Substring(0, ld[ld.Length - 2].Length - 3);
                                        }
                                        // Nickname Detection
                                        string spec = ld[0];
                                        if (spec.Contains("("))
                                        {
                                            int index = spec.LastIndexOf("(", StringComparison.Ordinal);
                                            string n1 = spec.Substring(0, index - 1);
                                            string n2 = spec.Substring(index).Replace("(", "").Replace(")", "").Replace(" ", "");

                                            bool inverted = Array.IndexOf(species, n2.Replace(" ", "")) > -1 || (Species = Array.IndexOf(species, n2.Split('-')[0])) > 0;
                                            spec = inverted ? n2 : n1;
                                            Nickname = inverted ? n1 : n2;
                                        }
                                        if (
                                            (Species = Array.IndexOf(species, spec)) < 0 // Not an Edge Case
                                            &&
                                            (Species = Array.IndexOf(species, spec.Replace(" ", ""))) < 0 // Has Form
                                            ) 
                                        {
                                            string[] tmp = spec.Split(new[] { "-" }, StringSplitOptions.None);
                                            Species = Array.IndexOf(species, tmp[0].Replace(" ", ""));
                                            Form = tmp[1].Replace(" ", "");
                                        }
                                    }
                                    else if (brokenline[0].Contains("Nature"))
                                        Nature = Array.IndexOf(natures, line.Split(' ')[0]);
                                    else // Fallback
                                        Species = Array.IndexOf(species, line.Split('(')[0]);
                                } break;
                        }
                    }
                }
            }
PKX.Simulator.Set