jayates

Member
DefCarpentry will craft all types of boards from my backpack. It'll only pull a few board types from my Wood Storage Key though. The boards that are on the left side of the storage key it wont pull but, the ones on the right side it will. I've tried rearranging them in different spots (in the script) and it's just those types on the left side that won't pull and the boards... regardless of their location on the gump. All log types pull from the key just fine. The types are: Plain Board, Oak Board, Ash Board, Yew Board, Heartwood Board, Bloodwood Board, & Frostwood Board. The problem isn't in the DefCarpentry script cause I can craft those types when they're in my pack. I don't think the problem is the Wood Storage Key either cause it'll hold all types. Just stumped at this point to why they won't pull when crafting with these types??? Here's a pic.
 

Attachments

  • Admin Zeron_3-4_11.16.jpg
    Admin Zeron_3-4_11.16.jpg
    319.4 KB · Views: 20
C#:
using System;
using System.Collections;
using System.Collections.Generic;
using Server;
using Solaris.ItemStore;                            //for connection to resource store data objects
using Server.Engines.VeteranRewards;

namespace Server.Items
{
    //item derived from BaseResourceKey
    public class WoodKey : BaseStoreKey, IRewardItem
    {
        private bool m_IsRewardItem;

        [CommandProperty(AccessLevel.Seer)]
        public bool IsRewardItem
        {
            get { return m_IsRewardItem; }
            set { m_IsRewardItem = value; InvalidateProperties(); }
        }

        public override List<StoreEntry> EntryStructure
        {
            get
            {
                List<StoreEntry> entry = base.EntryStructure;

                entry.Add(new ResourceEntry(typeof(Log),"Plain Log"));
                entry.Add(new ResourceEntry(typeof(Board) ,"Plain Board"));

                #region Mondain's Legacy
                entry.Add(new ResourceEntry(typeof(OakLog),"Oak Log"));
                entry.Add(new ResourceEntry(typeof(OakBoard) ,"Oak Board"));
                
                entry.Add(new ResourceEntry(typeof(AshLog),"Ash Log"));
                entry.Add(new ResourceEntry(typeof(AshBoard) ,"Ash Board"));
                
                entry.Add(new ResourceEntry(typeof(YewLog),"Yew Log"));
                entry.Add(new ResourceEntry(typeof(YewBoard) ,"Yew Board"));
                
                entry.Add(new ResourceEntry(typeof(HeartwoodLog),"Heartwood Log"));
                entry.Add(new ResourceEntry(typeof(HeartwoodBoard) ,"Heartwood Board"));
                
                entry.Add(new ResourceEntry(typeof(BloodwoodLog),"Bloodwood Log"));
                entry.Add(new ResourceEntry(typeof(BloodwoodBoard) ,"Bloodwood Board"));
                
                entry.Add(new ResourceEntry(typeof(FrostwoodLog),"Frostwood Log"));
                entry.Add(new ResourceEntry(typeof(FrostwoodBoard) ,"Frostwood Board"));
                #endregion
                
                entry.Add(new ResourceEntry(typeof(EbonyLog),"Ebony Log"));
                entry.Add(new ResourceEntry(typeof(EbonyBoard) ,"Ebony Board"));
                
                entry.Add(new ResourceEntry(typeof(BambooLog),"Bamboo Log"));
                entry.Add(new ResourceEntry(typeof(BambooBoard) ,"Bamboo Board"));
                
                entry.Add(new ResourceEntry(typeof(PurpleHeartLog),"PurpleHeart Log"));
                entry.Add(new ResourceEntry(typeof(PurpleHeartBoard) ,"PurpleHeart Board"));
                
                entry.Add(new ResourceEntry(typeof(RedwoodLog),"Redwood Log"));
                entry.Add(new ResourceEntry(typeof(RedwoodBoard) ,"Redwood Board"));
                
                entry.Add(new ResourceEntry(typeof(PetrifiedLog),"Petrified Log"));
                entry.Add(new ResourceEntry(typeof(PetrifiedBoard) ,"Petrified Board"));

                entry.Add(new ResourceEntry(typeof(Kindling),"Kindling"));
                entry.Add(new ResourceEntry(typeof(Shaft),"Shaft"));
                entry.Add(new ResourceEntry(typeof(Feather),"Feather"));
                entry.Add(new ResourceEntry(typeof(Arrow),"Arrow"));
                entry.Add(new ResourceEntry(typeof(Bolt),"Bolt"));

                return entry;
            }
        }

        [Constructable]
        public WoodKey() : base(0x0)        //hue 88
        {
            ItemID = 0x1BD9;            //pile of wood
            Name = "Wood Storage";
        }

        //this loads properties specific to the store, like the gump label, and whether it's a dynamic storage device
        protected override ItemStore GenerateItemStore()
        {
            //load the basic store info
            ItemStore store = base.GenerateItemStore();

            //properties of this storage device
            store.Label = "Wood Storage";

            store.Dynamic = false;
            store.OfferDeeds = true;

            return store;
        }

        //serial constructor
        public WoodKey(Serial serial) : base(serial)
        {
        }

        public override void GetProperties(ObjectPropertyList list)
        {
            base.GetProperties(list);

            if (m_IsRewardItem)
                list.Add(1076217); // 1st Year Veteran Reward
        }

        //events

        public override void Serialize(GenericWriter writer)
        {
            base.Serialize(writer);

            //writer.Write( 0 );
            writer.Write((int)0); // version

            writer.Write((bool)m_IsRewardItem);
        }

        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            m_IsRewardItem = reader.ReadBool();
        }
    }
}
 
OK. The ones on the left are the standard group, and the ones on the right are the "custom" ones. So, let's see your DefCarpentry script.
 
Cool... ty:
C#:
using System;
using Server.Items;

namespace Server.Engines.Craft
{
    #region Mondain's Legacy
    public enum CarpRecipes
    {
        // stuff
        WarriorStatueSouth = 100,
        WarriorStatueEast = 101,
        SquirrelStatueSouth = 102,
        SquirrelStatueEast = 103,
        AcidProofRope = 104,
        OrnateElvenChair = 105,
        ArcaneBookshelfSouth = 106,
        ArcaneBookshelfEast = 107,
        OrnateElvenChestSouth = 108,
        ElvenDresserSouth = 109,
        ElvenDresserEast = 110,
        FancyElvenArmoire = 111,
        ArcanistsWildStaff = 112,
        AncientWildStaff = 113,
        ThornedWildStaff = 114,
        HardenedWildStaff = 115,
        TallElvenBedSouth = 116,
        TallElvenBedEast = 117,
        StoneAnvilSouth = 118,
        StoneAnvilEast = 119,
        OrnateElvenChestEast = 120,

        // arties
        PhantomStaff = 150,
        IronwoodCrown = 151,
        BrambleCoat = 152,

        KotlBlackRod = 170,
        KotlAutomaton = 171
    }
    #endregion

    public class DefCarpentry : CraftSystem
    {
        public override SkillName MainSkill
        {
            get
            {
                return SkillName.Carpentry;
            }
        }

        public override int GumpTitleNumber
        {
            get
            {
                return 1044004;
            }// <CENTER>CARPENTRY MENU</CENTER>
        }

        private static CraftSystem m_CraftSystem;

        public static CraftSystem CraftSystem
        {
            get
            {
                if (m_CraftSystem == null)
                    m_CraftSystem = new DefCarpentry();

                return m_CraftSystem;
            }
        }

        public override double GetChanceAtMin(CraftItem item)
        {
            return 0.5; // 50%
        }

        private DefCarpentry()
            : base(1, 1, 1.25)// base( 1, 1, 3.0 )
        {
        }

        public override int CanCraft(Mobile from, BaseTool tool, Type itemType)
        {
            int num = 0;

            if (tool == null || tool.Deleted || tool.UsesRemaining <= 0)
                return 1044038; // You have worn out your tool!
            else if (!tool.CheckAccessible(from, ref num))
                return num; // The tool must be on your person to use.

            return 0;
        }

        public override void PlayCraftEffect(Mobile from)
        {
            // no animation
            //if ( from.Body.Type == BodyType.Human && !from.Mounted )
            //    from.Animate( 9, 5, 1, true, false, 0 );
            from.PlaySound(0x23D);
        }

        public override int PlayEndingEffect(Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item)
        {
            if (toolBroken)
                from.SendLocalizedMessage(1044038); // You have worn out your tool

            if (failed)
            {
                if (lostMaterial)
                    return 1044043; // You failed to create the item, and some of your materials are lost.
                else
                    return 1044157; // You failed to create the item, but no materials were lost.
            }
            else
            {
                if (quality == 0)
                    return 502785; // You were barely able to make this item.  It's quality is below average.
                else if (makersMark && quality == 2)
                    return 1044156; // You create an exceptional quality item and affix your maker's mark.
                else if (quality == 2)
                    return 1044155; // You create an exceptional quality item.
                else
                    return 1044154; // You create the item.
            }
        }

        public override bool ConsumeOnFailure(Mobile from, Type resourceType, CraftItem craftItem)
        {
            if (resourceType == typeof(StaffOfTheMagi))
                return false;

            return base.ConsumeOnFailure(from, resourceType, craftItem);
        }

