protected override void OnTarget( Mobile from, object targeted )
		{
			IPoint3D p = targeted as IPoint3D;
			Map map = from.Map;

			if ( p == null || map == null || m_Maker == null || m_Maker.Deleted )
				return;
				
			if ( m_Maker.IsChildOf( from.Backpack ) )
			{
				SpellHelper.GetSurfaceTop( ref p );			
				BaseHouse house = null;
				Point3D loc = new Point3D( p );
				
				AddonFitResult result = CouldFit( loc, map, from, ref house );
								
				if ( result == AddonFitResult.Valid )
				{				
					CharacterStatue statue = new CharacterStatue( from, m_Type );
					CharacterStatuePlinth plinth = new CharacterStatuePlinth( statue );
										
					house.Addons.Add( plinth );
					
					statue.Plinth = plinth;
					plinth.MoveToWorld( loc, map );
					statue.InvalidatePose();
					
					from.SendGump( new CharacterStatueGump( m_Maker, statue ) );
				}
				else if ( result == AddonFitResult.Blocked )
					from.SendLocalizedMessage( 500269 ); // You cannot build that there.
				else if ( result == AddonFitResult.NotInHouse )
					from.SendLocalizedMessage( 1076192 ); // Statues can only be placed in houses where you are the owner or co-owner.
				else if ( result == AddonFitResult.DoorsNotClosed )
					from.SendMessage( "You must close all house doors before placing this." );
				else if ( result == AddonFitResult.DoorTooClose )
					from.SendLocalizedMessage( 500271 ); // You cannot build near the door.				
			}
			else
				from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
		}
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadEncodedInt();

			m_Type = (StatueType) reader.ReadInt();
			m_Pose = (StatuePose) reader.ReadInt();
			m_Material = (StatueMaterial) reader.ReadInt();

			m_SculptedBy = reader.ReadMobile();
			m_SculptedOn = reader.ReadDateTime();

			m_Plinth = reader.ReadItem() as CharacterStatuePlinth;
			m_IsRewardItem = reader.ReadBool();

			InvalidatePose();

			Frozen = true;

			if( m_SculptedBy == null || Map == Map.Internal )
			{
				Timer.DelayCall( TimeSpan.Zero, new TimerCallback( Delete ) );
			}
		}
Ejemplo n.º 3
0
        protected override void OnTarget( Mobile from, object targeted )
        {
            IPoint3D p = targeted as IPoint3D;
            Map map = from.Map;

            if ( p == null || map == null || m_Maker == null || m_Maker.Deleted )
                return;

            if ( m_Maker.IsChildOf( from.Backpack ) )
            {
                SpellHelper.GetSurfaceTop( ref p );
                BaseHouse house = null;
                Point3D loc = new Point3D( p );

                if ( targeted is Item && !((Item) targeted).IsLockedDown && !((Item) targeted).IsSecure && !(targeted is AddonComponent) )
                {
                    from.SendLocalizedMessage( 1076191 ); // Statues can only be placed in houses.
                    return;
                }
                else if ( from.IsBodyMod )
                {
                    from.SendLocalizedMessage( 1073648 ); // You may only proceed while in your original state...
                    return;
                }

                AddonFitResult result = CouldFit( loc, map, from, ref house );

                if ( result == AddonFitResult.Valid )
                {
                    CharacterStatue statue = new CharacterStatue( from, m_Type );
                    CharacterStatuePlinth plinth = new CharacterStatuePlinth( statue );

                    house.Addons.Add( plinth );

                    if ( m_Maker is IRewardItem )
                        statue.IsRewardItem = ( (IRewardItem) m_Maker).IsRewardItem;

                    statue.Plinth = plinth;
                    plinth.MoveToWorld( loc, map );
                    statue.InvalidatePose();

                    from.CloseGump( typeof( CharacterStatueGump ) );
                    from.SendGump( new CharacterStatueGump( m_Maker, statue, from ) );
                }
                else if ( result == AddonFitResult.Blocked )
                    from.SendLocalizedMessage( 500269 ); // You cannot build that there.
                else if ( result == AddonFitResult.NotInHouse )
                    from.SendLocalizedMessage( 1076192 ); // Statues can only be placed in houses where you are the owner or co-owner.
                else if ( result == AddonFitResult.DoorTooClose )
                    from.SendLocalizedMessage( 500271 ); // You cannot build near the door.
            }
            else
                from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
        }
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadEncodedInt();

			m_Type = (StatueType) reader.ReadInt();
			m_Pose = (StatuePose) reader.ReadInt();
			m_Material = (StatueMaterial) reader.ReadInt();

			m_SculptedBy = reader.ReadMobile();
			m_SculptedOn = reader.ReadDateTime();

			m_Plinth = reader.ReadItem() as CharacterStatuePlinth;
			m_IsRewardItem = reader.ReadBool();

			InvalidatePose();

			Frozen = true;
		}
