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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }