ModernUO/Projects/UOContent/Engines/ML Quests/Items/CraftmansSatchel.cs
2023-09-30 00:46:07 -07:00

130 lines
3.3 KiB
C#

using System;
using ModernUO.Serialization;
using Server.Engines.Craft;
using Server.Items;
namespace Server.Engines.MLQuests.Items;
[SerializationGenerator(0, false)]
public abstract partial class BaseCraftmansSatchel : Backpack
{
protected static readonly Type[] m_TalismanType = { typeof(RandomTalisman) };
public BaseCraftmansSatchel() => Hue = Utility.RandomBrightHue();
protected void AddBaseLoot(params Type[][] lootSets)
{
var loot = Loot.Construct(lootSets.RandomElement());
if (loot == null)
{
return;
}
RewardBag.Enhance(loot);
DropItem(loot);
}
protected void AddRecipe(CraftSystem system)
{
// TODO: change craftable artifact recipes to a rarer drop
var recipeID = system.RandomRecipe();
if (recipeID != -1)
{
DropItem(new RecipeScroll(recipeID));
}
}
}
[SerializationGenerator(0, false)]
public partial class TailorSatchel : BaseCraftmansSatchel
{
[Constructible]
public TailorSatchel()
{
AddBaseLoot(Loot.MLArmorTypes, Loot.JewelryTypes, m_TalismanType);
if (Utility.RandomBool())
{
AddRecipe(DefTailoring.CraftSystem);
}
}
}
[SerializationGenerator(0, false)]
public partial class BlacksmithSatchel : BaseCraftmansSatchel
{
[Constructible]
public BlacksmithSatchel()
{
AddBaseLoot(Loot.MLWeaponTypes, Loot.JewelryTypes, m_TalismanType);
if (Utility.RandomBool())
{
AddRecipe(DefBlacksmithy.CraftSystem);
}
}
}
[SerializationGenerator(0, false)]
public partial class TinkerSatchel : BaseCraftmansSatchel
{
[Constructible]
public TinkerSatchel()
{
AddBaseLoot(Loot.MLArmorTypes, Loot.MLWeaponTypes, Loot.MLRangedWeaponTypes, Loot.JewelryTypes, m_TalismanType);
if (Utility.RandomBool())
{
switch (Utility.Random(6))
{
case 0:
AddRecipe(DefInscription.CraftSystem);
break;
case 1:
AddRecipe(DefAlchemy.CraftSystem);
break;
// TODO
// case 2: AddNonArtifactRecipe( DefTailoring.CraftSystem ); break;
// case 3: AddNonArtifactRecipe( DefBlacksmithy.CraftSystem ); break;
// case 4: AddNonArtifactRecipe( DefCarpentry.CraftSystem ); break;
// case 5: AddNonArtifactRecipe( DefBowFletching.CraftSystem ); break;
}
}
}
}
[SerializationGenerator(0, false)]
public partial class FletchingSatchel : BaseCraftmansSatchel
{
[Constructible]
public FletchingSatchel()
{
AddBaseLoot(Loot.MLRangedWeaponTypes, Loot.JewelryTypes, m_TalismanType);
if (Utility.RandomBool())
{
AddRecipe(DefBowFletching.CraftSystem);
}
// TODO: runic fletching kit
}
}
[SerializationGenerator(0, false)]
public partial class CarpentrySatchel : BaseCraftmansSatchel
{
[Constructible]
public CarpentrySatchel()
{
AddBaseLoot(Loot.MLArmorTypes, Loot.MLWeaponTypes, Loot.MLRangedWeaponTypes, Loot.JewelryTypes, m_TalismanType);
if (Utility.RandomBool())
{
AddRecipe(DefCarpentry.CraftSystem);
}
// TODO: Add runic dovetail saw
}
}