        public override void InitCraftList()
        {
            int index = -1;

            // Other Items
            if (Core.Expansion >= Expansion.AOS)
            {
                index = this.AddCraft(typeof(Board), "Boards", 1027127, 0.0, 0.0, typeof(Log), 1044466, 1, 1044465);
                this.SetUseAllRes(index, true);
                this.SetForceTypeRes(index, true);
            }/////////board crafts////
            //this.AddCraft(typeof(ShortMusicStand), "Board Crafts (non-color)", "Short Music Stand", 78.9, 103.9, typeof(AshBoard), "Ash Board", 15, "You'll don't have the required lumber to craft such!" );
            //////end board crafts
            this.AddCraft(typeof(BarrelStaves), 1044294, 1027857, 00.0, 25.0, typeof(Log), 1044041, 5, 1044351);
            this.AddCraft(typeof(BarrelLid), 1044294, 1027608, 11.0, 36.0, typeof(Log), 1044041, 4, 1044351);
            this.AddCraft(typeof(ShortMusicStand), 1044294, 1044313, 78.9, 103.9, typeof(Log), 1044041, 15, 1044351);
            this.AddCraft(typeof(TallMusicStand), 1044294, 1044315, 81.5, 106.5, typeof(Log), 1044041, 20, 1044351);
            this.AddCraft(typeof(Easle), 1044294, 1044317, 86.8, 111.8, typeof(Log), 1044041, 20, 1044351);
            if (Core.SE)
            {
                index = this.AddCraft(typeof(RedHangingLantern), 1044294, 1029412, 65.0, 90.0, typeof(Log), 1044041, 5, 1044351);
                this.AddRes(index, typeof(BlankScroll), 1044377, 10, 1044378);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(WhiteHangingLantern), 1044294, 1029416, 65.0, 90.0, typeof(Log), 1044041, 5, 1044351);
                this.AddRes(index, typeof(BlankScroll), 1044377, 10, 1044378);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(ShojiScreen), 1044294, 1029423, 80.0, 105.0, typeof(Log), 1044041, 75, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
                this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(BambooScreen), 1044294, 1029428, 80.0, 105.0, typeof(Log), 1044041, 75, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
                this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            if (Core.AOS)    //Duplicate Entries to preserve ordering depending on era
            {
                index = this.AddCraft(typeof(FishingPole), 1044294, 1023519, 68.4, 93.4, typeof(Log), 1044041, 5, 1044351); //This is in the categor of Other during AoS
                this.AddSkill(index, SkillName.Tailoring, 40.0, 45.0);
                this.AddRes(index, typeof(Cloth), 1044286, 5, 1044287);
            }

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(WoodenContainerEngraver), 1044294, 1072153, 75.0, 100.0, typeof(Log), 1044041, 4, 1044351);
                this.AddRes(index, typeof(IronIngot), 1044036, 2, 1044037);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(RunedSwitch), 1044294, 1072896, 70.0, 120.0, typeof(Log), 1044041, 2, 1044351);
                this.AddRes(index, typeof(EnchantedSwitch), 1072893, 1, 1053098);
                this.AddRes(index, typeof(RunedPrism), 1073465, 1, 1053098);
                this.AddRes(index, typeof(JeweledFiligree), 1072894, 1, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcanistStatueSouthDeed), 1044294, 1072885, 0.0, 35.0, typeof(Log), 1044041, 250, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcanistStatueEastDeed), 1044294, 1072886, 0.0, 35.0, typeof(Log), 1044041, 250, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WarriorStatueSouthDeed), 1044294, 1072887, 0.0, 35.0, typeof(Log), 1044041, 250, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.WarriorStatueSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WarriorStatueEastDeed), 1044294, 1072888, 0.0, 35.0, typeof(Log), 1044041, 250, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.WarriorStatueEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(SquirrelStatueSouthDeed), 1044294, 1072884, 0.0, 35.0, typeof(Log), 1044041, 250, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.SquirrelStatueSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(SquirrelStatueEastDeed), 1044294, 1073398, 0.0, 35.0, typeof(Log), 1044041, 250, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.SquirrelStatueEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(GiantReplicaAcorn), 1044294, 1072889, 80.0, 105.0, typeof(Log), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(MountedDreadHorn), 1044294, 1032632, 90.0, 115.0, typeof(Log), 1044041, 50, 1044351);
                this.AddRes(index, typeof(PristineDreadHorn), 1032634, 1, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(AcidProofRope), 1044294, 1074886, 80, 130.0, typeof(GreaterStrengthPotion), 1073466, 2, 1044253);
                this.AddRes(index, typeof(ProtectionScroll), 1044395, 1, 1053098);
                this.AddRes(index, typeof(SwitchItem), 1032127, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.AcidProofRope);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            #region SA
            if (Core.SA)
            {
                index = this.AddCraft(typeof(GargishBanner), 1044294, 1095312, 94.7, 115.0, typeof(Log), 1044041, 50, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 75.0, 105.0);
                this.AddRes(index, typeof(Cloth), 1044286, 50, 1044287);
                this.SetNeededExpansion(index, Expansion.SA);

                index = this.AddCraft(typeof(ExodusSummoningAlter), 1044294, 1153502, 95.0, 120.0, typeof(Log), 1044041, 100, 1044351);////////
                this.AddSkill(index, SkillName.Magery, 75.0, 120.0);
                this.AddRes(index, typeof(Granite), 1044607, 10, 1044253);
                this.AddRes(index, typeof(SmallPieceofBlackrock), 1150016, 10, 1044253);
                this.AddRes(index, typeof(NexusCore), 1153501, 1, 1044253);

                index = AddCraft(typeof(Incubator), 1044294, 1112479, 90.0, 115.0, typeof(Log), 1044041, 100, 1044351);
                SetNeededExpansion(index, Expansion.SA);

                index = AddCraft(typeof(ChickenCoop), 1044294, 1112570, 90.0, 115.0, typeof(Log), 1044041, 150, 1044351);
                SetNeededExpansion(index, Expansion.SA);
            }
            #endregion

            #region TOL   
            index = AddCraft(typeof(CraftableHouseAddonDeed), 1044294, 1155850, 42.1, 77.7, typeof(Log), 1044041, 5, 1044351);///////
            SetData(index, CraftableAddonType.LightWoodenSignHanger);
            SetDisplayID(index, 2969);
            SetNeededExpansion(index, Expansion.TOL);

            index = AddCraft(typeof(CraftableHouseAddonDeed), 1044294, 1155849, 42.1, 77.7, typeof(Log), 1044041, 5, 1044351);////////
            SetData(index, CraftableAddonType.DarkWoodenSignHanger);
            SetDisplayID(index, 2967);
            SetNeededExpansion(index, Expansion.TOL);
            #endregion

            // Furniture
            this.AddCraft(typeof(FootStool), 1044291, 1022910, 11.0, 36.0, typeof(Log), 1044041, 9, 1044351);
            this.AddCraft(typeof(Stool), 1044291, 1022602, 11.0, 36.0, typeof(Log), 1044041, 9, 1044351);
            this.AddCraft(typeof(BambooChair), 1044291, 1044300, 21.0, 46.0, typeof(Log), 1044041, 13, 1044351);
            this.AddCraft(typeof(WoodenChair), 1044291, 1044301, 21.0, 46.0, typeof(Log), 1044041, 13, 1044351);
            this.AddCraft(typeof(FancyWoodenChairCushion), 1044291, 1044302, 42.1, 67.1, typeof(Log), 1044041, 15, 1044351);
            this.AddCraft(typeof(WoodenChairCushion), 1044291, 1044303, 42.1, 67.1, typeof(Log), 1044041, 13, 1044351);
            this.AddCraft(typeof(WoodenBench), 1044291, 1022860, 52.6, 77.6, typeof(Log), 1044041, 17, 1044351);
            this.AddCraft(typeof(WoodenThrone), 1044291, 1044304, 52.6, 77.6, typeof(Log), 1044041, 17, 1044351);
            this.AddCraft(typeof(Throne), 1044291, 1044305, 73.6, 98.6, typeof(Log), 1044041, 19, 1044351);
            this.AddCraft(typeof(Nightstand), 1044291, 1044306, 42.1, 67.1, typeof(Log), 1044041, 17, 1044351);
            this.AddCraft(typeof(WritingTable), 1044291, 1022890, 63.1, 88.1, typeof(Log), 1044041, 17, 1044351);
            this.AddCraft(typeof(YewWoodTable), 1044291, 1044307, 63.1, 88.1, typeof(Log), 1044041, 23, 1044351);
            this.AddCraft(typeof(LargeTable), 1044291, 1044308, 84.2, 109.2, typeof(Log), 1044041, 27, 1044351);

            if (Core.SE)
            {
                index = this.AddCraft(typeof(ElegantLowTable), 1044291, 1030265, 80.0, 105.0, typeof(Log), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(PlainLowTable), 1044291, 1030266, 80.0, 105.0, typeof(Log), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(OrnateElvenTableSouthDeed), 1044291, 1072869, 85.0, 110.0, typeof(Log), 1044041, 60, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(OrnateElvenTableEastDeed), 1044291, 1073384, 85.0, 110.0, typeof(Log), 1044041, 60, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(FancyElvenTableSouthDeed), 1044291, 1073385, 80.0, 105.0, typeof(Log), 1044041, 50, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(FancyElvenTableEastDeed), 1044291, 1073386, 80.0, 105.0, typeof(Log), 1044041, 50, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenPodium), 1044291, 1073399, 80.0, 105.0, typeof(Log), 1044041, 20, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(OrnateElvenChair), 1044291, 1072870, 80.0, 105.0, typeof(Log), 1044041, 30, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.OrnateElvenChair);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(BigElvenChair), 1044291, 1072872, 85.0, 110.0, typeof(Log), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenReadingChair), 1044291, 1072873, 80.0, 105.0, typeof(Log), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);
            }

            if (Core.SA)
            {
                index = this.AddCraft(typeof(GargishCouchEastDeed), 1044291, 1111776, 90.0, 115.0, typeof(Log), 1044041, 75, 1044351);           
                this.SetNeededExpansion(index, Expansion.SA);
 
                index = this.AddCraft(typeof(GargishCouchSouthDeed), 1044291, 1111775, 90.0, 115.0, typeof(Log), 1044041, 75, 1044351);
                this.SetNeededExpansion(index, Expansion.SA);
 
                index = this.AddCraft(typeof(TerMurDresserEastDeed), 1044291, 1111784, 90.0, 115.0, typeof(Log), 1044041, 60, 1044351);
                this.SetNeededExpansion(index, Expansion.SA);
 
                index = this.AddCraft(typeof(TerMurDresserSouthDeed), 1044291, 1111783, 90.0, 115.0, typeof(Log), 1044041, 60, 1044351);
                this.SetNeededExpansion(index, Expansion.SA);
            }            
            #endregion

            // Containers
            this.AddCraft(typeof(WoodenBox), 1044292, 1023709, 21.0, 46.0, typeof(Log), 1044041, 10, 1044351);
            this.AddCraft(typeof(SmallCrate), 1044292, 1044309, 10.0, 35.0, typeof(Log), 1044041, 8, 1044351);
            this.AddCraft(typeof(MediumCrate), 1044292, 1044310, 31.0, 56.0, typeof(Log), 1044041, 15, 1044351);
            this.AddCraft(typeof(LargeCrate), 1044292, 1044311, 47.3, 72.3, typeof(Log), 1044041, 18, 1044351);
            this.AddCraft(typeof(WoodenChest), 1044292, 1023650, 73.6, 98.6, typeof(Log), 1044041, 20, 1044351);
            this.AddCraft(typeof(EmptyBookcase), 1044292, 1022718, 31.5, 56.5, typeof(Log), 1044041, 25, 1044351);
            this.AddCraft(typeof(FancyArmoire), 1044292, 1044312, 84.2, 109.2, typeof(Log), 1044041, 35, 1044351);
            this.AddCraft(typeof(Armoire), 1044292, 1022643, 84.2, 109.2, typeof(Log), 1044041, 35, 1044351);

            if (Core.SE)
            {
                index = this.AddCraft(typeof(PlainWoodenChest), 1044292, 1030251, 90.0, 115.0, typeof(Log), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(OrnateWoodenChest), 1044292, 1030253, 90.0, 115.0, typeof(Log), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(GildedWoodenChest), 1044292, 1030255, 90.0, 115.0, typeof(Log), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(WoodenFootLocker), 1044292, 1030257, 90.0, 115.0, typeof(Log), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(FinishedWoodenChest), 1044292, 1030259, 90.0, 115.0, typeof(Log), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(TallCabinet), 1044292, 1030261, 90.0, 115.0, typeof(Log), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(ShortCabinet), 1044292, 1030263, 90.0, 115.0, typeof(Log), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(RedArmoire), 1044292, 1030328, 90.0, 115.0, typeof(Log), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(ElegantArmoire), 1044292, 1030330, 90.0, 115.0, typeof(Log), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(MapleArmoire), 1044292, 1030332, 90.0, 115.0, typeof(Log), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(CherryArmoire), 1044292, 1030334, 90.0, 115.0, typeof(Log), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            index = this.AddCraft(typeof(Keg), 1044292, 1023711, 57.8, 82.8, typeof(BarrelStaves), 1044288, 3, 1044253);
            this.AddRes(index, typeof(BarrelHoops), 1044289, 1, 1044253);
            this.AddRes(index, typeof(BarrelLid), 1044251, 1, 1044253);
            this.ForceNonExceptional(index);

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(ArcaneBookshelfSouthDeed), 1044292, 1072871, 94.7, 119.7, typeof(Log), 1044041, 80, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.ArcaneBookshelfSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcaneBookshelfEastDeed), 1044292, 1073371, 94.7, 119.7, typeof(Log), 1044041, 80, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.ArcaneBookshelfEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(OrnateElvenChestSouthDeed), 1044292, 1072862, 94.7, 119.7, typeof(Log), 1044041, 40, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.OrnateElvenChestSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(OrnateElvenChestEastDeed), 1044292, 1073383, 94.7, 119.7, typeof(Log), 1044041, 40, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.OrnateElvenChestEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenWashBasinSouthWithDrawerDeed), 1044292, 1072865, 70.0, 95.0, typeof(Log), 1044041, 40, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenWashBasinEastWithDrawerDeed), 1044292, 1073387, 70.0, 95.0, typeof(Log), 1044041, 40, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenDresserSouthDeed), 1044292, 1072864, 75.0, 100.0, typeof(Log), 1044041, 45, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.ElvenDresserSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenDresserEastDeed), 1044292, 1073388, 75.0, 100.0, typeof(Log), 1044041, 45, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.ElvenDresserEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(FancyElvenArmoire), 1044292, 1072866, 80.0, 105.0, typeof(Log), 1044041, 60, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.FancyElvenArmoire);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(SimpleElvenArmoire), 1044292, 1073401, 80.0, 105.0, typeof(Log), 1044041, 60, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(RarewoodChest), 1044292, 1073402, 80.0, 105.0, typeof(Log), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DecorativeBox), 1044292, 1073403, 80.0, 105.0, typeof(Log), 1044041, 25, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            AddCraft(typeof(LiquorBarrel), 1044292, 1150816, 60.0, 90.0, typeof(Log), 1044041, 50, 1044351);

            // Weapons
            this.AddCraft(typeof(ShepherdsCrook), 1044566, 1023713, 78.9, 103.9, typeof(Log), 1044041, 7, 1044351);
            this.AddCraft(typeof(QuarterStaff), 1044566, 1023721, 73.6, 98.6, typeof(Log), 1044041, 6, 1044351);
            this.AddCraft(typeof(GnarledStaff), 1044566, 1025112, 78.9, 103.9, typeof(Log), 1044041, 7, 1044351);

            if (Core.SE)
            {
                index = this.AddCraft(typeof(Bokuto), 1044566, 1030227, 70.0, 95.0, typeof(Log), 1044041, 6, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(Fukiya), 1044566, 1030229, 60.0, 85.0, typeof(Log), 1044041, 6, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(Tetsubo), 1044566, 1030225, 80.0, 140.3, typeof(Log), 1044041, 10, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(WildStaff), 1044566, 1031557, 63.8, 113.8, typeof(Log), 1044041, 16, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(PhantomStaff), 1044566, 1072919, 90.0, 130.0, typeof(Log), 1044041, 16, 1044351);
                this.AddRes(index, typeof(DiseasedBark), 1032683, 1, 1053098);
                this.AddRes(index, typeof(Putrefication), 1032678, 10, 1053098);
                this.AddRes(index, typeof(Taint), 1032679, 10, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.PhantomStaff);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcanistsWildStaff), 1044566, 1073549, 63.8, 113.8, typeof(Log), 1044041, 16, 1044351);
                this.AddRes(index, typeof(WhitePearl), 1026253, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.ArcanistsWildStaff);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(AncientWildStaff), 1044566, 1073550, 63.8, 113.8, typeof(Log), 1044041, 16, 1044351);
                this.AddRes(index, typeof(PerfectEmerald), 1026251, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.AncientWildStaff);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ThornedWildStaff), 1044566, 1073551, 63.8, 113.8, typeof(Log), 1044041, 16, 1044351);
                this.AddRes(index, typeof(FireRuby), 1026254, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.ThornedWildStaff);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(HardenedWildStaff), 1044566, 1073552, 63.8, 113.8, typeof(Log), 1044041, 16, 1044351);
                this.AddRes(index, typeof(Turquoise), 1026250, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.HardenedWildStaff);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            #region SA
            if (Core.SA)
            {
                index = this.AddCraft(typeof(SerpentStoneStaff), 1044566, 1095367, 63.8, 113.8, typeof(Log), 1044041, 16, 1044351);
                this.AddRes(index, typeof(EcruCitrine), 1026252, 1, 1053098);
                this.SetNeededExpansion(index, Expansion.SA);

                index = this.AddCraft(typeof(GargishGnarledStaff), 1044566, 1097488, 78.9, 128.9, typeof(Log), 1044041, 16, 1044351);
                this.AddRes(index, typeof(EcruCitrine), 1026252, 1, 1053098);
                this.SetNeededExpansion(index, Expansion.SA);
            }
            #endregion

            this.AddCraft(typeof(Club), 1044566, 1025043, 65.0, 115.0, typeof(Log), 1044041, 9, 1044351);
            this.AddCraft(typeof(BlackStaff), 1044566, 1023568, 81.5, 141.8, typeof(Log), 1044041, 9, 1044351);

            index = AddCraft(typeof(KotlBlackRod), 1044566, 1156990, 100.0, 160.0, typeof(Log), 1044041, 20, 1044351);
            this.AddRes(index, typeof(BlackrockMoonstone), 1156993, 1, 1156992);
            this.AddRes(index, typeof(StaffOfTheMagi), 1061600, 1, 1044253);
            this.AddRecipe(index, (int)CarpRecipes.KotlBlackRod);
            this.SetNeededExpansion(index, Expansion.TOL);

            // Armor
            this.AddCraft(typeof(WoodenShield), 1062760, 1027034, 52.6, 77.6, typeof(Log), 1044041, 9, 1044351);

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(WoodlandChest), 1062760, 1031111, 90.0, 115.0, typeof(Log), 1044041, 20, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 6, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WoodlandArms), 1062760, 1031116, 80.0, 105.0, typeof(Log), 1044041, 15, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WoodlandGloves), 1062760, 1031114, 85.0, 110.0, typeof(Log), 1044041, 15, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WoodlandLegs), 1062760, 1031115, 85.0, 110.0, typeof(Log), 1044041, 15, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WoodlandGorget), 1062760, 1031113, 85.0, 110.0, typeof(Log), 1044041, 15, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(RavenHelm), 1062760, 1031121, 65.0, 115.0, typeof(Log), 1044041, 10, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.AddRes(index, typeof(Feather), 1027123, 25, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(VultureHelm), 1062760, 1031122, 63.9, 113.9, typeof(Log), 1044041, 10, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.AddRes(index, typeof(Feather), 1027123, 25, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WingedHelm), 1062760, 1031123, 58.4, 108.4, typeof(Log), 1044041, 10, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.AddRes(index, typeof(Feather), 1027123, 60, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(IronwoodCrown), 1062760, 1072924, 85.0, 120.0, typeof(Log), 1044041, 10, 1044351);
                this.AddRes(index, typeof(DiseasedBark), 1032683, 1, 1053098);
                this.AddRes(index, typeof(Corruption), 1032676, 10, 1053098);
                this.AddRes(index, typeof(Putrefication), 1032678, 10, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.IronwoodCrown);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(BrambleCoat), 1062760, 1072925, 85.0, 120.0, typeof(Log), 1044041, 10, 1044351);
                this.AddRes(index, typeof(DiseasedBark), 1032683, 1, 1053098);
                this.AddRes(index, typeof(Taint), 1032679, 10, 1053098);
                this.AddRes(index, typeof(Scourge), 1032677, 10, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.BrambleCoat);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodCrown), 1062760, 1073481, 85.0, 120.0, typeof(Log), 1044041, 10, 1044351);
                this.AddRes(index, typeof(LardOfParoxysmus), 1032681, 1, 1053098);
                this.AddRes(index, typeof(Blight), 1032675, 10, 1053098);
                this.AddRes(index, typeof(Taint), 1032679, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodChest), 1062760, 1073482, 85.0, 120.0, typeof(Log), 1044041, 20, 1044351);
                this.AddRes(index, typeof(DreadHornMane), 1032682, 1, 1053098);
                this.AddRes(index, typeof(Corruption), 1032676, 10, 1053098);
                this.AddRes(index, typeof(Muculent), 1032680, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodGorget), 1062760, 1073483, 85.0, 120.0, typeof(Log), 1044041, 15, 1044351);
                this.AddRes(index, typeof(DiseasedBark), 1032683, 1, 1053098);
                this.AddRes(index, typeof(Blight), 1032675, 10, 1053098);
                this.AddRes(index, typeof(Scourge), 1032677, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodLegs), 1062760, 1073484, 85.0, 120.0, typeof(Log), 1044041, 15, 1044351);
                this.AddRes(index, typeof(GrizzledBones), 1032684, 1, 1053098);
                this.AddRes(index, typeof(Corruption), 1032676, 10, 1053098);
                this.AddRes(index, typeof(Putrefication), 1072137, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodPauldrons), 1062760, 1073485, 85.0, 120.0, typeof(Log), 1044041, 15, 1044351);
                this.AddRes(index, typeof(EyeOfTheTravesty), 1032685, 1, 1053098);
                this.AddRes(index, typeof(Scourge), 1032677, 10, 1053098);
                this.AddRes(index, typeof(Taint), 1032679, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodGloves), 1062760, 1073486, 85.0, 120.0, typeof(Log), 1044041, 15, 1044351);
                this.AddRes(index, typeof(CapturedEssence), 1032686, 1, 1053098);
                this.AddRes(index, typeof(Putrefication), 1032678, 10, 1053098);
                this.AddRes(index, typeof(Muculent), 1032680, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            #region SA
            index = AddCraft(typeof(GargishWoodenShield), 1062760, 1095768, 52.6, 77.6, typeof(Log), 1044041, 9, 1044351);
            SetNeededExpansion(index, Expansion.SA);
            #endregion

            // Instruments
            index = this.AddCraft(typeof(LapHarp), 1044293, 1023762, 63.1, 88.1, typeof(Log), 1044041, 20, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(Harp), 1044293, 1023761, 78.9, 103.9, typeof(Log), 1044041, 35, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 15, 1044287);

            index = this.AddCraft(typeof(Drums), 1044293, 1023740, 57.8, 82.8, typeof(Log), 1044041, 20, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(Lute), 1044293, 1023763, 68.4, 93.4, typeof(Log), 1044041, 25, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(Tambourine), 1044293, 1023741, 57.8, 82.8, typeof(Log), 1044041, 15, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(TambourineTassel), 1044293, 1044320, 57.8, 82.8, typeof(Log), 1044041, 15, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 15, 1044287);

            if (Core.SE)
            {
                index = this.AddCraft(typeof(BambooFlute), 1044293, 1030247, 80.0, 105.0, typeof(Log), 1044041, 15, 1044351);
                this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            if (Core.SA)
            {
                index = this.AddCraft(typeof(SnakeCharmerFlute), 1044293, 1112174, 80.0, 105.0, typeof(Log), 1044041, 15, 1044351);
                this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
                this.AddRes(index, typeof(LuminescentFungi), 1073475, 3, 1044253);
                this.SetNeededExpansion(index, Expansion.SA);
            }

            // Misc
            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(ParrotPerchAddonDeed), 1044290, 1072617, 50.0, 85.0, typeof(Log), 1044041, 100, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcaneCircleDeed), 1044290, 1072703, 94.7, 119.7, typeof(Log), 1044041, 100, 1044351);
                this.AddRes(index, typeof(BlueDiamond), 1026255, 2, 1053098);
                this.AddRes(index, typeof(PerfectEmerald), 1026251, 2, 1053098);
                this.AddRes(index, typeof(FireRuby), 1026254, 2, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(TallElvenBedSouthDeed), 1044290, 1072858, 94.7, 119.7, typeof(Log), 1044041, 200, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
                this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
                this.AddRecipe(index, (int)CarpRecipes.TallElvenBedSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(TallElvenBedEastDeed), 1044290, 1072859, 94.7, 119.7, typeof(Log), 1044041, 200, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
                this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
                this.AddRecipe(index, (int)CarpRecipes.TallElvenBedEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenBedSouthDeed), 1044290, 1072860, 94.7, 119.7, typeof(Log), 1044041, 100, 1044351);
                this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenBedEastDeed), 1044290, 1072861, 94.7, 119.7, typeof(Log), 1044041, 100, 1044351);
                this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenLoveseatSouthDeed), 1044290, 1072867, 80.0, 105.0, typeof(Log), 1044041, 50, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenLoveseatEastDeed), 1044290, 1073372, 80.0, 105.0, typeof(Log), 1044041, 50, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(AlchemistTableSouthDeed), 1044290, 1074902, 85.0, 110.0, typeof(Log), 1044041, 70, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(AlchemistTableEastDeed), 1044290, 1074903, 85.0, 110.0, typeof(Log), 1044041, 70, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            index = this.AddCraft(typeof(SmallBedSouthDeed), 1044290, 1044321, 94.7, 119.8, typeof(Log), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
            this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
            index = this.AddCraft(typeof(SmallBedEastDeed), 1044290, 1044322, 94.7, 119.8, typeof(Log), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
            this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
            index = this.AddCraft(typeof(LargeBedSouthDeed), 1044290, 1044323, 94.7, 119.8, typeof(Log), 1044041, 150, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
            this.AddRes(index, typeof(Cloth), 1044286, 150, 1044287);
            index = this.AddCraft(typeof(LargeBedEastDeed), 1044290, 1044324, 94.7, 119.8, typeof(Log), 1044041, 150, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
            this.AddRes(index, typeof(Cloth), 1044286, 150, 1044287);
            this.AddCraft(typeof(DartBoardSouthDeed), 1044290, 1044325, 15.7, 40.7, typeof(Log), 1044041, 5, 1044351);
            this.AddCraft(typeof(DartBoardEastDeed), 1044290, 1044326, 15.7, 40.7, typeof(Log), 1044041, 5, 1044351);
            this.AddCraft(typeof(BallotBoxDeed), 1044290, 1044327, 47.3, 72.3, typeof(Log), 1044041, 5, 1044351);
            index = this.AddCraft(typeof(PentagramDeed), 1044290, 1044328, 100.0, 125.0, typeof(Log), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Magery, 75.0, 80.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 40, 1044037);
            index = this.AddCraft(typeof(AbbatoirDeed), 1044290, 1044329, 100.0, 125.0, typeof(Log), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Magery, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 40, 1044037);

            if (Core.AOS)
            {
                this.AddCraft(typeof(PlayerBBEast), 1044290, 1062420, 85.0, 110.0, typeof(Log), 1044041, 50, 1044351);
                this.AddCraft(typeof(PlayerBBSouth), 1044290, 1062421, 85.0, 110.0, typeof(Log), 1044041, 50, 1044351);
            }

            // Tailoring and Cooking
            index = this.AddCraft(typeof(Dressform), 1044298, 1044339, 63.1, 88.1, typeof(Log), 1044041, 25, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(SpinningwheelEastDeed), 1044298, 1044341, 73.6, 98.6, typeof(Log), 1044041, 75, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 25, 1044287);

            index = this.AddCraft(typeof(SpinningwheelSouthDeed), 1044298, 1044342, 73.6, 98.6, typeof(Log), 1044041, 75, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 25, 1044287);

            index = this.AddCraft(typeof(LoomEastDeed), 1044298, 1044343, 84.2, 109.2, typeof(Log), 1044041, 85, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 25, 1044287);

            index = this.AddCraft(typeof(LoomSouthDeed), 1044298, 1044344, 84.2, 109.2, typeof(Log), 1044041, 85, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 25, 1044287);

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(ElvenSpinningwheelEastDeed), 1044298, 1073393, 75.0, 100.0, typeof(Log), 1044041, 60, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 65.0, 85.0);
                this.AddRes(index, typeof(Cloth), 1044286, 40, 1044287);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenSpinningwheelSouthDeed), 1044298, 1072878, 75.0, 100.0, typeof(Log), 1044041, 60, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 65.0, 85.0);
                this.AddRes(index, typeof(Cloth), 1044286, 40, 1044287);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenStoveSouthDeed), 1044298, 1073394, 85.0, 110.0, typeof(Log), 1044041, 80, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenStoveEastDeed), 1044298, 1073395, 85.0, 110.0, typeof(Log), 1044041, 80, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            index = this.AddCraft(typeof(StoneOvenEastDeed), 1044298, 1044345, 68.4, 93.4, typeof(Log), 1044041, 85, 1044351);
            this.AddSkill(index, SkillName.Tinkering, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 125, 1044037);
            index = this.AddCraft(typeof(StoneOvenSouthDeed), 1044298, 1044346, 68.4, 93.4, typeof(Log), 1044041, 85, 1044351);
            this.AddSkill(index, SkillName.Tinkering, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 125, 1044037);
            index = this.AddCraft(typeof(FlourMillEastDeed), 1044298, 1044347, 94.7, 119.7, typeof(Log), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Tinkering, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 50, 1044037);
            index = this.AddCraft(typeof(FlourMillSouthDeed), 1044298, 1044348, 94.7, 119.7, typeof(Log), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Tinkering, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 50, 1044037);
            this.AddCraft(typeof(WaterTroughEastDeed), 1044298, 1044349, 94.7, 119.7, typeof(Log), 1044041, 150, 1044351);
            this.AddCraft(typeof(WaterTroughSouthDeed), 1044298, 1044350, 94.7, 119.7, typeof(Log), 1044041, 150, 1044351);

            // Anvils and Forges
            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(ElvenForgeDeed), 1111809, 1072875, 94.7, 119.7, typeof(Log), 1044041, 200, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            #region SA
            if (Core.SA)
            {
                index = this.AddCraft(typeof(SoulForgeDeed), 1111809, 1031696, 100.0, 200.0, typeof(Log), 1044041, 150, 1044351);
                this.AddSkill(index, SkillName.Imbuing, 75.0, 80.0);
                this.AddRes(index, typeof(IronIngot), 1044036, 150, 1044037);
                this.AddRes(index, typeof(RelicFragment), 1031699, 1, 1044253);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.SA);
            }
            #endregion

            index = this.AddCraft(typeof(SmallForgeDeed), 1111809, 1044330, 73.6, 98.6, typeof(Log), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 75.0, 80.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 75, 1044037);

            index = this.AddCraft(typeof(LargeForgeEastDeed), 1111809, 1044331, 78.9, 103.9, typeof(Log), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 80.0, 85.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 100, 1044037);

            index = this.AddCraft(typeof(LargeForgeSouthDeed), 1111809, 1044332, 78.9, 103.9, typeof(Log), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 80.0, 85.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 100, 1044037);

            index = this.AddCraft(typeof(AnvilEastDeed), 1111809, 1044333, 73.6, 98.6, typeof(Log), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 75.0, 80.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 150, 1044037);

            index = this.AddCraft(typeof(AnvilSouthDeed), 1111809, 1044334, 73.6, 98.6, typeof(Log), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 75.0, 80.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 150, 1044037);

            // Training
            index = this.AddCraft(typeof(TrainingDummyEastDeed), 1044297, 1044335, 68.4, 93.4, typeof(Log), 1044041, 55, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
            this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);

            index = this.AddCraft(typeof(TrainingDummySouthDeed), 1044297, 1044336, 68.4, 93.4, typeof(Log), 1044041, 55, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
            this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);

            index = this.AddCraft(typeof(PickpocketDipEastDeed), 1044297, 1044337, 73.6, 98.6, typeof(Log), 1044041, 65, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
            this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);

            index = this.AddCraft(typeof(PickpocketDipSouthDeed), 1044297, 1044338, 73.6, 98.6, typeof(Log), 1044041, 65, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
            this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);

            this.MarkOption = true;
            this.Repair = Core.AOS;
            this.CanEnhance = Core.ML;

            this.SetSubRes(typeof(Log), "Logs");
          // this.SetSubRes(typeof(Board), 1072643);            
            //daat99 OWLTR start - custom Wood
            daat99.ResourceHelper.AddWoodResources(this);
            //daat99 OWLTR end - custom Wood 

            // Add every material you want the player to be able to choose from
            // This will override the overridable material    TODO: Verify the required skill amount
            AddSubRes(typeof(Log), "Log", 00.0, 0);
            AddSubRes(typeof(AshLog), "Ash", 20.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(YewLog), "Yew", 30.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(OakLog), "Oak", 40.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(EbonyLog), "Ebony", 50.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(BambooLog), "Bamboo", 60.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(HeartwoodLog), "Heartwood", 70.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(BloodwoodLog), "Bloodwood", 80.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(FrostwoodLog), "Frostwood", 90.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(PurpleHeartLog), "PurpleHeart", 100.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(RedwoodLog), "Redwood", 110.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(PetrifiedLog), "Petrified", 115.0, "You have no idea how to work this type of log.");
            
       this.AddSubRes(typeof(Board), "Boards", 00.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(AshBoard), "Ash Boards", 80.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(YewBoard), "Yew Boards", 95.0, "You have no idea how to work this type of lumber.");       
       this.AddSubRes(typeof(OakBoard), "Oak Boards", 65.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(EbonyBoard), "Ebony Boards", 50.0, "You have no idea how to work this type of lumber.");       
       this.AddSubRes(typeof(BambooBoard), "Bamboo Boards", 60.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(HeartwoodBoard), "Heartwood Boards", 100.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(BloodwoodBoard), "BloodwoodBoards", 100.0,"You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(FrostwoodBoard), "Frostwood Boards", 100.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(PurpleHeartBoard), "Purple Heart Boards", 100.0, "You have no idea how to work this type of log.");       
       this.AddSubRes(typeof(RedwoodBoard), "Redwood Boards", 110.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(PetrifiedBoard), "Petrified Boards", 115.0, "You have no idea how to work this type of lumber.");       
        }
    }
}
 
