private Item GetItem(int level, List <ItemDefinition> definitions) { var result = new Item(); var definitionCount = definitions.Count(); var itemDefinitionIndex = _calculationService.GetRandomInteger(0, definitionCount, true); var itemDefinition = definitions[itemDefinitionIndex]; // Generate values var itemLevel = _levelService.GenerateItemLevel(itemDefinition, level, _initializer.ItemLevelScale); var itemRarity = _rarityService.ChooseRarity(itemDefinition.RarityIds, _initializer); var itemName = _nameService.GenerateItemName(itemDefinition); var itemProperties = _propertyService.GenerateProperties(itemLevel, itemDefinition, itemRarity, _initializer); var sockets = _socketService.GenerateNumberOfSockets(itemDefinition); // Map item result result.TypeId = itemDefinition.TypeId; result.CategoryId = itemDefinition.CategoryId; result.ItemLevel = itemLevel; result.RarityTypeId = itemRarity.TypeId; result.RarityName = itemRarity.Name; result.ItemName = itemName; result.ItemDescription = itemDefinition.Description; result.Sockets = sockets; result.Properties = itemProperties; return(result); }