http://www.uodemise.com/forum/showthread.php?t=147193 Smith/Tailor PS should not be cursed http://www.uodemise.com/forum/showthread.php?t=148415 Large crafting system overhaul http://www.uodemise.com/forum/showthread.php?t=119342
649 lines
No EOL
15 KiB
C#
649 lines
No EOL
15 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Server;
|
|
using Server.Misc;
|
|
using Server.Multis;
|
|
using Server.Network;
|
|
using Server.Engines.Craft;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public abstract class BaseFurnitureContainer : BaseContainer, 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();
|
|
}
|
|
}
|
|
}
|
|
|
|
public virtual CraftResource DefaultResource{ get{ return CraftResource.RegularWood; } }
|
|
public virtual bool DisplaysResource{ get{ return true; } }
|
|
public virtual bool DisplaysMakersMark{ get{ return true; } }
|
|
|
|
#region Old Container Serialization Vars
|
|
/* DO NOT USE! Only used in serialization of furniture containers that originally derived from BaseContainer */
|
|
private bool m_InheritsBaseCont;
|
|
private int m_OldVersion;
|
|
|
|
protected bool InheritsBaseCont
|
|
{
|
|
get{ return m_InheritsBaseCont; }
|
|
}
|
|
|
|
protected int OldVersion
|
|
{
|
|
get{ return m_OldVersion; }
|
|
}
|
|
#endregion
|
|
|
|
public BaseFurnitureContainer( int itemID ) : base( itemID )
|
|
{
|
|
m_Quality = CraftQuality.Regular;
|
|
Resource = DefaultResource;
|
|
}
|
|
|
|
public BaseFurnitureContainer(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) 2);
|
|
|
|
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 2:
|
|
{
|
|
m_Crafter = reader.ReadMobile();
|
|
m_Quality = (CraftQuality)reader.ReadEncodedInt();
|
|
m_Resource = (CraftResource)reader.ReadEncodedInt();
|
|
break;
|
|
}
|
|
case 1: //Captcha for EmptyBookcase
|
|
case 0:
|
|
{
|
|
m_InheritsBaseCont = 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 quality;
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0x2815, 0x2816 )]
|
|
public class TallCabinet : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public TallCabinet() : base( 0x2816 )
|
|
{
|
|
Weight = 1.0;
|
|
}
|
|
|
|
public TallCabinet( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0x2817, 0x2818 )]
|
|
public class ShortCabinet : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public ShortCabinet() : base( 0x2818 )
|
|
{
|
|
Weight = 1.0;
|
|
}
|
|
|
|
public ShortCabinet( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
}
|
|
}
|
|
|
|
|
|
[Furniture]
|
|
[Flipable( 0x2857, 0x2858 )]
|
|
public class RedArmoire : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public RedArmoire() : base( 0x2858 )
|
|
{
|
|
Weight = 10.0;
|
|
}
|
|
|
|
public RedArmoire( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
|
|
if ( Weight == 1.0 )
|
|
Weight = 10.0;
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0x285D, 0x285E )]
|
|
public class CherryArmoire : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public CherryArmoire() : base( 0x285E )
|
|
{
|
|
Weight = 10.0;
|
|
}
|
|
|
|
public CherryArmoire( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
|
|
if ( Weight == 1.0 )
|
|
Weight = 10.0;
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0x285B, 0x285C )]
|
|
public class MapleArmoire : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public MapleArmoire() : base( 0x285C )
|
|
{
|
|
Weight = 10.0;
|
|
}
|
|
|
|
public MapleArmoire( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
|
|
if ( Weight == 1.0 )
|
|
Weight = 10.0;
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0x2859, 0x285A )]
|
|
public class ElegantArmoire : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public ElegantArmoire() : base( 0x285A )
|
|
{
|
|
Weight = 10.0;
|
|
}
|
|
|
|
public ElegantArmoire( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
|
|
if ( Weight == 1.0 )
|
|
Weight = 10.0;
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xA97, 0xA99, 0xA98, 0xA9A, 0xA9B, 0xA9C )]
|
|
public class FullBookcase : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public FullBookcase() : base( 0xA99 )
|
|
{
|
|
Weight = 1.0;
|
|
}
|
|
|
|
public FullBookcase( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xA9D, 0xA9E )]
|
|
public class EmptyBookcase : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public EmptyBookcase() : base( 0xA9E )
|
|
{
|
|
}
|
|
|
|
public EmptyBookcase( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 1 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
|
|
if ( version == 0 && Weight == 1.0 )
|
|
Weight = -1;
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xA2C, 0xA34 )]
|
|
public class Drawer : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public Drawer() : base( 0xA34 )
|
|
{
|
|
Weight = 1.0;
|
|
}
|
|
|
|
public Drawer( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xA30, 0xA38 )]
|
|
public class FancyDrawer : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public FancyDrawer() : base( 0xA38 )
|
|
{
|
|
Weight = 1.0;
|
|
}
|
|
|
|
public FancyDrawer( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0x2DF1, 0x2DF2 )]
|
|
public class OrnateElvenChest : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public OrnateElvenChest() : base( 0x2DF1 )
|
|
{
|
|
Weight = 1.0;
|
|
GumpID = 0x10C;
|
|
}
|
|
|
|
public OrnateElvenChest( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 1 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = reader.ReadInt();
|
|
|
|
if ( version < 1 )
|
|
GumpID = 0x10C;
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0x2DF3, 0x2DF4 )]
|
|
public class OrnateElvenBox : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public OrnateElvenBox() : base( 0x2DF3 )
|
|
{
|
|
Weight = 1.0;
|
|
GumpID = 0x10C;
|
|
}
|
|
|
|
public OrnateElvenBox( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 1 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = reader.ReadInt();
|
|
|
|
if ( version < 1 )
|
|
GumpID = 0x10C;
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xA4F, 0xA53 )]
|
|
public class Armoire : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public Armoire() : base( 0xA53 )
|
|
{
|
|
Weight = 1.0;
|
|
}
|
|
|
|
public override void DisplayTo( Mobile m )
|
|
{
|
|
if ( DynamicFurniture.Open( this, m ) )
|
|
base.DisplayTo( m );
|
|
}
|
|
|
|
public Armoire( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
|
|
DynamicFurniture.Close( this );
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xA4D, 0xA51 )]
|
|
public class FancyArmoire : BaseFurnitureContainer
|
|
{
|
|
[Constructable]
|
|
public FancyArmoire() : base( 0xA51 )
|
|
{
|
|
Weight = 1.0;
|
|
}
|
|
|
|
public override void DisplayTo( Mobile m )
|
|
{
|
|
if ( DynamicFurniture.Open( this, m ) )
|
|
base.DisplayTo( m );
|
|
}
|
|
|
|
public FancyArmoire( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
writer.Write( (int) 0 ); // version
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
int version = ( InheritsBaseCont ? OldVersion : reader.ReadInt() ); //Required for BaseFurnitureContainer insertion
|
|
|
|
DynamicFurniture.Close( this );
|
|
}
|
|
}
|
|
|
|
public class DynamicFurniture
|
|
{
|
|
private static Dictionary<Container, Timer> m_Table = new Dictionary<Container, Timer>();
|
|
|
|
public static bool Open( Container c, Mobile m )
|
|
{
|
|
if ( m_Table.ContainsKey( c ) )
|
|
{
|
|
c.SendRemovePacket();
|
|
Close( c );
|
|
c.Delta( ItemDelta.Update );
|
|
c.ProcessDelta();
|
|
return false;
|
|
}
|
|
|
|
if ( c is Armoire || c is FancyArmoire )
|
|
{
|
|
Timer t = new FurnitureTimer( c, m );
|
|
t.Start();
|
|
m_Table[c] = t;
|
|
|
|
switch ( c.ItemID )
|
|
{
|
|
case 0xA4D: c.ItemID = 0xA4C; break;
|
|
case 0xA4F: c.ItemID = 0xA4E; break;
|
|
case 0xA51: c.ItemID = 0xA50; break;
|
|
case 0xA53: c.ItemID = 0xA52; break;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static void Close( Container c )
|
|
{
|
|
Timer t = null;
|
|
|
|
m_Table.TryGetValue( c, out t );
|
|
|
|
if ( t != null )
|
|
{
|
|
t.Stop();
|
|
m_Table.Remove( c );
|
|
}
|
|
|
|
if ( c is Armoire || c is FancyArmoire )
|
|
{
|
|
switch ( c.ItemID )
|
|
{
|
|
case 0xA4C: c.ItemID = 0xA4D; break;
|
|
case 0xA4E: c.ItemID = 0xA4F; break;
|
|
case 0xA50: c.ItemID = 0xA51; break;
|
|
case 0xA52: c.ItemID = 0xA53; break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class FurnitureTimer : Timer
|
|
{
|
|
private Container m_Container;
|
|
private Mobile m_Mobile;
|
|
|
|
public FurnitureTimer( Container c, Mobile m ) : base( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 0.5 ) )
|
|
{
|
|
Priority = TimerPriority.TwoFiftyMS;
|
|
|
|
m_Container = c;
|
|
m_Mobile = m;
|
|
}
|
|
|
|
protected override void OnTick()
|
|
{
|
|
if ( m_Mobile.Map != m_Container.Map || !m_Mobile.InRange( m_Container.GetWorldLocation(), 3 ) )
|
|
DynamicFurniture.Close( m_Container );
|
|
}
|
|
}
|
|
} |