Inheritance: BaseHides, IScissorable
		public virtual void OnCarve( Mobile from, Corpse corpse, Item with )
		{
			int feathers = Feathers;
			int wool = Wool;
			int meat = Meat;
			int hides = Hides;
			int scales = Scales;
            
            // Proxy corpses are created for any mobs that have items equipped when they die
            if (corpse.ProxyCorpse != null)
            {
                corpse.Carved = true;
                corpse = corpse.ProxyCorpse;
            }

			if ( (feathers == 0 && wool == 0 && meat == 0 && hides == 0 && scales == 0) || Summoned || IsBonded || corpse.Animated )
			{
				if ( corpse.Animated )
					corpse.SendLocalizedMessageTo( from, 500464 );	// Use this on corpses to carve away meat and hide
				else
					from.SendLocalizedMessage( 500485 ); // You see nothing useful to carve from the corpse.
			}
			else
			{
				/*
				if( Core.ML && from.Race == Race.Human )
				{
					hides = (int)Math.Ceiling( hides * 1.1 );	//10% Bonus Only applies to Hides, Ore & Logs
				}
				*/
/*
				if ( corpse.Map == Map.Felucca )
				{
					feathers *= 2;
					wool *= 2;
					hides *= 2;

					if (Core.ML)
					{
						meat *= 2;
						scales *= 2;
					}
				}
*/
				if ( corpse.BloodHue != -1 )
					new Blood( 0x122D, corpse.BloodHue ).MoveToWorld( corpse.Location, corpse.Map );

				if ( feathers != 0 )
				{
					corpse.AddCarvedItem( new Feather( feathers ), from );
					from.SendLocalizedMessage( 500479 ); // You pluck the bird. The feathers are now on the corpse.
				}

				if ( wool != 0 )
				{
					corpse.AddCarvedItem( new TaintedWool( wool ), from );
					from.SendLocalizedMessage( 500483 ); // You shear it, and the wool is now on the corpse.
				}

				if ( meat != 0 )
				{
					if ( MeatType == MeatType.Ribs )
						corpse.AddCarvedItem( new RawRibs( meat ), from );
					else if ( MeatType == MeatType.Bird )
						corpse.AddCarvedItem( new RawBird( meat ), from );
					else if ( MeatType == MeatType.LambLeg )
						corpse.AddCarvedItem( new RawLambLeg( meat ), from );

					from.SendLocalizedMessage( 500467 ); // You carve some meat, which remains on the corpse.
				}

				if ( hides != 0 )
				{
					Item holding = from.Weapon as Item;
					if (EraAOS && (holding is SkinningKnife /* TODO: || holding is ButcherWarCleaver || with is ButcherWarCleaver */ ))
					{
						Item leather = null;

						switch ( HideType )
						{
							case HideType.Regular: leather = new Hides( hides ); break;
							case HideType.Spined: leather = new SpinedHides( hides ); break;
							case HideType.Horned: leather = new HornedHides( hides ); break;
							case HideType.Barbed: leather = new BarbedHides( hides ); break;
						}

						if ( leather != null )
						{
							if ( !from.PlaceInBackpack( leather ) )
							{
								corpse.DropItem( leather );
								from.SendLocalizedMessage( 500471 ); // You skin it, and the hides are now in the corpse.
							}
							else
								from.SendLocalizedMessage( 1073555 ); // You skin it and place the cut-up hides in your backpack.
						}
					}
					else
					{
						switch ( HideType )
						{
							case HideType.Regular: corpse.DropItem( new Hides( hides ) ); break;
							case HideType.Spined: corpse.DropItem( new SpinedHides( hides ) ); break;
							case HideType.Horned: corpse.DropItem( new HornedHides( hides ) ); break;
							case HideType.Barbed: corpse.DropItem( new BarbedHides( hides ) ); break;
						}

						from.SendLocalizedMessage( 500471 ); // You skin it, and the hides are now in the corpse.
					}
				}

				if ( scales != 0 )
				{
					ScaleType sc = this.ScaleType;

					switch ( sc )
					{
						case ScaleType.Red:     corpse.AddCarvedItem( new RedScales( scales ), from ); break;
						case ScaleType.Yellow:  corpse.AddCarvedItem( new YellowScales( scales ), from ); break;
						case ScaleType.Black:   corpse.AddCarvedItem( new BlackScales( scales ), from ); break;
						case ScaleType.Green:   corpse.AddCarvedItem( new GreenScales( scales ), from ); break;
						case ScaleType.White:   corpse.AddCarvedItem( new WhiteScales( scales ), from ); break;
						case ScaleType.Blue:    corpse.AddCarvedItem( new BlueScales( scales ), from ); break;
						case ScaleType.Blood:	corpse.AddCarvedItem( new BloodScales( scales ), from ); break;
						case ScaleType.All:
						{
							corpse.AddCarvedItem( new RedScales( scales ), from );
							corpse.AddCarvedItem( new YellowScales( scales ), from );
							corpse.AddCarvedItem( new BlackScales( scales ), from );
							corpse.AddCarvedItem( new GreenScales( scales ), from );
							corpse.AddCarvedItem( new WhiteScales( scales ), from );
							corpse.AddCarvedItem( new BlueScales( scales ), from );
							break;
						}
						case ScaleType.Any:
						{
							switch ( Utility.Random( 5 ) )
							{
								case 0: corpse.AddCarvedItem( new RedScales( scales ), from ); break;
								case 1: corpse.AddCarvedItem( new YellowScales( scales ), from ); break;
								case 2: corpse.AddCarvedItem( new BlackScales( scales ), from ); break;
								case 3: corpse.AddCarvedItem( new GreenScales( scales ), from ); break;
								case 4: corpse.AddCarvedItem( new WhiteScales( scales ), from ); break;
								case 5: corpse.AddCarvedItem( new BlueScales( scales ), from ); break;
							}
							break;
						}
					}

					from.SendMessage( "You cut away some scales, but they remain on the corpse." );
				}

				corpse.Carved = true;


				if ( corpse.IsCriminalAction( from ) )
					from.CriminalAction( true );
			}
		}