From 203d25e31b5bd0e1b68a0c83e432f4c2fe4bf686 Mon Sep 17 00:00:00 2001 From: xavier Date: Mon, 24 Dec 2012 13:49:52 +0000 Subject: [PATCH] fireflies --- .../Christmas/2010/Addons/FireFliesDeed.cs | 272 ++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 Scripts/Holiday Stuff/Christmas/2010/Addons/FireFliesDeed.cs diff --git a/Scripts/Holiday Stuff/Christmas/2010/Addons/FireFliesDeed.cs b/Scripts/Holiday Stuff/Christmas/2010/Addons/FireFliesDeed.cs new file mode 100644 index 000000000..7d84a648d --- /dev/null +++ b/Scripts/Holiday Stuff/Christmas/2010/Addons/FireFliesDeed.cs @@ -0,0 +1,272 @@ +using Server; +using Server.Engines.VeteranRewards; +using Server.Gumps; +using Server.Multis; +using Server.Network; +using Server.Targeting; +using System; + +namespace Server.Items +{ + public class Fireflies : Item, IAddon + { + public override int LabelNumber { get { return 1150061; }} + + public Item Deed + { + get + { + FirefliesDeed deed = new FirefliesDeed(); + + return deed; + } + } + + public bool FacingSouth + { + get + { + if( ItemID == 0x2336 ) + return true; + + return false; + } + } + + [Constructable] + public Fireflies() + : this( 0x1596 ) + { + } + + [Constructable] + public Fireflies( int itemID ) + : base( itemID ) + { + LootType = LootType.Blessed; + Movable = false; + } + + public Fireflies( Serial serial ) + : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if( from.InRange( Location, 3 ) ) + { + BaseHouse house = BaseHouse.FindHouseAt( this ); + + if( house != null && house.IsOwner( from ) ) + { + from.CloseGump( typeof( RewardDemolitionGump ) ); + from.SendGump( new RewardDemolitionGump( this, 1049783 ) ); // Do you wish to re-deed this decoration? + } + else + from.SendLocalizedMessage( 1049784 ); // You can only re-deed this decoration if you are the house owner or originally placed the decoration. + } + 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 bool CouldFit( IPoint3D p, Map map ) + { + if( map == null || !map.CanFit( p.X, p.Y, p.Z, ItemData.Height ) ) + return false; + + if( FacingSouth ) + return BaseAddon.IsWall( p.X, p.Y - 1, p.Z, map ); // north wall + else + return BaseAddon.IsWall( p.X - 1, p.Y, p.Z, map ); // west wall + } + } + + public class FirefliesDeed : Item + { + public override int LabelNumber { get { return 1150061; } } + + [Constructable] + public FirefliesDeed() + : base( 0x14F0 ) + { + LootType = LootType.Blessed; + Weight = 1.0; + } + + public FirefliesDeed( Serial serial ) + : base( serial ) + { + } + + public override void OnDoubleClick( Mobile from ) + { + if( IsChildOf( from.Backpack ) ) + { + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if( house != null && house.IsOwner( from ) ) + { + from.CloseGump( typeof( FacingGump ) ); + + if( !from.SendGump( new FacingGump( this, from ) ) ) + { + from.SendLocalizedMessage( 1150062 ); // You fail to re-deed the holiday fireflies. + } + } + else + from.SendLocalizedMessage( 502092 ); // You must be in your house to do this. + } + else + from.SendLocalizedMessage( 1042038 ); // You must have the object in your backpack to use it. + } + + 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(); + } + + private class FacingGump : Gump + { + private FirefliesDeed m_Deed; + private Mobile m_Placer; + + private enum Buttons + { + Cancel, + South, + East + } + + public FacingGump( FirefliesDeed deed, Mobile player ) + : base( 150, 50 ) + { + m_Deed = deed; + m_Placer = player; + + Closable = true; + Disposable = true; + Dragable = true; + Resizable = false; + + AddPage( 0 ); + + AddBackground( 0, 0, 300, 150, 0xA28 ); + + AddItem( 90, 30, 0x2332 ); + AddItem( 180, 30, 0x2336 ); + + AddButton( 50, 35, 0x868, 0x869, ( int )Buttons.East, GumpButtonType.Reply, 0 ); + AddButton( 145, 35, 0x868, 0x869, ( int )Buttons.South, GumpButtonType.Reply, 0 ); + } + + public override void OnResponse( NetState sender, RelayInfo info ) + { + int m_ItemID; + + switch( (int)info.ButtonID ) + { + case ( int )Buttons.East: m_ItemID = 0x2332; break; + case ( int )Buttons.South: m_ItemID = 0x2336; break; + default: return; + } + + m_Placer.Target = new InternalTarget( m_Deed, m_Placer, m_ItemID ); + + } + } + + private class InternalTarget : Target + { + private FirefliesDeed m_FirefliesDeed; + private int m_ItemID; + private Mobile m_Placer; + + public InternalTarget( FirefliesDeed m_Deed, Mobile m_Placer, int itemid ) + : base( -1, true, TargetFlags.None ) + { + m_FirefliesDeed = m_Deed; + m_ItemID = itemid; + } + + protected override void OnTarget( Mobile from, object targeted ) + { + if( m_FirefliesDeed == null || m_FirefliesDeed.Deleted ) + return; + + if( m_FirefliesDeed.IsChildOf( from.Backpack ) ) + { + BaseHouse house = BaseHouse.FindHouseAt( from ); + + if( house != null && house.IsOwner( from ) ) + { + IPoint3D p = targeted as IPoint3D; + Map map = from.Map; + + if( p == null || map == null || map == Map.Internal ) + return; + + Point3D p3d = new Point3D( p ); + ItemData id = TileData.ItemTable[ m_ItemID & TileData.MaxItemValue ]; + + if( map.CanFit( p3d, id.Height ) ) + { + house = BaseHouse.FindHouseAt( p3d, map, id.Height ); + + if( house != null && house.IsOwner( from ) ) + { + bool north = BaseAddon.IsWall( p3d.X, p3d.Y - 1, p3d.Z, map ); + bool west = BaseAddon.IsWall( p3d.X - 1, p3d.Y, p3d.Z, map ); + + if( ( m_ItemID == 0x2336 && north ) || ( m_ItemID == 0x2332 && west ) || from.Map.GetItemsInRange( p3d, 1 ) ) + { + Fireflies flies = new Fireflies( m_ItemID ); + + house.Addons.Add( flies ); + + flies.MoveToWorld( p3d, from.Map ); + + m_FirefliesDeed.Delete(); + } + + else + from.SendLocalizedMessage( 1150065 ); // The banner must be placed next to a wall. + } + else + from.SendLocalizedMessage( 1042036 ); // That location is not in your house. + } + else + from.SendLocalizedMessage( 500269 ); // You cannot build that there. + } + else + from.SendLocalizedMessage( 502092 ); // You must be in your house to do this. + } + else + from.SendLocalizedMessage( 1042038 ); // You must have the object in your backpack to use it. + } + } + } +} \ No newline at end of file