Beispiel #1
0
        public void AddDump(List <string> lines, PersonalTable table, int species, int form)
        {
            var    index = table.GetFormeIndex(species, form);
            var    entry = table[index];
            string name  = EntryNames[index];

            AddDump(lines, entry, index, name, species, form);
            lines.Add("");
        }
Beispiel #2
0
        public IEnumerable <string> GetPrettySummary(IReadOnlyList <string> species, IReadOnlyList <string> items, IReadOnlyList <string> moves, IReadOnlyList <int> tmtrs,
                                                     IReadOnlyList <NestHoleReward8Table> drop_tables, IReadOnlyList <NestHoleReward8Table> bonus_tables, int index, PersonalTable pt = null, string[] types = null)
        {
            //yield return $"Nest ID: {TableID:X4}";
            Debug.WriteLine(index);

            yield return("{{捕捉/header/巢穴2|" + (GameVersion == 1 ? "SW" : "SH") + "}}");

            yield return($"|-\n| colspan=\"11\" class=\"bgwhite\" | Nest ID: {TableID:X4}");

            List <EncounterNest8> sortedEntries = Entries.ToList();

            sortedEntries.Sort(Xzonn.SortNest);
            List <EncounterNest8> table = new List <EncounterNest8> {
                sortedEntries[0]
            };

            uint[] Probabilities = new uint[] { 0, 0, 0, 0, 0 };
            int    i, j;

            for (i = 1; i < sortedEntries.Count; i++)
            {
                if (sortedEntries[i].Species == sortedEntries[i - 1].Species && sortedEntries[i].AltForm == sortedEntries[i - 1].AltForm && sortedEntries[i].IsGigantamax == sortedEntries[i - 1].IsGigantamax && sortedEntries[i].FlawlessIVs == sortedEntries[i - 1].FlawlessIVs && sortedEntries[i].DropTableID == sortedEntries[i - 1].DropTableID)
                {
                    for (j = 0; j < 5; j++)
                    {
                        table[table.Count - 1].Probabilities[j] += sortedEntries[i].Probabilities[j];
                    }
                }
                else
                {
                    table.Add(sortedEntries[i]);
                }
            }
            table.Sort(Xzonn.SortNest);
            for (i = 0; i < table.Count; i++)
            {
                foreach (var line in PrettySummary(table[i], table.ToArray(), i, pt, types))
                {
                    yield return($"{line}");
                }
            }
            yield return("{{捕捉/footer/巢穴2|" + (GameVersion == 1 ? "SW" : "SH") + "}}");

            /*
             * foreach (var entry in Entries)
             * {
             *  foreach (var line in PrettySummary(entry))
             *      yield return $"\t{line}";
             * }*/

            yield return(string.Empty);

            IEnumerable <string> PrettySummary(EncounterNest8 e, EncounterNest8[] table = null, int count = 0, PersonalTable pt = null, string[] types = null)
            {
                var game = GameVersion switch
                {
                    1 => "yes|no",
                    2 => "no|yes",
                    _ => throw new NotImplementedException()
                };
                int    formNum   = pt.GetFormeIndex(e.Species, e.AltForm);
                var    giga      = e.IsGigantamax ? "超极巨化" : string.Empty;
                var    form      = e.AltForm != 0 ? $"-{e.AltForm}" : string.Empty;
                string xzForm    = Xzonn.Form(formNum);
                string xzFormOut = (xzForm + giga).Length > 0 ? "|form=" + xzForm + giga : "";
                string type      = $"|type1={types[pt[formNum].Type1]}" + (pt[formNum].Type1 != pt[formNum].Type2 ? $"|type2={types[pt[formNum].Type2]}" : "");
                var    rank      = $"{e.MinRank + 1}-Star";
                string ret       = "{{捕捉/entry8/巢穴2|" + $"{e.Species:D3}{xzFormOut}|{species[e.Species]}{type}|{game}|";
                //yield return "{{" + $"" + "}}";
                //yield return $"{rank} {giga}{e.Species}-{e.AltForm} {species[e.Species]}";
                //yield return $"\tLv. {15 + (10 * e.MinRank)}-{20 + (10 * e.MaxRank)}";
                //yield return $"\tGender: {new[] { "Random", "Male", "Female", "Genderless" }[e.Gender]}";

                var ability = e.Ability switch
                {
                    2 => "100",
                    3 => "no",
                    4 => "yes",
                    _ => throw new Exception()
                };

                //yield return $"\tAbility: {ability}";
                //yield return "\tSelection Probabilities:";
                for (var i = 0; i < e.Probabilities.Length; i++)
                {
                    if (e.Probabilities[i] != 0)
                    {
                        ret += $"{e.Probabilities[i]}";
                        //yield return $"\t\t{i + 1}-Star Desired: {e.Probabilities[i]:00}%";
                    }
                    ret += "|";
                }
                ret += $"{ability}|";

                if (count == 0 || table[count - 1].FlawlessIVs != e.FlawlessIVs || table[count - 1].DropTableID != e.DropTableID || table[count - 1].BonusTableID != e.BonusTableID)
                {
                    //yield return "\tBonus Drops:";
                    foreach (var entry in GetOrderedDrops(bonus_tables, e.BonusTableID, e.FlawlessIVs))
                    {
                        ret += $"{GetItemName(entry.ItemID)}×{entry.Values[e.FlawlessIVs]}<br>";
                        //yield return $"\t\t{entry.Values[e.FlawlessIVs]} x {GetItemName(entry.ItemID)}";
                    }
                    ret = ret.Substring(0, ret.Length - 4) + "<hr>";

                    //yield return "\tDrops:";
                    foreach (var entry in GetOrderedDrops(drop_tables, e.DropTableID, e.FlawlessIVs))
                    {
                        ret += $"{GetItemName(entry.ItemID)} {entry.Values[e.FlawlessIVs]}%<br>";
                        //yield return $"\t\t{entry.Values[e.FlawlessIVs],3}% {GetItemName(entry.ItemID)}";
                    }
                    ret = ret.Substring(0, ret.Length - 4);
                    int j = 1;
                    while (count + j < table.Length && table[count + j].FlawlessIVs == e.FlawlessIVs && table[count + j].DropTableID == e.DropTableID && table[count + j].BonusTableID == e.BonusTableID)
                    {
                        j++;
                    }
                    ret += $"|{j}";
                }
                else
                {
                    ret += "|0";
                }
                ret += "}}";
                yield return(ret);
                //yield return string.Empty;
            }

            IEnumerable <INestHoleReward> GetOrderedDrops(IReadOnlyList <INestHoleRewardTable> rewards, ulong tableID, int encounterRank)
            {
                var table = rewards.First(t => t.TableID == tableID);
                var list  = table.Rewards
                            .Where(d => d.Values[encounterRank] != 0)
                            .OrderByDescending(d => d.Values[encounterRank])
                            .ThenBy(d => GetItemName(d.ItemID));

                foreach (var entry in list)
                {
                    yield return(entry);
                }
            }

            string GetItemName(uint itemID)
            {
                if (1130 <= itemID && itemID < 1230)
                { // TR
                    return("{{bag|TR " + Xzonn.TRType[(int)itemID - 1130] + $"|baglink={items[(int)itemID]}" + "}}{{TR|" + $"{(int)itemID - 1130}" + "|8}}");

                    return($"{items[(int)itemID]} {moves[tmtrs[100 + (int)itemID - 1130]]}");
                }
                return("{{bag|" + items[(int)itemID] + "|show=y}}");
            }
        }
    }