From a440cb72d16136bca0d4aca16d6635031294d341 Mon Sep 17 00:00:00 2001 From: WarrentyExpired Date: Fri, 23 Oct 2026 20:57:31 -0400 Subject: [PATCH] #W# Loot: Messing around with a random loot generating bag. --- .../Items/TreasureChests/RandomLootBag.cs | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 Projects/UOContent/Items/TreasureChests/RandomLootBag.cs diff --git a/Projects/UOContent/Items/TreasureChests/RandomLootBag.cs b/Projects/UOContent/Items/TreasureChests/RandomLootBag.cs new file mode 100644 index 000000000..c4294bc1a --- /dev/null +++ b/Projects/UOContent/Items/TreasureChests/RandomLootBag.cs @@ -0,0 +1,96 @@ +using System; +using ModernUO.Serialization; + +namespace Server.Items; + +// ============================================================== +// LEVEL 4: 99% Trapped / 99% Locked (1% Lottery Ticket!) +// ============================================================== +[SerializationGenerator(0, false)] +public partial class RandomLootBag : Bag +{ + private static void GetRandomAOSStats(out int attributeCount, out int min, out int max) + { + var rnd = Utility.Random(15); + + if (rnd < 1) + { + attributeCount = Utility.RandomMinMax(2, 5); + min = 20; + max = 70; + } + else if (rnd < 3) + { + attributeCount = Utility.RandomMinMax(2, 4); + min = 20; + max = 50; + } + else if (rnd < 6) + { + attributeCount = Utility.RandomMinMax(2, 3); + min = 20; + max = 40; + } + else if (rnd < 10) + { + attributeCount = Utility.RandomMinMax(1, 2); + min = 10; + max = 30; + } + else + { + attributeCount = 1; + min = 10; + max = 20; + } + } + + private static void GetRandomResists(out int phy, out int fire, out int cold, out int poison, out int energy) + { + var phyR = Utility.Random(1, 15); + phy = phyR; + var fireR = Utility.Random(1, 15); + fire = fireR; + var coldR = Utility.Random(1, 15); + cold = coldR; + var poisonR = Utility.Random(1, 15); + poison = poisonR; + var energyR = Utility.Random(1, 15); + energy = energyR; + } + + [Constructible] + public RandomLootBag() + { + for (var i = Utility.Random(10) + 1; i > 0; i--) + { + var weapon = Loot.RandomWeapon(); + GetRandomAOSStats(out var attributeCount, out var min, out var max); + BaseRunicTool.ApplyAttributesTo(weapon, attributeCount, min, max); + DropItem(weapon); + } + + for ( var i = Utility.Random(10) + 1; i > 0; i--) + { + var armor = Loot.RandomArmorOrShield(); + GetRandomAOSStats(out var attributeCount, out var min, out var max); + BaseRunicTool.ApplyAttributesTo(armor, attributeCount, min, max); + GetRandomResists(out var phy, out var fire, out var cold, out var poison, out var energy); + armor.PhysicalBonus = phy; + armor.FireBonus = fire; + armor.ColdBonus = cold; + armor.PoisonBonus = poison; + armor.EnergyBonus = energy; + DropItem(armor); + } + + for (var i = Utility.Random(10) + 1; i > 0; i--) + { + var jewelry = Loot.RandomJewelry(); + GetRandomAOSStats(out var attributeCount, out var min, out var max); + BaseRunicTool.ApplyAttributesTo(jewelry, attributeCount, min, max); + DropItem(jewelry); + } + } + +}