Sorry for the delayed response, been out running errands. Thank you for you help and here's the script:
C#:
using System;
using System.Collections.Generic;
using Server.Gumps;
using Server.Items;
using Server.Network;

using daat99; // OWLTR

namespace Server.Engines.Craft
{
    public class CraftGump : Gump
    {
        private readonly Mobile m_From;
        private readonly CraftSystem m_CraftSystem;
        private readonly BaseTool m_Tool;

        private readonly CraftPage m_Page;

        private const int LabelHue = 0x480;
        private const int LabelColor = 0x7FFF;
        private const int FontColor = 0xFFFFFF;

        public bool Locked { get { return AutoCraftTimer.HasTimer(m_From); } }

        private enum CraftPage
        {
            None,
            PickResource,
            PickResource2
        }

        /*public CraftGump( Mobile from, CraftSystem craftSystem, BaseTool tool ): this( from, craftSystem, -1, -1, tool, null )
        {
        }*/

        public CraftGump(Mobile from, CraftSystem craftSystem, BaseTool tool, object notice)
            : this(from, craftSystem, tool, notice, CraftPage.None)
        {
        }

        private CraftGump(Mobile from, CraftSystem craftSystem, BaseTool tool, object notice, CraftPage page)
            : base(40, 40)
        {
            this.m_From = from;
            this.m_CraftSystem = craftSystem;
            this.m_Tool = tool;
            this.m_Page = page;

            CraftContext context = craftSystem.GetContext(from);

            from.CloseGump(typeof(CraftGump));
            from.CloseGump(typeof(CraftGumpItem));

            this.AddPage(0);

            AddBackground(0, 0, 530, 497, 5054);
            AddImageTiled(10, 10, 510, 22, 2624);
            AddImageTiled(10, 292, 150, 45, 2624);
            AddImageTiled(165, 292, 355, 45, 2624);
            AddImageTiled(10, 342, 510, 145, 2624);
            AddImageTiled(10, 37, 200, 250, 2624);
            AddImageTiled(215, 37, 305, 250, 2624);
            AddAlphaRegion(10, 10, 510, 477);

            if (craftSystem.GumpTitleNumber > 0)
                this.AddHtmlLocalized(10, 12, 510, 20, craftSystem.GumpTitleNumber, LabelColor, false, false);
            else
                this.AddHtml(10, 12, 510, 20, craftSystem.GumpTitleString, false, false);

            AddHtmlLocalized(10, 37, 200, 22, 1044010, LabelColor, false, false); // <CENTER>CATEGORIES</CENTER>
            AddHtmlLocalized(215, 37, 305, 22, 1044011, LabelColor, false, false); // <CENTER>SELECTIONS</CENTER>
            AddHtmlLocalized(10, 302, 150, 25, 1044012, LabelColor, false, false); // <CENTER>NOTICES</CENTER>

            this.AddButton(15, 442, 4017, 4019, 0, GumpButtonType.Reply, 0);
            this.AddHtmlLocalized(50, 445, 150, 18, 1011441, LabelColor, false, false); // EXIT

            this.AddButton(115, 442, 4017, 4019, GetButtonID(6, 11), GumpButtonType.Reply, 0);
            this.AddHtmlLocalized(150, 445, 150, 18, 1112698, LabelColor, false, false); // CANCEL MAKE

            // Repair option
            if (m_CraftSystem.Repair)
            {
                AddButton(270, 342, 4005, 4007, GetButtonID(6, 5), GumpButtonType.Reply, 0);
                AddHtmlLocalized(305, 345, 150, 18, 1044260, LabelColor, false, false); // REPAIR ITEM
            }
            // ****************************************

            // Mark option
            if (m_CraftSystem.MarkOption)
            {
                AddButton(270, 362, 4005, 4007, GetButtonID(6, 6), GumpButtonType.Reply, 0);
                AddHtmlLocalized(305, 365, 150, 18, 1044017 + (context == null ? 0 : (int)context.MarkOption), LabelColor, false, false); // MARK ITEM
            }
            // ****************************************

            // Enhance option
            if (m_CraftSystem.CanEnhance)
            {
                AddButton(270, 382, 4005, 4007, GetButtonID(6, 8), GumpButtonType.Reply, 0);
                AddHtmlLocalized(305, 385, 150, 18, 1061001, LabelColor, false, false); // ENHANCE ITEM
            }
            // ****************************************

            #region SA
            // Alter option
            if (Core.SA && m_CraftSystem.CanAlter)
            {
                AddButton(270, 402, 4005, 4007, GetButtonID(6, 9), GumpButtonType.Reply, 0);
                AddHtmlLocalized(304, 405, 250, 18, 1094726, LabelColor, false, false); // ALTER ITEM (Gargoyle)
            }
            // ****************************************

            // Quest item
            if (Core.SA)
            {
                AddButton(270, 422, 4005, 4007, GetButtonID(6, 10), GumpButtonType.Reply, 0);
                AddHtmlLocalized(305, 425, 150, 18, context != null && context.QuestOption == CraftQuestOption.QuestItem ? 1112534 : 1112533, LabelColor, false, false); // QUEST ITEM
            }
            // ****************************************
            #endregion

            AddButton(270, 442, 4005, 4007, GetButtonID(6, 2), GumpButtonType.Reply, 0);
            AddHtmlLocalized(305, 445, 150, 18, 1044013, LabelColor, false, false); // MAKE LAST

            #region Stygian Abyss
            int total = 1;
            int made = 0;

            if (Locked && AutoCraftTimer.AutoCraftTable.ContainsKey(m_From))
            {
                AutoCraftTimer timer = AutoCraftTimer.AutoCraftTable[m_From];

                if (timer != null)
                {
                    total = timer.Amount;
                    made = timer.Attempts;
                }
                else
                {
                    if (context != null)
                        total = context.MakeTotal;
                }
            }

            string args = String.Format("{0}\t{1}", made.ToString(), total.ToString());

            AddHtmlLocalized(270, 468, 150, 18, 1079443, args, LabelColor, false, false); //~1_DONE~/~2_TOTAL~ COMPLETED
            #endregion

            // Resmelt option
            if (m_CraftSystem.Resmelt)
            {
                AddButton(15, 342, 4005, 4007, GetButtonID(6, 1), GumpButtonType.Reply, 0);
                AddHtmlLocalized(50, 345, 150, 18, 1044259, LabelColor, false, false); // SMELT ITEM
            }
            // ****************************************

            if (notice is int && (int)notice > 0)
                this.AddHtmlLocalized(170, 295, 350, 40, (int)notice, LabelColor, false, false);
            else if (notice is string)
                this.AddHtml(170, 295, 350, 40, String.Format("<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", FontColor, notice), false, false);

            // If the system has more than one resource
            if (craftSystem.CraftSubRes.Init)
            {
                string nameString = craftSystem.CraftSubRes.NameString;
                int nameNumber = craftSystem.CraftSubRes.NameNumber;

                int resIndex = (context == null ? -1 : context.LastResourceIndex);

                Type resourceType = craftSystem.CraftSubRes.ResType;

                if (resIndex > -1)
                {
                    CraftSubRes subResource = craftSystem.CraftSubRes.GetAt(resIndex);

                    nameString = subResource.NameString;
                    nameNumber = subResource.NameNumber;
                    resourceType = subResource.ItemType;
                }

                Type resourceType2 = GetAltType(resourceType);
                int resourceCount = 0;

                if (from.Backpack != null)
                {
                    Item[] items = from.Backpack.FindItemsByType(resourceType, true);

                    for (int i = 0; i < items.Length; ++i)
                        resourceCount += items[i].Amount;

                    if (resourceType2 != null)
                    {
                        Item[] items2 = m_From.Backpack.FindItemsByType(resourceType2, true);

                        for (int i = 0; i < items2.Length; ++i)
                            resourceCount += items2[i].Amount;
                    }
                    //daat99 OWLTR start - craft from storage
                    ulong storageCount = MasterStorageUtils.GetPlayersStorageItemCount(from as Mobiles.PlayerMobile, resourceType);
                    if (storageCount > 0)
                    {
                        if (storageCount < int.MaxValue && storageCount + (ulong)resourceCount < int.MaxValue)
                            resourceCount += (int)storageCount;
                        else
                            resourceCount = int.MaxValue;
                    }
                    //daat99 OWLTR end - craft from storage
                }

                this.AddButton(15, 362, 4005, 4007, GetButtonID(6, 0), GumpButtonType.Reply, 0);

                if (nameNumber > 0)
                {
                    if (context.DoNotColor)
                        AddLabel(50, 365, LabelHue, "*");

                    AddHtmlLocalized(50 + (context.DoNotColor ? 13 : 0), 365, 250, 18, nameNumber, resourceCount.ToString(), LabelColor, false, false);
                }
                else
                    AddLabel(50, 362, LabelHue, (context.DoNotColor ? "*" : "") + String.Format("{0} ({1} Available)", nameString, resourceCount));
            }
            // ****************************************

            // For dragon scales
            if (craftSystem.CraftSubRes2.Init)
            {
                string nameString = craftSystem.CraftSubRes2.NameString;
                int nameNumber = craftSystem.CraftSubRes2.NameNumber;

                int resIndex = (context == null ? -1 : context.LastResourceIndex2);

                Type resourceType = craftSystem.CraftSubRes2.ResType;

                if (resIndex > -1)
                {
                    CraftSubRes subResource = craftSystem.CraftSubRes2.GetAt(resIndex);

                    nameString = subResource.NameString;
                    nameNumber = subResource.NameNumber;
                    resourceType = subResource.ItemType;
                }

                int resourceCount = 0;

                if (from.Backpack != null)
                {
                    Item[] items = from.Backpack.FindItemsByType(resourceType, true);

                    for (int i = 0; i < items.Length; ++i)
                        resourceCount += items[i].Amount;
                        
                    //daat99 OWLTR start - craft from storage
                    ulong storageCount = MasterStorageUtils.GetPlayersStorageItemCount(from as Mobiles.PlayerMobile, resourceType);
                    if (storageCount > 0)
                    {
                        if (storageCount < int.MaxValue && storageCount + (ulong)resourceCount < int.MaxValue)
                            resourceCount += (int)storageCount;
                        else
                            resourceCount = int.MaxValue;
                    }
                    //daat99 OWLTR end - craft from storage
                }

                this.AddButton(15, 382, 4005, 4007, GetButtonID(6, 7), GumpButtonType.Reply, 0);

                if (nameNumber > 0)
                    AddHtmlLocalized(50, 385, 250, 18, nameNumber, resourceCount.ToString(), LabelColor, false, false);
                else
                    AddLabel(50, 385, LabelHue, String.Format("{0} ({1} Available)", nameString, resourceCount));
            }
            // ****************************************

            this.CreateGroupList();

            if (page == CraftPage.PickResource)
                this.CreateResList(false, from);
            else if (page == CraftPage.PickResource2)
                this.CreateResList(true, from);
            else if (context != null && context.LastGroupIndex > -1)
                this.CreateItemList(context.LastGroupIndex);
        }

        private Type GetAltType(Type original)
        {
            for (int i = 0; i < m_TypesTable.Length; i++)
            {
                if (original == m_TypesTable[i][0] && m_TypesTable[i].Length > 1)
                    return m_TypesTable[i][1];
            }

            return null;
        }

        private Type[][] m_TypesTable = new Type[][]
        {
            new Type[]{ typeof( Log ), typeof( Board ) },
            new Type[]{ typeof( Board ), typeof( Log )  },
             
            new Type[]{ typeof( HeartwoodLog ), typeof( HeartwoodBoard ) },
            new Type[]{ typeof( HeartwoodBoard ), typeof( HeartwoodLog ) },
            
            new Type[]{ typeof( BloodwoodLog ), typeof( BloodwoodBoard ) },
            new Type[]{ typeof( BloodwoodBoard ), typeof( BloodwoodLog ) },
            
            new Type[]{ typeof( FrostwoodLog ), typeof( FrostwoodBoard ) },
            new Type[]{ typeof( FrostwoodBoard ), typeof( FrostwoodLog ) },
            
            new Type[]{ typeof( OakLog ), typeof( OakBoard ) },
            new Type[]{ typeof( OakBoard ), typeof( OakLog ) },
            
            new Type[]{ typeof( AshLog ), typeof( AshBoard ) },
            new Type[]{ typeof( AshBoard ), typeof( AshLog ) },
            
            new Type[]{ typeof( YewLog ), typeof( YewBoard ) },
            new Type[]{ typeof( YewBoard ), typeof( YewLog ) },
            
            new Type[]{ typeof( EbonyLog ), typeof( EbonyBoard ) },
            new Type[]{ typeof( EbonyBoard ), typeof( EbonyLog ) },
            
            new Type[]{ typeof( BambooLog ), typeof( BambooBoard ) },
            new Type[]{ typeof( BambooBoard ), typeof( BambooLog ) },
            
            new Type[]{ typeof( PurpleHeartLog), typeof( PurpleHeartBoard ) },
            new Type[]{ typeof( PurpleHeartBoard ), typeof( PurpleHeartLog ) },
            
            new Type[]{ typeof( RedwoodLog ), typeof( RedwoodBoard ) },
            new Type[]{ typeof( RedwoodBoard ), typeof( RedwoodLog ) },
            
            new Type[]{ typeof( PetrifiedLog ), typeof( PetrifiedBoard ) },
            new Type[]{ typeof( PetrifiedBoard ), typeof( PetrifiedLog ) },
            
            
            new Type[]{ typeof( Leather ), typeof( Hides ) },
            new Type[]{ typeof( SpinedLeather ), typeof( SpinedHides ) },
            new Type[]{ typeof( HornedLeather ), typeof( HornedHides ) },
            new Type[]{ typeof( BarbedLeather ), typeof( BarbedHides ) },
        };

