context: #region Header
  // **********
  // ServUO - DefBlacksmithy.cs
  // **********
  #endregion
  
  #region References
  using System;
  
  using Server.Items;
  #endregion
  
  namespace Server.Engines.Craft
  {
  
      #region Mondain's Legacy
      public enum SmithRecipes
      {
          // magical
          TrueSpellblade = 300,
          IcySpellblade = 301,
          FierySpellblade = 302,
          SpellbladeOfDefense = 303,
          TrueAssassinSpike = 304,
          ChargedAssassinSpike = 305,
          MagekillerAssassinSpike = 306,
          WoundingAssassinSpike = 307,
          TrueLeafblade = 308,
          Luckblade = 309,
          MagekillerLeafblade = 310,
          LeafbladeOfEase = 311,
          KnightsWarCleaver = 312,
          ButchersWarCleaver = 313,
          SerratedWarCleaver = 314,
          TrueWarCleaver = 315,
          AdventurersMachete = 316,
          OrcishMachete = 317,
          MacheteOfDefense = 318,
          DiseasedMachete = 319,
          Runesabre = 320,
          MagesRuneBlade = 321,
          RuneBladeOfKnowledge = 322,
          CorruptedRuneBlade = 323,
          TrueRadiantScimitar = 324,
          DarkglowScimitar = 325,
          IcyScimitar = 326,
          TwinklingScimitar = 327,
          GuardianAxe = 328,
          SingingAxe = 329,
          ThunderingAxe = 330,
          HeavyOrnateAxe = 331,
          RubyMace = 332, //good
          EmeraldMace = 333, //good
          SapphireMace = 334, //good
          SilverEtchedMace = 335, //good
          BoneMachete = 336,
  
          // arties
          RuneCarvingKnife = 350,
          ColdForgedBlade = 351,
          OverseerSunderedBlade = 352,
          LuminousRuneBlade = 353,
          ShardTrasher = 354 //good
      }
      #endregion
  
      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 { return m_CraftSystem ?? (m_CraftSystem = new DefBlacksmithy()); } }
  
          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 readonly Type typeofAnvil = typeof(AnvilAttribute);
          private static readonly 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)
                  {
                      continue;
                  }
  
                  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)
                  {
                      var 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)
                          {
                              continue;
                          }
  
                          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!
              }
  
              if (!BaseTool.CheckTool(tool, from))
              {
                  return 1048146; // If you have a tool equipped, you must use that tool.
              }
  
              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 readonly 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.
                  }
  
                  return 1044157; // You failed to create the item, but no materials were lost.
              }
  
              if (quality == 0)
              {
                  return 502785; // You were barely able to make this item.  It's quality is below average.
              }
  
              if (makersMark && quality == 2)
              {
                  return 1044156; // You create an exceptional quality item and affix your maker's mark.
              }
  
              if (quality == 2)
              {
                  return 1044155; // You create an exceptional quality item.
              }
  
              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....
              */
  
              int index;
  
              #region Metal Armor
              #region Ringmail
              AddCraft(typeof(RingmailGloves), 1111704, 1025099, 12.0, 62.0, typeof(IronIngot), 1044036, 10, 1044037);
              AddCraft(typeof(RingmailLegs), 1111704, 1025104, 19.4, 69.4, typeof(IronIngot), 1044036, 16, 1044037);
              AddCraft(typeof(RingmailArms), 1111704, 1025103, 16.9, 66.9, typeof(IronIngot), 1044036, 14, 1044037);
              AddCraft(typeof(RingmailChest), 1111704, 1025100, 21.9, 71.9, typeof(IronIngot), 1044036, 18, 1044037);
              #endregion
  
              #region Chainmail
              AddCraft(typeof(ChainCoif), 1111704, 1025051, 14.5, 64.5, typeof(IronIngot), 1044036, 10, 1044037);
              AddCraft(typeof(ChainLegs), 1111704, 1025054, 36.7, 86.7, typeof(IronIngot), 1044036, 18, 1044037);
              AddCraft(typeof(ChainChest), 1111704, 1025055, 39.1, 89.1, typeof(IronIngot), 1044036, 20, 1044037);
              #endregion
  
              #region Platemail
              AddCraft(typeof(PlateArms), 1111704, 1025136, 66.3, 116.3, typeof(IronIngot), 1044036, 18, 1044037);
              AddCraft(typeof(PlateGloves), 1111704, 1025140, 58.9, 108.9, typeof(IronIngot), 1044036, 12, 1044037);
              AddCraft(typeof(PlateGorget), 1111704, 1025139, 56.4, 106.4, typeof(IronIngot), 1044036, 10, 1044037);
              AddCraft(typeof(PlateLegs), 1111704, 1025137, 68.8, 118.8, typeof(IronIngot), 1044036, 20, 1044037);
              AddCraft(typeof(PlateChest), 1111704, 1046431, 75.0, 125.0, typeof(IronIngot), 1044036, 25, 1044037);
              AddCraft(typeof(FemalePlateChest), 1111704, 1046430, 44.1, 94.1, typeof(IronIngot), 1044036, 20, 1044037);
  
              if (Core.AOS) // exact pre-aos functionality unknown
              {
                  AddCraft(typeof(DragonBardingDeed), 1111704, 1053012, 72.5, 122.5, typeof(IronIngot), 1044036, 750, 1044037);
              }
  
              if (Core.SE)
              {
                  index = AddCraft(typeof(PlateMempo), 1111704, 1030180, 80.0, 130.0, typeof(IronIngot), 1044036, 18, 1044037);
                  SetNeededExpansion(index, Expansion.SE);
  
                  index = AddCraft(typeof(PlateDo), 1111704, 1030184, 80.0, 130.0, typeof(IronIngot), 1044036, 28, 1044037);
                  //Double check skill
                  SetNeededExpansion(index, Expansion.SE);
  
                  index = AddCraft(typeof(PlateHiroSode), 1111704, 1030187, 80.0, 130.0, typeof(IronIngot), 1044036, 16, 1044037);
                  SetNeededExpansion(index, Expansion.SE);
  
                  index = AddCraft(typeof(PlateSuneate), 1111704, 1030195, 65.0, 115.0, typeof(IronIngot), 1044036, 20, 1044037);
                  SetNeededExpansion(index, Expansion.SE);
  
                  index = AddCraft(typeof(PlateHaidate), 1111704, 1030200, 65.0, 115.0, typeof(IronIngot), 1044036, 20, 1044037);
                  SetNeededExpansion(index, Expansion.SE);
              }
              if (Core.SA)
              {
                  #region SA
                  index = AddCraft(typeof(GargishPlateArms), 1111704, 1095336, 66.3, 116.3, typeof(IronIngot), 1044036, 18, 1044037);
                  SetNeededExpansion(index, Expansion.SA);
  
                  index = AddCraft(typeof(GargishPlateChest), 1111704, 1095338, 75.0, 125.0, typeof(IronIngot), 1044036, 25, 1044037);
                  SetNeededExpansion(index, Expansion.SA);
  
                  index = AddCraft(typeof(GargishPlateKilt), 1111704, 1095340, 58.9, 116.3, typeof(IronIngot), 1044036, 12, 1044037);
                  SetNeededExpansion(index, Expansion.SA);
  
                  index = AddCraft(typeof(GargishPlateLegs), 1111704, 1095342, 68.8, 118.8, typeof(IronIngot), 1044036, 20, 1044037);
                  SetNeededExpansion(index, Expansion.SA);
                  #endregion
              }
              #endregion
              #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);
              }
  
              if (Core.SA)
              {
                  AddCraft(typeof(SmallPlateShield), 1011080, 1095770, -15.2, 34.8, typeof(IronIngot), 1044036, 12, 1044037);
                  AddCraft(typeof(MediumPlateShield), 1011080, 1095771, -10.2, 39.8, typeof(IronIngot), 1044036, 14, 1044037);
                  AddCraft(typeof(LargePlateShield), 1011080, 1095772, 24.3, 74.3, typeof(IronIngot), 1044036, 18, 1044037);
                  AddCraft(typeof(GargishKiteShield), 1011080, 1095774, 4.6, 54.6, typeof(IronIngot), 1044036, 16, 1044037);
                  AddCraft(typeof(GargishChaosShield), 1011080, 1095808, 85.0, 135.0, typeof(IronIngot), 1044036, 25, 1044037);
                  AddCraft(typeof(GargishOrderShield), 1011080, 1095810, 85.0, 135.0, typeof(IronIngot), 1044036, 25, 1044037);
              }
              #endregion
  
              #region Throwing
              if (Core.SA)
              {
                  index = AddCraft(typeof(Boomerang), 1079508, 1095359, 75.0, 100.0, typeof(IronIngot), 1044036, 5, 1044037);
                  SetNeededExpansion(index, Expansion.SA);
  
                  index = AddCraft(typeof(Cyclone), 1079508, 1095364, 75.0, 100.0, typeof(IronIngot), 1044036, 9, 1044037);
                  SetNeededExpansion(index, Expansion.SA);
  
                  index = AddCraft(typeof(SoulGlaive), 1079508, 1095363, 75.0, 100.0, typeof(IronIngot), 1044036, 9, 1044037);
                  SetNeededExpansion(index, Expansion.SA);
              }
              #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, (int)SmithRecipes.RuneCarvingKnife);
                      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, (int)SmithRecipes.ColdForgedBlade);
                      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, (int)SmithRecipes.OverseerSunderedBlade);
                      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, (int)SmithRecipes.LuminousRuneBlade);
                      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, (int)SmithRecipes.TrueSpellblade);
                      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, (int)SmithRecipes.IcySpellblade);
                      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, (int)SmithRecipes.FierySpellblade);
                      SetNeededExpansion(index, Expansion.ML);
  
                      index = AddCraft(
                          typeof(SpellbladeOfDefense), 1011081, 1073516, 75.0, 125.0, typeof(IronIngot), 1044036, 18, 1044037);
  
gt:                     AddRes(index, typeof(WhitePearl), 1032694, 1, 1044240);