267 lines
No EOL
5.3 KiB
C#
267 lines
No EOL
5.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Server;
|
|
using Server.Multis;
|
|
using Server.Network;
|
|
|
|
namespace Server.Items
|
|
{
|
|
[Furniture]
|
|
[Flipable( 0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c )]
|
|
public class FullBookcase : BaseContainer
|
|
{
|
|
[Constructable]
|
|
public FullBookcase() : base( 0xA97 )
|
|
{
|
|
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 = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xa9d, 0xa9e )]
|
|
public class EmptyBookcase : BaseContainer
|
|
{
|
|
[Constructable]
|
|
public EmptyBookcase() : base( 0xA9D )
|
|
{
|
|
}
|
|
|
|
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 = reader.ReadInt();
|
|
|
|
if ( version == 0 && Weight == 1.0 )
|
|
Weight = -1;
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xa2c, 0xa34 )]
|
|
public class Drawer : BaseContainer
|
|
{
|
|
[Constructable]
|
|
public Drawer() : base( 0xA2C )
|
|
{
|
|
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 = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xa30, 0xa38 )]
|
|
public class FancyDrawer : BaseContainer
|
|
{
|
|
[Constructable]
|
|
public FancyDrawer() : base( 0xA30 )
|
|
{
|
|
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 = reader.ReadInt();
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xa4f, 0xa53 )]
|
|
public class Armoire : BaseContainer
|
|
{
|
|
[Constructable]
|
|
public Armoire() : base( 0xA4F )
|
|
{
|
|
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 = reader.ReadInt();
|
|
|
|
DynamicFurniture.Close( this );
|
|
}
|
|
}
|
|
|
|
[Furniture]
|
|
[Flipable( 0xa4d, 0xa51 )]
|
|
public class FancyArmoire : BaseContainer
|
|
{
|
|
[Constructable]
|
|
public FancyArmoire() : base( 0xA4D )
|
|
{
|
|
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 = reader.ReadInt();
|
|
|
|
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 );
|
|
}
|
|
}
|
|
} |