        public void CreateResList(bool opt, Mobile from)
        {
            CraftSubResCol res = (opt ? this.m_CraftSystem.CraftSubRes2 : this.m_CraftSystem.CraftSubRes);
            
            //daat99 OWLTR start - recipe craft
            bool b_RecipeCraft = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.RECIPE_CRAFT),
                b_Blacksmithy = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.BLACKSMITH_RECIPES),
                b_BowFletching = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.BOWFLETCH_RECIPES),
                b_Carpentry = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.CARPENTRY_RECIPES),
                b_Masonry = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.MASONRY_RECIPES),
                b_Tailoring = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.TAILORING_RECIPES),
                b_Tinkering = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.TINKERING_RECIPES);
                if ( b_RecipeCraft )
                {
                    NewDaat99Holder dh = (NewDaat99Holder)daat99.Daat99OWLTR.TempHolders[m_From];
                    int    i_Length = 0;
                    for ( int i = 0; i < res.Count; ++i )
                    {
                        int index = i_Length % 10;

                        CraftSubRes subResource = res.GetAt( i );
                        if ( !dh.Resources.Contains(CraftResources.GetFromType( subResource.ItemType )) || (!b_Blacksmithy && m_CraftSystem is DefBlacksmithy)
                            || (!b_BowFletching && m_CraftSystem is DefBowFletching) || (!b_Carpentry && m_CraftSystem is DefCarpentry)
                            || (!b_Masonry && m_CraftSystem is DefMasonry) || (!b_Tailoring && m_CraftSystem is DefTailoring)
                            || (!b_Tinkering && m_CraftSystem is DefTinkering) )
                        {
                            if ( index == 0 )
                            {
                                            if ( i > 0 )
                                                AddButton( 485, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1 );

                                            AddPage( (i / 10) + 1 );

                                            if ( i > 0 )
                                                AddButton( 455, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10 );

                                            CraftContext context = m_CraftSystem.GetContext( m_From );

                                            AddButton( 220, 260, 4005, 4007, GetButtonID( 6, 4 ), GumpButtonType.Reply, 0 );
                                            AddHtmlLocalized( 255, 263, 200, 18, (context == null || !context.DoNotColor) ? 1061591 : 1061590, LabelColor, false, false );
                            }

                                        AddButton( 220, 60 + (index * 20), 4005, 4007, GetButtonID( 5, i ), GumpButtonType.Reply, 0 );

                                        if ( subResource.NameNumber > 0 )
                                            AddHtmlLocalized( 255, 63 + (index * 20), 250, 18, subResource.NameNumber, LabelColor, false, false );
                                        else
                                            AddLabel( 255, 60 + (index * 20), LabelHue, subResource.NameString );
                                        i_Length++;
                        }
                    }    
                }
            else 
            {
            //daat99 OWLTR end - recipe craft
            
            
                for (int i = 0; i < res.Count; ++i)
                {
                    int index = i % 10;

                    CraftSubRes subResource = res.GetAt(i);

                    if (index == 0)
                    {
                        if (i > 0)
                            this.AddButton(485, 290, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1);

                        this.AddPage((i / 10) + 1);

                        if (i > 0)
                            this.AddButton(455, 290, 4014, 4015, 0, GumpButtonType.Page, i / 10);

                        CraftContext context = this.m_CraftSystem.GetContext(this.m_From);

                        this.AddButton(220, 260, 4005, 4007, GetButtonID(6, 4), GumpButtonType.Reply, 0);
                        this.AddHtmlLocalized(255, 260, 200, 18, (context == null || !context.DoNotColor) ? 1061591 : 1061590, LabelColor, false, false);
                    }

                    int resourceCount = 0;

                    if (from.Backpack != null)
                    {
                        Item[] items = from.Backpack.FindItemsByType(subResource.ItemType, true);

                        for (int j = 0; j < items.Length; ++j)
                            resourceCount += items[j].Amount;

                        Type alt = GetAltType(subResource.ItemType);

                        if (alt != null)
                        {
                            Item[] items2 = m_From.Backpack.FindItemsByType(alt, true);

                            for (int j = 0; j < items2.Length; ++j)
                                resourceCount += items2[j].Amount;
                        }
                        //daat99 OWLTR start - craft from storage
                        ulong storageCount = MasterStorageUtils.GetPlayersStorageItemCount(from as Mobiles.PlayerMobile, subResource.ItemType);
                        if (storageCount > 0)
                        {
                            if (storageCount < int.MaxValue && storageCount + (ulong)resourceCount < int.MaxValue)
                                resourceCount += (int)storageCount;
                            else
                                resourceCount = int.MaxValue;
                        }
                        //daat99 OWLTR end - craft from storage
                    }

                    this.AddButton(220, 60 + (index * 20), 4005, 4007, GetButtonID(5, i), GumpButtonType.Reply, 0);

                    if (subResource.NameNumber > 0)
                        this.AddHtmlLocalized(255, 63 + (index * 20), 250, 18, subResource.NameNumber, resourceCount.ToString(), LabelColor, false, false);
                    else
                        this.AddLabel(255, 60 + (index * 20), LabelHue, String.Format("{0} ({1})", subResource.NameString, resourceCount));
                }
            }
        }

        public void CreateMakeLastList()
        {
            CraftContext context = this.m_CraftSystem.GetContext(this.m_From);

            if (context == null)
                return;

            List<CraftItem> items = context.Items;

            if (items.Count > 0)
            {
                for (int i = 0; i < items.Count; ++i)
                {
                    int index = i % 10;

                    CraftItem craftItem = items[i];

                    if (index == 0)
                    {
                        if (i > 0)
                        {
                            this.AddButton(370, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1);
                            this.AddHtmlLocalized(405, 263, 100, 18, 1044045, LabelColor, false, false); // NEXT PAGE
                        }

                        this.AddPage((i / 10) + 1);

                        if (i > 0)
                        {
                            this.AddButton(220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10);
                            this.AddHtmlLocalized(255, 263, 100, 18, 1044044, LabelColor, false, false); // PREV PAGE
                        }
                    }

                    this.AddButton(220, 60 + (index * 20), 4005, 4007, GetButtonID(3, i), GumpButtonType.Reply, 0);

                    if (craftItem.NameNumber > 0)
                        this.AddHtmlLocalized(255, 63 + (index * 20), 220, 18, craftItem.NameNumber, LabelColor, false, false);
                    else
                        this.AddLabel(255, 60 + (index * 20), LabelHue, craftItem.NameString);

                    this.AddButton(480, 60 + (index * 20), 4011, 4012, GetButtonID(4, i), GumpButtonType.Reply, 0);
                }
            }
            else
            {
                // NOTE: This is not as OSI; it is an intentional difference
                this.AddHtmlLocalized(230, 62, 200, 22, 1044165, LabelColor, false, false); // You haven't made anything yet.
            }
        }

        public void CreateItemList(int selectedGroup)
        {
            if (selectedGroup == 501) // 501 : Last 10
            {
                this.CreateMakeLastList();
                return;
            }

            CraftGroupCol craftGroupCol = this.m_CraftSystem.CraftGroups;
            CraftGroup craftGroup = craftGroupCol.GetAt(selectedGroup);
            CraftItemCol craftItemCol = craftGroup.CraftItems;
            
            //daat99 OWLTR start - recipe craft
            bool b_BankHive = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.CRAFTING_BANK_HIVE),
                b_StorageDeeds = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.CRAFTING_STORAGE_DEEDS),
                b_Forge = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.CRAFTING_MOBILE_FORGE),
                b_RecipeCraft = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.RECIPE_CRAFT),
                b_Alchemy = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.ALCHEMY_RECIPES),
                b_Blacksmithy = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.BLACKSMITH_RECIPES),
                b_BowFletching = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.BOWFLETCH_RECIPES),
                b_Carpentry = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.CARPENTRY_RECIPES),
                b_Cooking = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.COOKING_RECIPES),
                b_Glassblowing = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.GLASSBLOWING_RECIPES),
                b_Inscription = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.INSCRIPTION_RECIPES),
                b_Masonry = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.MASONRY_RECIPES),
                b_Tailoring = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.TAILORING_RECIPES),
                b_Tinkering = OWLTROptionsManager.IsEnabled(OWLTROptionsManager.OPTIONS_ENUM.TINKERING_RECIPES);
            if ( b_RecipeCraft )
            {
                NewDaat99Holder dh = (NewDaat99Holder)daat99.Daat99OWLTR.TempHolders[m_From];

                int i, i_Length = 0;
                
                for ( i = 0; i < craftItemCol.Count; ++i )
                {
                    int index = i_Length % 10;

                    CraftItem craftItem = craftItemCol.GetAt( i );

                    if ( !dh.ItemTypeList.Contains( craftItem.ItemType ) || (!b_Alchemy && m_CraftSystem is DefAlchemy)
                        || (!b_Blacksmithy && m_CraftSystem is DefBlacksmithy) || (!b_BowFletching && m_CraftSystem is DefBowFletching)
                        || (!b_Carpentry && m_CraftSystem is DefCarpentry) || (!b_Cooking && m_CraftSystem is DefCooking)
                        || (!b_Glassblowing && m_CraftSystem is DefGlassblowing) || (!b_Inscription && m_CraftSystem is DefInscription)
                        || (!b_Masonry && m_CraftSystem is DefMasonry) || (!b_Tailoring && m_CraftSystem is DefTailoring)
                        || (!b_Tinkering && m_CraftSystem is DefTinkering) )
                    {
                        if ( index == 0 )
                        {
                            if ( i_Length > 0 )
                            {
                                AddButton( 370, 260, 4005, 4007, 0, GumpButtonType.Page, (i_Length / 10) + 1 );
                                AddHtmlLocalized( 405, 263, 100, 18, 1044045, LabelColor, false, false ); // NEXT PAGE
                            }

                            AddPage( (i_Length / 10) + 1 );

                            if ( i_Length > 0 )
                            {
                                AddButton( 220, 260, 4014, 4015, 0, GumpButtonType.Page, i_Length / 10 );
                                AddHtmlLocalized( 255, 263, 100, 18, 1044044, LabelColor, false, false ); // PREV PAGE
                            }
                        }

                        if (craftItem.ItemType == typeof(BankHive) && !b_BankHive)
                            continue;
                        else if (craftItem.ItemType == typeof(MobileForge) && !b_Forge)
                            continue;
                        else if (craftItem.ItemType == typeof(BaseStorageDeed) && !b_StorageDeeds)
                            continue; 
                        
                        AddButton( 220, 60 + (index * 20), 4005, 4007, GetButtonID( 1, i ), GumpButtonType.Reply, 0 );

                        if ( craftItem.NameNumber > 0 )
                            AddHtmlLocalized( 255, 63 + (index * 20), 220, 18, craftItem.NameNumber, LabelColor, false, false );
                        else
                            AddLabel( 255, 60 + (index * 20), LabelHue, craftItem.NameString );

                        AddButton( 480, 60 + (index * 20), 4011, 4012, GetButtonID( 2, i ), GumpButtonType.Reply, 0 );
                        i_Length++;
                    }
                }
            }
            else //daat99 OWLTR end - recipe craft
            {
                for (int i = 0; i < craftItemCol.Count; ++i)
                {
                    int index = i % 10;

                    CraftItem craftItem = craftItemCol.GetAt(i);

                    if (index == 0)
                    {
                        if (i > 0)
                        {
                            this.AddButton(370, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1);
                            this.AddHtmlLocalized(405, 263, 100, 18, 1044045, LabelColor, false, false); // NEXT PAGE
                        }

                        this.AddPage((i / 10) + 1);

                        if (i > 0)
                        {
                            this.AddButton(220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10);
                            this.AddHtmlLocalized(255, 263, 100, 18, 1044044, LabelColor, false, false); // PREV PAGE
                        }
                    }
                    
                    //daat99 OWLTR start - custom craftables
                    if ( craftItem.ItemType == typeof(BankHive) && !b_BankHive )
                        continue;
                    else if ( craftItem.ItemType == typeof(MobileForge) && !b_Forge )
                        continue;
                    else if ( craftItem.ItemType == typeof(BaseStorageDeed) && !b_StorageDeeds )
                        continue;
                    //daat99 OWLTR end - custom craftables

                    this.AddButton(220, 60 + (index * 20), 4005, 4007, GetButtonID(1, i), GumpButtonType.Reply, 0);

                    if (craftItem.NameNumber > 0)
                        this.AddHtmlLocalized(255, 63 + (index * 20), 220, 18, craftItem.NameNumber, LabelColor, false, false);
                    else
                        this.AddLabel(255, 60 + (index * 20), LabelHue, craftItem.NameString);

                    this.AddButton(480, 60 + (index * 20), 4011, 4012, GetButtonID(2, i), GumpButtonType.Reply, 0);
                }
            }
        }

        public int CreateGroupList()
        {
            CraftGroupCol craftGroupCol = this.m_CraftSystem.CraftGroups;

            this.AddButton(15, 60, 4005, 4007, GetButtonID(6, 3), GumpButtonType.Reply, 0);
            this.AddHtmlLocalized(50, 63, 150, 18, 1044014, LabelColor, false, false); // LAST TEN

            for (int i = 0; i < craftGroupCol.Count; i++)
            {
                CraftGroup craftGroup = craftGroupCol.GetAt(i);

                this.AddButton(15, 80 + (i * 20), 4005, 4007, GetButtonID(0, i), GumpButtonType.Reply, 0);

                if (craftGroup.NameNumber > 0)
                    this.AddHtmlLocalized(50, 83 + (i * 20), 150, 18, craftGroup.NameNumber, LabelColor, false, false);
                else
                    this.AddLabel(50, 80 + (i * 20), LabelHue, craftGroup.NameString);
            }

            return craftGroupCol.Count;
        }

        public static int GetButtonID(int type, int index)
        {
            return 1 + type + (index * 7);
        }

        public void CraftItem(CraftItem item)
        {
            int num = this.m_CraftSystem.CanCraft(this.m_From, this.m_Tool, item.ItemType);

            if (num > 0)
            {
                this.m_From.SendGump(new CraftGump(this.m_From, this.m_CraftSystem, this.m_Tool, num));
            }
            else
            {
                Type type = null;

                CraftContext context = this.m_CraftSystem.GetContext(this.m_From);

                if (context != null)
                {
                    CraftSubResCol res = (item.UseSubRes2 ? this.m_CraftSystem.CraftSubRes2 : this.m_CraftSystem.CraftSubRes);
                    int resIndex = (item.UseSubRes2 ? context.LastResourceIndex2 : context.LastResourceIndex);

                    if (resIndex >= 0 && resIndex < res.Count)
                        type = res.GetAt(resIndex).ItemType;
                }

                this.m_CraftSystem.CreateItem(this.m_From, item.ItemType, type, this.m_Tool, item);
            }
        }

        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if (info.ButtonID <= 0)
                return; // Canceled

            int buttonID = info.ButtonID - 1;
            int type = buttonID % 7;
            int index = buttonID / 7;

            CraftSystem system = this.m_CraftSystem;
            CraftGroupCol groups = system.CraftGroups;
            CraftContext context = system.GetContext(this.m_From);

            #region Stygian Abyss
            if (Locked)
            {
                if (type == 6 && index == 11)
                {
                    // Cancel Make
                    AutoCraftTimer.EndTimer(m_From);
                }
                return;
            }
            #endregion

            switch ( type )
            {
                case 0: // Show group
                    {
                        if (context == null)
                            break;

                        if (index >= 0 && index < groups.Count)
                        {
                            context.LastGroupIndex = index;
                            this.m_From.SendGump(new CraftGump(this.m_From, system, this.m_Tool, null));
                        }

                        break;
                    }
                case 1: // Create item
                    {
                        if (context == null)
                            break;

                        int groupIndex = context.LastGroupIndex;

                        if (groupIndex >= 0 && groupIndex < groups.Count)
                        {
                            CraftGroup group = groups.GetAt(groupIndex);

                            if (index >= 0 && index < group.CraftItems.Count)
                                this.CraftItem(group.CraftItems.GetAt(index));
                        }

                        break;
                    }
                case 2: // Item details
                    {
                        if (context == null)
                            break;

                        int groupIndex = context.LastGroupIndex;

                        if (groupIndex >= 0 && groupIndex < groups.Count)
                        {
                            CraftGroup group = groups.GetAt(groupIndex);

                            if (index >= 0 && index < group.CraftItems.Count)
                                this.m_From.SendGump(new CraftGumpItem(this.m_From, system, group.CraftItems.GetAt(index), this.m_Tool));
                        }

                        break;
                    }
                case 3: // Create item (last 10)
                    {
                        if (context == null)
                            break;

                        List<CraftItem> lastTen = context.Items;

                        if (index >= 0 && index < lastTen.Count)
                            this.CraftItem(lastTen[index]);

                        break;
                    }
                case 4: // Item details (last 10)
                    {
                        if (context == null)
                            break;

                        List<CraftItem> lastTen = context.Items;

                        if (index >= 0 && index < lastTen.Count)
                            this.m_From.SendGump(new CraftGumpItem(this.m_From, system, lastTen[index], this.m_Tool));

                        break;
                    }
                case 5: // Resource selected
                    {
                        if (this.m_Page == CraftPage.PickResource && index >= 0 && index < system.CraftSubRes.Count)
                        {
                            int groupIndex = (context == null ? -1 : context.LastGroupIndex);

                            CraftSubRes res = system.CraftSubRes.GetAt(index);

                            if (this.m_From.Skills[system.MainSkill].Base < res.RequiredSkill)
                            {
                                this.m_From.SendGump(new CraftGump(this.m_From, system, this.m_Tool, res.Message));
                            }
                            else
                            {
                                if (context != null)
                                    context.LastResourceIndex = index;

                                this.m_From.SendGump(new CraftGump(this.m_From, system, this.m_Tool, null));
                            }
                        }
                        else if (this.m_Page == CraftPage.PickResource2 && index >= 0 && index < system.CraftSubRes2.Count)
                        {
                            int groupIndex = (context == null ? -1 : context.LastGroupIndex);

                            CraftSubRes res = system.CraftSubRes2.GetAt(index);

                            if (this.m_From.Skills[system.MainSkill].Base < res.RequiredSkill)
                            {
                                this.m_From.SendGump(new CraftGump(this.m_From, system, this.m_Tool, res.Message));
                            }
                            else
                            {
                                if (context != null)
                                    context.LastResourceIndex2 = index;

                                this.m_From.SendGump(new CraftGump(this.m_From, system, this.m_Tool, null));
                            }
                        }

                        break;
                    }
                case 6: // Misc. buttons
                    {
                        switch ( index )
                        {
                            case 0: // Resource selection
                                {
                                    if (system.CraftSubRes.Init)
                                        this.m_From.SendGump(new CraftGump(this.m_From, system, this.m_Tool, null, CraftPage.PickResource));

                                    break;
                                }
                            case 1: // Smelt item
                                {
                                    if (system.Resmelt)
                                        Resmelt.Do(this.m_From, system, this.m_Tool);

                                    break;
                                }
                            case 2: // Make last
                                {
                                    if (context == null)
                                        break;

                                    CraftItem item = context.LastMade;

                                    if (item != null)
                                        this.CraftItem(item);
                                    else
                                        this.m_From.SendGump(new CraftGump(this.m_From, this.m_CraftSystem, this.m_Tool, 1044165, this.m_Page)); // You haven't made anything yet.

                                    break;
                                }
                            case 3: // Last 10
                                {
                                    if (context == null)
                                        break;

                                    context.LastGroupIndex = 501;
                                    this.m_From.SendGump(new CraftGump(this.m_From, system, this.m_Tool, null));

                                    break;
                                }
                            case 4: // Toggle use resource hue
                                {
                                    if (context == null)
                                        break;

                                    context.DoNotColor = !context.DoNotColor;

                                    this.m_From.SendGump(new CraftGump(this.m_From, this.m_CraftSystem, this.m_Tool, null, this.m_Page));

                                    break;
                                }
                            case 5: // Repair item
                                {
                                    if (system.Repair)
                                        Repair.Do(this.m_From, system, this.m_Tool);

                                    break;
                                }
                            case 6: // Toggle mark option
                                {
                                    if (context == null || !system.MarkOption)
                                        break;

                                    switch ( context.MarkOption )
                                    {
                                        case CraftMarkOption.MarkItem:
                                            context.MarkOption = CraftMarkOption.DoNotMark;
                                            break;
                                        case CraftMarkOption.DoNotMark:
                                            context.MarkOption = CraftMarkOption.PromptForMark;
                                            break;
                                        case CraftMarkOption.PromptForMark:
                                            context.MarkOption = CraftMarkOption.MarkItem;
                                            break;
                                    }

                                    this.m_From.SendGump(new CraftGump(this.m_From, this.m_CraftSystem, this.m_Tool, null, this.m_Page));

                                    break;
                                }
                            case 7: // Resource selection 2
                                {
                                    if (system.CraftSubRes2.Init)
                                        this.m_From.SendGump(new CraftGump(this.m_From, system, this.m_Tool, null, CraftPage.PickResource2));

                                    break;
                                }
                            case 8: // Enhance item
                                {
                                    if (system.CanEnhance)
                                        Enhance.BeginTarget(this.m_From, system, this.m_Tool);

                                    break;
                                }
                            #region Stygian Abyss
                            case 9: // Alter Item (Gargoyle)
                                {
                                    if (system.CanAlter)
                                    {
                                        if (Server.SkillHandlers.Imbuing.CheckSoulForge(m_From, 1, false))
                                        {
                                            AlterItem.BeginTarget(this.m_From, system, this.m_Tool);
                                        }
                                        else
                                            m_From.SendLocalizedMessage(1111867); // You must be near a soulforge to alter an item.
                                    }
                                    break;
                                }
                            case 10: // Quest Item/Non Quest Item toggle
                                {
                                    //if (context == null || !system.QuestOption)
                                    //break;
                                    switch ( context.QuestOption )
                                    {
                                        case CraftQuestOption.QuestItem:
                                            context.QuestOption = CraftQuestOption.NonQuestItem;
                                            break;
                                        case CraftQuestOption.NonQuestItem:
                                            context.QuestOption = CraftQuestOption.QuestItem;
                                            break;
                                    }

                                    this.m_From.SendGump(new CraftGump(this.m_From, this.m_CraftSystem, this.m_Tool, null, this.m_Page));

                                    break;
                                }
                            case 11: // Cancel Make
                                {
                                    AutoCraftTimer.EndTimer(m_From);
                                    break;
                                }
                            #endregion
                        }
                        break;
                    }
            }
        }
    }
}
 
