From 4403d6c1c7fe586413fb6327c412c72b47e171e8 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Fri, 21 Aug 2020 19:50:36 -0700 Subject: [PATCH] Creates random element extension (#196) --- Projects/Server/Mobile.cs | 2 +- Projects/Server/Utilities/Utility.cs | 8 +- .../UOContent/Engines/BulkOrders/BaseBOD.cs | 2 +- .../UOContent/Engines/BulkOrders/Rewards.cs | 34 ++--- .../Engines/BulkOrders/SmallSmithBOD.cs | 4 +- .../Engines/BulkOrders/SmallTailorBOD.cs | 4 +- .../Engines/CannedEvil/ChampionSpawn.cs | 2 +- Projects/UOContent/Engines/ConPVP/Arena.cs | 2 +- .../UOContent/Engines/ConPVP/Tournament.cs | 2 +- .../Engines/ConPVP/TournamentPyramid.cs | 8 +- .../Engines/Craft/Core/CraftSystem.cs | 4 +- .../Engines/Factions/Core/Faction.cs | 4 +- .../UOContent/Engines/Factions/Core/Town.cs | 6 +- .../Engines/Harvest/Core/HarvestSystem.cs | 3 +- Projects/UOContent/Engines/Harvest/Fishing.cs | 2 +- Projects/UOContent/Engines/Help/StuckMenu.cs | 3 +- .../UOContent/Engines/Khaldun/PuzzleChest.cs | 6 +- .../MLQuests/Items/CraftmansSatchel.cs | 2 +- .../Engines/MLQuests/MLQuestSystem.cs | 2 +- .../Quests/Collector/Items/Obsidian.cs | 10 +- .../Quests/Witch Apprentice/Ingredient.cs | 6 +- .../Quests/Witch Apprentice/Objectives.cs | 7 +- .../Witch Apprentice/WitchApprenticeQuest.cs | 9 +- .../Treasures of Tokuno/LesserArtifacts.cs | 6 +- .../Treasures of Tokuno/TreasuresOfTokuno.cs | 2 +- .../Halloween/2006/Engines/TrickOrTreat.cs | 8 +- .../Halloween/2006/Items/HalloweenPumpkin.cs | 4 +- .../Halloween/2011/Items/BasePaintedMask.cs | 8 +- .../Halloween/2012/Engines/PlayerZombies.cs | 2 +- .../Halloween/HolidaySettings.cs | 4 +- Projects/UOContent/Items/Aquarium/Aquarium.cs | 10 +- .../Items/Containers/TreasureMapChest.cs | 2 +- .../Games/Mahjong/MahjongTileTypeGenerator.cs | 7 +- Projects/UOContent/Items/Maps/TreasureMap.cs | 13 +- .../UOContent/Items/Misc/DeceitBrazier.cs | 2 +- Projects/UOContent/Items/Misc/WindChimes.cs | 2 +- .../Items/Skill Items/Camping/Kindling.cs | 3 +- .../Items/Skill Items/Fishing/Misc/SOS.cs | 2 +- .../Items/Skill Items/Magical/Spellbook.cs | 2 +- .../Items/Skill Items/Tools/BaseRunicTool.cs | 4 +- .../Dawn's Music Box/DawnsMusicBox.cs | 2 +- .../Items/Special/Holiday/HolidayBell.cs | 6 +- .../Items/Special/Holiday/HolidayFoods.cs | 2 +- .../Items/Special/Holiday/HolidayGiftBoxes.cs | 6 +- .../Items/Special/Holiday/PKHolidayStuff.cs | 5 +- .../Items/Special/Holiday/SnowPiles.cs | 4 +- .../Items/Special/Holiday/Snowman.cs | 120 +++++++++--------- .../Special/House Raffle/HouseRaffleStone.cs | 4 +- .../Items/Special/MonsterStatuette.cs | 2 +- .../Mutation Core/PlagueBeastBackpack.cs | 9 +- .../Special/Special Scrolls/PowerScroll.cs | 4 +- .../Special Scrolls/ScrollofTranscendence.cs | 8 +- .../UOContent/Items/Talismans/BaseTalisman.cs | 4 +- .../Items/Weapons/Artifacts/TheDryadBow.cs | 8 +- .../UOContent/Items/Weapons/SlayerGroup.cs | 5 +- Projects/UOContent/Misc/CharacterCreation.cs | 2 +- .../Winter2004/LightOfTheWinterSolstice.cs | 4 +- Projects/UOContent/Misc/Guild.cs | 2 +- Projects/UOContent/Misc/InhumanSpeech.cs | 11 +- Projects/UOContent/Misc/Loot.cs | 18 +-- Projects/UOContent/Misc/MondainsLegacy.cs | 2 +- Projects/UOContent/Misc/NameList.cs | 2 +- Projects/UOContent/Misc/RaceDefinitions.cs | 8 +- Projects/UOContent/Mobiles/BaseCreature.cs | 16 +-- .../Mobiles/Monsters/AOS/DemonKnight.cs | 5 +- .../Mobiles/Monsters/LBR/Jukas/JukaLord.cs | 2 +- .../Mobiles/Monsters/ML/Animal/Ferret.cs | 2 +- .../Monsters/Misc/Melee/BladeSpirits.cs | 6 +- .../Monsters/Misc/Melee/EnergyVortex.cs | 6 +- .../Reptile/Magic/OphidianArchmage.cs | 4 +- .../Monsters/Reptile/Magic/OphidianMage.cs | 4 +- .../Monsters/Reptile/Melee/OphidianKnight.cs | 4 +- .../Monsters/Reptile/Melee/OphidianWarrior.cs | 4 +- .../UOContent/Mobiles/Special/BaseChampion.cs | 10 +- .../UOContent/Mobiles/Special/Harrower.cs | 14 +- Projects/UOContent/Mobiles/Special/Paragon.cs | 2 +- .../Mobiles/Townfolk/BaseEscortable.cs | 2 +- .../UOContent/Mobiles/Townfolk/TownCrier.cs | 10 +- Projects/UOContent/Skills/Stealing.cs | 4 +- .../SpecialSystems/Engines/PreventInaccess.cs | 2 +- .../Spells/Bushido/MomentumStrike.cs | 2 +- .../UOContent/Spells/Fifth/SummonCreature.cs | 2 +- Projects/UOContent/Spells/First/CreateFood.cs | 2 +- .../Spells/Necromancy/AnimateDeadSpell.cs | 2 +- 84 files changed, 226 insertions(+), 330 deletions(-) diff --git a/Projects/Server/Mobile.cs b/Projects/Server/Mobile.cs index dd2a1c000..512a4453e 100644 --- a/Projects/Server/Mobile.cs +++ b/Projects/Server/Mobile.cs @@ -4798,7 +4798,7 @@ namespace Server var sb = new StringBuilder(text.Length, text.Length); for (var i = 0; i < text.Length; ++i) - sb.Append(text[i] != ' ' ? GhostChars[Utility.Random(GhostChars.Length)] : ' '); + sb.Append(text[i] != ' ' ? GhostChars.RandomElement() : ' '); text = sb.ToString(); context = m_GhostMutateContext; diff --git a/Projects/Server/Utilities/Utility.cs b/Projects/Server/Utilities/Utility.cs index 1e33528e1..3a4ad1f92 100644 --- a/Projects/Server/Utilities/Utility.cs +++ b/Projects/Server/Utilities/Utility.cs @@ -502,9 +502,9 @@ namespace Server public static SkillName RandomSkill() => m_AllSkills[Random(m_AllSkills.Length - (Core.ML ? 0 : Core.SE ? 1 : Core.AOS ? 3 : 6))]; - public static SkillName RandomCombatSkill() => m_CombatSkills[Random(m_CombatSkills.Length)]; + public static SkillName RandomCombatSkill() => m_CombatSkills.RandomElement(); - public static SkillName RandomCraftSkill() => m_CraftSkills[Random(m_CraftSkills.Length)]; + public static SkillName RandomCraftSkill() => m_CraftSkills.RandomElement(); public static void FixPoints(ref Point3D top, ref Point3D bottom) { @@ -862,10 +862,10 @@ namespace Server } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int RandomList(params int[] list) => RandomList(list); + public static T RandomList(params T[] list) => list.RandomElement(); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T RandomList(IList list) => list[Random(list.Count)]; + public static T RandomElement(this IList list) => list.Count == 0 ? default : list[Random(list.Count)]; [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool RandomBool() => RandomSources.Source.NextBool(); diff --git a/Projects/UOContent/Engines/BulkOrders/BaseBOD.cs b/Projects/UOContent/Engines/BulkOrders/BaseBOD.cs index d6c2e61d0..dea6a13d9 100644 --- a/Projects/UOContent/Engines/BulkOrders/BaseBOD.cs +++ b/Projects/UOContent/Engines/BulkOrders/BaseBOD.cs @@ -80,7 +80,7 @@ namespace Server.Engines.BulkOrders List rewards = ComputeRewards(false); - reward = rewards.Count <= 0 ? null : rewards[Utility.Random(rewards.Count)].Construct(); + reward = rewards.RandomElement()?.Construct(); } public virtual List ComputeRewards(bool full) diff --git a/Projects/UOContent/Engines/BulkOrders/Rewards.cs b/Projects/UOContent/Engines/BulkOrders/Rewards.cs index 056b776a5..c9b5b9615 100644 --- a/Projects/UOContent/Engines/BulkOrders/Rewards.cs +++ b/Projects/UOContent/Engines/BulkOrders/Rewards.cs @@ -387,7 +387,7 @@ namespace Server.Engines.BulkOrders { return type switch { - 1 => (Item)new LeatherGlovesOfMining(1), + 1 => new LeatherGlovesOfMining(1), 3 => new StuddedGlovesOfMining(3), 5 => new RingmailGlovesOfMining(5), _ => throw new InvalidOperationException() @@ -644,11 +644,7 @@ namespace Server.Engines.BulkOrders private static Item CreateCloth(int type) { if (type >= 0 && type < m_ClothHues.Length) - { - UncutCloth cloth = new UncutCloth(100); - cloth.Hue = m_ClothHues[type][Utility.Random(m_ClothHues[type].Length)]; - return cloth; - } + return new UncutCloth(100) {Hue = m_ClothHues[type].RandomElement()}; throw new InvalidOperationException(); } @@ -660,40 +656,34 @@ namespace Server.Engines.BulkOrders 0x484, 0x497 }; - private static Item CreateSandals(int type) => new Sandals(m_SandalHues[Utility.Random(m_SandalHues.Length)]); + private static Item CreateSandals(int type) => new Sandals(m_SandalHues.RandomElement()); - private static Item CreateStretchedHide(int type) - { - return Utility.Random(4) switch + private static Item CreateStretchedHide(int type) => + Utility.Random(4) switch { - 1 => (Item)new SmallStretchedHideSouthDeed(), + 1 => new SmallStretchedHideSouthDeed(), 2 => new MediumStretchedHideEastDeed(), 3 => new MediumStretchedHideSouthDeed(), _ => new SmallStretchedHideEastDeed() }; - } - private static Item CreateTapestry(int type) - { - return Utility.Random(4) switch + private static Item CreateTapestry(int type) => + Utility.Random(4) switch { - 1 => (Item)new LightFlowerTapestrySouthDeed(), + 1 => new LightFlowerTapestrySouthDeed(), 2 => new DarkFlowerTapestryEastDeed(), 3 => new DarkFlowerTapestrySouthDeed(), _ => new LightFlowerTapestryEastDeed() }; - } - private static Item CreateBearRug(int type) - { - return Utility.Random(4) switch + private static Item CreateBearRug(int type) => + Utility.Random(4) switch { - 1 => (Item)new BrownBearRugSouthDeed(), + 1 => new BrownBearRugSouthDeed(), 2 => new PolarBearRugEastDeed(), 3 => new PolarBearRugSouthDeed(), _ => new BrownBearRugEastDeed() }; - } private static Item CreateRunicKit(int type) { diff --git a/Projects/UOContent/Engines/BulkOrders/SmallSmithBOD.cs b/Projects/UOContent/Engines/BulkOrders/SmallSmithBOD.cs index e69132008..99d34f9cc 100644 --- a/Projects/UOContent/Engines/BulkOrders/SmallSmithBOD.cs +++ b/Projects/UOContent/Engines/BulkOrders/SmallSmithBOD.cs @@ -43,7 +43,7 @@ namespace Server.Engines.BulkOrders bool reqExceptional = Utility.RandomBool() || material == BulkMaterialType.None; - SmallBulkEntry entry = entries[Utility.Random(entries.Length)]; + SmallBulkEntry entry = entries.RandomElement(); Hue = hue; AmountMax = amountMax; @@ -151,7 +151,7 @@ namespace Server.Engines.BulkOrders if (validEntries.Count <= 0) return null; - SmallBulkEntry entry = validEntries[Utility.Random(validEntries.Count)]; + SmallBulkEntry entry = validEntries.RandomElement(); return new SmallSmithBOD(entry, material, amountMax, reqExceptional); } diff --git a/Projects/UOContent/Engines/BulkOrders/SmallTailorBOD.cs b/Projects/UOContent/Engines/BulkOrders/SmallTailorBOD.cs index ed3b35ab6..00b3496af 100644 --- a/Projects/UOContent/Engines/BulkOrders/SmallTailorBOD.cs +++ b/Projects/UOContent/Engines/BulkOrders/SmallTailorBOD.cs @@ -35,7 +35,7 @@ namespace Server.Engines.BulkOrders : BulkMaterialType.None; bool reqExceptional = Utility.RandomBool() || material == BulkMaterialType.None; - SmallBulkEntry entry = entries[Utility.Random(entries.Length)]; + SmallBulkEntry entry = entries.RandomElement(); Hue = hue; AmountMax = amountMax; @@ -147,7 +147,7 @@ namespace Server.Engines.BulkOrders if (validEntries.Count > 0) { - SmallBulkEntry entry = validEntries[Utility.Random(validEntries.Count)]; + SmallBulkEntry entry = validEntries.RandomElement(); return new SmallTailorBOD(entry, material, amountMax, reqExceptional); } } diff --git a/Projects/UOContent/Engines/CannedEvil/ChampionSpawn.cs b/Projects/UOContent/Engines/CannedEvil/ChampionSpawn.cs index ae9a1c964..ba3748531 100644 --- a/Projects/UOContent/Engines/CannedEvil/ChampionSpawn.cs +++ b/Projects/UOContent/Engines/CannedEvil/ChampionSpawn.cs @@ -682,7 +682,7 @@ namespace Server.Engines.CannedEvil { try { - return ActivatorUtil.CreateInstance(types[Utility.Random(types.Length)]) as Mobile; + return ActivatorUtil.CreateInstance(types.RandomElement()) as Mobile; } catch { diff --git a/Projects/UOContent/Engines/ConPVP/Arena.cs b/Projects/UOContent/Engines/ConPVP/Arena.cs index d424b754f..78c096c14 100644 --- a/Projects/UOContent/Engines/ConPVP/Arena.cs +++ b/Projects/UOContent/Engines/ConPVP/Arena.cs @@ -692,7 +692,7 @@ namespace Server.Engines.ConPVP rn -= ae.Value; } - return arenas[Utility.Random(arenas.Count)].m_Arena; + return arenas.RandomElement().m_Arena; } public static Arena FindArena() diff --git a/Projects/UOContent/Engines/ConPVP/Tournament.cs b/Projects/UOContent/Engines/ConPVP/Tournament.cs index 81cf88eed..d204a0562 100644 --- a/Projects/UOContent/Engines/ConPVP/Tournament.cs +++ b/Projects/UOContent/Engines/ConPVP/Tournament.cs @@ -284,7 +284,7 @@ namespace Server.Engines.ConPVP } case TieType.Random: { - TourneyParticipant advanced = remaining[Utility.Random(remaining.Count)]; + TourneyParticipant advanced = remaining.RandomElement(); for (int i = 0; i < remaining.Count; ++i) if (remaining[i] != advanced) diff --git a/Projects/UOContent/Engines/ConPVP/TournamentPyramid.cs b/Projects/UOContent/Engines/ConPVP/TournamentPyramid.cs index 104a447f2..75ef25732 100644 --- a/Projects/UOContent/Engines/ConPVP/TournamentPyramid.cs +++ b/Projects/UOContent/Engines/ConPVP/TournamentPyramid.cs @@ -131,13 +131,13 @@ namespace Server.Engines.ConPVP if (toAdvance.Count == 0) toAdvance = copy; // sanity - int idx = Utility.Random(toAdvance.Count); + var random = toAdvance.RandomElement(); - toAdvance[idx].AddLog( + random.AddLog( "Advanced automatically due to an odd number of challengers."); - level.FreeAdvance = toAdvance[idx]; + level.FreeAdvance = random; ++level.FreeAdvance.FreeAdvances; - copy.Remove(toAdvance[idx]); + copy.Remove(random); } while (copy.Count >= partsPerMatch) diff --git a/Projects/UOContent/Engines/Craft/Core/CraftSystem.cs b/Projects/UOContent/Engines/Craft/Core/CraftSystem.cs index 18b94943f..bc42239ae 100644 --- a/Projects/UOContent/Engines/Craft/Core/CraftSystem.cs +++ b/Projects/UOContent/Engines/Craft/Core/CraftSystem.cs @@ -103,7 +103,7 @@ namespace Server.Engines.Craft if (m_Recipes.Count == 0) return -1; - return m_Recipes[Utility.Random(m_Recipes.Count)]; + return m_Recipes.RandomElement(); } public int RandomRareRecipe() @@ -111,7 +111,7 @@ namespace Server.Engines.Craft if (m_RareRecipes.Count == 0) return -1; - return m_RareRecipes[Utility.Random(m_RareRecipes.Count)]; + return m_RareRecipes.RandomElement(); } public int AddCraft(Type typeItem, TextDefinition group, TextDefinition name, double minSkill, double maxSkill, diff --git a/Projects/UOContent/Engines/Factions/Core/Faction.cs b/Projects/UOContent/Engines/Factions/Core/Faction.cs index 5e4d49ca9..b6fead34c 100644 --- a/Projects/UOContent/Engines/Factions/Core/Faction.cs +++ b/Projects/UOContent/Engines/Factions/Core/Faction.cs @@ -153,7 +153,7 @@ namespace Server.Factions return; for (int i = 0; i < distrib; ++i) - activePlayers[Utility.Random(activePlayers.Count)].KillPoints++; + activePlayers.RandomElement().KillPoints++; } public static void DistributePoints(int distrib) @@ -167,7 +167,7 @@ namespace Server.Factions if (activePlayers.Count > 0) for (int i = 0; i < distrib; ++i) - activePlayers[Utility.Random(activePlayers.Count)].KillPoints++; + activePlayers.RandomElement().KillPoints++; } public void BeginHonorLeadership(Mobile from) diff --git a/Projects/UOContent/Engines/Factions/Core/Town.cs b/Projects/UOContent/Engines/Factions/Core/Town.cs index 8bc724314..af8871c4f 100644 --- a/Projects/UOContent/Engines/Factions/Core/Town.cs +++ b/Projects/UOContent/Engines/Factions/Core/Town.cs @@ -224,12 +224,10 @@ namespace Server.Factions while (Silver + flow < 0 && toDelete.Count > 0) { - int index = Utility.Random(toDelete.Count); - Mobile mob = toDelete[index]; - + Mobile mob = toDelete.RandomElement(); mob.Delete(); - toDelete.RemoveAt(index); + toDelete.Remove(mob); flow = NetCashFlow; } } diff --git a/Projects/UOContent/Engines/Harvest/Core/HarvestSystem.cs b/Projects/UOContent/Engines/Harvest/Core/HarvestSystem.cs index 66ff56436..d8febd7ed 100644 --- a/Projects/UOContent/Engines/Harvest/Core/HarvestSystem.cs +++ b/Projects/UOContent/Engines/Harvest/Core/HarvestSystem.cs @@ -267,8 +267,7 @@ namespace Server.Engines.Harvest from.Region.GetResource(type); public virtual Type GetResourceType(Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, - HarvestResource resource) => - resource.Types.Length > 0 ? resource.Types[Utility.Random(resource.Types.Length)] : null; + HarvestResource resource) => resource.Types.RandomElement(); public virtual HarvestResource MutateResource(Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestVein vein, HarvestResource primary, HarvestResource fallback) diff --git a/Projects/UOContent/Engines/Harvest/Fishing.cs b/Projects/UOContent/Engines/Harvest/Fishing.cs index 94898c9f1..51b3d5f6f 100644 --- a/Projects/UOContent/Engines/Harvest/Fishing.cs +++ b/Projects/UOContent/Engines/Harvest/Fishing.cs @@ -146,7 +146,7 @@ namespace Server.Engines.Harvest double chance = (skillValue - entry.m_MinSkill) / (entry.m_MaxSkill - entry.m_MinSkill); if (chance > Utility.RandomDouble()) - return entry.m_Types[Utility.Random(entry.m_Types.Length)]; + return entry.m_Types.RandomElement(); } } diff --git a/Projects/UOContent/Engines/Help/StuckMenu.cs b/Projects/UOContent/Engines/Help/StuckMenu.cs index 3c20535aa..cbb7349be 100644 --- a/Projects/UOContent/Engines/Help/StuckMenu.cs +++ b/Projects/UOContent/Engines/Help/StuckMenu.cs @@ -263,8 +263,7 @@ namespace Server.Menus.Questions return; } - int idx = Utility.Random(m_Destination.Locations.Length); - Point3D dest = m_Destination.Locations[idx]; + Point3D dest = m_Destination.Locations.RandomElement(); Map destMap; if (m_Mobile.Map == Map.Trammel) diff --git a/Projects/UOContent/Engines/Khaldun/PuzzleChest.cs b/Projects/UOContent/Engines/Khaldun/PuzzleChest.cs index 77db83872..808eec029 100644 --- a/Projects/UOContent/Engines/Khaldun/PuzzleChest.cs +++ b/Projects/UOContent/Engines/Khaldun/PuzzleChest.cs @@ -234,9 +234,9 @@ namespace Server.Items for (int i = 0; i < Hints.Length; i++) { - int pos = Utility.Random(list.Count); - Hints[i] = list[pos]; - list.RemoveAt(pos); + var random = list.RandomElement(); + Hints[i] = random; + list.Remove(random); } } diff --git a/Projects/UOContent/Engines/MLQuests/Items/CraftmansSatchel.cs b/Projects/UOContent/Engines/MLQuests/Items/CraftmansSatchel.cs index 051b2db5e..c928daf4e 100644 --- a/Projects/UOContent/Engines/MLQuests/Items/CraftmansSatchel.cs +++ b/Projects/UOContent/Engines/MLQuests/Items/CraftmansSatchel.cs @@ -17,7 +17,7 @@ namespace Server.Engines.MLQuests.Items protected void AddBaseLoot(params Type[][] lootSets) { - Item loot = Loot.Construct(lootSets[Utility.Random(lootSets.Length)]); + Item loot = Loot.Construct(lootSets.RandomElement()); if (loot == null) return; diff --git a/Projects/UOContent/Engines/MLQuests/MLQuestSystem.cs b/Projects/UOContent/Engines/MLQuests/MLQuestSystem.cs index 7cc5e89a7..9072ad23d 100644 --- a/Projects/UOContent/Engines/MLQuests/MLQuestSystem.cs +++ b/Projects/UOContent/Engines/MLQuests/MLQuestSystem.cs @@ -569,7 +569,7 @@ namespace Server.Engines.MLQuests m_EligiblePool.Add(quest); } - return m_EligiblePool.Count == 0 ? fallback : m_EligiblePool[Utility.Random(m_EligiblePool.Count)]; + return m_EligiblePool.Count == 0 ? fallback : m_EligiblePool.RandomElement(); } public static void TurnToFace(IQuestGiver quester, Mobile mob) diff --git a/Projects/UOContent/Engines/Quests/Collector/Items/Obsidian.cs b/Projects/UOContent/Engines/Quests/Collector/Items/Obsidian.cs index 08b806e91..015364af3 100644 --- a/Projects/UOContent/Engines/Quests/Collector/Items/Obsidian.cs +++ b/Projects/UOContent/Engines/Quests/Collector/Items/Obsidian.cs @@ -127,13 +127,7 @@ namespace Server.Engines.Quests.Collector public override bool ForceShowProperties => ObjectPropertyList.Enabled; - public static string RandomName(Mobile from) - { - int index = Utility.Random(m_Names.Length); - if (m_Names[index] == null) - return from.Name; - return m_Names[index]; - } + public static string RandomName(Mobile from) => m_Names.RandomElement() ?? from.Name; public override void AddNameProperty(ObjectPropertyList list) { @@ -256,4 +250,4 @@ namespace Server.Engines.Quests.Collector } } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Engines/Quests/Witch Apprentice/Ingredient.cs b/Projects/UOContent/Engines/Quests/Witch Apprentice/Ingredient.cs index 27ac5ffd1..9b2582993 100644 --- a/Projects/UOContent/Engines/Quests/Witch Apprentice/Ingredient.cs +++ b/Projects/UOContent/Engines/Quests/Witch Apprentice/Ingredient.cs @@ -98,9 +98,7 @@ namespace Server.Engines.Quests.Hag ingredients[n++] = currIngredient; } - int index = Utility.Random(ingredients.Length); - - return ingredients[index]; + return ingredients.RandomElement(); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Engines/Quests/Witch Apprentice/Objectives.cs b/Projects/UOContent/Engines/Quests/Witch Apprentice/Objectives.cs index 602a99916..d4ed6ad1d 100644 --- a/Projects/UOContent/Engines/Quests/Witch Apprentice/Objectives.cs +++ b/Projects/UOContent/Engines/Quests/Witch Apprentice/Objectives.cs @@ -31,12 +31,7 @@ namespace Server.Engines.Quests.Hag public Corpse Corpse { get; private set; } - private static Point3D RandomCorpseLocation() - { - int index = Utility.Random(m_CorpseLocations.Length); - - return m_CorpseLocations[index]; - } + private static Point3D RandomCorpseLocation() => m_CorpseLocations.RandomElement(); public override void CheckProgress() { diff --git a/Projects/UOContent/Engines/Quests/Witch Apprentice/WitchApprenticeQuest.cs b/Projects/UOContent/Engines/Quests/Witch Apprentice/WitchApprenticeQuest.cs index 899513be9..45555f516 100644 --- a/Projects/UOContent/Engines/Quests/Witch Apprentice/WitchApprenticeQuest.cs +++ b/Projects/UOContent/Engines/Quests/Witch Apprentice/WitchApprenticeQuest.cs @@ -82,11 +82,6 @@ namespace Server.Engines.Quests.Hag AddConversation(new AcceptConversation()); } - public static Point3D RandomZeefzorpulLocation() - { - int index = Utility.Random(m_ZeefzorpulLocations.Length); - - return m_ZeefzorpulLocations[index]; - } + public static Point3D RandomZeefzorpulLocation() => m_ZeefzorpulLocations.RandomElement(); } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Engines/Treasures of Tokuno/LesserArtifacts.cs b/Projects/UOContent/Engines/Treasures of Tokuno/LesserArtifacts.cs index 2df7b98f1..f780fbff8 100644 --- a/Projects/UOContent/Engines/Treasures of Tokuno/LesserArtifacts.cs +++ b/Projects/UOContent/Engines/Treasures of Tokuno/LesserArtifacts.cs @@ -628,7 +628,7 @@ namespace Server.Items private string m_UrnName; [Constructible] - public AncientUrn() : this(Names[Utility.Random(Names.Length)]) + public AncientUrn() : this(Names.RandomElement()) { } @@ -725,7 +725,7 @@ namespace Server.Items private string m_SwordsName; [Constructible] - public HonorableSwords() : this(AncientUrn.Names[Utility.Random(AncientUrn.Names.Length)]) + public HonorableSwords() : this(AncientUrn.Names.RandomElement()) { } @@ -869,7 +869,7 @@ namespace Server.Items public FluteOfRenewal() { Slayer = SlayerGroup.Groups[Utility.Random(SlayerGroup.Groups.Length - 1)].Super - .Name; // -1 to exclude Fey slayer. Try to confrim no fey slayer on this on OSI + .Name; // -1 to exclude Fey slayer. Try to confirm no fey slayer on this on OSI ReplenishesCharges = true; } diff --git a/Projects/UOContent/Engines/Treasures of Tokuno/TreasuresOfTokuno.cs b/Projects/UOContent/Engines/Treasures of Tokuno/TreasuresOfTokuno.cs index 01c9b87cc..ae4eab4ca 100644 --- a/Projects/UOContent/Engines/Treasures of Tokuno/TreasuresOfTokuno.cs +++ b/Projects/UOContent/Engines/Treasures of Tokuno/TreasuresOfTokuno.cs @@ -154,7 +154,7 @@ namespace Server.Misc try { i = ActivatorUtil.CreateInstance( - m_LesserArtifacts[(int)DropEra - 1][Utility.Random(m_LesserArtifacts[(int)DropEra - 1].Length)]) + m_LesserArtifacts[(int)DropEra - 1].RandomElement()) as Item; } diff --git a/Projects/UOContent/Holiday Stuff/Halloween/2006/Engines/TrickOrTreat.cs b/Projects/UOContent/Holiday Stuff/Halloween/2006/Engines/TrickOrTreat.cs index 189ff6e15..0e5fff56d 100644 --- a/Projects/UOContent/Holiday Stuff/Halloween/2006/Engines/TrickOrTreat.cs +++ b/Projects/UOContent/Holiday Stuff/Halloween/2006/Engines/TrickOrTreat.cs @@ -297,10 +297,10 @@ namespace Server.Engines.Events { return target.Map.MapID switch { - 2 => Ilshenar_Locations[Utility.Random(Ilshenar_Locations.Length)], - 3 => Malas_Locations[Utility.Random(Malas_Locations.Length)], - 4 => Tokuno_Locations[Utility.Random(Tokuno_Locations.Length)], - _ => Felucca_Locations[Utility.Random(Felucca_Locations.Length)] + 2 => Ilshenar_Locations.RandomElement(), + 3 => Malas_Locations.RandomElement(), + 4 => Tokuno_Locations.RandomElement(), + _ => Felucca_Locations.RandomElement() }; } diff --git a/Projects/UOContent/Holiday Stuff/Halloween/2006/Items/HalloweenPumpkin.cs b/Projects/UOContent/Holiday Stuff/Halloween/2006/Items/HalloweenPumpkin.cs index d51387b33..9f405edee 100644 --- a/Projects/UOContent/Holiday Stuff/Halloween/2006/Items/HalloweenPumpkin.cs +++ b/Projects/UOContent/Holiday Stuff/Halloween/2006/Items/HalloweenPumpkin.cs @@ -55,7 +55,7 @@ namespace Server.Items private void AssignRandomName() { - Name = $"{m_Staff[Utility.Random(m_Staff.Length)]}'s Jack-O-Lantern"; + Name = $"{m_Staff.RandomElement()}'s Jack-O-Lantern"; } public override bool OnDragLift(Mobile from) @@ -93,4 +93,4 @@ namespace Server.Items AssignRandomName(); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Holiday Stuff/Halloween/2011/Items/BasePaintedMask.cs b/Projects/UOContent/Holiday Stuff/Halloween/2011/Items/BasePaintedMask.cs index b39705c95..4c08732ef 100644 --- a/Projects/UOContent/Holiday Stuff/Halloween/2011/Items/BasePaintedMask.cs +++ b/Projects/UOContent/Holiday Stuff/Halloween/2011/Items/BasePaintedMask.cs @@ -18,13 +18,11 @@ namespace Server.Items.Holiday private string m_Staffer; - public BasePaintedMask(int itemid) - : this(m_Staffers[Utility.Random(m_Staffers.Length)], itemid) + public BasePaintedMask(int itemid) : this(m_Staffers.RandomElement(), itemid) { } - public BasePaintedMask(string staffer, int itemid) - : base(itemid + Utility.Random(2)) + public BasePaintedMask(string staffer, int itemid) : base(itemid + Utility.Random(2)) { m_Staffer = staffer; @@ -56,4 +54,4 @@ namespace Server.Items.Holiday if (version == 1) m_Staffer = Utility.Intern(reader.ReadString()); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Holiday Stuff/Halloween/2012/Engines/PlayerZombies.cs b/Projects/UOContent/Holiday Stuff/Halloween/2012/Engines/PlayerZombies.cs index 5254190d1..eb7277edc 100644 --- a/Projects/UOContent/Holiday Stuff/Halloween/2012/Engines/PlayerZombies.cs +++ b/Projects/UOContent/Holiday Stuff/Halloween/2012/Engines/PlayerZombies.cs @@ -97,7 +97,7 @@ namespace Server.Engines.Events { Map map = Utility.RandomBool() ? Map.Trammel : Map.Felucca; - Point3D home = GetRandomPointInRect(m_Cemetaries[Utility.Random(m_Cemetaries.Length)], map); + Point3D home = GetRandomPointInRect(m_Cemetaries.RandomElement(), map); if (map.CanSpawnMobile(home)) { diff --git a/Projects/UOContent/Holiday Stuff/Halloween/HolidaySettings.cs b/Projects/UOContent/Holiday Stuff/Halloween/HolidaySettings.cs index 85b0fc2e0..920cce7e6 100644 --- a/Projects/UOContent/Holiday Stuff/Halloween/HolidaySettings.cs +++ b/Projects/UOContent/Holiday Stuff/Halloween/HolidaySettings.cs @@ -36,8 +36,8 @@ namespace Server.Events.Halloween public static DateTime FinishHalloween => new DateTime(2012, 11, 15); public static Item RandomGMBeggerItem => - (Item)ActivatorUtil.CreateInstance(m_GMBeggarTreats[Utility.Random(m_GMBeggarTreats.Length)]); + (Item)ActivatorUtil.CreateInstance(m_GMBeggarTreats.RandomElement()); - public static Item RandomTreat => (Item)ActivatorUtil.CreateInstance(m_Treats[Utility.Random(m_Treats.Length)]); + public static Item RandomTreat => (Item)ActivatorUtil.CreateInstance(m_Treats.RandomElement()); } } diff --git a/Projects/UOContent/Items/Aquarium/Aquarium.cs b/Projects/UOContent/Items/Aquarium/Aquarium.cs index 4a4416f2b..85e0b6dad 100644 --- a/Projects/UOContent/Items/Aquarium/Aquarium.cs +++ b/Projects/UOContent/Items/Aquarium/Aquarium.cs @@ -538,11 +538,9 @@ namespace Server.Items while (amount > 0 && toKill.Count > 0) { - int kill = Utility.Random(toKill.Count); - - toKill[kill].Kill(); - - toKill.RemoveAt(kill); + var kill = toKill.RandomElement(); + kill.Kill(); + toKill.Remove(kill); amount -= 1; LiveCreatures = Math.Max(LiveCreatures - 1, 0); @@ -639,7 +637,7 @@ namespace Server.Items } if (Utility.RandomDouble() < 0.05) - fish.Hue = FishHues[Utility.Random(FishHues.Length)]; + fish.Hue = FishHues.RandomElement(); else if (Utility.RandomDouble() < 0.5) fish.Hue = Utility.RandomMinMax(0x100, 0x3E5); diff --git a/Projects/UOContent/Items/Containers/TreasureMapChest.cs b/Projects/UOContent/Items/Containers/TreasureMapChest.cs index e447024bf..156aeb32d 100644 --- a/Projects/UOContent/Items/Containers/TreasureMapChest.cs +++ b/Projects/UOContent/Items/Containers/TreasureMapChest.cs @@ -287,7 +287,7 @@ namespace Server.Items } if (level == 6 && Core.AOS) - cont.DropItem((Item)ActivatorUtil.CreateInstance(Artifacts[Utility.Random(Artifacts.Length)])); + cont.DropItem((Item)ActivatorUtil.CreateInstance(Artifacts.RandomElement())); } public override bool CheckLocked(Mobile from) diff --git a/Projects/UOContent/Items/Games/Mahjong/MahjongTileTypeGenerator.cs b/Projects/UOContent/Items/Games/Mahjong/MahjongTileTypeGenerator.cs index 239c8960f..0f6ebf563 100644 --- a/Projects/UOContent/Items/Games/Mahjong/MahjongTileTypeGenerator.cs +++ b/Projects/UOContent/Items/Games/Mahjong/MahjongTileTypeGenerator.cs @@ -22,11 +22,10 @@ namespace Server.Engines.Mahjong public MahjongTileType Next() { - int random = Utility.Random(LeftTileTypes.Count); - MahjongTileType next = LeftTileTypes[random]; - LeftTileTypes.RemoveAt(random); + MahjongTileType next = LeftTileTypes.RandomElement(); + LeftTileTypes.Remove(next); return next; } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Items/Maps/TreasureMap.cs b/Projects/UOContent/Items/Maps/TreasureMap.cs index 845626361..ac7826c37 100644 --- a/Projects/UOContent/Items/Maps/TreasureMap.cs +++ b/Projects/UOContent/Items/Maps/TreasureMap.cs @@ -163,10 +163,7 @@ namespace Server.Items if (m_Locations == null) LoadLocations(); - if (m_Locations.Length > 0) - return m_Locations[Utility.Random(m_Locations.Length)]; - - return Point2D.Zero; + return m_Locations?.RandomElement() ?? Point2D.Zero; } public static Point2D GetRandomHavenLocation() @@ -174,10 +171,7 @@ namespace Server.Items if (m_HavenLocations == null) LoadLocations(); - if (m_HavenLocations.Length > 0) - return m_HavenLocations[Utility.Random(m_HavenLocations.Length)]; - - return Point2D.Zero; + return m_HavenLocations?.RandomElement() ?? Point2D.Zero; } private static void LoadLocations() @@ -225,8 +219,7 @@ namespace Server.Items try { - bc = (BaseCreature)ActivatorUtil.CreateInstance( - m_SpawnTypes[level][Utility.Random(m_SpawnTypes[level].Length)]); + bc = (BaseCreature)ActivatorUtil.CreateInstance(m_SpawnTypes[level].RandomElement()); } catch { diff --git a/Projects/UOContent/Items/Misc/DeceitBrazier.cs b/Projects/UOContent/Items/Misc/DeceitBrazier.cs index c49ce90cf..ff83c6764 100644 --- a/Projects/UOContent/Items/Misc/DeceitBrazier.cs +++ b/Projects/UOContent/Items/Misc/DeceitBrazier.cs @@ -153,7 +153,7 @@ namespace Server.Items { Map map = Map; BaseCreature bc = - (BaseCreature)ActivatorUtil.CreateInstance(Creatures[Utility.Random(Creatures.Length)]); + (BaseCreature)ActivatorUtil.CreateInstance(Creatures.RandomElement()); Point3D spawnLoc = GetSpawnPosition(); diff --git a/Projects/UOContent/Items/Misc/WindChimes.cs b/Projects/UOContent/Items/Misc/WindChimes.cs index eade32de0..33df0ea99 100644 --- a/Projects/UOContent/Items/Misc/WindChimes.cs +++ b/Projects/UOContent/Items/Misc/WindChimes.cs @@ -35,7 +35,7 @@ namespace Server.Items { if (m_TurnedOn && IsLockedDown && (!m.Hidden || m.AccessLevel == AccessLevel.Player) && Utility.InRange(m.Location, Location, 2) && !Utility.InRange(oldLocation, Location, 2)) - Effects.PlaySound(Location, Map, Sounds[Utility.Random(Sounds.Length)]); + Effects.PlaySound(Location, Map, Sounds.RandomElement()); base.OnMovement(m, oldLocation); } diff --git a/Projects/UOContent/Items/Skill Items/Camping/Kindling.cs b/Projects/UOContent/Items/Skill Items/Camping/Kindling.cs index d82121810..b4454e675 100644 --- a/Projects/UOContent/Items/Skill Items/Camping/Kindling.cs +++ b/Projects/UOContent/Items/Skill Items/Camping/Kindling.cs @@ -82,8 +82,7 @@ namespace Server.Items if (list.Count == 0) return Point3D.Zero; - int idx = Utility.Random(list.Count); - return list[idx]; + return list.RandomElement(); } private void AddOffsetLocation(Mobile from, int offsetX, int offsetY, List list) diff --git a/Projects/UOContent/Items/Skill Items/Fishing/Misc/SOS.cs b/Projects/UOContent/Items/Skill Items/Fishing/Misc/SOS.cs index 28c2c77d1..bf3880b73 100644 --- a/Projects/UOContent/Items/Skill Items/Fishing/Misc/SOS.cs +++ b/Projects/UOContent/Items/Skill Items/Fishing/Misc/SOS.cs @@ -187,7 +187,7 @@ namespace Server.Items for (int i = 0; i < 50; ++i) { - Rectangle2D reg = regions[Utility.Random(regions.Length)]; + Rectangle2D reg = regions.RandomElement(); int x = Utility.Random(reg.X, reg.Width); int y = Utility.Random(reg.Y, reg.Height); diff --git a/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs b/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs index 997e736df..96bf610a5 100644 --- a/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs +++ b/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs @@ -204,7 +204,7 @@ namespace Server.Items maxIntensity = 15; } - int propertyCount = propertyCounts[Utility.Random(propertyCounts.Length)]; + int propertyCount = propertyCounts.RandomElement(); BaseRunicTool.ApplyAttributesTo(this, true, 0, propertyCount, minIntensity, maxIntensity); } diff --git a/Projects/UOContent/Items/Skill Items/Tools/BaseRunicTool.cs b/Projects/UOContent/Items/Skill Items/Tools/BaseRunicTool.cs index a7d22357b..403db60d2 100644 --- a/Projects/UOContent/Items/Skill Items/Tools/BaseRunicTool.cs +++ b/Projects/UOContent/Items/Skill Items/Tools/BaseRunicTool.cs @@ -439,8 +439,8 @@ namespace Server.Items if (randomizeOrder) for (int i = 0; i < attrs.Length; i++) { - int rand = Utility.Random(attrs.Length); AosElementAttribute temp = attrs[i]; + int rand = Utility.Random(attrs.Length); attrs[i] = attrs[rand]; attrs[rand] = temp; @@ -501,7 +501,7 @@ namespace Server.Items if (entries.Length == 0) return SlayerName.None; - entry = entries[Utility.Random(entries.Length)]; + entry = entries.RandomElement(); } return entry.Name; diff --git a/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicBox.cs b/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicBox.cs index 9e38224bd..ec3adcdf1 100644 --- a/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicBox.cs +++ b/Projects/UOContent/Items/Special/8th Anniversary Items/Dawn's Music Box/DawnsMusicBox.cs @@ -302,7 +302,7 @@ namespace Server.Items _ => m_CommonTracks }; - return list[Utility.Random(list.Length)]; + return list.RandomElement(); } } } diff --git a/Projects/UOContent/Items/Special/Holiday/HolidayBell.cs b/Projects/UOContent/Items/Special/Holiday/HolidayBell.cs index b09361d8e..a6132002d 100644 --- a/Projects/UOContent/Items/Special/Holiday/HolidayBell.cs +++ b/Projects/UOContent/Items/Special/Holiday/HolidayBell.cs @@ -38,7 +38,7 @@ [Constructible] public HolidayBell() - : this(m_StaffNames[Utility.Random(m_StaffNames.Length)]) + : this(m_StaffNames.RandomElement()) { } @@ -49,7 +49,7 @@ m_Maker = maker; LootType = LootType.Blessed; - Hue = m_Hues[Utility.Random(m_Hues.Length)]; + Hue = m_Hues.RandomElement(); SoundID = 0x0F5 + Utility.Random(14); } @@ -108,4 +108,4 @@ Utility.Intern(ref m_Maker); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Items/Special/Holiday/HolidayFoods.cs b/Projects/UOContent/Items/Special/Holiday/HolidayFoods.cs index 9bfd78f15..7fa9a4414 100644 --- a/Projects/UOContent/Items/Special/Holiday/HolidayFoods.cs +++ b/Projects/UOContent/Items/Special/Holiday/HolidayFoods.cs @@ -136,7 +136,7 @@ namespace Server.Items public override bool Eat(Mobile from) { - int message = m_Messages[Utility.Random(m_Messages.Length)]; + int message = m_Messages.RandomElement(); if (message != 0) { diff --git a/Projects/UOContent/Items/Special/Holiday/HolidayGiftBoxes.cs b/Projects/UOContent/Items/Special/Holiday/HolidayGiftBoxes.cs index ee7652eb8..a52b65af1 100644 --- a/Projects/UOContent/Items/Special/Holiday/HolidayGiftBoxes.cs +++ b/Projects/UOContent/Items/Special/Holiday/HolidayGiftBoxes.cs @@ -38,8 +38,8 @@ 0x448 }; - public static int RandomGiftBoxHue => m_NormalHues[Utility.Random(m_NormalHues.Length)]; - public static int RandomNeonBoxHue => m_NeonHues[Utility.Random(m_NeonHues.Length)]; + public static int RandomGiftBoxHue => m_NormalHues.RandomElement(); + public static int RandomNeonBoxHue => m_NeonHues.RandomElement(); } [Flippable(0x46A5, 0x46A6)] @@ -205,4 +205,4 @@ int version = reader.ReadInt(); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Items/Special/Holiday/PKHolidayStuff.cs b/Projects/UOContent/Items/Special/Holiday/PKHolidayStuff.cs index f63e6df8c..436e94d86 100644 --- a/Projects/UOContent/Items/Special/Holiday/PKHolidayStuff.cs +++ b/Projects/UOContent/Items/Special/Holiday/PKHolidayStuff.cs @@ -31,11 +31,12 @@ namespace Server.Items public class BadCard : Item { + private static readonly int[] m_CardHues = { 0x45, 0x27, 0x3d0 }; + [Constructible] public BadCard() : base(0x14ef) { - int[] m_CardHues = { 0x45, 0x27, 0x3d0 }; - Hue = m_CardHues[Utility.Random(m_CardHues.Length)]; + Hue = m_CardHues.RandomElement(); Stackable = false; LootType = LootType.Blessed; Movable = true; diff --git a/Projects/UOContent/Items/Special/Holiday/SnowPiles.cs b/Projects/UOContent/Items/Special/Holiday/SnowPiles.cs index 6d3d72fde..112622263 100644 --- a/Projects/UOContent/Items/Special/Holiday/SnowPiles.cs +++ b/Projects/UOContent/Items/Special/Holiday/SnowPiles.cs @@ -6,7 +6,7 @@ [Constructible] public SnowPileDeco() - : this(m_Types[Utility.Random(m_Types.Length)]) + : this(m_Types.RandomElement()) { } @@ -37,4 +37,4 @@ int version = reader.ReadInt(); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Items/Special/Holiday/Snowman.cs b/Projects/UOContent/Items/Special/Holiday/Snowman.cs index 7afb42130..955adb2bc 100644 --- a/Projects/UOContent/Items/Special/Holiday/Snowman.cs +++ b/Projects/UOContent/Items/Special/Holiday/Snowman.cs @@ -55,71 +55,65 @@ namespace Server.Items return true; } - public static string GetRandomTitle() + // All hail OSI staff + private static readonly string[] titles = { - // All hail OSI staff - string[] titles = - { - /* 1 */ "Backflash", - /* 2 */ "Carbon", - /* 3 */ "Colbalistic", - /* 4 */ "Comforl", - /* 5 */ "Coppacchia", - /* 6 */ "Cyrus", - /* 7 */ "DannyB", - /* 8 */ "DJSoul", - /* 9 */ "DraconisRex", - /* 10 */ "Earia", - /* 11 */ "Foster", - /* 12 */ "Gonzo", - /* 13 */ "Haan", - /* 14 */ "Halona", - /* 15 */ "Hugo", - /* 16 */ "Hyacinth", - /* 17 */ "Imirian", - /* 18 */ "Jinsol", - /* 19 */ "Liciatia", - /* 20 */ "Loewen", - /* 21 */ "Loke", - /* 22 */ "Magnus", - /* 23 */ "Maleki", - /* 24 */ "Morpheus", - /* 25 */ "Obberron", - /* 26 */ "Odee", - /* 27 */ "Orbeus", - /* 28 */ "Pax", - /* 29 */ "Phields", - /* 30 */ "Pigpen", - /* 31 */ "Platinum", - /* 32 */ "Polpol", - /* 33 */ "Prume", - /* 34 */ "Quinnly", - /* 35 */ "Ragnarok", - /* 36 */ "Rend", - /* 37 */ "Roland", - /* 38 */ "RyanM", - /* 39 */ "Screach", - /* 40 */ "Seraph", - /* 41 */ "Silvani", - /* 42 */ "Sherbear", - /* 43 */ "SkyWalker", - /* 44 */ "Snark", - /* 45 */ "Sowl", - /* 46 */ "Spada", - /* 47 */ "Starblade", - /* 48 */ "Tenacious", - /* 49 */ "Tnez", - /* 50 */ "Wasia", - /* 51 */ "Zilo", - /* 52 */ "Zippy", - /* 53 */ "Zoer" - }; + /* 1 */ "Backflash", + /* 2 */ "Carbon", + /* 3 */ "Colbalistic", + /* 4 */ "Comforl", + /* 5 */ "Coppacchia", + /* 6 */ "Cyrus", + /* 7 */ "DannyB", + /* 8 */ "DJSoul", + /* 9 */ "DraconisRex", + /* 10 */ "Earia", + /* 11 */ "Foster", + /* 12 */ "Gonzo", + /* 13 */ "Haan", + /* 14 */ "Halona", + /* 15 */ "Hugo", + /* 16 */ "Hyacinth", + /* 17 */ "Imirian", + /* 18 */ "Jinsol", + /* 19 */ "Liciatia", + /* 20 */ "Loewen", + /* 21 */ "Loke", + /* 22 */ "Magnus", + /* 23 */ "Maleki", + /* 24 */ "Morpheus", + /* 25 */ "Obberron", + /* 26 */ "Odee", + /* 27 */ "Orbeus", + /* 28 */ "Pax", + /* 29 */ "Phields", + /* 30 */ "Pigpen", + /* 31 */ "Platinum", + /* 32 */ "Polpol", + /* 33 */ "Prume", + /* 34 */ "Quinnly", + /* 35 */ "Ragnarok", + /* 36 */ "Rend", + /* 37 */ "Roland", + /* 38 */ "RyanM", + /* 39 */ "Screach", + /* 40 */ "Seraph", + /* 41 */ "Silvani", + /* 42 */ "Sherbear", + /* 43 */ "SkyWalker", + /* 44 */ "Snark", + /* 45 */ "Sowl", + /* 46 */ "Spada", + /* 47 */ "Starblade", + /* 48 */ "Tenacious", + /* 49 */ "Tnez", + /* 50 */ "Wasia", + /* 51 */ "Zilo", + /* 52 */ "Zippy", + /* 53 */ "Zoer" + }; - if (titles.Length > 0) - return titles[Utility.Random(titles.Length)]; - - return null; - } + public static string GetRandomTitle() => titles.RandomElement(); public override void GetProperties(ObjectPropertyList list) { diff --git a/Projects/UOContent/Items/Special/House Raffle/HouseRaffleStone.cs b/Projects/UOContent/Items/Special/House Raffle/HouseRaffleStone.cs index 9e2304d29..e97494a0b 100644 --- a/Projects/UOContent/Items/Special/House Raffle/HouseRaffleStone.cs +++ b/Projects/UOContent/Items/Special/House Raffle/HouseRaffleStone.cs @@ -479,9 +479,7 @@ namespace Server.Items if (m_Region != null && Entries.Count != 0) { - int winner = Utility.Random(Entries.Count); - - m_Winner = Entries[winner].From; + m_Winner = Entries.RandomElement().From; if (m_Winner != null) { diff --git a/Projects/UOContent/Items/Special/MonsterStatuette.cs b/Projects/UOContent/Items/Special/MonsterStatuette.cs index 3d8226e13..33ef26bd0 100644 --- a/Projects/UOContent/Items/Special/MonsterStatuette.cs +++ b/Projects/UOContent/Items/Special/MonsterStatuette.cs @@ -200,7 +200,7 @@ namespace Server.Items int[] sounds = MonsterStatuetteInfo.GetInfo(m_Type).Sounds; if (sounds.Length > 0) - Effects.PlaySound(Location, Map, sounds[Utility.Random(sounds.Length)]); + Effects.PlaySound(Location, Map, sounds.RandomElement()); } base.OnMovement(m, oldLocation); diff --git a/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastBackpack.cs b/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastBackpack.cs index 769f23f18..74df11799 100644 --- a/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastBackpack.cs +++ b/Projects/UOContent/Items/Special/Mutation Core/PlagueBeastBackpack.cs @@ -83,7 +83,7 @@ namespace Server.Items organ = random switch { - 0 => (PlagueBeastOrgan)new PlagueBeastRockOrgan(), + 0 => new PlagueBeastRockOrgan(), 1 => new PlagueBeastMaidenOrgan(), 2 => new PlagueBeastRubbleOrgan(), _ => new PlagueBeastRockOrgan() @@ -99,10 +99,9 @@ namespace Server.Items for (int i = 0; i < m_BrainHues.Length; i++) { - int random = Utility.Random(organs.Count); - organ = organs[random]; + organ = organs.RandomElement(); organ.BrainHue = m_BrainHues[i]; - organs.RemoveAt(random); + organs.Remove(organ); } organs.Clear(); @@ -174,4 +173,4 @@ namespace Server.Items int version = reader.ReadEncodedInt(); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Items/Special/Special Scrolls/PowerScroll.cs b/Projects/UOContent/Items/Special/Special Scrolls/PowerScroll.cs index fe0fc813b..b76b3b2d7 100644 --- a/Projects/UOContent/Items/Special/Special Scrolls/PowerScroll.cs +++ b/Projects/UOContent/Items/Special/Special Scrolls/PowerScroll.cs @@ -135,7 +135,7 @@ namespace Server.Items min /= 5; max /= 5; - return new PowerScroll(Skills[Utility.Random(Skills.Count)], 100 + Utility.RandomMinMax(min, max) * 5); + return new PowerScroll(Skills.RandomElement(), 100 + Utility.RandomMinMax(min, max) * 5); } public static PowerScroll CreateRandomNoCraft(int min, int max) @@ -147,7 +147,7 @@ namespace Server.Items do { - skillName = Skills[Utility.Random(Skills.Count)]; + skillName = Skills.RandomElement(); } while (skillName == SkillName.Blacksmith || skillName == SkillName.Tailoring); return new PowerScroll(skillName, 100 + Utility.RandomMinMax(min, max) * 5); diff --git a/Projects/UOContent/Items/Special/Special Scrolls/ScrollofTranscendence.cs b/Projects/UOContent/Items/Special/Special Scrolls/ScrollofTranscendence.cs index c2873cb6b..6428f2504 100644 --- a/Projects/UOContent/Items/Special/Special Scrolls/ScrollofTranscendence.cs +++ b/Projects/UOContent/Items/Special/Special Scrolls/ScrollofTranscendence.cs @@ -30,12 +30,8 @@ namespace Server.Items public override string DefaultTitle => $"Scroll of Transcendence ({Value} Skill):"; - public static ScrollofTranscendence CreateRandom(int min, int max) - { - SkillName skill = (SkillName)Utility.Random(SkillInfo.Table.Length); - - return new ScrollofTranscendence(skill, Utility.RandomMinMax(min, max) * 0.1); - } + public static ScrollofTranscendence CreateRandom(int min, int max) => + new ScrollofTranscendence(Utility.RandomSkill(), Utility.RandomMinMax(min, max) * 0.1); public override void GetProperties(ObjectPropertyList list) { diff --git a/Projects/UOContent/Items/Talismans/BaseTalisman.cs b/Projects/UOContent/Items/Talismans/BaseTalisman.cs index 33ecb3abd..487c0983e 100644 --- a/Projects/UOContent/Items/Talismans/BaseTalisman.cs +++ b/Projects/UOContent/Items/Talismans/BaseTalisman.cs @@ -955,7 +955,7 @@ namespace Server.Items 1023817 // clean bandage }; - public static Type GetRandomSummonType() => m_Summons[Utility.Random(m_Summons.Length)]; + public static Type GetRandomSummonType() => m_Summons.RandomElement(); public static TalismanAttribute GetRandomSummoner() { @@ -1049,7 +1049,7 @@ namespace Server.Items SkillName.Tinkering }; - public static SkillName GetRandomSkill() => m_Skills[Utility.Random(m_Skills.Length)]; + public static SkillName GetRandomSkill() => m_Skills.RandomElement(); public static int GetRandomExceptional() { diff --git a/Projects/UOContent/Items/Weapons/Artifacts/TheDryadBow.cs b/Projects/UOContent/Items/Weapons/Artifacts/TheDryadBow.cs index de165d560..66bcd2ffb 100644 --- a/Projects/UOContent/Items/Weapons/Artifacts/TheDryadBow.cs +++ b/Projects/UOContent/Items/Weapons/Artifacts/TheDryadBow.cs @@ -17,8 +17,7 @@ namespace Server.Items { ItemID = 0x13B1; Hue = 0x48F; - SkillBonuses.SetValues(0, m_PossibleBonusSkills[Utility.Random(m_PossibleBonusSkills.Length)], - Utility.Random(4) == 0 ? 10.0 : 5.0); + SkillBonuses.SetValues(0, m_PossibleBonusSkills.RandomElement(), Utility.Random(4) == 0 ? 10.0 : 5.0); WeaponAttributes.SelfRepair = 5; Attributes.WeaponSpeed = 50; Attributes.WeaponDamage = 35; @@ -49,8 +48,7 @@ namespace Server.Items int version = reader.ReadInt(); if (version < 1) - SkillBonuses.SetValues(0, m_PossibleBonusSkills[Utility.Random(m_PossibleBonusSkills.Length)], - Utility.Random(4) == 0 ? 10.0 : 5.0); + SkillBonuses.SetValues(0, m_PossibleBonusSkills.RandomElement(), Utility.Random(4) == 0 ? 10.0 : 5.0); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Items/Weapons/SlayerGroup.cs b/Projects/UOContent/Items/Weapons/SlayerGroup.cs index 67a733988..72d0d1397 100644 --- a/Projects/UOContent/Items/Weapons/SlayerGroup.cs +++ b/Projects/UOContent/Items/Weapons/SlayerGroup.cs @@ -201,10 +201,7 @@ namespace Server.Items { int index = Utility.Random(1 + group.Entries.Length); - if (index == 0) - return group.Super.Name; - - return group.Entries[index - 1].Name; + return index == 0 ? group.Super.Name : group.Entries[index - 1].Name; } } diff --git a/Projects/UOContent/Misc/CharacterCreation.cs b/Projects/UOContent/Misc/CharacterCreation.cs index 4d21cf3d8..f23fbbec6 100644 --- a/Projects/UOContent/Misc/CharacterCreation.cs +++ b/Projects/UOContent/Misc/CharacterCreation.cs @@ -1102,7 +1102,7 @@ namespace Server.Misc int[] hues = { 0x1A8, 0xEC, 0x99, 0x90, 0xB5, 0x336, 0x89 }; // TODO: Verify that's ALL the hues for that above. - EquipItem(new TattsukeHakama(hues[Utility.Random(hues.Length)])); + EquipItem(new TattsukeHakama(hues.RandomElement())); EquipItem(new HakamaShita(0x2C3)); EquipItem(new NinjaTabi(0x2C3)); diff --git a/Projects/UOContent/Misc/Gifts/Winter2004/LightOfTheWinterSolstice.cs b/Projects/UOContent/Misc/Gifts/Winter2004/LightOfTheWinterSolstice.cs index ab76717f1..209bf4d91 100644 --- a/Projects/UOContent/Misc/Gifts/Winter2004/LightOfTheWinterSolstice.cs +++ b/Projects/UOContent/Misc/Gifts/Winter2004/LightOfTheWinterSolstice.cs @@ -26,7 +26,7 @@ namespace Server.Items [Constructible] public LightOfTheWinterSolstice(string dipper = null) : base(0x236E) { - Dipper = dipper ?? m_StaffNames[Utility.Random(m_StaffNames.Length)]; + Dipper = dipper ?? m_StaffNames.RandomElement(); Weight = 1.0; LootType = LootType.Blessed; @@ -81,7 +81,7 @@ namespace Server.Items } case 0: { - Dipper = m_StaffNames[Utility.Random(m_StaffNames.Length)]; + Dipper = m_StaffNames.RandomElement(); break; } } diff --git a/Projects/UOContent/Misc/Guild.cs b/Projects/UOContent/Misc/Guild.cs index 585ddac0c..d9ef06dcf 100644 --- a/Projects/UOContent/Misc/Guild.cs +++ b/Projects/UOContent/Misc/Guild.cs @@ -134,7 +134,7 @@ namespace Server.Guilds public void CalculateAllianceLeader() { - m_Leader = m_Members.Count >= 2 ? m_Members[Utility.Random(m_Members.Count)] : null; + m_Leader = m_Members.Count >= 2 ? m_Members.RandomElement() : null; } public void CheckLeader() diff --git a/Projects/UOContent/Misc/InhumanSpeech.cs b/Projects/UOContent/Misc/InhumanSpeech.cs index bd9b564d9..8c3dedeb0 100644 --- a/Projects/UOContent/Misc/InhumanSpeech.cs +++ b/Projects/UOContent/Misc/InhumanSpeech.cs @@ -300,7 +300,7 @@ namespace Server.Misc public IHSFlags Flags { get; set; } - public string GetRandomSyllable() => Syllables[Utility.Random(Syllables.Length)]; + public string GetRandomSyllable() => Syllables.RandomElement(); public string ConstructWord(int syllableCount) { @@ -367,17 +367,14 @@ namespace Server.Misc public void SayRandomTranslate(Mobile mob, params string[] sentancesInEnglish) { SaySentance(mob, Utility.RandomMinMax(2, 3)); - mob.Say(sentancesInEnglish[Utility.Random(sentancesInEnglish.Length)]); + mob.Say(sentancesInEnglish.RandomElement()); } private string GetRandomResponseWord(List keywordsFound) { int random = Utility.Random(keywordsFound.Count + Responses.Length); - if (random < keywordsFound.Count) - return keywordsFound[random]; - - return Responses[random - keywordsFound.Count]; + return random < keywordsFound.Count ? keywordsFound[random] : Responses[random - keywordsFound.Count]; } public bool OnSpeech(Mobile mob, Mobile speaker, string text) @@ -411,7 +408,7 @@ namespace Server.Misc if (Utility.RandomBool()) responseWord = GetRandomResponseWord(keywordsFound); else - responseWord = keywordsFound[Utility.Random(keywordsFound.Count)]; + responseWord = keywordsFound.RandomElement(); string secondResponseWord = GetRandomResponseWord(keywordsFound); diff --git a/Projects/UOContent/Misc/Loot.cs b/Projects/UOContent/Misc/Loot.cs index 03cb9fd14..074202016 100644 --- a/Projects/UOContent/Misc/Loot.cs +++ b/Projects/UOContent/Misc/Loot.cs @@ -539,13 +539,7 @@ namespace Server public static Item RandomNecromancyReagent() => Construct(NecroRegTypes); - public static Item RandomPossibleReagent() - { - if (Core.AOS) - return Construct(RegTypes, NecroRegTypes); - - return Construct(RegTypes); - } + public static Item RandomPossibleReagent() => Core.AOS ? Construct(RegTypes, NecroRegTypes) : Construct(RegTypes); public static Item RandomPotion() => Construct(PotionTypes); @@ -621,6 +615,8 @@ namespace Server public static Item Construct(Type type) { + if (type == null) return null; + try { return ActivatorUtil.CreateInstance(type) as Item; @@ -631,13 +627,7 @@ namespace Server } } - public static Item Construct(Type[] types) - { - if (types.Length > 0) - return Construct(types, Utility.Random(types.Length)); - - return null; - } + public static Item Construct(Type[] types) => Construct(types.RandomElement()); public static Item Construct(Type[] types, int index) { diff --git a/Projects/UOContent/Misc/MondainsLegacy.cs b/Projects/UOContent/Misc/MondainsLegacy.cs index 656ee15a3..bf44fb8d3 100644 --- a/Projects/UOContent/Misc/MondainsLegacy.cs +++ b/Projects/UOContent/Misc/MondainsLegacy.cs @@ -27,7 +27,7 @@ namespace Server public static void GiveArtifactTo(Mobile m) { - if (!(ActivatorUtil.CreateInstance(Artifacts[Utility.Random(Artifacts.Length)]) is Item item)) + if (!(ActivatorUtil.CreateInstance(Artifacts.RandomElement()) is Item item)) return; if (m.AddToBackpack(item)) diff --git a/Projects/UOContent/Misc/NameList.cs b/Projects/UOContent/Misc/NameList.cs index 3750464d1..2784c0fc5 100644 --- a/Projects/UOContent/Misc/NameList.cs +++ b/Projects/UOContent/Misc/NameList.cs @@ -23,7 +23,7 @@ namespace Server return false; } - public string GetRandomName() => List.Length > 0 ? List[Utility.Random(List.Length)] : ""; + public string GetRandomName() => List.RandomElement() ?? ""; public static NameList GetNameList(string type) { diff --git a/Projects/UOContent/Misc/RaceDefinitions.cs b/Projects/UOContent/Misc/RaceDefinitions.cs index 65efac673..cdd0a294e 100644 --- a/Projects/UOContent/Misc/RaceDefinitions.cs +++ b/Projects/UOContent/Misc/RaceDefinitions.cs @@ -184,7 +184,7 @@ namespace Server.Misc return m_SkinHues[0]; } - public override int RandomSkinHue() => m_SkinHues[Utility.Random(m_SkinHues.Length)] | 0x8000; + public override int RandomSkinHue() => m_SkinHues.RandomElement() | 0x8000; public override int ClipHairHue(int hue) { @@ -195,7 +195,7 @@ namespace Server.Misc return m_HairHues[0]; } - public override int RandomHairHue() => m_HairHues[Utility.Random(m_HairHues.Length)]; + public override int RandomHairHue() => m_HairHues.RandomElement(); } private class Gargoyle : Race @@ -258,7 +258,7 @@ namespace Server.Misc public override int ClipSkinHue(int hue) => hue; - public override int RandomSkinHue() => m_BodyHues[Utility.Random(m_BodyHues.Length)] | 0x8000; + public override int RandomSkinHue() => m_BodyHues.RandomElement() | 0x8000; public override int ClipHairHue(int hue) { @@ -269,7 +269,7 @@ namespace Server.Misc return m_HornHues[0]; } - public override int RandomHairHue() => m_HornHues[Utility.Random(m_HornHues.Length)]; + public override int RandomHairHue() => m_HornHues.RandomElement(); } } } diff --git a/Projects/UOContent/Mobiles/BaseCreature.cs b/Projects/UOContent/Mobiles/BaseCreature.cs index 5b0059c94..cc6b6ab05 100644 --- a/Projects/UOContent/Mobiles/BaseCreature.cs +++ b/Projects/UOContent/Mobiles/BaseCreature.cs @@ -2108,20 +2108,14 @@ namespace Server.Mobiles public Spell GetAttackSpellRandom() { - if (m_SpellAttack.Count == 0) - return null; - - Type type = m_SpellAttack[Utility.Random(m_SpellAttack.Count)]; - return ActivatorUtil.CreateInstance(type, this, null) as Spell; + Type type = m_SpellAttack.RandomElement(); + return type == null ? null : ActivatorUtil.CreateInstance(type, this, null) as Spell; } public Spell GetDefenseSpellRandom() { - if (m_SpellDefense.Count == 0) - return null; - - Type type = m_SpellDefense[Utility.Random(m_SpellDefense.Count)]; - return ActivatorUtil.CreateInstance(type, this, null) as Spell; + Type type = m_SpellDefense.RandomElement(); + return type == null ? null : ActivatorUtil.CreateInstance(type, this, null) as Spell; } public Spell GetSpellSpecific(Type type) @@ -2853,7 +2847,7 @@ namespace Server.Mobiles for (int i = 0; i < items.Count; ++i) { - Item item = items[Utility.Random(items.Count)]; + Item item = items.RandomElement(); Lift(item, item.Amount, out bool rejected, out LRReason _); diff --git a/Projects/UOContent/Mobiles/Monsters/AOS/DemonKnight.cs b/Projects/UOContent/Mobiles/Monsters/AOS/DemonKnight.cs index 1740f369c..33fe25644 100644 --- a/Projects/UOContent/Mobiles/Monsters/AOS/DemonKnight.cs +++ b/Projects/UOContent/Mobiles/Monsters/AOS/DemonKnight.cs @@ -143,10 +143,7 @@ namespace Server.Mobiles rights.RemoveAt(i); } - if (rights.Count > 0) - return rights[Utility.Random(rights.Count)].m_Mobile; - - return null; + return rights.RandomElement()?.m_Mobile; } public static void DistributeArtifact(BaseCreature creature) diff --git a/Projects/UOContent/Mobiles/Monsters/LBR/Jukas/JukaLord.cs b/Projects/UOContent/Mobiles/Monsters/LBR/Jukas/JukaLord.cs index 99625e60c..f79b88d77 100644 --- a/Projects/UOContent/Mobiles/Monsters/LBR/Jukas/JukaLord.cs +++ b/Projects/UOContent/Mobiles/Monsters/LBR/Jukas/JukaLord.cs @@ -84,7 +84,7 @@ namespace Server.Mobiles "{0}!! You will pay for that!" }; - Say(true, string.Format(toSay[Utility.Random(toSay.Length)], from.Name)); + Say(true, string.Format(toSay.RandomElement(), from.Name)); } base.OnDamage(amount, from, willKill); diff --git a/Projects/UOContent/Mobiles/Monsters/ML/Animal/Ferret.cs b/Projects/UOContent/Mobiles/Monsters/ML/Animal/Ferret.cs index ba9d87533..88ddc4c44 100644 --- a/Projects/UOContent/Mobiles/Monsters/ML/Animal/Ferret.cs +++ b/Projects/UOContent/Mobiles/Monsters/ML/Animal/Ferret.cs @@ -74,7 +74,7 @@ namespace Server.Mobiles if (to != null) QuestSystem.FocusTo(this, to); - Say(m_Vocabulary[Utility.Random(m_Vocabulary.Length)]); + Say(m_Vocabulary.RandomElement()); if (to != null && Utility.RandomBool()) Timer.DelayCall(TimeSpan.FromSeconds(Utility.RandomMinMax(5, 8)), to.Talk); diff --git a/Projects/UOContent/Mobiles/Monsters/Misc/Melee/BladeSpirits.cs b/Projects/UOContent/Mobiles/Monsters/Misc/Melee/BladeSpirits.cs index 361d63db1..b6e3e61a7 100644 --- a/Projects/UOContent/Mobiles/Monsters/Misc/Melee/BladeSpirits.cs +++ b/Projects/UOContent/Mobiles/Monsters/Misc/Melee/BladeSpirits.cs @@ -79,9 +79,9 @@ namespace Server.Mobiles while (spiritsOrVortexes.Count > 6) { - int index = Utility.Random(spiritsOrVortexes.Count); - Dispel(spiritsOrVortexes[index]); - spiritsOrVortexes.RemoveAt(index); + var random = spiritsOrVortexes.RandomElement(); + Dispel(random); + spiritsOrVortexes.Remove(random); } } diff --git a/Projects/UOContent/Mobiles/Monsters/Misc/Melee/EnergyVortex.cs b/Projects/UOContent/Mobiles/Monsters/Misc/Melee/EnergyVortex.cs index 088e89259..a470f1e9e 100644 --- a/Projects/UOContent/Mobiles/Monsters/Misc/Melee/EnergyVortex.cs +++ b/Projects/UOContent/Mobiles/Monsters/Misc/Melee/EnergyVortex.cs @@ -86,9 +86,9 @@ namespace Server.Mobiles while (spiritsOrVortexes.Count > 6) { - int index = Utility.Random(spiritsOrVortexes.Count); - Dispel(spiritsOrVortexes[index]); - spiritsOrVortexes.RemoveAt(index); + var random = spiritsOrVortexes.RandomElement(); + Dispel(random); + spiritsOrVortexes.Remove(random); } } diff --git a/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/OphidianArchmage.cs b/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/OphidianArchmage.cs index 5f08184e0..a63457aae 100644 --- a/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/OphidianArchmage.cs +++ b/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/OphidianArchmage.cs @@ -12,7 +12,7 @@ namespace Server.Mobiles [Constructible] public OphidianArchmage() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4) { - Name = m_Names[Utility.Random(m_Names.Length)]; + Name = m_Names.RandomElement(); Body = 85; BaseSoundID = 639; @@ -76,4 +76,4 @@ namespace Server.Mobiles int version = reader.ReadInt(); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/OphidianMage.cs b/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/OphidianMage.cs index 73f5c916d..61d3fd6e6 100644 --- a/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/OphidianMage.cs +++ b/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/OphidianMage.cs @@ -12,7 +12,7 @@ namespace Server.Mobiles [Constructible] public OphidianMage() : base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4) { - Name = m_Names[Utility.Random(m_Names.Length)]; + Name = m_Names.RandomElement(); Body = 85; BaseSoundID = 639; @@ -77,4 +77,4 @@ namespace Server.Mobiles int version = reader.ReadInt(); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Mobiles/Monsters/Reptile/Melee/OphidianKnight.cs b/Projects/UOContent/Mobiles/Monsters/Reptile/Melee/OphidianKnight.cs index 05aaee060..1a651c9fc 100644 --- a/Projects/UOContent/Mobiles/Monsters/Reptile/Melee/OphidianKnight.cs +++ b/Projects/UOContent/Mobiles/Monsters/Reptile/Melee/OphidianKnight.cs @@ -14,7 +14,7 @@ namespace Server.Mobiles [Constructible] public OphidianKnight() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4) { - Name = m_Names[Utility.Random(m_Names.Length)]; + Name = m_Names.RandomElement(); Body = 86; BaseSoundID = 634; @@ -79,4 +79,4 @@ namespace Server.Mobiles int version = reader.ReadInt(); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Mobiles/Monsters/Reptile/Melee/OphidianWarrior.cs b/Projects/UOContent/Mobiles/Monsters/Reptile/Melee/OphidianWarrior.cs index 27ab097d8..f5d9c6b02 100644 --- a/Projects/UOContent/Mobiles/Monsters/Reptile/Melee/OphidianWarrior.cs +++ b/Projects/UOContent/Mobiles/Monsters/Reptile/Melee/OphidianWarrior.cs @@ -11,7 +11,7 @@ namespace Server.Mobiles [Constructible] public OphidianWarrior() : base(AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4) { - Name = m_Names[Utility.Random(m_Names.Length)]; + Name = m_Names.RandomElement(); Body = 86; BaseSoundID = 634; @@ -72,4 +72,4 @@ namespace Server.Mobiles int version = reader.ReadInt(); } } -} \ No newline at end of file +} diff --git a/Projects/UOContent/Mobiles/Special/BaseChampion.cs b/Projects/UOContent/Mobiles/Special/BaseChampion.cs index 340f5f242..1b28ba168 100644 --- a/Projects/UOContent/Mobiles/Special/BaseChampion.cs +++ b/Projects/UOContent/Mobiles/Special/BaseChampion.cs @@ -59,15 +59,13 @@ namespace Server.Mobiles if (list.Length == 0) return null; - int random = Utility.Random(list.Length); - - Type type = list[random]; + Type type = list.RandomElement(); Item artifact = Loot.Construct(type); - if (artifact is MonsterStatuette statuette && StatueTypes.Length > 0) + if (StatueTypes.Length > 0 && artifact is MonsterStatuette statuette) { - statuette.Type = StatueTypes[Utility.Random(StatueTypes.Length)]; + statuette.Type = StatueTypes.RandomElement(); statuette.LootType = LootType.Regular; } @@ -249,7 +247,7 @@ namespace Server.Mobiles } if (toGive.Count > 0) - toGive[Utility.Random(toGive.Count)].AddToBackpack(new ChampionSkull(SkullType)); + toGive.RandomElement().AddToBackpack(new ChampionSkull(SkullType)); else c.DropItem(new ChampionSkull(SkullType)); } diff --git a/Projects/UOContent/Mobiles/Special/Harrower.cs b/Projects/UOContent/Mobiles/Special/Harrower.cs index c4116dcb8..7ba422e6f 100644 --- a/Projects/UOContent/Mobiles/Special/Harrower.cs +++ b/Projects/UOContent/Mobiles/Special/Harrower.cs @@ -116,7 +116,7 @@ namespace Server.Mobiles if (Instances.Count > 0) return null; - SpawnEntry entry = m_Entries[Utility.Random(m_Entries.Length)]; + SpawnEntry entry = m_Entries.RandomElement(); Harrower harrower = new Harrower(); @@ -454,17 +454,7 @@ namespace Server.Mobiles return null; } - public Item CreateArtifact(Type[] list) - { - if (list.Length == 0) - return null; - - int random = Utility.Random(list.Length); - - Type type = list[random]; - - return Loot.Construct(type); - } + public Item CreateArtifact(Type[] list) => Loot.Construct(list.RandomElement()); private class SpawnEntry { diff --git a/Projects/UOContent/Mobiles/Special/Paragon.cs b/Projects/UOContent/Mobiles/Special/Paragon.cs index 682932e9e..0b8568465 100644 --- a/Projects/UOContent/Mobiles/Special/Paragon.cs +++ b/Projects/UOContent/Mobiles/Special/Paragon.cs @@ -180,7 +180,7 @@ namespace Server.Mobiles public static void GiveArtifactTo(Mobile m) { - Item item = (Item)ActivatorUtil.CreateInstance(Artifacts[Utility.Random(Artifacts.Length)]); + Item item = (Item)ActivatorUtil.CreateInstance(Artifacts.RandomElement()); if (m.AddToBackpack(item)) m.SendMessage("As a reward for slaying the mighty paragon, an artifact has been placed in your backpack."); diff --git a/Projects/UOContent/Mobiles/Townfolk/BaseEscortable.cs b/Projects/UOContent/Mobiles/Townfolk/BaseEscortable.cs index ae4303ac8..99bbcd979 100644 --- a/Projects/UOContent/Mobiles/Townfolk/BaseEscortable.cs +++ b/Projects/UOContent/Mobiles/Townfolk/BaseEscortable.cs @@ -586,7 +586,7 @@ namespace Server.Mobiles while (picked == null) { - picked = possible[Utility.Random(possible.Length)]; + picked = possible.RandomElement(); EDI test = EDI.Find(picked); if (test.Contains(Location)) diff --git a/Projects/UOContent/Mobiles/Townfolk/TownCrier.cs b/Projects/UOContent/Mobiles/Townfolk/TownCrier.cs index 55d51a11f..6499ed3f0 100644 --- a/Projects/UOContent/Mobiles/Townfolk/TownCrier.cs +++ b/Projects/UOContent/Mobiles/Townfolk/TownCrier.cs @@ -42,10 +42,7 @@ namespace Server.Mobiles RemoveEntry(tce); } - if (Entries == null || Entries.Count == 0) - return null; - - return Entries[Utility.Random(Entries.Count)]; + return Entries.RandomElement(); } public TownCrierEntry AddEntry(string[] lines, TimeSpan duration) @@ -372,10 +369,7 @@ namespace Server.Mobiles TownCrierEntry entry = GlobalTownCrierEntryList.Instance.GetRandomEntry(); - if (entry == null || Utility.RandomBool()) - entry = Entries[Utility.Random(Entries.Count)]; - - return entry; + return entry ?? (Utility.RandomBool() ? Entries.RandomElement() : null); } public TownCrierEntry AddEntry(string[] lines, TimeSpan duration) diff --git a/Projects/UOContent/Skills/Stealing.cs b/Projects/UOContent/Skills/Stealing.cs index 302cd7f74..068ffeeac 100644 --- a/Projects/UOContent/Skills/Stealing.cs +++ b/Projects/UOContent/Skills/Stealing.cs @@ -324,10 +324,8 @@ namespace Server.SkillHandlers if (pack?.Items.Count > 0) { - int randomIndex = Utility.Random(pack.Items.Count); - root = mobile; - stolen = TryStealItem(pack.Items[randomIndex], ref caught); + stolen = TryStealItem(pack.Items.RandomElement(), ref caught); } } else diff --git a/Projects/UOContent/SpecialSystems/Engines/PreventInaccess.cs b/Projects/UOContent/SpecialSystems/Engines/PreventInaccess.cs index 1f063c6fa..e45893b4c 100644 --- a/Projects/UOContent/SpecialSystems/Engines/PreventInaccess.cs +++ b/Projects/UOContent/SpecialSystems/Engines/PreventInaccess.cs @@ -63,7 +63,7 @@ namespace Server.Misc private static bool HasDisconnected(Mobile m) => m.NetState?.Connection == null; - private static LocationInfo GetRandomDestination() => m_Destinations[Utility.Random(m_Destinations.Length)]; + private static LocationInfo GetRandomDestination() => m_Destinations.RandomElement(); private class LocationInfo { diff --git a/Projects/UOContent/Spells/Bushido/MomentumStrike.cs b/Projects/UOContent/Spells/Bushido/MomentumStrike.cs index c34f8e264..7f217c35c 100644 --- a/Projects/UOContent/Spells/Bushido/MomentumStrike.cs +++ b/Projects/UOContent/Spells/Bushido/MomentumStrike.cs @@ -32,7 +32,7 @@ namespace Server.Spells.Bushido if (!CheckMana(attacker, true)) return; - Mobile target = targets[Utility.Random(targets.Count)]; + Mobile target = targets.RandomElement(); double damageBonus = attacker.Skills.Bushido.Value / 100.0; diff --git a/Projects/UOContent/Spells/Fifth/SummonCreature.cs b/Projects/UOContent/Spells/Fifth/SummonCreature.cs index 109422f5f..d331756b6 100644 --- a/Projects/UOContent/Spells/Fifth/SummonCreature.cs +++ b/Projects/UOContent/Spells/Fifth/SummonCreature.cs @@ -63,7 +63,7 @@ namespace Server.Spells.Fifth if (CheckSequence()) try { - BaseCreature creature = (BaseCreature)ActivatorUtil.CreateInstance(m_Types[Utility.Random(m_Types.Length)]); + BaseCreature creature = (BaseCreature)ActivatorUtil.CreateInstance(m_Types.RandomElement()); // creature.ControlSlots = 2; diff --git a/Projects/UOContent/Spells/First/CreateFood.cs b/Projects/UOContent/Spells/First/CreateFood.cs index 745f36464..c6db79ff2 100644 --- a/Projects/UOContent/Spells/First/CreateFood.cs +++ b/Projects/UOContent/Spells/First/CreateFood.cs @@ -38,7 +38,7 @@ namespace Server.Spells.First { if (CheckSequence()) { - FoodInfo foodInfo = m_Food[Utility.Random(m_Food.Length)]; + FoodInfo foodInfo = m_Food.RandomElement(); Item food = foodInfo.Create(); if (food != null) diff --git a/Projects/UOContent/Spells/Necromancy/AnimateDeadSpell.cs b/Projects/UOContent/Spells/Necromancy/AnimateDeadSpell.cs index f7ce8e638..379679883 100644 --- a/Projects/UOContent/Spells/Necromancy/AnimateDeadSpell.cs +++ b/Projects/UOContent/Spells/Necromancy/AnimateDeadSpell.cs @@ -277,7 +277,7 @@ namespace Server.Spells.Necromancy Type[] animates = entry.m_ToSummon; - toSummon = animates[Utility.Random(animates.Length)]; + toSummon = animates.RandomElement(); } if (toSummon == null)