RunUO Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Merging OWLTR 3.0.1 with RunUO 2.3 - ML related errors

sloba

Sorceror
Since installing this on 2.3 I am now getting a lot of errors on the ML creatures, the canfly and givesMLMinorartifact have all caused errors for any creature that does so... what file is the correct one to look into this issue? its currently referring to all monsters not to a file that controls the canfly firebreath or givesMLminor artifact... anything that fly's outside of ML also having the canfly error issues.. any help to pinpoint the correct file would be great.

thanks all
 

sloba

Sorceror
I replaced the packaged basecreature with my original and that seems to have fixed it all bar now an error with the mule line 80 no suitable method to override OnBeforeTame()
From the script:

public override void OnBeforeTame()
{
if (BeforeTame == true)
{
PackItem( new SpinedLeather(100) );
PackItem( new HornedLeather(90) );
PackItem( new BarbedLeather(80) );
PackItem( new PolarLeather(70) );
PackItem( new SyntheticLeather(60) );
PackItem( new BlazeLeather(50) );
PackItem( new DaemonicLeather(40) );
PackItem( new ShadowLeather(30) );
PackItem( new FrostLeather(20) );
PackItem( new EtherealLeather(10) );
MinTameSkill = 30.0;
BeforeTame = false;
}
}
 

Hammerhand

Knight
You need to merge the OWLTR BaseCreature.cs with the one from RunUO. Replacing it does nothing but cause errors. I know for a fact that OWLTR can be merged with a stock 2.3 AND with the 2.3 /Neruns Distro. I've even gone so far as to merge FSATS into the 2.3/OWLTR/NerunsDistro server & that works fine. What you more than likely did with your merge was accidently overwrite some of the needed coding for the CanFly & GivesMLMinorArtifact.
 

Sadistik

Sorceror
Aight so i think i did a good job merging except one file give me errors. Hides.cs, i prolly did something wrong there .




Edit : Fixed that part 10 errors poped lol... still at it.
 

Sadistik

Sorceror
First bug i notice , my crafting gump only have Iron available for me to craft , prolly did something wrong o.o
 

Sadistik

Sorceror
Here it is :
Code:
using System;
using System.Collections;
using System.Collections.Generic;
using Server.Gumps;
using Server.Network;
using Server.Items;
using daat99;
 
namespace Server.Engines.Craft
{
    public class CraftGump : Gump
    {
        private Mobile m_From;
        private CraftSystem m_CraftSystem;
        private BaseTool m_Tool;
 
        private CraftPage m_Page;
 
