diff --git a/Assets/Scripts/Game/Items/ItemBuilder.cs b/Assets/Scripts/Game/Items/ItemBuilder.cs index 4389e9bf94..7f3fefd78e 100644 --- a/Assets/Scripts/Game/Items/ItemBuilder.cs +++ b/Assets/Scripts/Game/Items/ItemBuilder.cs @@ -124,6 +124,27 @@ public static DaggerfallUnityItem CreateItem(ItemGroups itemGroup, int templateI return newItem; } + /// + /// Creates a random item from group index. + /// + /// Item group. + /// DaggerfallUnityItem. + public static DaggerfallUnityItem CreateRandomItem(ItemGroups itemGroup) + { + ItemHelper itemHelper = DaggerfallUnity.Instance.ItemHelper; + Array enumArray = itemHelper.GetEnumArray(itemGroup); + int[] customItemTemplates = itemHelper.GetCustomItemsForGroup(itemGroup); + + int groupIndex = UnityEngine.Random.Range(0, enumArray.Length + customItemTemplates.Length); + DaggerfallUnityItem newItem; + if (groupIndex < enumArray.Length) + newItem = new DaggerfallUnityItem(itemGroup, groupIndex); + else + newItem = CreateItem(itemGroup, customItemTemplates[groupIndex - enumArray.Length]); + + return newItem; + } + /// /// Generates men's clothing. /// @@ -186,16 +207,7 @@ public static DaggerfallUnityItem CreateRandomClothing(Genders gender, Races rac // Create random clothing by gender, including any custom items registered as clothes ItemGroups genderClothingGroup = (gender == Genders.Male) ? ItemGroups.MensClothing : ItemGroups.WomensClothing; - ItemHelper itemHelper = DaggerfallUnity.Instance.ItemHelper; - Array enumArray = itemHelper.GetEnumArray(genderClothingGroup); - int[] customItemTemplates = itemHelper.GetCustomItemsForGroup(genderClothingGroup); - - int groupIndex = UnityEngine.Random.Range(0, enumArray.Length + customItemTemplates.Length); - DaggerfallUnityItem newItem; - if (groupIndex < enumArray.Length) - newItem = new DaggerfallUnityItem(genderClothingGroup, groupIndex); - else - newItem = CreateItem(genderClothingGroup, customItemTemplates[groupIndex - enumArray.Length]); + DaggerfallUnityItem newItem = CreateRandomItem(genderClothingGroup); SetRace(newItem, race); @@ -256,8 +268,7 @@ public static DaggerfallUnityItem CreateBook(int id) /// DaggerfallUnityItem. public static DaggerfallUnityItem CreateRandomBook() { - Array enumArray = DaggerfallUnity.Instance.ItemHelper.GetEnumArray(ItemGroups.Books); - DaggerfallUnityItem book = new DaggerfallUnityItem(ItemGroups.Books, Array.IndexOf(enumArray, Books.Book0)); + DaggerfallUnityItem book = CreateRandomItem(ItemGroups.Books); book.message = DaggerfallUnity.Instance.ItemHelper.GetRandomBookID(); book.CurrentVariant = UnityEngine.Random.Range(0, book.TotalVariants); // Update item value for this book. @@ -275,9 +286,7 @@ public static DaggerfallUnityItem CreateRandomBook() /// DaggerfallUnityItem. public static DaggerfallUnityItem CreateRandomReligiousItem() { - Array enumArray = DaggerfallUnity.Instance.ItemHelper.GetEnumArray(ItemGroups.ReligiousItems); - int groupIndex = UnityEngine.Random.Range(0, enumArray.Length); - DaggerfallUnityItem newItem = new DaggerfallUnityItem(ItemGroups.ReligiousItems, groupIndex); + DaggerfallUnityItem newItem = CreateRandomItem(ItemGroups.ReligiousItems); return newItem; } @@ -311,9 +320,7 @@ public static DaggerfallUnityItem CreateRandomlyFilledSoulTrap() /// DaggerfallUnityItem. public static DaggerfallUnityItem CreateRandomGem() { - Array enumArray = DaggerfallUnity.Instance.ItemHelper.GetEnumArray(ItemGroups.Gems); - int groupIndex = UnityEngine.Random.Range(0, enumArray.Length); - DaggerfallUnityItem newItem = new DaggerfallUnityItem(ItemGroups.Gems, groupIndex); + DaggerfallUnityItem newItem = CreateRandomItem(ItemGroups.Gems); return newItem; } @@ -324,9 +331,7 @@ public static DaggerfallUnityItem CreateRandomGem() /// DaggerfallUnityItem. public static DaggerfallUnityItem CreateRandomJewellery() { - Array enumArray = DaggerfallUnity.Instance.ItemHelper.GetEnumArray(ItemGroups.Jewellery); - int groupIndex = UnityEngine.Random.Range(0, enumArray.Length); - DaggerfallUnityItem newItem = new DaggerfallUnityItem(ItemGroups.Jewellery, groupIndex); + DaggerfallUnityItem newItem = CreateRandomItem(ItemGroups.Jewellery); return newItem; } @@ -337,9 +342,7 @@ public static DaggerfallUnityItem CreateRandomJewellery() /// DaggerfallUnityItem. public static DaggerfallUnityItem CreateRandomDrug() { - Array enumArray = DaggerfallUnity.Instance.ItemHelper.GetEnumArray(ItemGroups.Drugs); - int groupIndex = UnityEngine.Random.Range(0, enumArray.Length); - DaggerfallUnityItem newItem = new DaggerfallUnityItem(ItemGroups.Drugs, groupIndex); + DaggerfallUnityItem newItem = CreateRandomItem(ItemGroups.Drugs); return newItem; } @@ -377,16 +380,7 @@ public static DaggerfallUnityItem CreateWeapon(Weapons weapon, WeaponMaterialTyp public static DaggerfallUnityItem CreateRandomWeapon(int playerLevel) { // Create a random weapon type, including any custom items registered as weapons - ItemHelper itemHelper = DaggerfallUnity.Instance.ItemHelper; - Array enumArray = itemHelper.GetEnumArray(ItemGroups.Weapons); - int[] customItemTemplates = itemHelper.GetCustomItemsForGroup(ItemGroups.Weapons); - - int groupIndex = UnityEngine.Random.Range(0, enumArray.Length + customItemTemplates.Length); - DaggerfallUnityItem newItem; - if (groupIndex < enumArray.Length) - newItem = new DaggerfallUnityItem(ItemGroups.Weapons, groupIndex); - else - newItem = CreateItem(ItemGroups.Weapons, customItemTemplates[groupIndex - enumArray.Length]); + DaggerfallUnityItem newItem = CreateRandomItem(ItemGroups.Weapons); // Random weapon material WeaponMaterialTypes material = FormulaHelper.RandomMaterial(playerLevel); @@ -446,16 +440,7 @@ public static DaggerfallUnityItem CreateArmor(Genders gender, Races race, Armor public static DaggerfallUnityItem CreateRandomArmor(int playerLevel, Genders gender, Races race) { // Create a random armor type, including any custom items registered as armor - ItemHelper itemHelper = DaggerfallUnity.Instance.ItemHelper; - Array enumArray = itemHelper.GetEnumArray(ItemGroups.Armor); - int[] customItemTemplates = itemHelper.GetCustomItemsForGroup(ItemGroups.Armor); - - int groupIndex = UnityEngine.Random.Range(0, enumArray.Length + customItemTemplates.Length); - DaggerfallUnityItem newItem; - if (groupIndex < enumArray.Length) - newItem = new DaggerfallUnityItem(ItemGroups.Armor, groupIndex); - else - newItem = CreateItem(ItemGroups.Armor, customItemTemplates[groupIndex - enumArray.Length]); + DaggerfallUnityItem newItem = CreateRandomItem(ItemGroups.Armor); ApplyArmorSettings(newItem, gender, race, FormulaHelper.RandomArmorMaterial(playerLevel)); @@ -677,15 +662,13 @@ public static DaggerfallUnityItem CreateRandomIngredient(ItemGroups ingredientGr case ItemGroups.MiscellaneousIngredients2: case ItemGroups.PlantIngredients1: case ItemGroups.PlantIngredients2: - enumArray = DaggerfallUnity.Instance.ItemHelper.GetEnumArray(ingredientGroup); - groupIndex = UnityEngine.Random.Range(0, enumArray.Length); break; default: return null; } // Create item - DaggerfallUnityItem newItem = new DaggerfallUnityItem(ingredientGroup, groupIndex); + DaggerfallUnityItem newItem = CreateRandomItem(ingredientGroup); return newItem; } @@ -730,12 +713,8 @@ public static DaggerfallUnityItem CreateRandomIngredient() return null; } - // Randomise ingredient within group - enumArray = DaggerfallUnity.Instance.ItemHelper.GetEnumArray(itemGroup); - int groupIndex = UnityEngine.Random.Range(0, enumArray.Length); - // Create item - DaggerfallUnityItem newItem = new DaggerfallUnityItem(itemGroup, groupIndex); + DaggerfallUnityItem newItem = CreateRandomItem(itemGroup); return newItem; } diff --git a/Assets/Scripts/Internal/DaggerfallLoot.cs b/Assets/Scripts/Internal/DaggerfallLoot.cs index 022b4d6487..25d6baf8a7 100644 --- a/Assets/Scripts/Internal/DaggerfallLoot.cs +++ b/Assets/Scripts/Internal/DaggerfallLoot.cs @@ -278,6 +278,18 @@ public void StockShopShelf(PlayerGPS.DiscoveredBuilding buildingData) ArmorMaterialTypes material = FormulaHelper.RandomArmorMaterial(playerEntity.Level); ItemBuilder.ApplyArmorSettings(item, playerEntity.Gender, playerEntity.Race, material); } + else if (itemGroup == ItemGroups.MensClothing) + { + item.dyeColor = ItemBuilder.RandomClothingDye(); + ItemBuilder.SetRace(item, playerEntity.Race); + ItemBuilder.SetVariant(item, UnityEngine.Random.Range(0, item.TotalVariants)); + } + else if (itemGroup == ItemGroups.WomensClothing) + { + item.dyeColor = ItemBuilder.RandomClothingDye(); + ItemBuilder.SetRace(item, playerEntity.Race); + ItemBuilder.SetVariant(item, UnityEngine.Random.Range(0, item.TotalVariants)); + } items.AddItem(item); } @@ -374,4 +386,4 @@ public void StockHouseContainer(PlayerGPS.DiscoveredBuilding buildingData) } } } -} \ No newline at end of file +}