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
+}