Example #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 randomId = ItemMetadataStorage.GetOptionRandom(id);
            ItemOptionRandom randomOptions = ItemOptionRandomMetadataStorage.GetMetadata(randomId, item.Rarity);

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

            Random random = new Random();

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

            List <ParserStat>        attributes        = isSpecialStat ? randomOptions.Stats : randomOptions.Stats.Where(x => (short)x.Id != ignoreStat).ToList();
            List <ParserSpecialStat> specialAttributes = isSpecialStat ? randomOptions.SpecialStats.Where(x => (short)x.Id != ignoreStat).ToList() : randomOptions.SpecialStats;

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

                NormalStat normalStat = new NormalStat(dictionary[attribute.Id][Roll(id)]);
                if (randomOptions.MultiplyFactor > 0)
                {
                    normalStat.Flat    *= (int)Math.Ceiling(randomOptions.MultiplyFactor);
                    normalStat.Percent *= randomOptions.MultiplyFactor;
                }
                itemStats.Add(normalStat);
            }

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

                SpecialStat specialStat = new SpecialStat(dictionary[attribute.Id][Roll(id)]);
                if (randomOptions.MultiplyFactor > 0)
                {
                    specialStat.Flat    *= (int)Math.Ceiling(randomOptions.MultiplyFactor);
                    specialStat.Percent *= randomOptions.MultiplyFactor;
                }
                itemStats.Add(specialStat);
            }

            return(itemStats.OrderBy(x => random.Next()).Take(item.Stats.BonusStats.Count).ToList());
        }
Example #2
0
        public void GetBonusStats(int itemId, int rarity)
        {
            int randomId = ItemMetadataStorage.GetOptionRandom(itemId);
            ItemOptionRandom randomOptions = ItemOptionRandomMetadataStorage.GetMetadata(randomId, rarity);

            if (randomOptions == null)
            {
                return;
            }

            // get amount of slots
            Random random = RandomProvider.Get();
            int    slots  = random.Next(randomOptions.Slots[0], randomOptions.Slots[1]);

            List <ItemStat> itemStats     = RollStats(randomOptions, randomId, itemId);
            List <ItemStat> selectedStats = itemStats.OrderBy(x => random.Next()).Take(slots).ToList();

            BonusStats.AddRange(selectedStats);
        }
Example #3
0
    public static void GetStats(Item item, out Dictionary <StatAttribute, ItemStat> randomStats)
    {
        randomStats = new();
        int randomId = ItemMetadataStorage.GetOptionMetadata(item.Id).Random;
        ItemOptionRandom randomOptions = ItemOptionRandomMetadataStorage.GetMetadata(randomId, item.Rarity);

        if (randomOptions == null)
        {
            return;
        }

        // get amount of slots
        Random random = Random.Shared;
        int    slots  = random.Next(randomOptions.Slots[0], randomOptions.Slots[1]);

        IEnumerable <ItemStat> itemStats     = RollStats(randomOptions, item.Id);
        List <ItemStat>        selectedStats = itemStats.OrderBy(x => random.Next()).Take(slots).ToList();

        foreach (ItemStat stat in selectedStats)
        {
            randomStats[stat.ItemAttribute] = stat;
        }
    }