Ejemplo n.º 5
0
        protected override void OnTarget(Mobile from, object targeted)
        {
            var p = targeted as IPoint3D;
            Map map = from.Map;

            if (p == null || map == null || m_Maker == null || m_Maker.Deleted)
            {
                return;
            }

            if (m_Maker.IsChildOf(from.Backpack))
            {
                SpellHelper.GetSurfaceTop(ref p);
                BaseHouse house = null;
                var loc = new Point3D(p);

                if (m_Maker is CharacterStatueDeed && !((CharacterStatueDeed) m_Maker).NoHouse ||
                    m_Maker is CharacterStatueMaker && !((CharacterStatueMaker) m_Maker).NoHouse)
                {
                    if (targeted is Item && !((Item) targeted).IsLockedDown && !((Item) targeted).IsSecure &&
                        !(targeted is AddonComponent))
                    {
                        from.SendLocalizedMessage(1076191); // Statues can only be placed in houses.
                        return;
                    }
                }
                if (@from.IsBodyMod)
                {
                    @from.SendLocalizedMessage(1073648); // You may only proceed while in your original state...
                    return;
                }

                AddonFitResult result = CouldFit(loc, map, from, ref house);

                if (result == AddonFitResult.Valid || m_Maker is CharacterStatueDeed && ((CharacterStatueDeed) m_Maker).NoHouse ||
                    m_Maker is CharacterStatueMaker && ((CharacterStatueMaker) m_Maker).NoHouse)
                {
                    var statue = new CharacterStatue(from, m_Type);
                    var plinth = new CharacterStatuePlinth(statue);

                    if (m_Maker is CharacterStatueDeed && !((CharacterStatueDeed) m_Maker).NoHouse ||
                        m_Maker is CharacterStatueMaker && !((CharacterStatueMaker) m_Maker).NoHouse)
                    {
                        house.Addons.Add(plinth);
                    }

                    if (m_Maker is IRewardItem)
                    {
                        statue.IsRewardItem = ((IRewardItem) m_Maker).IsRewardItem;
                    }

                    statue.Plinth = plinth;
                    plinth.MoveToWorld(loc, map);
                    statue.InvalidatePose();

                    /*
                     * TODO: Previously the maker wasn't deleted until after statue
                     * customization, leading to redeeding issues. Exact OSI behavior
                     * needs looking into.
                     */
                    m_Maker.Delete();
                    statue.Sculpt(from);

                    from.CloseGump(typeof(CharacterStatueGump));
                    from.SendGump(new CharacterStatueGump(m_Maker, statue, from));
                }
                else if (result == AddonFitResult.Blocked)
                {
                    from.SendLocalizedMessage(500269); // You cannot build that there.
                }
                else if (result == AddonFitResult.NotInHouse)
                {
                    from.SendLocalizedMessage(1076192);
                    // Statues can only be placed in houses where you are the owner or co-owner.
                }
                else if (result == AddonFitResult.DoorTooClose)
                {
                    from.SendLocalizedMessage(500271); // You cannot build near the door.
                }
            }
            else
            {
                from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
            }
        }