From 2e161d068c01e83e69bc996579496833cd7e1906 Mon Sep 17 00:00:00 2001 From: xavier Date: Mon, 25 Jul 2011 04:25:23 +0000 Subject: [PATCH] bad e in the folder name .. i dont trust funny lookin' e's. --- .../AwesomeDisturbingPortrait.cs | 188 ++++++++++++++++++ .../Evil Home Decor Collection/BedOfNails.cs | 180 +++++++++++++++++ .../Evil Home Decor Collection/BoneCouch.cs | 119 +++++++++++ .../Evil Home Decor Collection/BoneTable.cs | 63 ++++++ .../Evil Home Decor Collection/BoneThrone.cs | 101 ++++++++++ .../CreepyPortrait.cs | 129 ++++++++++++ .../DisturbingPortrait.cs | 122 ++++++++++++ .../HauntedMirror.cs | 114 +++++++++++ .../MountedPixieBlue.cs | 100 ++++++++++ .../MountedPixieGreen.cs | 100 ++++++++++ .../MountedPixieLime.cs | 100 ++++++++++ .../MountedPixieOrange.cs | 100 ++++++++++ .../MountedPixieWhite.cs | 100 ++++++++++ .../SacrificialAltar.cs | 164 +++++++++++++++ .../UnsettlingPortrait.cs | 126 ++++++++++++ 15 files changed, 1806 insertions(+) create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/AwesomeDisturbingPortrait.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/BedOfNails.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/BoneCouch.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/BoneTable.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/BoneThrone.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/CreepyPortrait.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/DisturbingPortrait.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/HauntedMirror.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/MountedPixieBlue.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/MountedPixieGreen.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/MountedPixieLime.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/MountedPixieOrange.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/MountedPixieWhite.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/SacrificialAltar.cs create mode 100644 Scripts/Items/Special/Evil Home Decor Collection/UnsettlingPortrait.cs diff --git a/Scripts/Items/Special/Evil Home Decor Collection/AwesomeDisturbingPortrait.cs b/Scripts/Items/Special/Evil Home Decor Collection/AwesomeDisturbingPortrait.cs new file mode 100644 index 000000000..170f79dc2 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/AwesomeDisturbingPortrait.cs @@ -0,0 +1,188 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x2A5D, 0x2A61 )] + public class AwesomeDisturbingPortraitComponent : AddonComponent + { + public override int LabelNumber { get { return 1074479; } } // Disturbing portrait + public bool FacingSouth { get { return ItemID < 0x2A61; } } + + private InternalTimer m_Timer; + + public AwesomeDisturbingPortraitComponent() : base( 0x2A5D ) + { + m_Timer = new InternalTimer( this, TimeSpan.FromSeconds( 1 ) ); + m_Timer.Start(); + } + + public AwesomeDisturbingPortraitComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Utility.InRange( Location, from.Location, 2 ) ) + { + int hours; + int minutes; + + Clock.GetTime( Map, X, Y, out hours, out minutes ); + + if ( hours < 4 || hours > 20 ) + Effects.PlaySound( Location, Map, 0x569 ); + + UpdateImage(); + } + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Timer != null && m_Timer.Running ) + m_Timer.Stop(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + m_Timer = new InternalTimer( this, TimeSpan.Zero ); + m_Timer.Start(); + } + + private void UpdateImage() + { + int hours; + int minutes; + + Clock.GetTime( Map, X, Y, out hours, out minutes ); + + if ( FacingSouth ) + { + if ( hours < 4 ) + ItemID = 0x2A60; + else if ( hours < 6 ) + ItemID = 0x2A5F; + else if ( hours < 8 ) + ItemID = 0x2A5E; + else if ( hours < 16 ) + ItemID = 0x2A5D; + else if ( hours < 18 ) + ItemID = 0x2A5E; + else if ( hours < 20 ) + ItemID = 0x2A5F; + else + ItemID = 0x2A60; + } + else + { + if ( hours < 4 ) + ItemID = 0x2A64; + else if ( hours < 6 ) + ItemID = 0x2A63; + else if ( hours < 8 ) + ItemID = 0x2A62; + else if ( hours < 16 ) + ItemID = 0x2A61; + else if ( hours < 18 ) + ItemID = 0x2A62; + else if ( hours < 20 ) + ItemID = 0x2A63; + else + ItemID = 0x2A64; + } + } + + private class InternalTimer : Timer + { + private AwesomeDisturbingPortraitComponent m_Component; + + public InternalTimer( AwesomeDisturbingPortraitComponent c, TimeSpan delay ) : base( delay, TimeSpan.FromMinutes( 10 ) ) + { + m_Component = c; + + Priority = TimerPriority.OneMinute; + } + + protected override void OnTick() + { + if ( m_Component != null && !m_Component.Deleted ) + m_Component.UpdateImage(); + } + } + } + + public class AwesomeDisturbingPortraitAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new AwesomeDisturbingPortraitDeed(); } } + + [Constructable] + public AwesomeDisturbingPortraitAddon() : base() + { + AddComponent( new AwesomeDisturbingPortraitComponent(), 0, 0, 0 ); + } + + public AwesomeDisturbingPortraitAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class AwesomeDisturbingPortraitDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new AwesomeDisturbingPortraitAddon(); } } + public override int LabelNumber { get { return 1074479; } } // Disturbing portrait + + [Constructable] + public AwesomeDisturbingPortraitDeed() : base() + { + LootType = LootType.Blessed; + } + + public AwesomeDisturbingPortraitDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/BedOfNails.cs b/Scripts/Items/Special/Evil Home Decor Collection/BedOfNails.cs new file mode 100644 index 000000000..a2c47cc1c --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/BedOfNails.cs @@ -0,0 +1,180 @@ +using System; + +namespace Server.Items +{ + public class BedOfNailsComponent : AddonComponent + { + public override int LabelNumber { get { return 1074801; } } // Bed of Nails + + public BedOfNailsComponent( int itemID ) : base( itemID ) + { + } + + public BedOfNailsComponent( Serial serial ) : base( serial ) + { + } + + public override bool OnMoveOver( Mobile m ) + { + bool allow = base.OnMoveOver( m ); + + if ( allow && Addon is BedOfNailsAddon ) + ( (BedOfNailsAddon) Addon ).OnMoveOver( m ); + + return allow; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + [FlipableAddon( Direction.South, Direction.East )] + public class BedOfNailsAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new BedOfNailsDeed(); } } + + private InternalTimer m_Timer; + + [Constructable] + public BedOfNailsAddon() : base() + { + Direction = Direction.South; + + AddComponent( new BedOfNailsComponent( 0x2A81 ), 0, 0, 0 ); + AddComponent( new BedOfNailsComponent( 0x2A82 ), 0, -1, 0 ); + } + + public BedOfNailsAddon( Serial serial ) : base( serial ) + { + } + + public override bool OnMoveOver( Mobile m ) + { + if ( m.Alive && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) ) + { + if ( m.Player ) + { + if ( m.Female ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x53B, 0x53D ) ); + else + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x53E, 0x540 ) ); + } + + if ( m_Timer == null || !m_Timer.Running ) + ( m_Timer = new InternalTimer( m ) ).Start(); + } + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + + public virtual void Flip( Mobile from, Direction direction ) + { + switch ( direction ) + { + case Direction.East: + AddComponent( new BedOfNailsComponent( 0x2A89 ), 0, 0, 0 ); + AddComponent( new BedOfNailsComponent( 0x2A8A ), -1, 0, 0 ); + break; + case Direction.South: + AddComponent( new BedOfNailsComponent( 0x2A81 ), 0, 0, 0 ); + AddComponent( new BedOfNailsComponent( 0x2A82 ), 0, -1, 0 ); + break; + } + } + + private class InternalTimer : Timer + { + private Mobile m_Mobile; + private Point3D m_Location; + + public InternalTimer( Mobile m ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 1 ), 5 ) + { + m_Mobile = m; + m_Location = Point3D.Zero; + } + + protected override void OnTick() + { + if ( m_Location != m_Mobile.Location ) + { + int amount = Utility.RandomMinMax( 0, 7 ); + + for ( int i = 0; i < amount; i++ ) + { + int x = m_Mobile.X + Utility.RandomMinMax( -1, 1 ); + int y = m_Mobile.Y + Utility.RandomMinMax( -1, 1 ); + int z = m_Mobile.Z; + + if ( !m_Mobile.Map.CanFit( x, y, z, 1, false, false, true ) ) + { + z = m_Mobile.Map.GetAverageZ( x, y ); + + if ( !m_Mobile.Map.CanFit( x, y, z, 1, false, false, true ) ) + continue; + } + + Blood blood = new Blood( Utility.RandomMinMax( 0x122C, 0x122F ) ); + blood.MoveToWorld( new Point3D( x, y, z ), m_Mobile.Map ); + } + + m_Location = m_Mobile.Location; + } + } + } + } + + public class BedOfNailsDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new BedOfNailsAddon(); } } + public override int LabelNumber { get { return 1074801; } } // Bed of Nails + + [Constructable] + public BedOfNailsDeed() : base() + { + LootType = LootType.Blessed; + } + + public BedOfNailsDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/BoneCouch.cs b/Scripts/Items/Special/Evil Home Decor Collection/BoneCouch.cs new file mode 100644 index 000000000..f6da54ed1 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/BoneCouch.cs @@ -0,0 +1,119 @@ +using System; + +namespace Server.Items +{ + public class BoneCouchComponent : AddonComponent + { + public override int LabelNumber { get { return 1074477; } } // Bone couch + + public BoneCouchComponent( int itemID ) : base( itemID ) + { + } + + public BoneCouchComponent( Serial serial ) : base( serial ) + { + } + + public override bool OnMoveOver( Mobile m ) + { + bool allow = base.OnMoveOver( m ); + + if ( allow && m.Alive && m.Player && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x547, 0x54A ) ); + + return allow; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + [FlipableAddon( Direction.South, Direction.East )] + public class BoneCouchAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new BoneCouchDeed(); } } + + [Constructable] + public BoneCouchAddon() : base() + { + Direction = Direction.South; + + AddComponent( new BoneCouchComponent( 0x2A5A ), 0, 0, 0 ); + AddComponent( new BoneCouchComponent( 0x2A5B ), -1, 0, 0 ); + } + + public BoneCouchAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + + public virtual void Flip( Mobile from, Direction direction ) + { + switch ( direction ) + { + case Direction.East: + AddComponent( new BoneCouchComponent( 0x2A80 ), 0, 0, 0 ); + AddComponent( new BoneCouchComponent( 0x2A7F ), 0, 1, 0 ); + break; + case Direction.South: + AddComponent( new BoneCouchComponent( 0x2A5A ), 0, 0, 0 ); + AddComponent( new BoneCouchComponent( 0x2A5B ), -1, 0, 0 ); + break; + } + } + } + + public class BoneCouchDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new BoneCouchAddon(); } } + public override int LabelNumber { get { return 1074477; } } // Bone couch + + [Constructable] + public BoneCouchDeed() : base() + { + LootType = LootType.Blessed; + } + + public BoneCouchDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/BoneTable.cs b/Scripts/Items/Special/Evil Home Decor Collection/BoneTable.cs new file mode 100644 index 000000000..6ca87c926 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/BoneTable.cs @@ -0,0 +1,63 @@ +using System; + +namespace Server.Items +{ + public class BoneTableAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new BoneTableDeed(); } } + + [Constructable] + public BoneTableAddon() : base() + { + AddComponent( new LocalizedAddonComponent( 0x2A5C, 1074478 ), 0, 0, 0 ); + } + + public BoneTableAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class BoneTableDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new BoneTableAddon(); } } + public override int LabelNumber { get { return 1074478; } } // Bone table + + [Constructable] + public BoneTableDeed() : base() + { + LootType = LootType.Blessed; + } + + public BoneTableDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/BoneThrone.cs b/Scripts/Items/Special/Evil Home Decor Collection/BoneThrone.cs new file mode 100644 index 000000000..1e0d31d39 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/BoneThrone.cs @@ -0,0 +1,101 @@ +using System; + +namespace Server.Items +{ + [Flipable( 0x2A58, 0x2A59 )] + public class BoneThroneComponent : AddonComponent + { + public override int LabelNumber { get { return 1074476; } } // Bone throne + + public BoneThroneComponent() : base( 0x2A58 ) + { + } + + public BoneThroneComponent( Serial serial ) : base( serial ) + { + } + + public override bool OnMoveOver( Mobile m ) + { + bool allow = base.OnMoveOver( m ); + + if ( allow && m.Alive && m.Player && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x54B, 0x54D ) ); + + return allow; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class BoneThroneAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new BoneThroneDeed(); } } + + [Constructable] + public BoneThroneAddon() : base() + { + AddComponent( new BoneThroneComponent(), 0, 0, 0 ); + } + + public BoneThroneAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class BoneThroneDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new BoneThroneAddon(); } } + public override int LabelNumber { get { return 1074476; } } // Bone throne + + [Constructable] + public BoneThroneDeed() : base() + { + LootType = LootType.Blessed; + } + + public BoneThroneDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/CreepyPortrait.cs b/Scripts/Items/Special/Evil Home Decor Collection/CreepyPortrait.cs new file mode 100644 index 000000000..52e81e80b --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/CreepyPortrait.cs @@ -0,0 +1,129 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x2A69, 0x2A6D )] + public class CreepyPortraitComponent : AddonComponent + { + public override int LabelNumber { get { return 1074481; } } // Creepy portrait + public override bool HandlesOnMovement { get { return true; } } + + public CreepyPortraitComponent() : base( 0x2A69 ) + { + } + + public CreepyPortraitComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Utility.InRange( Location, from.Location, 2 ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x565, 0x566 ) ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override void OnMovement( Mobile m, Point3D old ) + { + if ( m.Alive && m.Player && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) ) + { + if ( !Utility.InRange( old, Location, 2 ) && Utility.InRange( m.Location, Location, 2 ) ) + { + if ( ItemID == 0x2A69 || ItemID == 0x2A6D ) + Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 0.5 ), 3, new TimerCallback( Up ) ); + } + else if ( Utility.InRange( old, Location, 2 ) && !Utility.InRange( m.Location, Location, 2 ) ) + { + if ( ItemID == 0x2A6C || ItemID == 0x2A70 ) + Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 0.5 ), 3, new TimerCallback( Down ) ); + } + } + } + + private void Up() + { + ItemID += 1; + } + + private void Down() + { + ItemID -= 1; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class CreepyPortraitAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new CreepyPortraitDeed(); } } + + [Constructable] + public CreepyPortraitAddon() : base() + { + AddComponent( new CreepyPortraitComponent(), 0, 0, 0 ); + } + + public CreepyPortraitAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class CreepyPortraitDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new CreepyPortraitAddon(); } } + public override int LabelNumber { get { return 1074481; } } // Creepy portrait + + [Constructable] + public CreepyPortraitDeed() : base() + { + LootType = LootType.Blessed; + } + + public CreepyPortraitDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/DisturbingPortrait.cs b/Scripts/Items/Special/Evil Home Decor Collection/DisturbingPortrait.cs new file mode 100644 index 000000000..db7b3a5b4 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/DisturbingPortrait.cs @@ -0,0 +1,122 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x2A5D, 0x2A61 )] + public class DisturbingPortraitComponent : AddonComponent + { + public override int LabelNumber { get { return 1074479; } } // Disturbing portrait + + private Timer m_Timer; + + public DisturbingPortraitComponent() : base( 0x2A5D ) + { + m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), TimeSpan.FromMinutes( 3 ), new TimerCallback( Change ) ); + } + + public DisturbingPortraitComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Utility.InRange( Location, from.Location, 2 ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x567, 0x568 ) ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Timer != null && m_Timer.Running ) + m_Timer.Stop(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), TimeSpan.FromMinutes( 3 ), new TimerCallback( Change ) ); + } + + private void Change() + { + if ( ItemID < 0x2A61 ) + ItemID = Utility.RandomMinMax( 0x2A5D, 0x2A60 ); + else + ItemID = Utility.RandomMinMax( 0x2A61, 0x2A64 ); + } + } + + public class DisturbingPortraitAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new DisturbingPortraitDeed(); } } + + [Constructable] + public DisturbingPortraitAddon() : base() + { + AddComponent( new DisturbingPortraitComponent(), 0, 0, 0 ); + } + + public DisturbingPortraitAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class DisturbingPortraitDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new DisturbingPortraitAddon(); } } + public override int LabelNumber { get { return 1074479; } } // Disturbing portrait + + [Constructable] + public DisturbingPortraitDeed() : base() + { + LootType = LootType.Blessed; + } + + public DisturbingPortraitDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/HauntedMirror.cs b/Scripts/Items/Special/Evil Home Decor Collection/HauntedMirror.cs new file mode 100644 index 000000000..4bed3b977 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/HauntedMirror.cs @@ -0,0 +1,114 @@ +using System; + +namespace Server.Items +{ + [Flipable( 0x2A7B, 0x2A7D )] + public class HaunterMirrorComponent : AddonComponent + { + public override int LabelNumber { get { return 1074800; } } // Haunted Mirror + public override bool HandlesOnMovement { get { return true; } } + + public HaunterMirrorComponent() : base( 0x2A7B ) + { + } + + public HaunterMirrorComponent( Serial serial ) : base( serial ) + { + } + + public override void OnMovement( Mobile m, Point3D old ) + { + base.OnMovement( m, old ); + + if ( m.Alive && m.Player && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) ) + { + if ( !Utility.InRange( old, Location, 2 ) && Utility.InRange( m.Location, Location, 2 ) ) + { + if ( ItemID == 0x2A7B || ItemID == 0x2A7D ) + { + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x551, 0x553 ) ); + ItemID += 1; + } + } + else if ( Utility.InRange( old, Location, 2 ) && !Utility.InRange( m.Location, Location, 2 ) ) + { + if ( ItemID == 0x2A7C || ItemID == 0x2A7E ) + ItemID -= 1; + } + } + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class HaunterMirrorAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new HaunterMirrorDeed(); } } + + [Constructable] + public HaunterMirrorAddon() : base() + { + AddComponent( new HaunterMirrorComponent(), 0, 0, 0 ); + } + + public HaunterMirrorAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class HaunterMirrorDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new HaunterMirrorAddon(); } } + public override int LabelNumber { get { return 1074800; } } // Haunted Mirror + + [Constructable] + public HaunterMirrorDeed() : base() + { + LootType = LootType.Blessed; + } + + public HaunterMirrorDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieBlue.cs b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieBlue.cs new file mode 100644 index 000000000..715cf5b43 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieBlue.cs @@ -0,0 +1,100 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x2A75, 0x2A76 )] + public class MountedPixieBlueComponent : AddonComponent + { + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + public MountedPixieBlueComponent() : base( 0x2A75 ) + { + } + + public MountedPixieBlueComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Utility.InRange( Location, from.Location, 2 ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x55C, 0x55E ) ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieBlueAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new MountedPixieBlueDeed(); } } + + public MountedPixieBlueAddon() : base() + { + AddComponent( new MountedPixieBlueComponent(), 0, 0, 0 ); + } + + public MountedPixieBlueAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieBlueDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new MountedPixieBlueAddon(); } } + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + [Constructable] + public MountedPixieBlueDeed() : base() + { + LootType = LootType.Blessed; + } + + public MountedPixieBlueDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieGreen.cs b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieGreen.cs new file mode 100644 index 000000000..9a1943ea7 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieGreen.cs @@ -0,0 +1,100 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x2A71, 0x2A72 )] + public class MountedPixieGreenComponent : AddonComponent + { + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + public MountedPixieGreenComponent() : base( 0x2A71 ) + { + } + + public MountedPixieGreenComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Utility.InRange( Location, from.Location, 2 ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x554, 0x557 ) ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieGreenAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new MountedPixieGreenDeed(); } } + + public MountedPixieGreenAddon() : base() + { + AddComponent( new MountedPixieGreenComponent(), 0, 0, 0 ); + } + + public MountedPixieGreenAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieGreenDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new MountedPixieGreenAddon(); } } + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + [Constructable] + public MountedPixieGreenDeed() : base() + { + LootType = LootType.Blessed; + } + + public MountedPixieGreenDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieLime.cs b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieLime.cs new file mode 100644 index 000000000..1a0ca7497 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieLime.cs @@ -0,0 +1,100 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x2A77, 0x2A78 )] + public class MountedPixieLimeComponent : AddonComponent + { + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + public MountedPixieLimeComponent() : base( 0x2A77 ) + { + } + + public MountedPixieLimeComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Utility.InRange( Location, from.Location, 2 ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x55F, 0x561 ) ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieLimeAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new MountedPixieLimeDeed(); } } + + public MountedPixieLimeAddon() : base() + { + AddComponent( new MountedPixieLimeComponent(), 0, 0, 0 ); + } + + public MountedPixieLimeAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieLimeDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new MountedPixieLimeAddon(); } } + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + [Constructable] + public MountedPixieLimeDeed() : base() + { + LootType = LootType.Blessed; + } + + public MountedPixieLimeDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieOrange.cs b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieOrange.cs new file mode 100644 index 000000000..983d98e42 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieOrange.cs @@ -0,0 +1,100 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x2A73, 0x2A74 )] + public class MountedPixieOrangeComponent : AddonComponent + { + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + public MountedPixieOrangeComponent() : base( 0x2A73 ) + { + } + + public MountedPixieOrangeComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Utility.InRange( Location, from.Location, 2 ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x558, 0x55B ) ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieOrangeAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new MountedPixieOrangeDeed(); } } + + public MountedPixieOrangeAddon() : base() + { + AddComponent( new MountedPixieOrangeComponent(), 0, 0, 0 ); + } + + public MountedPixieOrangeAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieOrangeDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new MountedPixieOrangeAddon(); } } + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + [Constructable] + public MountedPixieOrangeDeed() : base() + { + LootType = LootType.Blessed; + } + + public MountedPixieOrangeDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieWhite.cs b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieWhite.cs new file mode 100644 index 000000000..866bf3009 --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/MountedPixieWhite.cs @@ -0,0 +1,100 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x2A79, 0x2A7A )] + public class MountedPixieWhiteComponent : AddonComponent + { + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + public MountedPixieWhiteComponent() : base( 0x2A79 ) + { + } + + public MountedPixieWhiteComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Utility.InRange( Location, from.Location, 2 ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x562, 0x564 ) ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieWhiteAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new MountedPixieWhiteDeed(); } } + + public MountedPixieWhiteAddon() : base() + { + AddComponent( new MountedPixieWhiteComponent(), 0, 0, 0 ); + } + + public MountedPixieWhiteAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class MountedPixieWhiteDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new MountedPixieWhiteAddon(); } } + public override int LabelNumber { get { return 1074482; } } // Mounted pixie + + [Constructable] + public MountedPixieWhiteDeed() : base() + { + LootType = LootType.Blessed; + } + + public MountedPixieWhiteDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/SacrificialAltar.cs b/Scripts/Items/Special/Evil Home Decor Collection/SacrificialAltar.cs new file mode 100644 index 000000000..bcdfd81bc --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/SacrificialAltar.cs @@ -0,0 +1,164 @@ +using System; + +namespace Server.Items +{ + [FlipableAddon( Direction.South, Direction.East )] + public class SacrificialAltarAddon : BaseAddonContainer + { + public override BaseAddonContainerDeed Deed { get { return new SacrificialAltarDeed(); } } + public override int LabelNumber { get { return 1074818; } } // Sacrificial Altar + public override int DefaultMaxWeight { get { return 0; } } + public override int DefaultGumpID { get { return 0x107; } } + public override int DefaultDropSound { get { return 0x42; } } + + private Timer m_Timer; + + [Constructable] + public SacrificialAltarAddon() : base( 0x2A9B ) + { + Direction = Direction.South; + + AddComponent( new LocalizedContainerComponent( 0x2A9A, 1074818 ), 1, 0, 0 ); + } + + public SacrificialAltarAddon( Serial serial ) : base( serial ) + { + } + + public override bool OnDragDrop( Mobile from, Item dropped ) + { + if ( !base.OnDragDrop( from, dropped ) ) + return false; + + if ( TotalItems >= 50 ) + { + SendLocalizedMessageTo( from, 501478 ); // The trash is full! Emptying! + Empty(); + } + else + { + SendLocalizedMessageTo( from, 1010442 ); // The item will be deleted in three minutes + + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), new TimerCallback( Empty ) ); + } + + return true; + } + + public override bool OnDragDropInto( Mobile from, Item item, Point3D p ) + { + if ( !base.OnDragDropInto( from, item, p ) ) + return false; + + if ( TotalItems >= 50 ) + { + SendLocalizedMessageTo( from, 501478 ); // The trash is full! Emptying! + Empty(); + } + else + { + SendLocalizedMessageTo( from, 1010442 ); // The item will be deleted in three minutes + + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), new TimerCallback( Empty ) ); + } + + return true; + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + if ( Items.Count > 0 ) + m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), new TimerCallback( Empty ) ); + } + + public virtual void Flip( Mobile from, Direction direction ) + { + switch ( direction ) + { + case Direction.East: + ItemID = 0x2A9C; + AddComponent( new LocalizedContainerComponent( 0x2A9D, 1074818 ), 0, -1, 0 ); + break; + case Direction.South: + ItemID = 0x2A9B; + AddComponent( new LocalizedContainerComponent( 0x2A9A, 1074818 ), 1, 0, 0 ); + break; + } + } + + public virtual void Empty() + { + if ( Items.Count > 0 ) + { + Point3D location = Location; + location.Z += 10; + + Effects.SendLocationEffect( location, Map, 0x3709, 10, 10, 0x356, 0 ); + Effects.PlaySound( location, Map, 0x32E ); + + if ( Items.Count > 0 ) + { + for ( int i = Items.Count - 1; i >= 0; --i ) + { + if ( i >= Items.Count ) + continue; + + Items[ i ].Delete(); + } + } + } + + if ( m_Timer != null ) + m_Timer.Stop(); + + m_Timer = null; + } + } + + public class SacrificialAltarDeed : BaseAddonContainerDeed + { + public override BaseAddonContainer Addon { get { return new SacrificialAltarAddon(); } } + public override int LabelNumber { get { return 1074818; } } // Sacrificial Altar + + [Constructable] + public SacrificialAltarDeed() : base() + { + LootType = LootType.Blessed; + } + + public SacrificialAltarDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +} diff --git a/Scripts/Items/Special/Evil Home Decor Collection/UnsettlingPortrait.cs b/Scripts/Items/Special/Evil Home Decor Collection/UnsettlingPortrait.cs new file mode 100644 index 000000000..c81b8404e --- /dev/null +++ b/Scripts/Items/Special/Evil Home Decor Collection/UnsettlingPortrait.cs @@ -0,0 +1,126 @@ +using System; +using Server; +using Server.Network; + +namespace Server.Items +{ + [Flipable( 0x2A65, 0x2A67 )] + public class UnsettlingPortraitComponent : AddonComponent + { + public override int LabelNumber { get { return 1074480; } } // Unsettling portrait + + private Timer m_Timer; + + public UnsettlingPortraitComponent() : base( 0x2A65 ) + { + m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), TimeSpan.FromMinutes( 3 ), new TimerCallback( ChangeDirection ) ); + } + + public UnsettlingPortraitComponent( Serial serial ) : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if ( Utility.InRange( Location, from.Location, 2 ) ) + Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x567, 0x568 ) ); + else + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + } + + public override void OnAfterDelete() + { + base.OnAfterDelete(); + + if ( m_Timer != null ) + m_Timer.Stop(); + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + + m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), TimeSpan.FromMinutes( 3 ), new TimerCallback( ChangeDirection ) ); + } + + private void ChangeDirection() + { + if ( ItemID == 0x2A65 ) + ItemID += 1; + else if ( ItemID == 0x2A66 ) + ItemID -= 1; + else if ( ItemID == 0x2A67 ) + ItemID += 1; + else if ( ItemID == 0x2A68 ) + ItemID -= 1; + } + } + + public class UnsettlingPortraitAddon : BaseAddon + { + public override BaseAddonDeed Deed { get { return new UnsettlingPortraitDeed(); } } + + [Constructable] + public UnsettlingPortraitAddon() : base() + { + AddComponent( new UnsettlingPortraitComponent(), 0, 0, 0 ); + } + + public UnsettlingPortraitAddon( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } + + public class UnsettlingPortraitDeed : BaseAddonDeed + { + public override BaseAddon Addon { get { return new UnsettlingPortraitAddon(); } } + public override int LabelNumber { get { return 1074480; } } // Unsettling portrait + + [Constructable] + public UnsettlingPortraitDeed() : base() + { + LootType = LootType.Blessed; + } + + public UnsettlingPortraitDeed( Serial serial ) : base( serial ) + { + } + + public override void Serialize( GenericWriter writer ) + { + base.Serialize( writer ); + + writer.WriteEncodedInt( 0 ); // version + } + + public override void Deserialize( GenericReader reader ) + { + base.Deserialize( reader ); + + int version = reader.ReadEncodedInt(); + } + } +}