ModernUO/Scripts/Items/Misc/BaseCraftableItem.cs

159 lines
3.9 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Server.Network;
using Server.Engines.Craft;
using Server.Misc;
namespace Server.Items
{
public enum CraftQuality
{
Low,
Regular,
Exceptional
}
public abstract class BaseCraftableItem : Item, ICraftable
{
private Mobile m_Crafter;
private CraftQuality m_Quality;
private CraftResource m_Resource;
[CommandProperty( AccessLevel.GameMaster )]
public Mobile Crafter
{
get { return m_Crafter; }
set { m_Crafter = value; InvalidateProperties(); }
}
[CommandProperty( AccessLevel.GameMaster )]
public CraftQuality Quality
{
get { return m_Quality; }
set { m_Quality = value; InvalidateProperties(); }
}
[CommandProperty( AccessLevel.GameMaster )]
public CraftResource Resource
{
get { return m_Resource; }
set
{
if ( m_Resource != value )
{
m_Resource = value;
Hue = CraftResources.GetHue( m_Resource );
InvalidateProperties();
}
}
}
#region Old Item Serialization Vars
/* DO NOT USE! Only used in serialization of furniture that originally derived from Item */
private bool m_InheritsItem;
private int m_OldVersion;
protected bool InheritsItem
{
get{ return m_InheritsItem; }
}
protected int OldVersion
{
get{ return m_OldVersion; }
}
#endregion
public virtual CraftResource DefaultResource{ get{ return CraftResource.RegularWood; } }
public virtual bool DisplaysResource{ get{ return true; } }
//For odd entries that can be crafted exceptionally with maker's mark but don't actually display a maker's mark
public virtual bool DisplaysMakersMark{ get{ return true; } }
public BaseCraftableItem( int itemID ) : base( itemID )
{
m_Quality = CraftQuality.Regular;
Resource = DefaultResource;
}
public BaseCraftableItem(Serial serial) : base(serial)
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( m_Crafter != null && DisplaysMakersMark )
list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~
if ( m_Quality == CraftQuality.Exceptional )
list.Add( 1060636 ); // exceptional
if( ( m_Resource >= CraftResource.OakWood && m_Resource <= CraftResource.Frostwood ) && Hue == CraftResources.GetHue( m_Resource ) && DisplaysResource )
list.Add( CraftResources.GetLocalizationNumber( m_Resource ) ); // resource name
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int) 1);
writer.Write( m_Crafter );
writer.WriteEncodedInt( (int) m_Quality );
writer.WriteEncodedInt( (int) m_Resource );
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_Crafter = reader.ReadMobile();
m_Quality = (CraftQuality)reader.ReadEncodedInt();
m_Resource = (CraftResource)reader.ReadEncodedInt();
break;
}
case 0:
{
m_InheritsItem = true;
m_OldVersion = version;
m_Quality = CraftQuality.Regular;
m_Resource = DefaultResource;
break;
}
}
}
public virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
{
if ( Core.ML )
{
Quality = (CraftQuality)quality;
if ( makersMark )
Crafter = from;
Type resourceType = typeRes;
if ( resourceType == null )
resourceType = craftItem.Resources.GetAt( 0 ).ItemType;
Resource = CraftResources.GetFromType( resourceType );
CraftContext context = craftSystem.GetContext( from );
if ( context != null && context.DoNotColor )
Hue = 0;
}
return (int)Quality;
}
}
}