private static DropSuperRareEntry TryGetSuperRareTable(BdatStringItem row) { var entry = new DropSuperRareEntry(); if (row is null) { return(entry); } entry.WeaponRate = int.Parse(row["wpn_per"].ValueString); entry.UniqueWeaponRate = int.Parse(row["uni_wpn_per"].ValueString); entry.UniqueArmorRate = int.Parse(row["uni_equip_per"].ValueString); entry.ArtsRate = int.Parse(row["arts_per"].ValueString); for (int i = 0; i < MaxLotItems; i++) { var item = GetWeaponEntry(row, i); if (item == null) { break; } entry.Weapons.Add(item); } for (int i = 0; i < MaxLotItems; i++) { var item = GetUniqueWeaponEntry(row, i); if (item == null) { break; } entry.UniqueWeapons.Add(item); } for (int i = 0; i < MaxLotItems; i++) { var item = GetUniqueArmorEntry(row, i); if (item == null) { break; } entry.UniqueArmor.Add(item); } for (int i = 0; i < MaxLotItems; i++) { var item = GetArtBookEntry(row, i); if (item == null) { break; } entry.ArtBooks.Add(item); } return(entry); }
private static void CalculateSuperRareDropRates(DropSuperRareEntry entry) { int lotTotal = entry.WeaponRate + entry.UniqueWeaponRate + entry.UniqueArmorRate + entry.ArtsRate; entry.WeaponDropRate = (double)entry.WeaponRate / lotTotal; entry.UniqueWeaponDropRate = (double)entry.UniqueWeaponRate / lotTotal; entry.UniqueArmorDropRate = (double)entry.UniqueArmorRate / lotTotal; entry.ArtsDropRate = (double)entry.ArtsRate / lotTotal; var weapons = entry.Weapons; int weaponTotal = weapons.Sum(x => x.Rate); foreach (var item in weapons) { item.LotDropRate = (double)item.Rate / weaponTotal; item.TotalDropRate = item.LotDropRate * entry.WeaponDropRate; } var uniqueWeapons = entry.UniqueWeapons; int uniqueWeaponTotal = uniqueWeapons.Sum(x => x.Rate); foreach (var item in uniqueWeapons) { item.LotDropRate = (double)item.Rate / uniqueWeaponTotal; item.TotalDropRate = item.LotDropRate * entry.UniqueWeaponDropRate; } var uniqueEquips = entry.UniqueArmor; int uniqueEquipTotal = uniqueEquips.Sum(x => x.Rate); foreach (var item in uniqueEquips) { item.LotDropRate = (double)item.Rate / uniqueEquipTotal; item.TotalDropRate = item.LotDropRate * entry.UniqueArmorDropRate; } var arts = entry.ArtBooks; int artsTotal = arts.Sum(x => x.Rate); foreach (var item in arts) { item.LotDropRate = (double)item.Rate / artsTotal; item.TotalDropRate = item.LotDropRate * entry.ArtsDropRate; } }