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(""); }
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}}"); } } }