OK. Sorry this is jumping from one file to the next. We should look at MasterStorageUtils.cs next.
 
Np :) .... MasterStorageUtils.cs:
C#:
/*
created by:
     /\            888                   888     .d8888b.   .d8888b. 
____/_ \____       888                   888    d88P  Y88b d88P  Y88b
\  ___\ \  /       888                   888    888    888 888    888
\/ /  \/ /    .d88888  8888b.   8888b.  888888 Y88b. d888 Y88b. d888
/ /\__/_/\   d88" 888     "88b     "88b 888     "Y888P888  "Y888P888
/__\ \_____\  888  888 .d888888 .d888888 888           888        888
    \  /      Y88b 888 888  888 888  888 Y88b.  Y88b  d88P Y88b  d88P
     \/        "Y88888 "Y888888 "Y888888  "Y888  "Y8888P"   "Y8888P" 
*/
#define RunUO2_2
#define USE_TOKENS

using System;
using Server;
using Server.Mobiles;
using Server.Items;
using System.Collections.Generic;
using Server.Commands;
using Server.Engines.Craft;

namespace daat99
{
    public static class MasterStorageUtils
    {
        //defaults types to loot
        //When editing this make sure you don't include types that have inheritance links
        public static Type[] DefaultBaseTypes =
        {
            typeof(BaseReagent),        typeof(BaseWeapon),         typeof(BaseArmor),             typeof(BaseJewel),
            typeof(BaseContainer),        typeof(SpellScroll),        typeof(BaseInstrument),     typeof(BasePotion),
            typeof(BaseTool),            typeof(BaseHarvestTool),     typeof(ICommodity),            typeof(MapItem),
            typeof(BaseAddon),            typeof(BaseGranite)
        };
       
        //default items to loot
        //When editing this make sure you don't add items that inherits from one of the types in the DefaultBaseTypes list
        public static Type[] DefaultItemTypes =
        {
            typeof(Amber),             typeof(Amethyst),     typeof(Citrine),     typeof(Diamond),
            typeof(Emerald),         typeof(Ruby),         typeof(Sapphire),     typeof(StarSapphire),
            typeof(Tourmaline),     typeof(Board),        typeof(PowerScroll)
        };

        //This is the currency items types
        private static Dictionary<Type, Type> currencyTypes;
        private static Dictionary<Type, Type> CurrencyTypes
        {
            get
            {
                if (currencyTypes == null)
                {
                    currencyTypes = new Dictionary<Type, Type>();
                    currencyTypes.Add(typeof(Gold), typeof(Gold));
                    currencyTypes.Add(typeof(BankCheck), typeof(Gold));
#if USE_TOKENS
                    currencyTypes.Add(typeof(Daat99Tokens), typeof(Daat99Tokens));
                    currencyTypes.Add(typeof(TokenCheck), typeof(Daat99Tokens));
#endif
                }
                return currencyTypes;
            }
        }

        public static bool IsCurrencyType( Type itemType )
        {
            return CurrencyTypes.ContainsKey(itemType);
        }

        public static Type GetCurrencyType(Type itemType)
        {
            if (CurrencyTypes.ContainsKey(itemType))
                return CurrencyTypes[itemType];
            return null;
        }
               
        private static Dictionary<Serial, MasterStorage> PlayersMasterStorageList = new Dictionary<Serial, MasterStorage>();

        private static void addToMasterStoragesList(PlayerMobile player, MasterStorage bag)
        {
            if (bag == null)
                return;
            if (!MasterStorageUtils.PlayersMasterStorageList.ContainsKey(player.Serial))
                MasterStorageUtils.PlayersMasterStorageList.Add(player.Serial, bag);
        }

        public static void Initialize()
        {
#if RunUO2_2
            CommandSystem.Register("Loot", AccessLevel.Player, new CommandEventHandler(Loot_OnCommand));
#else
            CommandHandlers.Register( "Loot", AccessLevel.Player, new CommandEventHandler( Loot_OnCommand ) );
#endif
        }
       
        public static void Loot_OnCommand( CommandEventArgs e )
        {
            PlayerMobile player = e.Mobile as PlayerMobile;
            if (  player == null || !CanPlayerLoot(player) )
                return;
            MasterStorage backpack = GetMasterStorage(player);
            if ( backpack == null )
            {
                player.SendMessage("You must have a Master Storage in your backpack!");
                return;
            }
            if ( backpack.IsOwner(player) )
                backpack.Loot( player );
        }

        ///WARNING!!! may return null!!!
        public static MasterStorage GetMasterStorage(PlayerMobile player)
        {
            if (player == null || player.Backpack == null)
                return null;
            Serial serial = player.Serial;
            MasterStorage bag = null;
            if (MasterStorageUtils.PlayersMasterStorageList.ContainsKey(serial))
            {
                bag = MasterStorageUtils.PlayersMasterStorageList[serial];
                if (bag.IsChildOf(player.Backpack) && !bag.Deleted)
                    return bag;
                else
                    MasterStorageUtils.PlayersMasterStorageList.Remove(serial);
            }
            bag = player.Backpack.FindItemByType(typeof(MasterStorage), false) as MasterStorage;
            if (bag != null && bag.Deleted)
                bag = null;
            if (bag != null && bag.IsOwner(player))
            {
                MasterStorageUtils.PlayersMasterStorageList.Add(serial, bag);
                return bag;
            }
            else
                return null;
        }
       
        public static bool CanPlayerLoot(PlayerMobile player)
        {
            if ( player.AccessLevel > AccessLevel.Player )
                return true;
            if ( !player.Alive )
            {
                player.PlaySound( 1069 ); //hey
                player.SendMessage( "You are dead!" );
                return false;
            }
            if ( player.Blessed )
            {
                player.PlaySound( 1069 ); //hey
                player.SendMessage( "You can't loot while you are invulnerable!");
                return false;
            }
            foreach ( Mobile other in player.GetMobilesInRange( 2 ) )
            {
                if ( ! ( other is PlayerMobile ) )
                    continue;
                if ( player != other && !other.Hidden && other.AccessLevel == AccessLevel.Player )
                {
                    player.PlaySound(1069); //hey
                    player.SendMessage("You are too close to another player to do that!");
                    return false; //ignore self, staff and hidden
                }
            }
            return true;
        }
       
        public static bool GiveGoldToPlayer( PlayerMobile player, int amount )
        {
            return GiveGoldToPlayer(player, amount, true);
        }
        public static bool GiveGoldToPlayer( PlayerMobile player, int amount, bool informPlayer )
        {
            return GiveTypeToPlayer(player, typeof(Gold), amount, informPlayer);
        }

        public static bool TakeGoldFromPlayer(PlayerMobile player, int amount)
        {
            return TakeGoldFromPlayer(player, amount, true);
        }
        public static bool TakeGoldFromPlayer(PlayerMobile player, int amount, bool informPlayer)
        {
            return TakeTypeFromPlayer(player, typeof(Gold), amount, informPlayer);
        }


        public static bool GiveTypeToPlayer(PlayerMobile player, Type type, int amount)
        {
            return GiveTypeToPlayer(player, type, amount, true);
        }
        public static bool GiveTypeToPlayer(PlayerMobile player, Type type, int amount, bool informPlayer)
        {
            int amountLeft = amount;
            if (amount < 0)
                return false;
            MasterStorage backpack = GetMasterStorage(player);
            if (backpack == null)
            {
                if (informPlayer)
                    player.SendMessage(1173, "Unable to find your Master Storage, please make sure it's in your backpack.");
                return false;
            }
            if ( !backpack.TryStoreItemType(type, amount) )
            {
                if (informPlayer)
                    player.SendMessage(1173, "Unable to add " + amount + " " + type.Name + " to your Master Storage.");
                return false;
            }
            if (informPlayer)
                player.SendMessage(1173, "You added " + amount + " " + type.Name + " to your Master Storage.");
            return true;
        }

        public static bool TakeTypeFromPlayer(PlayerMobile player, Type type, int amount)
        {
            return TakeTypeFromPlayer(player, type, amount, true);
        }
        public static bool TakeTypeFromPlayer(PlayerMobile player, Type type, int amount, bool informPlayer)
        {
            if (amount < 0)
                return false;
            MasterStorage backpack = GetMasterStorage(player);
            if (backpack == null)
            {
                if (informPlayer)
                    player.SendMessage(1173, "Unable to find your Master Storage, please make sure it's in your backpack.");
                return false;
            }
            List<Item> items = backpack.TryExtractType(type, amount);
            if (items.Count == 0)
            {
                if (informPlayer)
                    player.SendMessage(1173, "You don't have enough " + type.Name + " in your Master Storage.");
                return false;
            }
            if (informPlayer)
                player.SendMessage(1173, amount + " " + type.Name + " were removed from your Master Storage.");
            return true;
        }

        public static bool GiveTokensToPlayer( PlayerMobile player, int amount )
        {
            return GiveTokensToPlayer(player, amount, true);
        }
        public static bool GiveTokensToPlayer( PlayerMobile player, int amount, bool informPlayer )
        {
#if USE_TOKENS
            return GiveTypeToPlayer(player, typeof(Daat99Tokens), amount, informPlayer);
#else
            return false;
#endif
        }

        public static bool TakeTokensFromPlayer(PlayerMobile player, int amount)
        {
            return TakeTokensFromPlayer(player, amount, false);
        }
        public static bool TakeTokensFromPlayer(PlayerMobile player, int amount, bool informPlayer)
        {
#if USE_TOKENS
            return TakeTypeFromPlayer(player, typeof(Daat99Tokens), amount, informPlayer);
#else
            return false;
#endif
        }
        public static bool DropItemInBagOrFeet(PlayerMobile player, MasterStorage backpack, List<Item> items)
        {
            foreach (Item item in items)
                if (!DropItemInBagOrFeet(player, backpack, item))
                    return false;
            return true;
        }
        public static bool DropItemInBagOrFeet(PlayerMobile player, MasterStorage backpack, Item item)
        {
            if ( player == null || item == null )
                return false;
            if ( backpack == null )
                backpack = GetMasterStorage(player);
            if ( backpack != null && backpack.TryDropItem(player, item, false) )
                return true;
            if ( player.Backpack != null && player.Backpack.TryDropItem(player, item, false) )
                return true;
           
            Map map = player.Map;
            if (map == null)
                return false;

            List<Item> atFeet = new List<Item>();
            foreach (Item obj in player.GetItemsInRange(0))
                atFeet.Add(obj);
            for (int i = 0; i < atFeet.Count; ++i)
            {
                Item check = atFeet[i];

                if (check.StackWith(player, item, false))
                    break;
            }
            item.MoveToWorld(player.Location, map);
            return true;
        }

        public static bool CheckLoot(Corpse corpse, PlayerMobile player)
        {
            #if RunUO2_2
                return corpse.CheckLoot(player, null);
            #else
                return corpse.CheckLoot(player);
            #endif
        }

        public static bool ConsumeCurrency( PlayerMobile player, Type currencyType, int amount )
        { return ConsumeCurrency(player, currencyType, amount, false); }
        public static bool ConsumeCurrency( PlayerMobile player, Type currencyType, int amount, bool informPlayer )
        {
            if ( amount < 0 )
            {
                if ( player != null && informPlayer )
                    player.SendMessage("You can't consume negative amounts.");
                return false;
            }
            return ConsumeCurrency(player, currencyType, (UInt64)amount, informPlayer);
        }
        public static bool ConsumeCurrency( PlayerMobile player, Type currencyType, UInt64 amount )
        { return ConsumeCurrency( player, currencyType, amount, false ); }
        public static bool ConsumeCurrency( PlayerMobile player, Type currencyType, UInt64 amount, bool informPlayer )
        {
            if ( player == null )
                return false;
            if ( amount == 0 )
            {
                if ( informPlayer )
                    player.SendMessage("You don't need to consume anything.");
                return true;
            }
            MasterStorage backpack = GetMasterStorage(player);
            if ( backpack == null )
            {
                if ( informPlayer )
                    player.SendMessage("You don't have a Master Storage backpack on you.");
                return false;
            }
            return backpack.ConsumeCurrency(player, currencyType, amount, informPlayer);
        }

        // Vii added
        public static Item CreateItemFromType(Type type, ItemInformation info)
        {
            try
            {
                Item item = Activator.CreateInstance(type) as Item;

                if (item == null)
                    return null;

                if (item is BaseInstrument)
                {
                    ((BaseInstrument)item).Name = info.Name;
                    ((BaseInstrument)item).Slayer = info.Slayer;
                    ((BaseInstrument)item).Slayer2 = info.Slayer2;
                    ((BaseInstrument)item).Quality = info.Quality;
                    ((BaseInstrument)item).Crafter = info.Crafter;
                    ((BaseInstrument)item).UsesRemaining = info.UsesRemaining;
                }

                return item;
            }
            catch { }

            return null;
        }

        public static List<Item> CreateItemsFromType(Type type, int amount)
        {
            List<Item> items = new List<Item>();
            try
            {
                Item item = Activator.CreateInstance(type) as Item;

                if (item == null)
                    return null;
                while (amount > 0)
                {
                    item = Activator.CreateInstance(type) as Item;
                    if (item == null)
                        return null;
                    if (item is SackFlour)
                    {
                        int add = Math.Min(amount, 20);
                        ((SackFlour)item).Quantity = add;
                        amount -= add;
                    }
                    else if (item is IUsesRemaining)
                    {
                        ((IUsesRemaining)item).UsesRemaining = amount;
                        amount = 0;
                    }
                    else if (item.Stackable)
                    {
                        int add = Math.Min(amount, 60000);
                        item.Amount = add;
                        amount -= add;
                    }
                    else
                        --amount;
                    items.Add(item);
                }
            }
            catch { }
            if (amount > 0) //we failed!!!
            {
                foreach (Item item in items.ToArray())
                    item.Delete();
                return null;
            }
            return items;
        }

        public static void MoveItemsOnDeath(PlayerMobile player, Container corpse)
        {
            if ( player == null || corpse == null )
                return;
            MasterStorage backpack = GetMasterStorage(player);
            if ( backpack != null )
                backpack.MoveItemsOnDeath(corpse);
        }

        public static ulong GetPlayersStorageItemCount(PlayerMobile player, Type type)
        {
            MasterStorage backpack = GetMasterStorage(player);
            if (backpack != null)
                return backpack.GetStoredItemAmount(type);
            return 0;
        }
        public static bool ConsumePlayersStorageItem(PlayerMobile player, Type type, int amount)
        {
            MasterStorage backpack = GetMasterStorage(player);
            if (backpack != null)
                return backpack.TryConsume(type, amount);
            return false;
        }
        public static bool ConsumePlayersStorageItems(PlayerMobile player, Type[] types, int[] amounts)
        {
            MasterStorage backpack = GetMasterStorage(player);
            if (backpack != null)
                return backpack.TryConsume(types, amounts);
            return false;
        }
    }
}
 
