コード例 #1
0
        async Task <SimcItem> ISimcItemCreationService.CreateItemAsync(SimcItemOptions itemOptions)
        {
            var item = await BuildItemAsync(itemOptions.ItemId);

            if (item == null)
            {
                throw new ArgumentOutOfRangeException(
                          nameof(itemOptions.ItemId), $"ItemId not found: {itemOptions.ItemId}");
            }

            // Set the item level if provided. This needs to be done first as item stats scale off it.
            if (itemOptions.ItemLevel > 0)
            {
                AddItemLevel(item, itemOptions.ItemLevel - item.ItemLevel);
            }

            // Set the quality if provided
            if (itemOptions.Quality != ItemQuality.ITEM_QUALITY_NONE)
            {
                SetItemQuality(item, itemOptions.Quality);
            }

            await UpdateItemAsync(item,
                                  itemOptions.BonusIds,
                                  itemOptions.GemIds,
                                  itemOptions.DropLevel);

            await UpdateItemEffects(item);

            return(item);
        }
コード例 #2
0
        public async Task ICS_Builds_Item_From_Options()
        {
            // Arrange
            // Hopebreakers Badge
            // trinket1=,id=177813,bonus_id=6907/6652/603/7215,drop_level=50
            var itemOptions = new SimcItemOptions()
            {
                ItemId    = 177813,
                Quality   = ItemQuality.ITEM_QUALITY_COMMON,
                ItemLevel = 226,
                BonusIds  = new List <int>()
                {
                    6907, 6652, 603, 7215
                },
                DropLevel = 50
            };

            // Act
            var item = await _ics.CreateItemAsync(itemOptions);

            // Assert
            Assert.IsNotNull(item);
            Assert.AreEqual(226, item.ItemLevel);
            Assert.AreEqual(ItemQuality.ITEM_QUALITY_EPIC, item.Quality);
            Assert.AreEqual(177813, item.ItemId);
            // Intellect
            Assert.AreEqual(77, item.Mods[0].StatRating);
            Assert.AreEqual(ItemModType.ITEM_MOD_STRENGTH_AGILITY_INTELLECT, item.Mods[0].Type);
            // Crit rating
            Assert.AreEqual(100, item.Mods[1].StatRating);
            Assert.AreEqual(ItemModType.ITEM_MOD_CRIT_RATING, item.Mods[1].Type);
        }
        public async Task SGS_Creates_Item()
        {
            // Arrange
            var itemOptions = new SimcItemOptions()
            {
                ItemId    = 177813,
                Quality   = ItemQuality.ITEM_QUALITY_EPIC,
                ItemLevel = 226
            };

            // Act
            var item = await _sgs.GenerateItemAsync(itemOptions);

            // Assert
            Assert.IsNotNull(item);
        }
コード例 #4
0
        public void ICS_Options_Invalid_ItemId_Throws()
        {
            // Arrange
            // Glowing Endmire Stinger (226)
            // trinket1=,id=179927,bonus_id=6652/7215,drop_level=50
            var itemOptions = new SimcItemOptions()
            {
                ItemId    = 12333333,
                Quality   = ItemQuality.ITEM_QUALITY_EPIC,
                ItemLevel = 226
            };

            // Act

            // Assert
            Assert.ThrowsAsync <ArgumentOutOfRangeException>(
                async() => await _ics.CreateItemAsync(itemOptions));
        }
コード例 #5
0
        public async Task <SimcItem> GenerateItemAsync(SimcItemOptions options)
        {
            if (options == null)
            {
                _logger?.LogWarning($"Incoming item options invalid");
                throw new ArgumentNullException(nameof(options));
            }
            if (options.ItemId == 0)
            {
                _logger?.LogWarning($"Incoming item options has invalid ItemId:{options.ItemId}.");
                throw new ArgumentOutOfRangeException(nameof(options.ItemId),
                                                      $"Incoming item options has invalid ItemId:{options.ItemId}.");
            }

            var item = await _simcItemCreationService.CreateItemAsync(options);

            return(item);
        }
コード例 #6
0
        public async Task ICS_ItemOptions_Avoids_Recursion()
        {
            // Arrange
            var itemOptions = new SimcItemOptions()
            {
                ItemId    = 186423,
                Quality   = ItemQuality.ITEM_QUALITY_EPIC,
                ItemLevel = 226
            };

            // Act
            var item = await _ics.CreateItemAsync(itemOptions);

            // Assert
            Assert.IsNotNull(item);
            Assert.AreEqual(226, item.ItemLevel);
            Assert.AreEqual(ItemQuality.ITEM_QUALITY_EPIC, item.Quality);
            Assert.AreEqual(186423, item.ItemId);
        }
コード例 #7
0
        public async Task ICS_ItemOptions_Correct_iLvl_Heal_EffectScaling()
        {
            // Arrange
            var itemOptions = new SimcItemOptions()
            {
                ItemId    = 178809,
                Quality   = ItemQuality.ITEM_QUALITY_EPIC,
                ItemLevel = 226
            };

            // Act
            var item = await _ics.CreateItemAsync(itemOptions);

            // Assert
            Assert.IsNotNull(item);
            Assert.AreEqual(226, item.ItemLevel);
            Assert.AreEqual(ItemQuality.ITEM_QUALITY_EPIC, item.Quality);
            Assert.AreEqual(178809, item.ItemId);
            // This will make sure the scale value that's being pulled for spells with healing/damage effects is using the right
            // item level. In this cast it's 226 = 58.
            Assert.AreEqual(64.930999760000006d, item.Effects[0].Spell.Effects[0].ScaleBudget);
        }
コード例 #8
0
        public async Task ICS_ItemOptions_Correct_iLvl_Scaling()
        {
            // Arrange
            var itemOptions = new SimcItemOptions()
            {
                ItemId    = 181360,
                Quality   = ItemQuality.ITEM_QUALITY_EPIC,
                ItemLevel = 226
            };

            // Act
            var item = await _ics.CreateItemAsync(itemOptions);

            // Assert
            Assert.IsNotNull(item);
            Assert.AreEqual(226, item.ItemLevel);
            Assert.AreEqual(ItemQuality.ITEM_QUALITY_EPIC, item.Quality);
            Assert.AreEqual(181360, item.ItemId);
            // This will make sure the scale value that's being pulled for spells is using the right
            // item level. In this cast it's 226 = 1.3098933696746826.
            Assert.AreEqual(1.3098933696746826, item.Effects[0].Spell.CombatRatingMultiplier);
        }
コード例 #9
0
        public async Task ICS_BonusIds_Override_Quality()
        {
            // Arrange
            // Hopebreakers Badge
            // trinket1=,id=177813,bonus_id=6907/6652/603/7215,drop_level=50
            var itemOptions = new SimcItemOptions()
            {
                ItemId    = 177813,
                Quality   = ItemQuality.ITEM_QUALITY_RARE,
                ItemLevel = 226,
                BonusIds  = new List <int>()
                {
                    6907, 6652, 603, 7215
                },
                DropLevel = 50
            };

            // Act
            var item = await _ics.CreateItemAsync(itemOptions);

            // Assert
            Assert.IsNotNull(item);
            Assert.AreEqual(ItemQuality.ITEM_QUALITY_EPIC, item.Quality);
        }