        private const int LabelHue = 0x480;
        private const int LabelColor = 0x7FFF;
        private const int FontColor = 0xFFFFFF;
 
        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 )
        {
            m_From = from;
            m_CraftSystem = craftSystem;
            m_Tool = tool;
            m_Page = page;
 
            CraftContext context = craftSystem.GetContext( from );
 
            from.CloseGump( typeof( CraftGump ) );
            from.CloseGump( typeof( CraftGumpItem ) );
 
            AddPage( 0 );
 
            AddBackground( 0, 0, 530, 437, 5054 );
            AddImageTiled( 10, 10, 510, 22, 2624 );
            AddImageTiled( 10, 292, 150, 45, 2624 );
            AddImageTiled( 165, 292, 355, 45, 2624 );
            AddImageTiled( 10, 342, 510, 85, 2624 );
            AddImageTiled( 10, 37, 200, 250, 2624 );
            AddImageTiled( 215, 37, 305, 250, 2624 );
            AddAlphaRegion( 10, 10, 510, 417 );
 
            if ( craftSystem.GumpTitleNumber > 0 )
                AddHtmlLocalized( 10, 12, 510, 20, craftSystem.GumpTitleNumber, LabelColor, false, false );
            else
                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>
 
            AddButton( 15, 402, 4017, 4019, 0, GumpButtonType.Reply, 0 );
            AddHtmlLocalized( 50, 405, 150, 18, 1011441, LabelColor, false, false ); // EXIT
 
            AddButton( 270, 402, 4005, 4007, GetButtonID( 6, 2 ), GumpButtonType.Reply, 0 );
            AddHtmlLocalized( 305, 405, 150, 18, 1044013, LabelColor, false, false ); // MAKE LAST
 
            // Mark option
            if ( 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
            }
            // ****************************************
 
            // Resmelt option
            if ( craftSystem.Resmelt )
            {
                AddButton( 15, 342, 4005, 4007, GetButtonID( 6, 1 ), GumpButtonType.Reply, 0 );
                AddHtmlLocalized( 50, 345, 150, 18, 1044259, LabelColor, false, false ); // SMELT ITEM
            }
            // ****************************************
 
            // Repair option
            if ( craftSystem.Repair )
            {
                AddButton( 270, 342, 4005, 4007, GetButtonID( 6, 5 ), GumpButtonType.Reply, 0 );
                AddHtmlLocalized( 305, 345, 150, 18, 1044260, LabelColor, false, false ); // REPAIR ITEM
            }
            // ****************************************
 
            // Enhance option
            if ( craftSystem.CanEnhance )
            {
                AddButton( 270, 382, 4005, 4007, GetButtonID( 6, 8 ), GumpButtonType.Reply, 0 );
                AddHtmlLocalized( 305, 385, 150, 18, 1061001, LabelColor, false, false ); // ENHANCE ITEM
            }
            // ****************************************
 
            if ( notice is int && (int)notice > 0 )
                AddHtmlLocalized( 170, 295, 350, 40, (int)notice, LabelColor, false, false );
            else if ( notice is string )
                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;
                }
 
                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
                }
 
                AddButton( 15, 362, 4005, 4007, GetButtonID( 6, 0 ), GumpButtonType.Reply, 0 );
 
                if ( nameNumber > 0 )
                    AddHtmlLocalized( 50, 365, 250, 18, nameNumber, resourceCount.ToString(), LabelColor, false, false );
                else
                    AddLabel( 50, 362, LabelHue, 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
                }
 
                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 ) );
            }
            // ****************************************
 
            CreateGroupList();
 
            if ( page == CraftPage.PickResource )
                CreateResList( false, from );
            else if ( page == CraftPage.PickResource2 )
                CreateResList( true, from );
            else if ( context != null && context.LastGroupIndex > -1 )
                CreateItemList( context.LastGroupIndex );
        }
 
        public void CreateResList( bool opt, Mobile from )
        {
            CraftSubResCol res = ( opt ? m_CraftSystem.CraftSubRes2 : 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_Lenght = 0;
                for ( int i = 0; i < res.Count; ++i )
                {
                    int index = i_Lenght % 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_Lenght++;
                    }
                }   
            }
            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 )
                        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 );
                }
 
                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;
                    //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
                }
 
                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, resourceCount.ToString(), LabelColor, false, false );
                else
                    AddLabel( 255, 60 + ( index * 20 ), LabelHue, String.Format( "{0} ({1})", subResource.NameString, resourceCount ) );
            }
        }
 
        public void CreateMakeLastList()
        {
            CraftContext context = m_CraftSystem.GetContext( 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 )
                        {
                            AddButton( 370, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1 );
                            AddHtmlLocalized( 405, 263, 100, 18, 1044045, LabelColor, false, false ); // NEXT PAGE
                        }
 
                        AddPage( (i / 10) + 1 );
 
                        if ( i > 0 )
                        {
                            AddButton( 220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10 );
                            AddHtmlLocalized( 255, 263, 100, 18, 1044044, LabelColor, false, false ); // PREV PAGE
                        }
                    }
 
                    AddButton( 220, 60 + (index * 20), 4005, 4007, GetButtonID( 3, 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( 4, i ), GumpButtonType.Reply, 0 );
                }
            }
            else
            {
                // NOTE: This is not as OSI; it is an intentional difference
 
                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
            {
                CreateMakeLastList();
                return;
            }
 
            CraftGroupCol craftGroupCol = 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_Lenght = 0;
               
                for ( i = 0; i < craftItemCol.Count; ++i )
                {
                    int index = i_Lenght % 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_Lenght > 0 )
                            {
                                AddButton( 370, 260, 4005, 4007, 0, GumpButtonType.Page, (i_Lenght / 10) + 1 );
                                AddHtmlLocalized( 405, 263, 100, 18, 1044045, LabelColor, false, false ); // NEXT PAGE
                            }
 
                            AddPage( (i_Lenght / 10) + 1 );
 
                            if ( i_Lenght > 0 )
                            {
                                AddButton( 220, 260, 4014, 4015, 0, GumpButtonType.Page, i_Lenght / 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_Lenght++;
                    }
                }
            }
            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 )
                    {
                        AddButton( 370, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1 );
                        AddHtmlLocalized( 405, 263, 100, 18, 1044045, LabelColor, false, false ); // NEXT PAGE
                    }
 
                    AddPage( (i / 10) + 1 );
 
                    if ( i > 0 )
                    {
                        AddButton( 220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10 );
                        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
                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 );
            }
        }
 
        public int CreateGroupList()
        {
            CraftGroupCol craftGroupCol = m_CraftSystem.CraftGroups;
 
            AddButton( 15, 60, 4005, 4007, GetButtonID( 6, 3 ), GumpButtonType.Reply, 0 );
            AddHtmlLocalized( 50, 63, 150, 18, 1044014, LabelColor, false, false ); // LAST TEN
 
            for ( int i = 0; i < craftGroupCol.Count; i++ )
            {
                CraftGroup craftGroup = craftGroupCol.GetAt( i );
 
                AddButton( 15, 80 + (i * 20), 4005, 4007, GetButtonID( 0, i ), GumpButtonType.Reply, 0 );
 
                if ( craftGroup.NameNumber > 0 )
                    AddHtmlLocalized( 50, 83 + (i * 20), 150, 18, craftGroup.NameNumber, LabelColor, false, false );
                else
                    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 = m_CraftSystem.CanCraft( m_From, m_Tool, item.ItemType );
 
            if ( num > 0 )
            {
                m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, num ) );
            }
            else
            {
                Type type = null;
 
                CraftContext context = m_CraftSystem.GetContext( m_From );
 
                if ( context != null )
                {
                    CraftSubResCol res = ( item.UseSubRes2 ? m_CraftSystem.CraftSubRes2 : m_CraftSystem.CraftSubRes );
                    int resIndex = ( item.UseSubRes2 ? context.LastResourceIndex2 : context.LastResourceIndex );
 
                    if ( resIndex >= 0 && resIndex < res.Count )
                        type = res.GetAt( resIndex ).ItemType;
                }
 
                m_CraftSystem.CreateItem( m_From, item.ItemType, type, 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 = m_CraftSystem;
            CraftGroupCol groups = system.CraftGroups;
            CraftContext context = system.GetContext( m_From );
 
            switch ( type )
            {
                case 0: // Show group
                {
                    if ( context == null )
                        break;
 
                    if ( index >= 0 && index < groups.Count )
                    {
                        context.LastGroupIndex = index;
                        m_From.SendGump( new CraftGump( m_From, system, 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 )
                            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 )
                            m_From.SendGump( new CraftGumpItem( m_From, system, group.CraftItems.GetAt( index ), m_Tool ) );
                    }
 
                    break;
                }
                case 3: // Create item (last 10)
                {
                    if ( context == null )
                        break;
 
                    List<CraftItem> lastTen = context.Items;
 
                    if ( index >= 0 && index < lastTen.Count )
                        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 )
                        m_From.SendGump( new CraftGumpItem( m_From, system, lastTen[index], m_Tool ) );
 
                    break;
                }
                case 5: // Resource selected
                {
                    if ( m_Page == CraftPage.PickResource && index >= 0 && index < system.CraftSubRes.Count )
                    {
                        int groupIndex = ( context == null ? -1 : context.LastGroupIndex );
 
                        CraftSubRes res = system.CraftSubRes.GetAt( index );
 
                        if ( m_From.Skills[system.MainSkill].Base < res.RequiredSkill )
                        {
                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, res.Message ) );
                        }
                        else
                        {
                            if ( context != null )
                                context.LastResourceIndex = index;
 
                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) );
                        }
                    }
                    else if ( m_Page == CraftPage.PickResource2 && index >= 0 && index < system.CraftSubRes2.Count )
                    {
                        int groupIndex = ( context == null ? -1 : context.LastGroupIndex );
 
                        CraftSubRes res = system.CraftSubRes2.GetAt( index );
 
                        if ( m_From.Skills[system.MainSkill].Base < res.RequiredSkill )
                        {
                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, res.Message ) );
                        }
                        else
                        {
                            if ( context != null )
                                context.LastResourceIndex2 = index;
 
                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) );
                        }
                    }
 
                    break;
                }
                case 6: // Misc. buttons
                {
                    switch ( index )
                    {
                        case 0: // Resource selection
                        {
                            if ( system.CraftSubRes.Init )
                                m_From.SendGump( new CraftGump( m_From, system, m_Tool, null, CraftPage.PickResource ) );
 
                            break;
                        }
                        case 1: // Smelt item
                        {
                            if ( system.Resmelt )
                                Resmelt.Do( m_From, system, m_Tool );
 
                            break;
                        }
                        case 2: // Make last
                        {
                            if ( context == null )
                                break;
 
                            CraftItem item = context.LastMade;
 
                            if ( item != null )
                                CraftItem( item );
                            else
                                m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, 1044165, m_Page ) ); // You haven't made anything yet.
 
                            break;
                        }
                        case 3: // Last 10
                        {
                            if ( context == null )
                                break;
 
                            context.LastGroupIndex = 501;
                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) );
 
                            break;
                        }
                        case 4: // Toggle use resource hue
                        {
                            if ( context == null )
                                break;
 
                            context.DoNotColor = !context.DoNotColor;
 
                            m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, null, m_Page ) );
 
                            break;
                        }
                        case 5: // Repair item
                        {
                            if ( system.Repair )
                                Repair.Do( m_From, system, 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;
                            }
 
                            m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, null, m_Page ) );
 
                            break;
                        }
                        case 7: // Resource selection 2
                        {
                            if ( system.CraftSubRes2.Init )
                                m_From.SendGump( new CraftGump( m_From, system, m_Tool, null, CraftPage.PickResource2 ) );
 
                            break;
                        }
                        case 8: // Enhance item
                        {
                            if ( system.CanEnhance )
                                Enhance.BeginTarget( m_From, system, m_Tool );
 
                            break;
                        }
                    }
 
                    break;
                }
            }
        }
    }
}
 

