示例#1
0
        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);
        }
示例#2
0
        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;
            }
        }