Exemplo n.º 1
0
        // Roll new bonus stats and values except the locked stat
        public static List <ItemStat> RollBonusStatsWithStatLocked(Item item, short ignoreStat, bool isSpecialStat)
        {
            int  id        = item.Id;
            int  level     = item.Level;
            bool isTwoHand = item.IsTwoHand;

            if (!ItemOptionsMetadataStorage.GetRandomBonus(id, out List <ItemOption> randomBonusList))
            {
                return(null);
            }

            Random     random     = new Random();
            ItemOption itemOption = randomBonusList.FirstOrDefault(options => options.Rarity == item.Rarity && options.Slots > 0);

            if (itemOption == null)
            {
                return(null);
            }

            List <ItemStat> itemStats = new List <ItemStat>();

            List <ItemAttribute>        attributes        = isSpecialStat ? itemOption.Stats : itemOption.Stats.Where(x => (short)x != ignoreStat).ToList();
            List <SpecialItemAttribute> specialAttributes = isSpecialStat ? itemOption.SpecialStats.Where(x => (short)x != ignoreStat).ToList() : itemOption.SpecialStats;

            foreach (ItemAttribute attribute in attributes)
            {
                Dictionary <ItemAttribute, List <ParserStat> > dictionary = GetRange(id);
                if (!dictionary.ContainsKey(attribute))
                {
                    continue;
                }

                NormalStat normalStat = NormalStat.Of(dictionary[attribute][Roll(level)]);
                if (isTwoHand)
                {
                    normalStat.Flat    *= 2;
                    normalStat.Percent *= 2;
                }
                itemStats.Add(normalStat);
            }

            foreach (SpecialItemAttribute attribute in specialAttributes)
            {
                Dictionary <SpecialItemAttribute, List <ParserSpecialStat> > dictionary = GetSpecialRange(id);
                if (!dictionary.ContainsKey(attribute))
                {
                    continue;
                }

                SpecialStat specialStat = SpecialStat.Of(dictionary[attribute][Roll(level)]);
                if (isTwoHand)
                {
                    specialStat.Flat    *= 2;
                    specialStat.Percent *= 2;
                }
                itemStats.Add(specialStat);
            }

            return(itemStats.OrderBy(x => random.Next()).Take(item.Stats.BonusStats.Count).ToList());
        }
Exemplo n.º 2
0
        // Get basic stats
        public List <ItemStat> GetBasicStats(int itemId, int rarity, int level, bool isTwoHand)
        {
            if (!ItemOptionsMetadataStorage.GetBasic(itemId, out List <ItemOption> basicList))
            {
                return(null);
            }
            ItemOption itemOptions = basicList.Find(options => options.Rarity == rarity);

            if (itemOptions == null)
            {
                return(null);
            }

            // Weapon and pet atk comes from each Item option and not from stat ranges
            if (itemOptions.MaxWeaponAtk != 0)
            {
                BasicStats.Add(NormalStat.Of(ItemAttribute.MinWeaponAtk, itemOptions.MinWeaponAtk));
                BasicStats.Add(NormalStat.Of(ItemAttribute.MaxWeaponAtk, itemOptions.MaxWeaponAtk));
            }
            if (itemOptions.PetAtk != 0)
            {
                BasicStats.Add(NormalStat.Of(ItemAttribute.PetBonusAtk, itemOptions.PetAtk));
            }

            List <ItemStat> itemStats = RollStats(itemId, level, isTwoHand, itemOptions);

            return(itemStats);
        }
