using System; using System.Collections.Generic; using System.Text; using Server; using Server.Engines.Craft; using Server.Items; namespace Server.Engines.MLQuests.Items { public abstract class BaseCraftmansSatchel : Backpack { protected static readonly Type[] m_TalismanType = new Type[] { typeof( RandomTalisman ) }; public BaseCraftmansSatchel() { Hue = Utility.RandomBrightHue(); } protected void AddBaseLoot( params Type[][] lootSets ) { Item loot = Loot.Construct( lootSets[Utility.Random( lootSets.Length )] ); if ( loot == null ) return; RewardBag.Enhance( loot ); DropItem( loot ); } protected void AddRecipe( CraftSystem system ) { // TODO: change craftable artifact recipes to a rarer drop int recipeID = system.RandomRecipe(); if ( recipeID != -1 ) DropItem( new RecipeScroll( recipeID ) ); } public BaseCraftmansSatchel( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int)0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class TailorSatchel : BaseCraftmansSatchel { [Constructable] public TailorSatchel() { AddBaseLoot( Loot.MLArmorTypes, Loot.JewelryTypes, m_TalismanType ); if ( Utility.RandomDouble() < 0.50 ) AddRecipe( DefTailoring.CraftSystem ); } public TailorSatchel( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int)0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class BlacksmithSatchel : BaseCraftmansSatchel { [Constructable] public BlacksmithSatchel() { AddBaseLoot( Loot.MLWeaponTypes, Loot.JewelryTypes, m_TalismanType ); if ( Utility.RandomDouble() < 0.50 ) AddRecipe( DefBlacksmithy.CraftSystem ); } public BlacksmithSatchel( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int)0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class TinkerSatchel : BaseCraftmansSatchel { [Constructable] public TinkerSatchel() { AddBaseLoot( Loot.MLArmorTypes, Loot.MLWeaponTypes, Loot.MLRangedWeaponTypes, Loot.JewelryTypes, m_TalismanType ); if ( Utility.RandomDouble() < 0.50 ) { // TODO: Add recipe drops (drops include inscription, alchemy and drops from non-artifact recipes for tailoring, blacksmith, carpentry and fletching. 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; } } } public TinkerSatchel( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int)0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class FletchingSatchel : BaseCraftmansSatchel { [Constructable] public FletchingSatchel() { AddBaseLoot( Loot.MLRangedWeaponTypes, Loot.JewelryTypes, m_TalismanType ); if ( Utility.RandomDouble() < 0.50 ) AddRecipe( DefBowFletching.CraftSystem ); // TODO: runic fletching kit } public FletchingSatchel( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int)0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } public class CarpentrySatchel : BaseCraftmansSatchel { [Constructable] public CarpentrySatchel() { AddBaseLoot( Loot.MLArmorTypes, Loot.MLWeaponTypes, Loot.MLRangedWeaponTypes, Loot.JewelryTypes, m_TalismanType ); if ( Utility.RandomDouble() < 0.50 ) AddRecipe( DefCarpentry.CraftSystem ); // TODO: Add runic dovetail saw } public CarpentrySatchel( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int)0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); } } }