Sadistik

Sorceror
Code:
using System;
using Server.Items;
 
namespace Server.Engines.Craft
{
    public class DefBlacksmithy : CraftSystem
    {
        public override SkillName MainSkill
        {
            get    { return SkillName.Blacksmith;    }
        }
 
        public override int GumpTitleNumber
        {
            get { return 1044002; } // <CENTER>BLACKSMITHY MENU</CENTER>
        }
 
        private static CraftSystem m_CraftSystem;
 
        public static CraftSystem CraftSystem
        {
            get
            {
                if ( m_CraftSystem == null )
                    m_CraftSystem = new DefBlacksmithy();
 
                return m_CraftSystem;
            }
        }
 
        public override CraftECA ECA{ get{ return CraftECA.ChanceMinusSixtyToFourtyFive; } }
 
        public override double GetChanceAtMin( CraftItem item )
        {
            return 0.0; // 0%
        }
 
        private DefBlacksmithy() : base( 1, 1, 1.25 )// base( 1, 2, 1.7 )
        {
            /*
           
            base( MinCraftEffect, MaxCraftEffect, Delay )
           
            MinCraftEffect    : The minimum number of time the mobile will play the craft effect
            MaxCraftEffect    : The maximum number of time the mobile will play the craft effect
            Delay            : The delay between each craft effect
           
            Example: (3, 6, 1.7) would make the mobile do the PlayCraftEffect override
            function between 3 and 6 time, with a 1.7 second delay each time.
           
            */
        }
 
        private static Type typeofAnvil = typeof( AnvilAttribute );
        private static Type typeofForge = typeof( ForgeAttribute );
 
        public static void CheckAnvilAndForge( Mobile from, int range, out bool anvil, out bool forge )
        {
            anvil = false;
            forge = false;
 
            Map map = from.Map;
 
            if ( map == null )
                return;
 
            IPooledEnumerable eable = map.GetItemsInRange( from.Location, range );
 
            foreach ( Item item in eable )
            {
                Type type = item.GetType();
 
                bool isAnvil = ( type.IsDefined( typeofAnvil, false ) || item.ItemID == 4015 || item.ItemID == 4016 || item.ItemID == 0x2DD5 || item.ItemID == 0x2DD6 );
                bool isForge = ( type.IsDefined( typeofForge, false ) || item.ItemID == 4017 || (item.ItemID >= 6522 && item.ItemID <= 6569) || item.ItemID == 0x2DD8 );
 
                if ( isAnvil || isForge )
                {
                    if ( (from.Z + 16) < item.Z || (item.Z + 16) < from.Z || !from.InLOS( item ) )
                        continue;
 
                    anvil = anvil || isAnvil;
                    forge = forge || isForge;
 
                    if ( anvil && forge )
                        break;
                }
            }
 
            eable.Free();
 
            for ( int x = -range; (!anvil || !forge) && x <= range; ++x )
            {
                for ( int y = -range; (!anvil || !forge) && y <= range; ++y )
                {
                    StaticTile[] tiles = map.Tiles.GetStaticTiles( from.X+x, from.Y+y, true );
 
                    for ( int i = 0; (!anvil || !forge) && i < tiles.Length; ++i )
                    {
                        int id = tiles[i].ID;
 
                        bool isAnvil = ( id == 4015 || id == 4016 || id == 0x2DD5 || id == 0x2DD6 );
                        bool isForge = ( id == 4017 || (id >= 6522 && id <= 6569) || id == 0x2DD8 );
 
                        if ( isAnvil || isForge )
                        {
                            if ( (from.Z + 16) < tiles[i].Z || (tiles[i].Z + 16) < from.Z || !from.InLOS( new Point3D( from.X+x, from.Y+y, tiles[i].Z + (tiles[i].Height/2) + 1 ) ) )
                                continue;
 
                            anvil = anvil || isAnvil;
                            forge = forge || isForge;
                        }
                    }
                }
            }
        }
 
        public override int CanCraft( Mobile from, BaseTool tool, Type itemType )
        {
            if ( tool == null || tool.Deleted || tool.UsesRemaining < 0 )
                return 1044038; // You have worn out your tool!
            else if ( !BaseTool.CheckTool( tool, from ) )
                return 1048146; // If you have a tool equipped, you must use that tool.
            else if ( !BaseTool.CheckAccessible( tool, from ) )
                return 1044263; // The tool must be on your person to use.
 
            bool anvil, forge;
            CheckAnvilAndForge( from, 2, out anvil, out forge );
 
            if ( anvil && forge )
                return 0;
 
            return 1044267; // You must be near an anvil and a forge to smith items.
        }
 