On your line 889 you commented out
// this.SetSubRes(typeof(Board), 1072643);
Your tool isn't seeing the Boards due to this, I don't know how your other boards are working unless it has something to do with the daat99.ResourceHelper, When I work with custom resources I tend to stay away from a 3rd party scripts to introduce new materials.

my DefBlacksmith script Might be able to help you out with this
C#:
// Add every material you want the player to be able to choose from
            // This will override the overridable material
            AddSubRes(typeof(IronIngot), 1044022, 00.0, 1044036, 1044267);
            AddSubRes(typeof(DullCopperIngot), 1044023, 65.0, 1044036, 1044268);
            AddSubRes(typeof(ShadowIronIngot), 1044024, 70.0, 1044036, 1044268);
            AddSubRes(typeof(CopperIngot), 1044025, 75.0, 1044036, 1044268);
            AddSubRes(typeof(BronzeIngot), 1044026, 80.0, 1044036, 1044268);
            AddSubRes(typeof(GoldIngot), 1044027, 85.0, 1044036, 1044268);
            AddSubRes(typeof(AgapiteIngot), 1044028, 90.0, 1044036, 1044268);
            AddSubRes(typeof(VeriteIngot), 1044029, 95.0, 1044036, 1044268);
            AddSubRes(typeof(ValoriteIngot), 1044030, 99.0, 1044036, 1044268);
            this.AddSubRes(typeof(MithrilIngot), "MITHRIL", 100.0, "Don't have Enough skill to use this.");
            this.AddSubRes(typeof(SoulIngot), "SOUL", 100.0, "Don't have Enough skill to use this.");
            this.AddSubRes(typeof(NetherIngot), "NETHER", 105.0, "Don't have Enough skill to use this.");
            this.AddSubRes(typeof(AstralIngot), "ASTRAL", 105.0, "Don't have Enough skill to use this.");
            this.AddSubRes(typeof(SolarIngot), "SOLAR", 110.0, "Don't have Enough skill to use this.");
            this.AddSubRes(typeof(MagmaIngot), "MAGMA", 110.0, "Don't have Enough skill to use this.");
            this.AddSubRes(typeof(ObsidianIngot), "OBSIDIAN", 115.0, "Don't have Enough skill to use this.");
            this.AddSubRes(typeof(SpectralIngot), "SPECTRAL", 115.0, "Don't have Enough skill to use this.");
            this.AddSubRes(typeof(IcySteelIngot), "ICY STEEL", 119.0, "Don't have Enough skill to use this.");
            this.AddSubRes(typeof(InfernalCrystalIngot), "INFERNAL CRYSTAL", 119.0,"Don't have Enough skill to use this.");

            SetSubRes2(typeof(RedScales), 1060875);

            AddSubRes2(typeof(RedScales), 1060875, 0.0, 1053137, 1044268);
            AddSubRes2(typeof(YellowScales), 1060876, 0.0, 1053137, 1044268);
            AddSubRes2(typeof(BlackScales), 1060877, 0.0, 1053137, 1044268);
            AddSubRes2(typeof(GreenScales), 1060878, 0.0, 1053137, 1044268);
            AddSubRes2(typeof(WhiteScales), 1060879, 0.0, 1053137, 1044268);
            AddSubRes2(typeof(BlueScales), 1060880, 0.0, 1053137, 1044268);

You need to uncomment that line and change it like how the scales are where it has SetSubRes2 and AddSubRes2 as this tells it you have another set of resources that can be changed out for a different variety


C#:
this.SetSubRes(typeof(Log), "Logs");
          // this.SetSubRes(typeof(Board), 1072643);          
            //daat99 OWLTR start - custom Wood
            daat99.ResourceHelper.AddWoodResources(this);
            //daat99 OWLTR end - custom Wood

            // Add every material you want the player to be able to choose from
            // This will override the overridable material    TODO: Verify the required skill amount
            AddSubRes(typeof(Log), "Log", 00.0, 0);
            AddSubRes(typeof(AshLog), "Ash", 20.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(YewLog), "Yew", 30.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(OakLog), "Oak", 40.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(EbonyLog), "Ebony", 50.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(BambooLog), "Bamboo", 60.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(HeartwoodLog), "Heartwood", 70.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(BloodwoodLog), "Bloodwood", 80.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(FrostwoodLog), "Frostwood", 90.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(PurpleHeartLog), "PurpleHeart", 100.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(RedwoodLog), "Redwood", 110.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(PetrifiedLog), "Petrified", 115.0, "You have no idea how to work this type of log.");
           
       this.AddSubRes(typeof(Board), "Boards", 00.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(AshBoard), "Ash Boards", 80.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(YewBoard), "Yew Boards", 95.0, "You have no idea how to work this type of lumber.");      
       this.AddSubRes(typeof(OakBoard), "Oak Boards", 65.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(EbonyBoard), "Ebony Boards", 50.0, "You have no idea how to work this type of lumber.");      
       this.AddSubRes(typeof(BambooBoard), "Bamboo Boards", 60.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(HeartwoodBoard), "Heartwood Boards", 100.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(BloodwoodBoard), "BloodwoodBoards", 100.0,"You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(FrostwoodBoard), "Frostwood Boards", 100.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(PurpleHeartBoard), "Purple Heart Boards", 100.0, "You have no idea how to work this type of log.");      
       this.AddSubRes(typeof(RedwoodBoard), "Redwood Boards", 110.0, "You have no idea how to work this type of lumber.");
       this.AddSubRes(typeof(PetrifiedBoard), "Petrified Boards", 115.0, "You have no idea how to work this type of lumber.");

Also i recommend Organize it where this.SetSubRes2(typeof(Board), 1072643) is above the rest of your boards instead of at the very top above the logs
 
I tried that and when I used the nails it crashed the Server! lol

C#:
Server Crash Report
===================

ServUO Version 0.5, Build 6349.40628
Operating System: Microsoft Windows NT 6.2.9200.0
.NET Framework: 4.0.30319.42000
Time: 3/7/2021 7:13:58 PM
Mobiles: 11573
Items: 267074
Exception:
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.Collections.CollectionBase.System.Collections.IList.get_Item(Int32 index)
   at Server.Engines.Craft.CraftSubResCol.GetAt(Int32 index)
   at Server.Engines.Craft.CraftGump..ctor(Mobile from, CraftSystem craftSystem, BaseTool tool, Object notice, CraftPage page)
   at Server.Items.BaseTool.OnDoubleClick(Mobile from)
   at Server.Mobile.Use(Item item) in c:\Users\Administrator\Desktop\ServUO Repack by zerodowned\Server\Mobile.cs:line 4420
   at Server.Engines.XmlSpawner2.XmlAttach.UseReq(NetState state, PacketReader pvSrc)
   at Server.Network.MessagePump.HandleReceive(NetState ns) in c:\Users\Administrator\Desktop\ServUO Repack by zerodowned\Server\Network\MessagePump.cs:line 187
   at Server.Network.MessagePump.Slice() in c:\Users\Administrator\Desktop\ServUO Repack by zerodowned\Server\Network\MessagePump.cs:line 115
   at Server.Core.Main(String[] args) in c:\Users\Administrator\Desktop\ServUO Repack by zerodowned\Server\Main.cs:line 589

and the changes made:

C#:
            this.SetSubRes(typeof(Log), "Logs");
            this.SetSubRes2(typeof(Board), "Boards");          
            //daat99 OWLTR start - custom Wood
            daat99.ResourceHelper.AddWoodResources(this);
            //daat99 OWLTR end - custom Wood

            // Add every material you want the player to be able to choose from
            // This will override the overridable material    TODO: Verify the required skill amount
            AddSubRes(typeof(Log), "Log", 00.0, 0);
            AddSubRes(typeof(AshLog), "Ash", 20.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(YewLog), "Yew", 30.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(OakLog), "Oak", 40.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(EbonyLog), "Ebony", 50.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(BambooLog), "Bamboo", 60.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(HeartwoodLog), "Heartwood", 70.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(BloodwoodLog), "Bloodwood", 80.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(FrostwoodLog), "Frostwood", 90.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(PurpleHeartLog), "PurpleHeart", 100.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(RedwoodLog), "Redwood", 110.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(PetrifiedLog), "Petrified", 115.0, "You have no idea how to work this type of log.");
          
       AddSubRes2(typeof(Board), "Boards", 00.0, "You have no idea how to work this type of lumber.");
       AddSubRes2(typeof(AshBoard), "Ash Boards", 80.0, "You have no idea how to work this type of lumber.");
       AddSubRes2(typeof(YewBoard), "Yew Boards", 95.0, "You have no idea how to work this type of lumber.");     
       AddSubRes2(typeof(OakBoard), "Oak Boards", 65.0, "You have no idea how to work this type of lumber.");
       AddSubRes2(typeof(EbonyBoard), "Ebony Boards", 50.0, "You have no idea how to work this type of lumber.");     
       AddSubRes2(typeof(BambooBoard), "Bamboo Boards", 60.0, "You have no idea how to work this type of lumber.");
       AddSubRes2(typeof(HeartwoodBoard), "Heartwood Boards", 100.0, "You have no idea how to work this type of lumber.");
       AddSubRes2(typeof(BloodwoodBoard), "BloodwoodBoards", 100.0,"You have no idea how to work this type of lumber.");
       AddSubRes2(typeof(FrostwoodBoard), "Frostwood Boards", 100.0, "You have no idea how to work this type of lumber.");
       AddSubRes2(typeof(PurpleHeartBoard), "Purple Heart Boards", 100.0, "You have no idea how to work this type of log.");     
       AddSubRes2(typeof(RedwoodBoard), "Redwood Boards", 110.0, "You have no idea how to work this type of lumber.");
       AddSubRes2(typeof(PetrifiedBoard), "Petrified Boards", 115.0, "You have no idea how to work this type of lumber.");     
        }
    }
}
 
Last edited:
did you add the logs to DefCarpentry? Cause in the latest Servuo Defcarpentry doesn't have logs it has boards by default.
 
Yes, this is DefCarpentry.
Post automatically merged:

So, try taking out everything that says Logs or anything that has to do with logs?
Post automatically merged:

The original DefCarpentry script had boards everywhere instead of logs and like that it wouldn't use colored boards or any logs. The fix for it was a posted here on Servuo except for the bottom section of boards. The fix showed everywhere there was boards to chang them to logs. So, I went with that.
 
Last edited:
Well the boards are the only one that should be crafted, logs can be chopped up and turn into boards if you have a axe equipped on your paper doll
Yes, this is DefCarpentry.
Post automatically merged:

So, try taking out everything that says Logs or anything that has to do with logs?
Post automatically merged:

The original DefCarpentry script had boards everywhere instead of logs and like that it wouldn't use colored boards or any logs. The fix for it was a posted here on Servuo except for the bottom section of boards. The fix showed everywhere there was boards to chang them to logs. So, I went with that.
I can take a look at my old Runuo server and see how it is formatted I think our servuo version opt out the use for logs in carpentry.
 
Last edited:
Right, but will that solve the issue? This issue is it'll only pull certain boards from the Wood Key.
 
Well you said all your logs were working but the boards are not, yet your boards are basically cut out of the equation due to the fact it was commented out , tho you said that all your customs are working just fine. So daat's resource helper must be the reason why your custom ones are working just fine. So I do believe that would infact solve the problem since Defcarpentry is not seeing the boards as a crafting material. its only seeing the logs as crafting material
 
Ty for your help... i'll try that and post the outcome.
Post automatically merged:

I changed everything from Log to Board, commented out all Log types down by the bottom, also commented out: daat99.ResourceHelper.AddWoodResources (or the Server crashes).
Same thing... last 5 board types are the only ones that will withdraw from the Wood Key.
Here's the changed script and a pic:

C#:
using System;
using Server.Items;

namespace Server.Engines.Craft
{
    #region Mondain's Legacy
    public enum CarpRecipes
    {
        // stuff
        WarriorStatueSouth = 100,
        WarriorStatueEast = 101,
        SquirrelStatueSouth = 102,
        SquirrelStatueEast = 103,
        AcidProofRope = 104,
        OrnateElvenChair = 105,
        ArcaneBookshelfSouth = 106,
        ArcaneBookshelfEast = 107,
        OrnateElvenChestSouth = 108,
        ElvenDresserSouth = 109,
        ElvenDresserEast = 110,
        FancyElvenArmoire = 111,
        ArcanistsWildStaff = 112,
        AncientWildStaff = 113,
        ThornedWildStaff = 114,
        HardenedWildStaff = 115,
        TallElvenBedSouth = 116,
        TallElvenBedEast = 117,
        StoneAnvilSouth = 118,
        StoneAnvilEast = 119,
        OrnateElvenChestEast = 120,

        // arties
        PhantomStaff = 150,
        IronwoodCrown = 151,
        BrambleCoat = 152,

        KotlBlackRod = 170,
        KotlAutomaton = 171
    }
    #endregion

    public class DefCarpentry : CraftSystem
    {
        public override SkillName MainSkill
        {
            get
            {
                return SkillName.Carpentry;
            }
        }

        public override int GumpTitleNumber
        {
            get
            {
                return 1044004;
            }// <CENTER>CARPENTRY MENU</CENTER>
        }

        private static CraftSystem m_CraftSystem;

        public static CraftSystem CraftSystem
        {
            get
            {
                if (m_CraftSystem == null)
                    m_CraftSystem = new DefCarpentry();

                return m_CraftSystem;
            }
        }

        public override double GetChanceAtMin(CraftItem item)
        {
            return 0.5; // 50%
        }

        private DefCarpentry()
            : base(1, 1, 1.25)// base( 1, 1, 3.0 )
        {
        }

        public override int CanCraft(Mobile from, BaseTool tool, Type itemType)
        {
            int num = 0;

            if (tool == null || tool.Deleted || tool.UsesRemaining <= 0)
                return 1044038; // You have worn out your tool!
            else if (!tool.CheckAccessible(from, ref num))
                return num; // The tool must be on your person to use.

            return 0;
        }

        public override void PlayCraftEffect(Mobile from)
        {
            // no animation
            //if ( from.Body.Type == BodyType.Human && !from.Mounted )
            //    from.Animate( 9, 5, 1, true, false, 0 );
            from.PlaySound(0x23D);
        }

        public override int PlayEndingEffect(Mobile from, bool failed, bool lostMaterial, bool toolBroken, int quality, bool makersMark, CraftItem item)
        {
            if (toolBroken)
                from.SendLocalizedMessage(1044038); // You have worn out your tool

            if (failed)
            {
                if (lostMaterial)
                    return 1044043; // You failed to create the item, and some of your materials are lost.
                else
                    return 1044157; // You failed to create the item, but no materials were lost.
            }
            else
            {
                if (quality == 0)
                    return 502785; // You were barely able to make this item.  It's quality is below average.
                else if (makersMark && quality == 2)
                    return 1044156; // You create an exceptional quality item and affix your maker's mark.
                else if (quality == 2)
                    return 1044155; // You create an exceptional quality item.
                else
                    return 1044154; // You create the item.
            }
        }

        public override bool ConsumeOnFailure(Mobile from, Type resourceType, CraftItem craftItem)
        {
            if (resourceType == typeof(StaffOfTheMagi))
                return false;

            return base.ConsumeOnFailure(from, resourceType, craftItem);
        }