Exemplo n.º 3
0
        // Roll new bonus stats and values except the locked stat
        public static List <ItemStat> RollBonusStatsWithStatLocked(int itemId, int rarity, int slots, int level, short ignoreStat, bool isSpecialStat)
        {
            if (!ItemOptionsMetadataStorage.GetRandomBonus(itemId, out List <ItemOption> randomBonusList))
            {
                return(null);
            }

            Random     random     = new Random();
            ItemOption itemOption = randomBonusList.FirstOrDefault(options => options.Rarity == rarity && options.Slots > 0);

            if (itemOption == null)
            {
                return(null);
            }

            List <ItemStat> itemStats = new List <ItemStat>();

            List <ItemAttribute>        attributes        = isSpecialStat ? itemOption.Stats : itemOption.Stats.Where(x => (short)x != ignoreStat).ToList();
            List <SpecialItemAttribute> specialAttributes = isSpecialStat ? itemOption.SpecialStats.Where(x => (short)x != ignoreStat).ToList() : itemOption.SpecialStats;

            foreach (ItemAttribute attribute in attributes)
            {
                itemStats.Add(NormalStat.Of(GetRange(itemId)[attribute][Roll(level)]));
            }

            foreach (SpecialItemAttribute attribute in specialAttributes)
            {
                itemStats.Add(SpecialStat.Of(GetSpecialRange(itemId)[attribute][Roll(level)]));
            }

            return(itemStats.OrderBy(x => random.Next()).Take(slots).ToList());
        }
Exemplo n.º 4
0
        // Roll new bonus stats and values
        public static List <ItemStat> RollBonusStats(int itemId, int rarity, int level)
        {
            if (!ItemOptionsMetadataStorage.GetRandomBonus(itemId, out List <ItemOption> randomBonusList))
            {
                return(null);
            }

            Random     random     = new Random();
            ItemOption itemOption = randomBonusList.FirstOrDefault(options => options.Rarity == rarity && options.Slots > 0);

            if (itemOption == null)
            {
                return(null);
            }

            List <ItemStat> itemStats = new List <ItemStat>();

            foreach (ItemAttribute attribute in itemOption.Stats)
            {
                itemStats.Add(NormalStat.Of(GetRange(itemId)[attribute][Roll(level)]));
            }

            foreach (SpecialItemAttribute attribute in itemOption.SpecialStats)
            {
                itemStats.Add(SpecialStat.Of(GetSpecialRange(itemId)[attribute][Roll(level)]));
            }

            return(itemStats.OrderBy(x => random.Next()).Take(itemOption.Slots).ToList());
        }
Exemplo n.º 5
0
        // Get bonus stats
        public static List <ItemStat> GetBonusStats(int itemId, int rarity, int level, bool isTwoHand)
        {
            if (!ItemOptionsMetadataStorage.GetRandomBonus(itemId, out List <ItemOption> randomBonusList))
            {
                return(null);
            }

            Random     random     = new Random();
            ItemOption itemOption = randomBonusList.FirstOrDefault(options => options.Rarity == rarity && options.Slots > 0);

            if (itemOption == null)
            {
                return(null);
            }

            List <ItemStat> itemStats = RollStats(itemId, level, isTwoHand, itemOption);

            return(itemStats.OrderBy(x => random.Next()).Take(itemOption.Slots).ToList());
        }
Exemplo n.º 6
0
        // Roll new basic stats and values
        public List <ItemStat> RollBasicStats(int itemId, int rarity, int level)
        {
            if (!ItemOptionsMetadataStorage.GetBasic(itemId, out List <ItemOption> basicList))
            {
                return(null);
            }
            ItemOption itemOptions = basicList.Find(options => options.Rarity == rarity);

            if (itemOptions == null)
            {
                return(null);
            }

            // Weapon and pet atk comes from each Item option and not from stat ranges
            if (itemOptions.MaxWeaponAtk != 0)
            {
                BasicStats.Add(NormalStat.Of(ItemAttribute.MinWeaponAtk, itemOptions.MinWeaponAtk));
                BasicStats.Add(NormalStat.Of(ItemAttribute.MaxWeaponAtk, itemOptions.MaxWeaponAtk));
            }
            if (itemOptions.PetAtk != 0)
            {
                BasicStats.Add(NormalStat.Of(ItemAttribute.PetBonusAtk, itemOptions.PetAtk));
            }

            List <ItemStat> itemStats = new List <ItemStat>();

            foreach (ItemAttribute attribute in itemOptions.Stats)
            {
                itemStats.Add(NormalStat.Of(GetRange(itemId)[attribute][Roll(level)]));
            }

            foreach (SpecialItemAttribute attribute in itemOptions.SpecialStats)
            {
                itemStats.Add(SpecialStat.Of(GetSpecialRange(itemId)[attribute][Roll(level)]));
            }

            return(itemStats);
        }