#W# Loot: Messing around with a random loot generating bag.

This commit is contained in:
WarrentyExpired 2026-10-23 20:57:31 -04:00
parent 7e8e8cf3f5
commit a440cb72d1

View file

@ -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);
}
}
}