        public override void InitCraftList()
        {
            int index = -1;

            // Other Items
            if (Core.Expansion >= Expansion.AOS)
            {
                index = this.AddCraft(typeof(Board), "Boards", 1027127, 0.0, 0.0, typeof(Board), 1044466, 1, 1044465);
                this.SetUseAllRes(index, true);
                this.SetForceTypeRes(index, true);
            }/////////board crafts////
            //this.AddCraft(typeof(ShortMusicStand), "Board Crafts (non-color)", "Short Music Stand", 78.9, 103.9, typeof(AshBoard), "Ash Board", 15, "You'll don't have the required lumber to craft such!" );
            //////end board crafts
            this.AddCraft(typeof(BarrelStaves), 1044294, 1027857, 00.0, 25.0, typeof(Board), 1044041, 5, 1044351);
            this.AddCraft(typeof(BarrelLid), 1044294, 1027608, 11.0, 36.0, typeof(Board), 1044041, 4, 1044351);
            this.AddCraft(typeof(ShortMusicStand), 1044294, 1044313, 78.9, 103.9, typeof(Board), 1044041, 15, 1044351);
            this.AddCraft(typeof(TallMusicStand), 1044294, 1044315, 81.5, 106.5, typeof(Board), 1044041, 20, 1044351);
            this.AddCraft(typeof(Easle), 1044294, 1044317, 86.8, 111.8, typeof(Board), 1044041, 20, 1044351);
            if (Core.SE)
            {
                index = this.AddCraft(typeof(RedHangingLantern), 1044294, 1029412, 65.0, 90.0, typeof(Board), 1044041, 5, 1044351);
                this.AddRes(index, typeof(BlankScroll), 1044377, 10, 1044378);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(WhiteHangingLantern), 1044294, 1029416, 65.0, 90.0, typeof(Board), 1044041, 5, 1044351);
                this.AddRes(index, typeof(BlankScroll), 1044377, 10, 1044378);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(ShojiScreen), 1044294, 1029423, 80.0, 105.0, typeof(Board), 1044041, 75, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
                this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(BambooScreen), 1044294, 1029428, 80.0, 105.0, typeof(Board), 1044041, 75, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
                this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            if (Core.AOS)    //Duplicate Entries to preserve ordering depending on era
            {
                index = this.AddCraft(typeof(FishingPole), 1044294, 1023519, 68.4, 93.4, typeof(Board), 1044041, 5, 1044351); //This is in the categor of Other during AoS
                this.AddSkill(index, SkillName.Tailoring, 40.0, 45.0);
                this.AddRes(index, typeof(Cloth), 1044286, 5, 1044287);
            }

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(WoodenContainerEngraver), 1044294, 1072153, 75.0, 100.0, typeof(Board), 1044041, 4, 1044351);
                this.AddRes(index, typeof(IronIngot), 1044036, 2, 1044037);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(RunedSwitch), 1044294, 1072896, 70.0, 120.0, typeof(Board), 1044041, 2, 1044351);
                this.AddRes(index, typeof(EnchantedSwitch), 1072893, 1, 1053098);
                this.AddRes(index, typeof(RunedPrism), 1073465, 1, 1053098);
                this.AddRes(index, typeof(JeweledFiligree), 1072894, 1, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcanistStatueSouthDeed), 1044294, 1072885, 0.0, 35.0, typeof(Board), 1044041, 250, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcanistStatueEastDeed), 1044294, 1072886, 0.0, 35.0, typeof(Board), 1044041, 250, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WarriorStatueSouthDeed), 1044294, 1072887, 0.0, 35.0, typeof(Board), 1044041, 250, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.WarriorStatueSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WarriorStatueEastDeed), 1044294, 1072888, 0.0, 35.0, typeof(Board), 1044041, 250, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.WarriorStatueEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(SquirrelStatueSouthDeed), 1044294, 1072884, 0.0, 35.0, typeof(Board), 1044041, 250, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.SquirrelStatueSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(SquirrelStatueEastDeed), 1044294, 1073398, 0.0, 35.0, typeof(Board), 1044041, 250, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.SquirrelStatueEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(GiantReplicaAcorn), 1044294, 1072889, 80.0, 105.0, typeof(Board), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(MountedDreadHorn), 1044294, 1032632, 90.0, 115.0, typeof(Log), 1044041, 50, 1044351);
                this.AddRes(index, typeof(PristineDreadHorn), 1032634, 1, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(AcidProofRope), 1044294, 1074886, 80, 130.0, typeof(GreaterStrengthPotion), 1073466, 2, 1044253);
                this.AddRes(index, typeof(ProtectionScroll), 1044395, 1, 1053098);
                this.AddRes(index, typeof(SwitchItem), 1032127, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.AcidProofRope);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            #region SA
            if (Core.SA)
            {
                index = this.AddCraft(typeof(GargishBanner), 1044294, 1095312, 94.7, 115.0, typeof(Board), 1044041, 50, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 75.0, 105.0);
                this.AddRes(index, typeof(Cloth), 1044286, 50, 1044287);
                this.SetNeededExpansion(index, Expansion.SA);

                index = this.AddCraft(typeof(ExodusSummoningAlter), 1044294, 1153502, 95.0, 120.0, typeof(Board), 1044041, 100, 1044351);////////
                this.AddSkill(index, SkillName.Magery, 75.0, 120.0);
                this.AddRes(index, typeof(Granite), 1044607, 10, 1044253);
                this.AddRes(index, typeof(SmallPieceofBlackrock), 1150016, 10, 1044253);
                this.AddRes(index, typeof(NexusCore), 1153501, 1, 1044253);

                index = AddCraft(typeof(Incubator), 1044294, 1112479, 90.0, 115.0, typeof(Board), 1044041, 100, 1044351);
                SetNeededExpansion(index, Expansion.SA);

                index = AddCraft(typeof(ChickenCoop), 1044294, 1112570, 90.0, 115.0, typeof(Board), 1044041, 150, 1044351);
                SetNeededExpansion(index, Expansion.SA);
            }
            #endregion

            #region TOL   
            index = AddCraft(typeof(CraftableHouseAddonDeed), 1044294, 1155850, 42.1, 77.7, typeof(Board), 1044041, 5, 1044351);///////
            SetData(index, CraftableAddonType.LightWoodenSignHanger);
            SetDisplayID(index, 2969);
            SetNeededExpansion(index, Expansion.TOL);

            index = AddCraft(typeof(CraftableHouseAddonDeed), 1044294, 1155849, 42.1, 77.7, typeof(Board), 1044041, 5, 1044351);////////
            SetData(index, CraftableAddonType.DarkWoodenSignHanger);
            SetDisplayID(index, 2967);
            SetNeededExpansion(index, Expansion.TOL);
            #endregion

            // Furniture
            this.AddCraft(typeof(FootStool), 1044291, 1022910, 11.0, 36.0, typeof(Board), 1044041, 9, 1044351);
            this.AddCraft(typeof(Stool), 1044291, 1022602, 11.0, 36.0, typeof(Board), 1044041, 9, 1044351);
            this.AddCraft(typeof(BambooChair), 1044291, 1044300, 21.0, 46.0, typeof(Board), 1044041, 13, 1044351);
            this.AddCraft(typeof(WoodenChair), 1044291, 1044301, 21.0, 46.0, typeof(Board), 1044041, 13, 1044351);
            this.AddCraft(typeof(FancyWoodenChairCushion), 1044291, 1044302, 42.1, 67.1, typeof(Board), 1044041, 15, 1044351);
            this.AddCraft(typeof(WoodenChairCushion), 1044291, 1044303, 42.1, 67.1, typeof(Board), 1044041, 13, 1044351);
            this.AddCraft(typeof(WoodenBench), 1044291, 1022860, 52.6, 77.6, typeof(Board), 1044041, 17, 1044351);
            this.AddCraft(typeof(WoodenThrone), 1044291, 1044304, 52.6, 77.6, typeof(Board), 1044041, 17, 1044351);
            this.AddCraft(typeof(Throne), 1044291, 1044305, 73.6, 98.6, typeof(Board), 1044041, 19, 1044351);
            this.AddCraft(typeof(Nightstand), 1044291, 1044306, 42.1, 67.1, typeof(Board), 1044041, 17, 1044351);
            this.AddCraft(typeof(WritingTable), 1044291, 1022890, 63.1, 88.1, typeof(Board), 1044041, 17, 1044351);
            this.AddCraft(typeof(YewWoodTable), 1044291, 1044307, 63.1, 88.1, typeof(Board), 1044041, 23, 1044351);
            this.AddCraft(typeof(LargeTable), 1044291, 1044308, 84.2, 109.2, typeof(Board), 1044041, 27, 1044351);

            if (Core.SE)
            {
                index = this.AddCraft(typeof(ElegantLowTable), 1044291, 1030265, 80.0, 105.0, typeof(Board), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(PlainLowTable), 1044291, 1030266, 80.0, 105.0, typeof(Board), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(OrnateElvenTableSouthDeed), 1044291, 1072869, 85.0, 110.0, typeof(Board), 1044041, 60, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(OrnateElvenTableEastDeed), 1044291, 1073384, 85.0, 110.0, typeof(Board), 1044041, 60, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(FancyElvenTableSouthDeed), 1044291, 1073385, 80.0, 105.0, typeof(Board), 1044041, 50, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(FancyElvenTableEastDeed), 1044291, 1073386, 80.0, 105.0, typeof(Board), 1044041, 50, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenPodium), 1044291, 1073399, 80.0, 105.0, typeof(Board), 1044041, 20, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(OrnateElvenChair), 1044291, 1072870, 80.0, 105.0, typeof(Board), 1044041, 30, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.OrnateElvenChair);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(BigElvenChair), 1044291, 1072872, 85.0, 110.0, typeof(Board), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenReadingChair), 1044291, 1072873, 80.0, 105.0, typeof(Board), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);
            }

            if (Core.SA)
            {
                index = this.AddCraft(typeof(GargishCouchEastDeed), 1044291, 1111776, 90.0, 115.0, typeof(Board), 1044041, 75, 1044351);           
                this.SetNeededExpansion(index, Expansion.SA);
 
                index = this.AddCraft(typeof(GargishCouchSouthDeed), 1044291, 1111775, 90.0, 115.0, typeof(Board), 1044041, 75, 1044351);
                this.SetNeededExpansion(index, Expansion.SA);
 
                index = this.AddCraft(typeof(TerMurDresserEastDeed), 1044291, 1111784, 90.0, 115.0, typeof(Board), 1044041, 60, 1044351);
                this.SetNeededExpansion(index, Expansion.SA);
 
                index = this.AddCraft(typeof(TerMurDresserSouthDeed), 1044291, 1111783, 90.0, 115.0, typeof(Board), 1044041, 60, 1044351);
                this.SetNeededExpansion(index, Expansion.SA);
            }            
            #endregion

            // Containers
            this.AddCraft(typeof(WoodenBox), 1044292, 1023709, 21.0, 46.0, typeof(Board), 1044041, 10, 1044351);
            this.AddCraft(typeof(SmallCrate), 1044292, 1044309, 10.0, 35.0, typeof(Board), 1044041, 8, 1044351);
            this.AddCraft(typeof(MediumCrate), 1044292, 1044310, 31.0, 56.0, typeof(Board), 1044041, 15, 1044351);
            this.AddCraft(typeof(LargeCrate), 1044292, 1044311, 47.3, 72.3, typeof(Board), 1044041, 18, 1044351);
            this.AddCraft(typeof(WoodenChest), 1044292, 1023650, 73.6, 98.6, typeof(Board), 1044041, 20, 1044351);
            this.AddCraft(typeof(EmptyBookcase), 1044292, 1022718, 31.5, 56.5, typeof(Board), 1044041, 25, 1044351);
            this.AddCraft(typeof(FancyArmoire), 1044292, 1044312, 84.2, 109.2, typeof(Board), 1044041, 35, 1044351);
            this.AddCraft(typeof(Armoire), 1044292, 1022643, 84.2, 109.2, typeof(Board), 1044041, 35, 1044351);

            if (Core.SE)
            {
                index = this.AddCraft(typeof(PlainWoodenChest), 1044292, 1030251, 90.0, 115.0, typeof(Board), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(OrnateWoodenChest), 1044292, 1030253, 90.0, 115.0, typeof(Board), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(GildedWoodenChest), 1044292, 1030255, 90.0, 115.0, typeof(Board), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(WoodenFootLocker), 1044292, 1030257, 90.0, 115.0, typeof(Board), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(FinishedWoodenChest), 1044292, 1030259, 90.0, 115.0, typeof(Board), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(TallCabinet), 1044292, 1030261, 90.0, 115.0, typeof(Board), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(ShortCabinet), 1044292, 1030263, 90.0, 115.0, typeof(Board), 1044041, 35, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(RedArmoire), 1044292, 1030328, 90.0, 115.0, typeof(Board), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(ElegantArmoire), 1044292, 1030330, 90.0, 115.0, typeof(Board), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(MapleArmoire), 1044292, 1030332, 90.0, 115.0, typeof(Board), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(CherryArmoire), 1044292, 1030334, 90.0, 115.0, typeof(Board), 1044041, 40, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            index = this.AddCraft(typeof(Keg), 1044292, 1023711, 57.8, 82.8, typeof(BarrelStaves), 1044288, 3, 1044253);
            this.AddRes(index, typeof(BarrelHoops), 1044289, 1, 1044253);
            this.AddRes(index, typeof(BarrelLid), 1044251, 1, 1044253);
            this.ForceNonExceptional(index);

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(ArcaneBookshelfSouthDeed), 1044292, 1072871, 94.7, 119.7, typeof(Board), 1044041, 80, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.ArcaneBookshelfSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcaneBookshelfEastDeed), 1044292, 1073371, 94.7, 119.7, typeof(Board), 1044041, 80, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.ArcaneBookshelfEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(OrnateElvenChestSouthDeed), 1044292, 1072862, 94.7, 119.7, typeof(Board), 1044041, 40, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.OrnateElvenChestSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(OrnateElvenChestEastDeed), 1044292, 1073383, 94.7, 119.7, typeof(Board), 1044041, 40, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.OrnateElvenChestEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenWashBasinSouthWithDrawerDeed), 1044292, 1072865, 70.0, 95.0, typeof(Board), 1044041, 40, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenWashBasinEastWithDrawerDeed), 1044292, 1073387, 70.0, 95.0, typeof(Board), 1044041, 40, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenDresserSouthDeed), 1044292, 1072864, 75.0, 100.0, typeof(Board), 1044041, 45, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.ElvenDresserSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenDresserEastDeed), 1044292, 1073388, 75.0, 100.0, typeof(Board), 1044041, 45, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.ElvenDresserEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(FancyElvenArmoire), 1044292, 1072866, 80.0, 105.0, typeof(Board), 1044041, 60, 1044351);
                this.AddRecipe(index, (int)CarpRecipes.FancyElvenArmoire);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(SimpleElvenArmoire), 1044292, 1073401, 80.0, 105.0, typeof(Board), 1044041, 60, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(RarewoodChest), 1044292, 1073402, 80.0, 105.0, typeof(Board), 1044041, 30, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DecorativeBox), 1044292, 1073403, 80.0, 105.0, typeof(Board), 1044041, 25, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            AddCraft(typeof(LiquorBarrel), 1044292, 1150816, 60.0, 90.0, typeof(Board), 1044041, 50, 1044351);

            // Weapons
            this.AddCraft(typeof(ShepherdsCrook), 1044566, 1023713, 78.9, 103.9, typeof(Board), 1044041, 7, 1044351);
            this.AddCraft(typeof(QuarterStaff), 1044566, 1023721, 73.6, 98.6, typeof(Board), 1044041, 6, 1044351);
            this.AddCraft(typeof(GnarledStaff), 1044566, 1025112, 78.9, 103.9, typeof(Board), 1044041, 7, 1044351);

            /*if (!Core.AOS)    //Duplicate Entries to preserve ordering depending on era
            {
                index = this.AddCraft(typeof(FishingPole), 1044566, 1023519, 68.4, 93.4, typeof(Board), 1044041, 5, 1044351); //This is in the categor of Other during AoS
                this.AddSkill(index, SkillName.Tailoring, 40.0, 45.0);
                this.AddRes(index, typeof(Cloth), 1044286, 5, 1044287);
            }*/

            if (Core.SE)
            {
                index = this.AddCraft(typeof(Bokuto), 1044566, 1030227, 70.0, 95.0, typeof(Board), 1044041, 6, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(Fukiya), 1044566, 1030229, 60.0, 85.0, typeof(Board), 1044041, 6, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);

                index = this.AddCraft(typeof(Tetsubo), 1044566, 1030225, 80.0, 140.3, typeof(Board), 1044041, 10, 1044351);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(WildStaff), 1044566, 1031557, 63.8, 113.8, typeof(Board), 1044041, 16, 1044351);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(PhantomStaff), 1044566, 1072919, 90.0, 130.0, typeof(Board), 1044041, 16, 1044351);
                this.AddRes(index, typeof(DiseasedBark), 1032683, 1, 1053098);
                this.AddRes(index, typeof(Putrefication), 1032678, 10, 1053098);
                this.AddRes(index, typeof(Taint), 1032679, 10, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.PhantomStaff);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcanistsWildStaff), 1044566, 1073549, 63.8, 113.8, typeof(Board), 1044041, 16, 1044351);
                this.AddRes(index, typeof(WhitePearl), 1026253, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.ArcanistsWildStaff);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(AncientWildStaff), 1044566, 1073550, 63.8, 113.8, typeof(Board), 1044041, 16, 1044351);
                this.AddRes(index, typeof(PerfectEmerald), 1026251, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.AncientWildStaff);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ThornedWildStaff), 1044566, 1073551, 63.8, 113.8, typeof(Board), 1044041, 16, 1044351);
                this.AddRes(index, typeof(FireRuby), 1026254, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.ThornedWildStaff);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(HardenedWildStaff), 1044566, 1073552, 63.8, 113.8, typeof(Board), 1044041, 16, 1044351);
                this.AddRes(index, typeof(Turquoise), 1026250, 1, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.HardenedWildStaff);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            #region SA
            if (Core.SA)
            {
                index = this.AddCraft(typeof(SerpentStoneStaff), 1044566, 1095367, 63.8, 113.8, typeof(Board), 1044041, 16, 1044351);
                this.AddRes(index, typeof(EcruCitrine), 1026252, 1, 1053098);
                this.SetNeededExpansion(index, Expansion.SA);

                index = this.AddCraft(typeof(GargishGnarledStaff), 1044566, 1097488, 78.9, 128.9, typeof(Board), 1044041, 16, 1044351);
                this.AddRes(index, typeof(EcruCitrine), 1026252, 1, 1053098);
                this.SetNeededExpansion(index, Expansion.SA);
            }
            #endregion

            this.AddCraft(typeof(Club), 1044566, 1025043, 65.0, 115.0, typeof(Board), 1044041, 9, 1044351);
            this.AddCraft(typeof(BlackStaff), 1044566, 1023568, 81.5, 141.8, typeof(Board), 1044041, 9, 1044351);

            index = AddCraft(typeof(KotlBlackRod), 1044566, 1156990, 100.0, 160.0, typeof(Board), 1044041, 20, 1044351);
            this.AddRes(index, typeof(BlackrockMoonstone), 1156993, 1, 1156992);
            this.AddRes(index, typeof(StaffOfTheMagi), 1061600, 1, 1044253);
            this.AddRecipe(index, (int)CarpRecipes.KotlBlackRod);
            this.SetNeededExpansion(index, Expansion.TOL);

            // Armor
            this.AddCraft(typeof(WoodenShield), 1062760, 1027034, 52.6, 77.6, typeof(Board), 1044041, 9, 1044351);

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(WoodlandChest), 1062760, 1031111, 90.0, 115.0, typeof(Board), 1044041, 20, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 6, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WoodlandArms), 1062760, 1031116, 80.0, 105.0, typeof(Board), 1044041, 15, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WoodlandGloves), 1062760, 1031114, 85.0, 110.0, typeof(Board), 1044041, 15, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WoodlandLegs), 1062760, 1031115, 85.0, 110.0, typeof(Board), 1044041, 15, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WoodlandGorget), 1062760, 1031113, 85.0, 110.0, typeof(Board), 1044041, 15, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(RavenHelm), 1062760, 1031121, 65.0, 115.0, typeof(Board), 1044041, 10, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.AddRes(index, typeof(Feather), 1027123, 25, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(VultureHelm), 1062760, 1031122, 63.9, 113.9, typeof(Board), 1044041, 10, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.AddRes(index, typeof(Feather), 1027123, 25, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(WingedHelm), 1062760, 1031123, 58.4, 108.4, typeof(Board), 1044041, 10, 1044351);
                this.AddRes(index, typeof(BarkFragment), 1032687, 4, 1053098);
                this.AddRes(index, typeof(Feather), 1027123, 60, 1053098);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(IronwoodCrown), 1062760, 1072924, 85.0, 120.0, typeof(Board), 1044041, 10, 1044351);
                this.AddRes(index, typeof(DiseasedBark), 1032683, 1, 1053098);
                this.AddRes(index, typeof(Corruption), 1032676, 10, 1053098);
                this.AddRes(index, typeof(Putrefication), 1032678, 10, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.IronwoodCrown);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(BrambleCoat), 1062760, 1072925, 85.0, 120.0, typeof(Board), 1044041, 10, 1044351);
                this.AddRes(index, typeof(DiseasedBark), 1032683, 1, 1053098);
                this.AddRes(index, typeof(Taint), 1032679, 10, 1053098);
                this.AddRes(index, typeof(Scourge), 1032677, 10, 1053098);
                this.AddRecipe(index, (int)CarpRecipes.BrambleCoat);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodCrown), 1062760, 1073481, 85.0, 120.0, typeof(Board), 1044041, 10, 1044351);
                this.AddRes(index, typeof(LardOfParoxysmus), 1032681, 1, 1053098);
                this.AddRes(index, typeof(Blight), 1032675, 10, 1053098);
                this.AddRes(index, typeof(Taint), 1032679, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodChest), 1062760, 1073482, 85.0, 120.0, typeof(Board), 1044041, 20, 1044351);
                this.AddRes(index, typeof(DreadHornMane), 1032682, 1, 1053098);
                this.AddRes(index, typeof(Corruption), 1032676, 10, 1053098);
                this.AddRes(index, typeof(Muculent), 1032680, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodGorget), 1062760, 1073483, 85.0, 120.0, typeof(Board), 1044041, 15, 1044351);
                this.AddRes(index, typeof(DiseasedBark), 1032683, 1, 1053098);
                this.AddRes(index, typeof(Blight), 1032675, 10, 1053098);
                this.AddRes(index, typeof(Scourge), 1032677, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodLegs), 1062760, 1073484, 85.0, 120.0, typeof(Board), 1044041, 15, 1044351);
                this.AddRes(index, typeof(GrizzledBones), 1032684, 1, 1053098);
                this.AddRes(index, typeof(Corruption), 1032676, 10, 1053098);
                this.AddRes(index, typeof(Putrefication), 1072137, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodPauldrons), 1062760, 1073485, 85.0, 120.0, typeof(Board), 1044041, 15, 1044351);
                this.AddRes(index, typeof(EyeOfTheTravesty), 1032685, 1, 1053098);
                this.AddRes(index, typeof(Scourge), 1032677, 10, 1053098);
                this.AddRes(index, typeof(Taint), 1032679, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(DarkwoodGloves), 1062760, 1073486, 85.0, 120.0, typeof(Board), 1044041, 15, 1044351);
                this.AddRes(index, typeof(CapturedEssence), 1032686, 1, 1053098);
                this.AddRes(index, typeof(Putrefication), 1032678, 10, 1053098);
                this.AddRes(index, typeof(Muculent), 1032680, 10, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            #region SA
            index = AddCraft(typeof(GargishWoodenShield), 1062760, 1095768, 52.6, 77.6, typeof(Board), 1044041, 9, 1044351);
            SetNeededExpansion(index, Expansion.SA);
            #endregion

            // Instruments
            index = this.AddCraft(typeof(LapHarp), 1044293, 1023762, 63.1, 88.1, typeof(Board), 1044041, 20, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(Harp), 1044293, 1023761, 78.9, 103.9, typeof(Board), 1044041, 35, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 15, 1044287);

            index = this.AddCraft(typeof(Drums), 1044293, 1023740, 57.8, 82.8, typeof(Board), 1044041, 20, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(Lute), 1044293, 1023763, 68.4, 93.4, typeof(Board), 1044041, 25, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(Tambourine), 1044293, 1023741, 57.8, 82.8, typeof(Board), 1044041, 15, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(TambourineTassel), 1044293, 1044320, 57.8, 82.8, typeof(Board), 1044041, 15, 1044351);
            this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
            this.AddRes(index, typeof(Cloth), 1044286, 15, 1044287);

            if (Core.SE)
            {
                index = this.AddCraft(typeof(BambooFlute), 1044293, 1030247, 80.0, 105.0, typeof(Board), 1044041, 15, 1044351);
                this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
                this.SetNeededExpansion(index, Expansion.SE);
            }

            if (Core.SA)
            {
                index = this.AddCraft(typeof(SnakeCharmerFlute), 1044293, 1112174, 80.0, 105.0, typeof(Board), 1044041, 15, 1044351);
                this.AddSkill(index, SkillName.Musicianship, 45.0, 50.0);
                this.AddRes(index, typeof(LuminescentFungi), 1073475, 3, 1044253);
                this.SetNeededExpansion(index, Expansion.SA);
            }

            // Misc
            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(ParrotPerchAddonDeed), 1044290, 1072617, 50.0, 85.0, typeof(Board), 1044041, 100, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ArcaneCircleDeed), 1044290, 1072703, 94.7, 119.7, typeof(Board), 1044041, 100, 1044351);
                this.AddRes(index, typeof(BlueDiamond), 1026255, 2, 1053098);
                this.AddRes(index, typeof(PerfectEmerald), 1026251, 2, 1053098);
                this.AddRes(index, typeof(FireRuby), 1026254, 2, 1053098);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(TallElvenBedSouthDeed), 1044290, 1072858, 94.7, 119.7, typeof(Board), 1044041, 200, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
                this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
                this.AddRecipe(index, (int)CarpRecipes.TallElvenBedSouth);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(TallElvenBedEastDeed), 1044290, 1072859, 94.7, 119.7, typeof(Board), 1044041, 200, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
                this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
                this.AddRecipe(index, (int)CarpRecipes.TallElvenBedEast);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenBedSouthDeed), 1044290, 1072860, 94.7, 119.7, typeof(Board), 1044041, 100, 1044351);
                this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenBedEastDeed), 1044290, 1072861, 94.7, 119.7, typeof(Board), 1044041, 100, 1044351);
                this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenLoveseatSouthDeed), 1044290, 1072867, 80.0, 105.0, typeof(Board), 1044041, 50, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenLoveseatEastDeed), 1044290, 1073372, 80.0, 105.0, typeof(Board), 1044041, 50, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(AlchemistTableSouthDeed), 1044290, 1074902, 85.0, 110.0, typeof(Board), 1044041, 70, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(AlchemistTableEastDeed), 1044290, 1074903, 85.0, 110.0, typeof(Board), 1044041, 70, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            index = this.AddCraft(typeof(SmallBedSouthDeed), 1044290, 1044321, 94.7, 119.8, typeof(Board), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
            this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
            index = this.AddCraft(typeof(SmallBedEastDeed), 1044290, 1044322, 94.7, 119.8, typeof(Board), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
            this.AddRes(index, typeof(Cloth), 1044286, 100, 1044287);
            index = this.AddCraft(typeof(LargeBedSouthDeed), 1044290, 1044323, 94.7, 119.8, typeof(Board), 1044041, 150, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
            this.AddRes(index, typeof(Cloth), 1044286, 150, 1044287);
            index = this.AddCraft(typeof(LargeBedEastDeed), 1044290, 1044324, 94.7, 119.8, typeof(Board), 1044041, 150, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 75.0, 80.0);
            this.AddRes(index, typeof(Cloth), 1044286, 150, 1044287);
            this.AddCraft(typeof(DartBoardSouthDeed), 1044290, 1044325, 15.7, 40.7, typeof(Board), 1044041, 5, 1044351);
            this.AddCraft(typeof(DartBoardEastDeed), 1044290, 1044326, 15.7, 40.7, typeof(Board), 1044041, 5, 1044351);
            this.AddCraft(typeof(BallotBoxDeed), 1044290, 1044327, 47.3, 72.3, typeof(Board), 1044041, 5, 1044351);
            index = this.AddCraft(typeof(PentagramDeed), 1044290, 1044328, 100.0, 125.0, typeof(Board), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Magery, 75.0, 80.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 40, 1044037);
            index = this.AddCraft(typeof(AbbatoirDeed), 1044290, 1044329, 100.0, 125.0, typeof(Board), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Magery, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 40, 1044037);

            if (Core.AOS)
            {
                this.AddCraft(typeof(PlayerBBEast), 1044290, 1062420, 85.0, 110.0, typeof(Board), 1044041, 50, 1044351);
                this.AddCraft(typeof(PlayerBBSouth), 1044290, 1062421, 85.0, 110.0, typeof(Board), 1044041, 50, 1044351);
            }

            // Tailoring and Cooking
            index = this.AddCraft(typeof(Dressform), 1044298, 1044339, 63.1, 88.1, typeof(Board), 1044041, 25, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 10, 1044287);

            index = this.AddCraft(typeof(SpinningwheelEastDeed), 1044298, 1044341, 73.6, 98.6, typeof(Board), 1044041, 75, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 25, 1044287);

            index = this.AddCraft(typeof(SpinningwheelSouthDeed), 1044298, 1044342, 73.6, 98.6, typeof(Board), 1044041, 75, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 25, 1044287);

            index = this.AddCraft(typeof(LoomEastDeed), 1044298, 1044343, 84.2, 109.2, typeof(Board), 1044041, 85, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 25, 1044287);

            index = this.AddCraft(typeof(LoomSouthDeed), 1044298, 1044344, 84.2, 109.2, typeof(Board), 1044041, 85, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 65.0, 70.0);
            this.AddRes(index, typeof(Cloth), 1044286, 25, 1044287);

            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(ElvenSpinningwheelEastDeed), 1044298, 1073393, 75.0, 100.0, typeof(Board), 1044041, 60, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 65.0, 85.0);
                this.AddRes(index, typeof(Cloth), 1044286, 40, 1044287);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenSpinningwheelSouthDeed), 1044298, 1072878, 75.0, 100.0, typeof(Board), 1044041, 60, 1044351);
                this.AddSkill(index, SkillName.Tailoring, 65.0, 85.0);
                this.AddRes(index, typeof(Cloth), 1044286, 40, 1044287);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenStoveSouthDeed), 1044298, 1073394, 85.0, 110.0, typeof(Board), 1044041, 80, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);

                index = this.AddCraft(typeof(ElvenStoveEastDeed), 1044298, 1073395, 85.0, 110.0, typeof(Board), 1044041, 80, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            index = this.AddCraft(typeof(StoneOvenEastDeed), 1044298, 1044345, 68.4, 93.4, typeof(Board), 1044041, 85, 1044351);
            this.AddSkill(index, SkillName.Tinkering, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 125, 1044037);
            index = this.AddCraft(typeof(StoneOvenSouthDeed), 1044298, 1044346, 68.4, 93.4, typeof(Board), 1044041, 85, 1044351);
            this.AddSkill(index, SkillName.Tinkering, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 125, 1044037);
            index = this.AddCraft(typeof(FlourMillEastDeed), 1044298, 1044347, 94.7, 119.7, typeof(Board), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Tinkering, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 50, 1044037);
            index = this.AddCraft(typeof(FlourMillSouthDeed), 1044298, 1044348, 94.7, 119.7, typeof(Board), 1044041, 100, 1044351);
            this.AddSkill(index, SkillName.Tinkering, 50.0, 55.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 50, 1044037);
            this.AddCraft(typeof(WaterTroughEastDeed), 1044298, 1044349, 94.7, 119.7, typeof(Board), 1044041, 150, 1044351);
            this.AddCraft(typeof(WaterTroughSouthDeed), 1044298, 1044350, 94.7, 119.7, typeof(Board), 1044041, 150, 1044351);

            // Anvils and Forges
            #region Mondain's Legacy
            if (Core.ML)
            {
                index = this.AddCraft(typeof(ElvenForgeDeed), 1111809, 1072875, 94.7, 119.7, typeof(Board), 1044041, 200, 1044351);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.ML);
            }
            #endregion

            #region SA
            if (Core.SA)
            {
                index = this.AddCraft(typeof(SoulForgeDeed), 1111809, 1031696, 100.0, 200.0, typeof(Board), 1044041, 150, 1044351);
                this.AddSkill(index, SkillName.Imbuing, 75.0, 80.0);
                this.AddRes(index, typeof(IronIngot), 1044036, 150, 1044037);
                this.AddRes(index, typeof(RelicFragment), 1031699, 1, 1044253);
                this.ForceNonExceptional(index);
                this.SetNeededExpansion(index, Expansion.SA);
            }
            #endregion

            index = this.AddCraft(typeof(SmallForgeDeed), 1111809, 1044330, 73.6, 98.6, typeof(Board), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 75.0, 80.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 75, 1044037);

            index = this.AddCraft(typeof(LargeForgeEastDeed), 1111809, 1044331, 78.9, 103.9, typeof(Board), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 80.0, 85.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 100, 1044037);

            index = this.AddCraft(typeof(LargeForgeSouthDeed), 1111809, 1044332, 78.9, 103.9, typeof(Board), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 80.0, 85.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 100, 1044037);

            index = this.AddCraft(typeof(AnvilEastDeed), 1111809, 1044333, 73.6, 98.6, typeof(Board), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 75.0, 80.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 150, 1044037);

            index = this.AddCraft(typeof(AnvilSouthDeed), 1111809, 1044334, 73.6, 98.6, typeof(Board), 1044041, 5, 1044351);
            this.AddSkill(index, SkillName.Blacksmith, 75.0, 80.0);
            this.AddRes(index, typeof(IronIngot), 1044036, 150, 1044037);

            // Training
            index = this.AddCraft(typeof(TrainingDummyEastDeed), 1044297, 1044335, 68.4, 93.4, typeof(Board), 1044041, 55, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
            this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);

            index = this.AddCraft(typeof(TrainingDummySouthDeed), 1044297, 1044336, 68.4, 93.4, typeof(Board), 1044041, 55, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
            this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);

            index = this.AddCraft(typeof(PickpocketDipEastDeed), 1044297, 1044337, 73.6, 98.6, typeof(Board), 1044041, 65, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
            this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);

            index = this.AddCraft(typeof(PickpocketDipSouthDeed), 1044297, 1044338, 73.6, 98.6, typeof(Board), 1044041, 65, 1044351);
            this.AddSkill(index, SkillName.Tailoring, 50.0, 55.0);
            this.AddRes(index, typeof(Cloth), 1044286, 60, 1044287);

            this.MarkOption = true;
            this.Repair = Core.AOS;
            this.CanEnhance = Core.ML;
            
            this.SetSubRes(typeof(Board), "Boards");
          //this.SetSubRes(typeof(Log), "Logs");            
            ////daat99 OWLTR start - custom Wood
          //daat99.ResourceHelper.AddWoodResources(this);
            ////daat99 OWLTR end - custom Wood 

            // Add every material you want the player to be able to choose from
            // This will override the overridable material    TODO: Verify the required skill amount
            /*AddSubRes(typeof(Log), "Log", 00.0, 0);
            AddSubRes(typeof(AshLog), "Ash", 20.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(YewLog), "Yew", 30.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(OakLog), "Oak", 40.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(EbonyLog), "Ebony", 50.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(BambooLog), "Bamboo", 60.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(HeartwoodLog), "Heartwood", 70.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(BloodwoodLog), "Bloodwood", 80.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(FrostwoodLog), "Frostwood", 90.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(PurpleHeartLog), "PurpleHeart", 100.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(RedwoodLog), "Redwood", 110.0, "You have no idea how to work this type of log.");
            AddSubRes(typeof(PetrifiedLog), "Petrified", 115.0, "You have no idea how to work this type of log.");
            */
             
            AddSubRes(typeof(Board), "Boards", 00.0, "You have no idea how to work this type of lumber.");
            AddSubRes(typeof(AshBoard), "Ash Boards", 80.0, "You have no idea how to work this type of lumber.");
            AddSubRes(typeof(YewBoard), "Yew Boards", 95.0, "You have no idea how to work this type of lumber.");       
            AddSubRes(typeof(OakBoard), "Oak Boards", 65.0, "You have no idea how to work this type of lumber.");
            AddSubRes(typeof(EbonyBoard), "Ebony Boards", 50.0, "You have no idea how to work this type of lumber.");       
            AddSubRes(typeof(BambooBoard), "Bamboo Boards", 60.0, "You have no idea how to work this type of lumber.");
            AddSubRes(typeof(HeartwoodBoard), "Heartwood Boards", 100.0, "You have no idea how to work this type of lumber.");
            AddSubRes(typeof(BloodwoodBoard), "BloodwoodBoards", 100.0,"You have no idea how to work this type of lumber.");
            AddSubRes(typeof(FrostwoodBoard), "Frostwood Boards", 100.0, "You have no idea how to work this type of lumber.");
            AddSubRes(typeof(PurpleHeartBoard), "Purple Heart Boards", 100.0, "You have no idea how to work this type of log.");       
            AddSubRes(typeof(RedwoodBoard), "Redwood Boards", 110.0, "You have no idea how to work this type of lumber.");
            AddSubRes(typeof(PetrifiedBoard), "Petrified Boards", 115.0, "You have no idea how to work this type of lumber.");       
        }
    }
}
 