        public override void PlayCraftEffect( Mobile from )
        {
            // no animation, instant sound
            //if ( from.Body.Type == BodyType.Human && !from.Mounted )
            //    from.Animate( 9, 5, 1, true, false, 0 );
            //new InternalTimer( from ).Start();
 
            from.PlaySound( 0x2A );
        }
 
        // Delay to synchronize the sound with the hit on the anvil
        private class InternalTimer : Timer
        {
            private Mobile m_From;
 
            public InternalTimer( Mobile from ) : base( TimeSpan.FromSeconds( 0.7 ) )
            {
                m_From = from;
            }
 
            protected override void OnTick()
            {
                m_From.PlaySound( 0x2A );
            }
        }
 
        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 void InitCraftList()
        {
            /*
            Synthax for a SIMPLE craft item
            AddCraft( ObjectType, Group, MinSkill, MaxSkill, ResourceType, Amount, Message )
           
            ObjectType        : The type of the object you want to add to the build list.
            Group            : The group in wich the object will be showed in the craft menu.
            MinSkill        : The minimum of skill value
            MaxSkill        : The maximum of skill value
            ResourceType    : The type of the resource the mobile need to create the item
            Amount            : The amount of the ResourceType it need to create the item
            Message            : String or Int for Localized.  The message that will be sent to the mobile, if the specified resource is missing.
           
            Synthax for a COMPLEXE craft item.  A complexe item is an item that need either more than
            only one skill, or more than only one resource.
           
            Coming soon....
            */
 
            #region Ringmail
            AddCraft( typeof( RingmailGloves ), 1011076, 1025099, 12.0, 62.0, typeof( IronIngot ), 1044036, 10, 1044037 );
            AddCraft( typeof( RingmailLegs ), 1011076, 1025104, 19.4, 69.4, typeof( IronIngot ), 1044036, 16, 1044037 );
            AddCraft( typeof( RingmailArms ), 1011076, 1025103, 16.9, 66.9, typeof( IronIngot ), 1044036, 14, 1044037 );
            AddCraft( typeof( RingmailChest ), 1011076, 1025100, 21.9, 71.9, typeof( IronIngot ), 1044036, 18, 1044037 );
            #endregion
 
            #region Chainmail
            AddCraft( typeof( ChainCoif ), 1011077, 1025051, 14.5, 64.5, typeof( IronIngot ), 1044036, 10, 1044037 );
            AddCraft( typeof( ChainLegs ), 1011077, 1025054, 36.7, 86.7, typeof( IronIngot ), 1044036, 18, 1044037 );
            AddCraft( typeof( ChainChest ), 1011077, 1025055, 39.1, 89.1, typeof( IronIngot ), 1044036, 20, 1044037 );
            #endregion
 
            int index = -1;
 
            #region Platemail
            AddCraft( typeof( PlateArms ), 1011078, 1025136, 66.3, 116.3, typeof( IronIngot ), 1044036, 18, 1044037 );
            AddCraft( typeof( PlateGloves ), 1011078, 1025140, 58.9, 108.9, typeof( IronIngot ), 1044036, 12, 1044037 );
            AddCraft( typeof( PlateGorget ), 1011078, 1025139, 56.4, 106.4, typeof( IronIngot ), 1044036, 10, 1044037 );
            AddCraft( typeof( PlateLegs ), 1011078, 1025137, 68.8, 118.8, typeof( IronIngot ), 1044036, 20, 1044037 );
            AddCraft( typeof( PlateChest ), 1011078, 1046431, 75.0, 125.0, typeof( IronIngot ), 1044036, 25, 1044037 );
            AddCraft( typeof( FemalePlateChest ), 1011078, 1046430, 44.1, 94.1, typeof( IronIngot ), 1044036, 20, 1044037 );
 
            if ( Core.AOS ) // exact pre-aos functionality unknown
                AddCraft( typeof( DragonBardingDeed ), 1011078, 1053012, 72.5, 122.5, typeof( IronIngot ), 1044036, 750, 1044037 );
 
            if( Core.SE )
            {
                index = AddCraft( typeof( PlateMempo ), 1011078, 1030180, 80.0, 130.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
 
                index = AddCraft( typeof( PlateDo ), 1011078, 1030184, 80.0, 130.0, typeof( IronIngot ), 1044036, 28, 1044037 ); //Double check skill
                SetNeededExpansion( index, Expansion.SE );
 
                index = AddCraft( typeof( PlateHiroSode ), 1011078, 1030187, 80.0, 130.0, typeof( IronIngot ), 1044036, 16, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
 
                index = AddCraft( typeof( PlateSuneate ), 1011078, 1030195, 65.0, 115.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
 
                index = AddCraft( typeof( PlateHaidate ), 1011078, 1030200, 65.0, 115.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
               
            }
            #endregion
 
            #region Helmets
            AddCraft( typeof( Bascinet ), 1011079, 1025132, 8.3, 58.3, typeof( IronIngot ), 1044036, 15, 1044037 );
            AddCraft( typeof( CloseHelm ), 1011079, 1025128, 37.9, 87.9, typeof( IronIngot ), 1044036, 15, 1044037 );
            AddCraft( typeof( Helmet ), 1011079, 1025130, 37.9, 87.9, typeof( IronIngot ), 1044036, 15, 1044037 );
            AddCraft( typeof( NorseHelm ), 1011079, 1025134, 37.9, 87.9, typeof( IronIngot ), 1044036, 15, 1044037 );
            AddCraft( typeof( PlateHelm ), 1011079, 1025138, 62.6, 112.6, typeof( IronIngot ), 1044036, 15, 1044037 );
 
            if( Core.SE )
            {
                index = AddCraft( typeof( ChainHatsuburi ), 1011079, 1030175, 30.0, 80.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
 
                index = AddCraft( typeof( PlateHatsuburi ), 1011079, 1030176, 45.0, 95.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
 
                index = AddCraft( typeof( HeavyPlateJingasa ), 1011079, 1030178, 45.0, 95.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
               
                index = AddCraft( typeof( LightPlateJingasa ), 1011079, 1030188, 45.0, 95.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
               
                index = AddCraft( typeof( SmallPlateJingasa ), 1011079, 1030191, 45.0, 95.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
 
                index = AddCraft( typeof( DecorativePlateKabuto ), 1011079, 1030179, 90.0, 140.0, typeof( IronIngot ), 1044036, 25, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
               
                index = AddCraft( typeof( PlateBattleKabuto ), 1011079, 1030192, 90.0, 140.0, typeof( IronIngot ), 1044036, 25, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
 
                index = AddCraft( typeof( StandardPlateKabuto ), 1011079, 1030196, 90.0, 140.0, typeof( IronIngot ), 1044036, 25, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
                /*
                if( Core.ML )
                {
                    index = AddCraft( typeof( Circlet ), 1011079, 1032645, 62.1, 112.1, typeof( IronIngot ), 1044036, 6, 1044037 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( RoyalCirclet ), 1011079, 1032646, 70.0, 120.0, typeof( IronIngot ), 1044036, 6, 1044037 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( GemmedCirclet ), 1011079, 1032647, 75.0, 125.0, typeof( IronIngot ), 1044036, 6, 1044037 );
                    AddRes( index, typeof( Tourmaline ), 1044237, 1, 1044240 );
                    AddRes( index, typeof( Amethyst ), 1044236, 1, 1044240 );
                    AddRes( index, typeof( BlueDiamond ), 1032696, 1, 1044240 );
                    SetNeededExpansion( index, Expansion.ML );
                }
                * */
            }
            #endregion
 
            #region Shields
            AddCraft( typeof( Buckler ), 1011080, 1027027, -25.0, 25.0, typeof( IronIngot ), 1044036, 10, 1044037 );
            AddCraft( typeof( BronzeShield ), 1011080, 1027026, -15.2, 34.8, typeof( IronIngot ), 1044036, 12, 1044037 );
            AddCraft( typeof( HeaterShield ), 1011080, 1027030, 24.3, 74.3, typeof( IronIngot ), 1044036, 18, 1044037 );
            AddCraft( typeof( MetalShield ), 1011080, 1027035, -10.2, 39.8, typeof( IronIngot ), 1044036, 14, 1044037 );
            AddCraft( typeof( MetalKiteShield ), 1011080, 1027028, 4.6, 54.6, typeof( IronIngot ), 1044036, 16, 1044037 );
            AddCraft( typeof( WoodenKiteShield ), 1011080, 1027032, -15.2, 34.8, typeof( IronIngot ), 1044036, 8, 1044037 );
 
            if ( Core.AOS )
            {
                AddCraft( typeof( ChaosShield ), 1011080, 1027107, 85.0, 135.0, typeof( IronIngot ), 1044036, 25, 1044037 );
                AddCraft( typeof( OrderShield ), 1011080, 1027108, 85.0, 135.0, typeof( IronIngot ), 1044036, 25, 1044037 );
            }
            #endregion
 
            #region Bladed
 
            if ( Core.AOS )
                AddCraft( typeof( BoneHarvester ), 1011081, 1029915, 33.0, 83.0, typeof( IronIngot ), 1044036, 10, 1044037 );
 
            AddCraft( typeof( Broadsword ), 1011081, 1023934, 35.4, 85.4, typeof( IronIngot ), 1044036, 10, 1044037 );
 
            if ( Core.AOS )
                AddCraft( typeof( CrescentBlade ), 1011081, 1029921, 45.0, 95.0, typeof( IronIngot ), 1044036, 14, 1044037 );
 
            AddCraft( typeof( Cutlass ), 1011081, 1025185, 24.3, 74.3, typeof( IronIngot ), 1044036, 8, 1044037 );
            AddCraft( typeof( Dagger ), 1011081, 1023921, -0.4, 49.6, typeof( IronIngot ), 1044036, 3, 1044037 );
            AddCraft( typeof( Katana ),1011081, 1025119, 44.1, 94.1, typeof( IronIngot ), 1044036, 8, 1044037 );
            AddCraft( typeof( Kryss ), 1011081, 1025121, 36.7, 86.7, typeof( IronIngot ), 1044036, 8, 1044037 );
            AddCraft( typeof( Longsword ), 1011081, 1023937, 28.0, 78.0, typeof( IronIngot ), 1044036, 12, 1044037 );
            AddCraft( typeof( Scimitar ), 1011081, 1025046, 31.7, 81.7, typeof( IronIngot ), 1044036, 10, 1044037 );
            AddCraft( typeof( VikingSword ), 1011081, 1025049, 24.3, 74.3, typeof( IronIngot ), 1044036, 14, 1044037 );
 
            if( Core.SE )
            {
                index = AddCraft( typeof( NoDachi ), 1011081, 1030221, 75.0, 125.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
                index = AddCraft( typeof( Wakizashi ), 1011081, 1030223, 50.0, 100.0, typeof( IronIngot ), 1044036, 8, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
                index = AddCraft( typeof( Lajatang ), 1011081, 1030226, 80.0, 130.0, typeof( IronIngot ), 1044036, 25, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
                index = AddCraft( typeof( Daisho ), 1011081, 1030228, 60.0, 110.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
                index = AddCraft( typeof( Tekagi ), 1011081, 1030230, 55.0, 105.0, typeof( IronIngot ), 1044036, 12, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
                index = AddCraft( typeof( Shuriken ), 1011081, 1030231, 45.0, 95.0, typeof( IronIngot ), 1044036, 5, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
                index = AddCraft( typeof( Kama ), 1011081, 1030232, 40.0, 90.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
                index = AddCraft( typeof( Sai ), 1011081, 1030234, 50.0, 100.0, typeof( IronIngot ), 1044036, 12, 1044037 );
                SetNeededExpansion( index, Expansion.SE );
                /*
                if( Core.ML )
                {
                    index = AddCraft( typeof( RadiantScimitar ), 1011081, 1031571, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( WarCleaver ), 1011081, 1031567, 70.0, 120.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( ElvenSpellblade ), 1011081, 1031564, 70.0, 120.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( AssassinSpike ), 1011081, 1031565, 70.0, 120.0, typeof( IronIngot ), 1044036, 9, 1044037 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( Leafblade ), 1011081, 1031566, 70.0, 120.0, typeof( IronIngot ), 1044036, 12, 1044037 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( RuneBlade ), 1011081, 1031570, 70.0, 120.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( ElvenMachete ), 1011081, 1031573, 70.0, 120.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( RuneCarvingKnife ), 1011081, 1072915, 70.0, 120.0, typeof( IronIngot ), 1044036, 9, 1044037 );
                    AddRes( index, typeof( DreadHornMane ), 1032682, 1, 1053098 );
                    AddRes( index, typeof( Putrefication ), 1032678, 10, 1053098 );
                    AddRes( index, typeof( Muculent ), 1032680, 10, 1053098 );
                    AddRecipe( index, 0 );
                    ForceNonExceptional( index );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( ColdForgedBlade ), 1011081, 1072916, 70.0, 120.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                    AddRes( index, typeof( GrizzledBones ), 1032684, 1, 1053098 );
                    AddRes( index, typeof( Taint ), 1032684, 10, 1053098 );
                    AddRes( index, typeof( Blight ), 1032675, 10, 1053098 );
                    AddRecipe( index, 1 );
                    ForceNonExceptional( index );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( OverseerSunderedBlade ), 1011081, 1072920, 70.0, 120.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( GrizzledBones ), 1032684, 1, 1053098 );
                    AddRes( index, typeof( Blight ), 1032675, 10, 1053098 );
                    AddRes( index, typeof( Scourge ), 1032677, 10, 1053098 );
                    AddRecipe( index, 2 );
                    ForceNonExceptional( index );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( LuminousRuneBlade ), 1011081, 1072922, 70.0, 120.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( GrizzledBones ), 1032684, 1, 1053098 );
                    AddRes( index, typeof( Corruption ), 1032676, 10, 1053098 );
                    AddRes( index, typeof( Putrefication ), 1032678, 10, 1053098 );
                    AddRecipe( index, 3 );
                    ForceNonExceptional( index );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( TrueSpellblade ), 1011081, 1073513, 75.0, 125.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                    AddRes( index, typeof( BlueDiamond ), 1032696, 1, 1044240 );
                    AddRecipe( index, 4 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( IcySpellblade ), 1011081, 1073514, 75.0, 125.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                    AddRes( index, typeof( Turquoise ), 1032691, 1, 1044240 );
                    AddRecipe( index, 5 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( FierySpellblade ), 1011081, 1073515, 75.0, 125.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                    AddRes( index, typeof( FireRuby ), 1032695, 1, 1044240 );
                    AddRecipe( index, 6 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( SpellbladeOfDefense ), 1011081, 1073516, 75.0, 125.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                    AddRes( index, typeof( WhitePearl ), 1032694, 1, 1044240 );
                    AddRecipe( index, 7 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( TrueAssassinSpike ), 1011081, 1073517, 75.0, 125.0, typeof( IronIngot ), 1044036, 9, 1044037 );
                    AddRes( index, typeof( DarkSapphire ), 1032690, 1, 1044240 );
                    AddRecipe( index, 8 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( ChargedAssassinSpike ), 1011081, 1073518, 75.0, 125.0, typeof( IronIngot ), 1044036, 9, 1044037 );
                    AddRes( index, typeof( EcruCitrine ), 1032693, 1, 1044240 );
                    AddRecipe( index, 9 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( MagekillerAssassinSpike ), 1011081, 1073519, 75.0, 125.0, typeof( IronIngot ), 1044036, 9, 1044037 );
                    AddRes( index, typeof( BrilliantAmber ), 1032697, 1, 1044240 );
                    AddRecipe( index, 10 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( WoundingAssassinSpike ), 1011081, 1073520, 75.0, 125.0, typeof( IronIngot ), 1044036, 9, 1044037 );
                    AddRes( index, typeof( PerfectEmerald ), 1032692, 1, 1044240 );
                    AddRecipe( index, 11 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( TrueLeafblade ), 1011081, 1073521, 75.0, 125.0, typeof( IronIngot ), 1044036, 12, 1044037 );
                    AddRes( index, typeof( BlueDiamond ), 1032696, 1, 1044240 );
                    AddRecipe( index, 12 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( Luckblade ), 1011081, 1073522, 75.0, 125.0, typeof( IronIngot ), 1044036, 12, 1044037 );
                    AddRes( index, typeof( WhitePearl ), 1032694, 1, 1044240 );
                    AddRecipe( index, 13 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( MagekillerLeafblade ), 1011081, 1073523, 75.0, 125.0, typeof( IronIngot ), 1044036, 12, 1044037 );
                    AddRes( index, typeof( FireRuby ), 1032695, 1, 1044240 );
                    AddRecipe( index, 14 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( LeafbladeOfEase ), 1011081, 1073524, 75.0, 125.0, typeof( IronIngot ), 1044036, 12, 1044037 );
                    AddRes( index, typeof( PerfectEmerald ), 1032692, 1, 1044240 );
                    AddRecipe( index, 15 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( KnightsWarCleaver ), 1011081, 1073525, 75.0, 125.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                    AddRes( index, typeof( PerfectEmerald ), 1032692, 1, 1044240 );
                    AddRecipe( index, 16 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( ButchersWarCleaver ), 1011081, 1073526, 75.0, 125.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                    AddRes( index, typeof( Turquoise ), 1032691, 1, 1044240 );
                    AddRecipe( index, 17 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( SerratedWarCleaver ), 1011081, 1073527, 75.0, 125.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                    AddRes( index, typeof( EcruCitrine ), 1032693, 1, 1044240 );
                    AddRecipe( index, 18 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( TrueWarCleaver ), 1011081, 1073528, 75.0, 125.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                    AddRes( index, typeof( BrilliantAmber ), 1032697, 1, 1044240 );
                    AddRecipe( index, 19 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( AdventurersMachete ), 1011081, 1073533, 75.0, 125.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                    AddRes( index, typeof( WhitePearl ), 1032694, 1, 1044240 );
                    AddRecipe( index, 20 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( OrcishMachete ), 1011081, 1073534, 75.0, 125.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                    AddRes( index, typeof( Scourge ), 1072136, 1, 1042081 );
                    AddRecipe( index, 21 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( MacheteOfDefense ), 1011081, 1073535, 75.0, 125.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                    AddRes( index, typeof( BrilliantAmber ), 1032697, 1, 1044240 );
                    AddRecipe( index, 22 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( DiseasedMachete ), 1011081, 1073536, 75.0, 125.0, typeof( IronIngot ), 1044036, 14, 1044037 );
                    AddRes( index, typeof( Blight ), 1072134, 1, 1042081 );
                    AddRecipe( index, 23 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( RuneSabre ), 1011081, 1073537, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( Turquoise ), 1032691, 1, 1044240 );
                    AddRecipe( index, 24 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( MagesRuneBlade ), 1011081, 1073538, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( BlueDiamond ), 1032696, 1, 1044240 );
                    AddRecipe( index, 25 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( RuneBladeOfKnowledge ), 1011081, 1073539, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( EcruCitrine ), 1032693, 1, 1044240 );
                    AddRecipe( index, 26 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( CorruptedRuneBlade ), 1011081, 1073540, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( Corruption ), 1072135, 1, 1042081 );
                    AddRecipe( index, 27 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( TrueRadiantScimitar ), 1011081, 1073541, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( BrilliantAmber ), 1032697, 1, 1044240 );
                    AddRecipe( index, 28 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( DarkglowScimitar ), 1011081, 1073542, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( DarkSapphire ), 1032690, 1, 1044240 );
                    AddRecipe( index, 29 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( IcyScimitar ), 1011081, 1073543, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( DarkSapphire ), 1032690, 1, 1044240 );
                    AddRecipe( index, 30 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( TwinklingScimitar ), 1011081, 1073544, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                    AddRes( index, typeof( DarkSapphire ), 1032690, 1, 1044240 );
                    AddRecipe( index, 31 );
                    SetNeededExpansion( index, Expansion.ML );
 
                    index = AddCraft( typeof( BoneMachete ), 1011081, 1020526, 75.0, 125.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                    AddRes( index, typeof( Bone ), 1049064, 6, 1049063 );
                    AddRecipe( index, 32 );
                    SetNeededExpansion( index, Expansion.ML );
                }
                */
            }
            #endregion
 
            #region Axes
            AddCraft( typeof( Axe ), 1011082, 1023913, 34.2, 84.2, typeof( IronIngot ), 1044036, 14, 1044037 );
            AddCraft( typeof( BattleAxe ), 1011082, 1023911, 30.5, 80.5, typeof( IronIngot ), 1044036, 14, 1044037 );
            AddCraft( typeof( DoubleAxe ), 1011082, 1023915, 29.3, 79.3, typeof( IronIngot ), 1044036, 12, 1044037 );
            AddCraft( typeof( ExecutionersAxe ), 1011082, 1023909, 34.2, 84.2, typeof( IronIngot ), 1044036, 14, 1044037 );
            AddCraft( typeof( LargeBattleAxe ), 1011082, 1025115, 28.0, 78.0, typeof( IronIngot ), 1044036, 12, 1044037 );
            AddCraft( typeof( TwoHandedAxe ), 1011082, 1025187, 33.0, 83.0, typeof( IronIngot ), 1044036, 16, 1044037 );
            AddCraft( typeof( WarAxe ), 1011082, 1025040, 39.1, 89.1, typeof( IronIngot ), 1044036, 16, 1044037 );
            /*
            if( Core.ML )
            {
                index = AddCraft( typeof( OrnateAxe ), 1011082, 1031572, 70.0, 120.0, typeof( IronIngot ), 1044036, 18, 1044037 );
                SetNeededExpansion( index, Expansion.ML );
 
                index = AddCraft( typeof( GuardianAxe ), 1011082, 1073545, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                AddRes( index, typeof( BlueDiamond ), 1032696, 1, 1044240 );
                AddRecipe( index, 33 );
                SetNeededExpansion( index, Expansion.ML );
 
                index = AddCraft( typeof( SingingAxe ), 1011082, 1073546, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                AddRes( index, typeof( BrilliantAmber ), 1032697, 1, 1044240 );
                AddRecipe( index, 34 );
                SetNeededExpansion( index, Expansion.ML );
 
                index = AddCraft( typeof( ThunderingAxe ), 1011082, 1073547, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                AddRes( index, typeof( EcruCitrine ), 1032693, 1, 1044240 );
                AddRecipe( index, 35 );
                SetNeededExpansion( index, Expansion.ML );
 
                index = AddCraft( typeof( HeavyOrnateAxe ), 1011082, 1073548, 75.0, 125.0, typeof( IronIngot ), 1044036, 15, 1044037 );
                AddRes( index, typeof( Turquoise ), 1032691, 1, 1044240 );
                AddRecipe( index, 36 );
                SetNeededExpansion( index, Expansion.ML );
           
            }*/
            #endregion
 
            #region Pole Arms
 
            AddCraft( typeof( Bardiche ), 1011083, 1023917, 31.7, 81.7, typeof( IronIngot ), 1044036, 18, 1044037 );
 
            if ( Core.AOS )
                AddCraft( typeof( BladedStaff ), 1011083, 1029917, 40.0, 90.0, typeof( IronIngot ), 1044036, 12, 1044037 );
 
            if ( Core.AOS )
                AddCraft( typeof( DoubleBladedStaff ), 1011083, 1029919, 45.0, 95.0, typeof( IronIngot ), 1044036, 16, 1044037 );
 
            AddCraft( typeof( Halberd ), 1011083, 1025183, 39.1, 89.1, typeof( IronIngot ), 1044036, 20, 1044037 );
 
            if ( Core.AOS )
                AddCraft( typeof( Lance ), 1011083, 1029920, 48.0, 98.0, typeof( IronIngot ), 1044036, 20, 1044037 );
 
            if ( Core.AOS )
                AddCraft( typeof( Pike ), 1011083, 1029918, 47.0, 97.0, typeof( IronIngot ), 1044036, 12, 1044037 );
 
            AddCraft( typeof( ShortSpear ), 1011083, 1025123, 45.3, 95.3, typeof( IronIngot ), 1044036, 6, 1044037 );
 
            if ( Core.AOS )
                AddCraft( typeof( Scythe ), 1011083, 1029914, 39.0, 89.0, typeof( IronIngot ), 1044036, 14, 1044037 );
 
            AddCraft( typeof( Spear ), 1011083, 1023938, 49.0, 99.0, typeof( IronIngot ), 1044036, 12, 1044037 );
            AddCraft( typeof( WarFork ), 1011083, 1025125, 42.9, 92.9, typeof( IronIngot ), 1044036, 12, 1044037 );
 
            // Not craftable (is this an AOS change ??)
            //AddCraft( typeof( Pitchfork ), 1011083, 1023720, 36.1, 86.1, typeof( IronIngot ), 1044036, 12, 1044037 );
            #endregion
 
            #region Bashing
            AddCraft( typeof( HammerPick ), 1011084, 1025181, 34.2, 84.2, typeof( IronIngot ), 1044036, 16, 1044037 );
            AddCraft( typeof( Mace ), 1011084, 1023932, 14.5, 64.5, typeof( IronIngot ), 1044036, 6, 1044037 );
            AddCraft( typeof( Maul ), 1011084, 1025179, 19.4, 69.4, typeof( IronIngot ), 1044036, 10, 1044037 );
 
            if ( Core.AOS )
                AddCraft( typeof( Scepter ), 1011084, 1029916, 21.4, 71.4, typeof( IronIngot ), 1044036, 10, 1044037 );
 
            AddCraft( typeof( WarMace ), 1011084, 1025127, 28.0, 78.0, typeof( IronIngot ), 1044036, 14, 1044037 );
            AddCraft( typeof( WarHammer ), 1011084, 1025177, 34.2, 84.2, typeof( IronIngot ), 1044036, 16, 1044037 );
 
            if( Core.SE )
            {
                index = AddCraft( typeof( Tessen ), 1011084, 1030222, 85.0, 135.0, typeof( IronIngot ), 1044036, 16, 1044037 );
                AddSkill( index, SkillName.Tailoring, 50.0, 55.0 );
                AddRes( index, typeof( Cloth ), 1044286, 10, 1044287 );
                SetNeededExpansion( index, Expansion.SE );
            }
            /*
            if( Core.ML )
            {
                index = AddCraft( typeof( DiamondMace ), 1011084, 1073568, 70.0, 120.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                SetNeededExpansion( index, Expansion.ML );
 
                index = AddCraft( typeof( ShardThrasher ), 1011084, 1072918, 70.0, 120.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                AddRes( index, typeof( EyeOfTheTravesty ), 1073126, 1, 1042081 );
                AddRes( index, typeof( Muculent ), 1072139, 10, 1042081 );
                AddRes( index, typeof( Corruption ), 1072135, 10, 1042081 );
                AddRecipe( index, 37 );
                ForceNonExceptional( index );
                SetNeededExpansion( index, Expansion.ML );
 
                index = AddCraft( typeof( RubyMace ), 1011084, 1073529, 75.0, 125.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                AddRes( index, typeof( FireRuby ), 1032695, 1, 1044240 );
                AddRecipe( index, 38 );
                SetNeededExpansion( index, Expansion.ML );
 
                index = AddCraft( typeof( EmeraldMace ), 1011084, 1073530, 75.0, 125.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                AddRes( index, typeof( PerfectEmerald ), 1032692, 1, 1044240 );
                AddRecipe( index, 39 );
                SetNeededExpansion( index, Expansion.ML );
 
                index = AddCraft( typeof( SapphireMace ), 1011084, 1073531, 75.0, 125.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                AddRes( index, typeof( DarkSapphire ), 1032690, 1, 1044240 );
                AddRecipe( index, 40 );
                SetNeededExpansion( index, Expansion.ML );
 
                index = AddCraft( typeof( SilverEtchedMace ), 1011084, 1073532, 75.0, 125.0, typeof( IronIngot ), 1044036, 20, 1044037 );
                AddRes( index, typeof( BlueDiamond ), 1032696, 1, 1044240 );
                AddRecipe( index, 41 );
                SetNeededExpansion( index, Expansion.ML );
            }*/
            #endregion
 
            #region Dragon Scale Armor
            index = AddCraft( typeof( DragonGloves ), 1053114, 1029795, 68.9, 118.9, typeof( RedScales ), 1060883, 16, 1060884 );
            SetUseSubRes2( index, true );
 
            index = AddCraft( typeof( DragonHelm ), 1053114, 1029797, 72.6, 122.6, typeof( RedScales ), 1060883, 20, 1060884 );
            SetUseSubRes2( index, true );
 
            index = AddCraft( typeof( DragonLegs ), 1053114, 1029799, 78.8, 128.8, typeof( RedScales ), 1060883, 28, 1060884 );
            SetUseSubRes2( index, true );
 
            index = AddCraft( typeof( DragonArms ), 1053114, 1029815, 76.3, 126.3, typeof( RedScales ), 1060883, 24, 1060884 );
            SetUseSubRes2( index, true );
 
            index = AddCraft( typeof( DragonChest ), 1053114, 1029793, 85.0, 135.0, typeof( RedScales ), 1060883, 36, 1060884 );
            SetUseSubRes2( index, true );
            #endregion
           
            //daat99 OWLTR start - custom resources
            daat99.ResourceHelper.AddMetalResources(this);
            daat99.ResourceHelper.AddScaleResources(this);
            //daat99 OWLTR end - custom resources
 
            Resmelt = true;
            Repair = true;
            MarkOption = true;
            CanEnhance = Core.AOS;
        }
    }
 
    public class ForgeAttribute : Attribute
    {
        public ForgeAttribute()
        {
        }
    }
 
    public class AnvilAttribute : Attribute
    {
        public AnvilAttribute()
        {
        }
    }
}
 

Hammerhand

Knight
Thats fine as well... Does the player you're testing with have all the recipes needed for crafting or at a high skill level? IF I remember correctly, you'll only see Iron at first until you get higher in blacksmithy skill & have the needed recipes if using them.
 

Hammerhand

Knight
OWLTR has a lot of recipes for crafting. Weapons, armor, resources, the works. You can shut them off with the control panel which generates outside of Brit bank... dont remember if its Fel or Tram though. Hidden from players, visible only by staff. Once shut off, the crafting system works like "normal", giving you all the resources, but not letting you use them until the skill is high enough for them.
 

Hammerhand

Knight
They drop on mobs mainly. Selling them on a vendor stone is difficult mainly due to how many there actually are. Players can sell excess recipes on player vendors though.
 

Hammerhand

Knight
You have 1 recipe for each resource type in smithy, carp, tailoring.... plus 1 for each weapon, armor & craftable item. So you're looking at a few hundred recipes total.
 
Top