Attachments

  • Admin Zeron_3-7_19.20.jpg
    Admin Zeron_3-7_19.20.jpg
    291 KB · Views: 10
Last edited:
So, i'm back to where I started from... lol. Those first 7 types of boards are gonna be contrary and can only be used if "manually" withdrawn from the Storage Key. I can live with it o_O
 
Last edited:
Tomorrow when I have time after work I'll fool around with my system and see what could be the issue. See if I'll get the same error with my keys.
 
So, i'm back to where I started from... lol. Those first 7 types of boards are gonna be contrary and can only be used if "manually" withdrawn from the Storage Key. I can live with it o_O

Just curious, are you using a specific custom resource that can be downloaded here or is yours very different from any of the releases here? Is it possible the author is aware of this bug (or feature) and has maybe dealt with it?
 
Have you looked at CraftItem.cs yet? That's where storage edits have been made in the past. I've decided against storage on the shard I'm working on so I can't provide examples but the Archon archive I have does have storage key edits in it.
 
Using Land of Archon repo

Just downloaded that now. Looks like there are 2 sets of Storage Keys systems in that repack, each with it's own Wood storage file. One is the WoodworkerStorage, which is part of daat99's MasterStorage system, the other is WoodKey, which is part of Universal Storage Keys Version 2.0.6. I am guessing that it's accessing one or the other in different circumstances, which is causing the confusion. Perhaps the gump is drawing from the Universal Storage Keys, and the crafting is trying to draw from MasterStorage. Either way, somewhere it is getting confused.
 
Just downloaded that now. Looks like there are 2 sets of Storage Keys systems in that repack, each with it's own Wood storage file. One is the WoodworkerStorage, which is part of daat99's MasterStorage system, the other is WoodKey, which is part of Universal Storage Keys Version 2.0.6. I am guessing that it's accessing one or the other in different circumstances, which is causing the confusion. Perhaps the gump is drawing from the Universal Storage Keys, and the crafting is trying to draw from MasterStorage. Either way, somewhere it is getting confused.
Post automatically merged:

When I type [add WoodworkerStorage it gives me a WoodworkerStorageDeed. Mousing over it shows this: Master Storage Deed: Woodworker Storage
When dblclicked it just disappears and says: You can store Woodworker Storage items now and doesn't add anything to your pack.
 
Last edited:
Does anyone already have DefCarpentry.cs that withdraws all board types from WoodKey.cs fixed. Then they can just share these 2 scripts so we no longer have to try and troubleshoot this... please?
 
alright so it's not DefCarpentry at all its craftitem.cs, you forgot to modify the core for it to be able to pull it. I have gone through a lot of testing and got everything pulling from the resource keys. Also made it where any logs I throw into my wood key will automatically convert into boards as well using this method instead
C#:
entry.Add( new ResourceEntry( typeof( Board ), new Type[]{ typeof( Log ) }, "Plain" ) );
 

Attachments

  • CraftItem.cs.txt
    6.1 KB · Views: 8
  • Frostwood Before.png
    Frostwood Before.png
    374.9 KB · Views: 12
  • Frostwood After.png
    Frostwood After.png
    380.9 KB · Views: 12
Have you looked at CraftItem.cs yet? That's where storage edits have been made in the past. I've decided against storage on the shard I'm working on so I can't provide examples but the Archon archive I have does have storage key edits in it.

It's almost like somebody mentioned it this morning...
 
It's almost like somebody mentioned it this morning...
He most likely didn't know where to edit it in as he downloaded preinstalled. not knowing about the simple script changes he needed to do. This is the exact reason why I won't use prebuilt custom servers as most people don't indicate where they edited in the script. You are kinda just winging it.
 
Right, I saw that you mentioned it Falkor and yes I looked at CraftItem.cs but had no idea where to make changes or even how. Thank you.
 

Active Shards

Donations

Total amount
$0.00
Goal
$1,000.00
Back