using System; using Server; using Server.Items; using Server.Targeting; using Server.Network; namespace Server.Engines.Plants { public class PlantBowl : Item { public override int LabelNumber { get { return 1060834; } } // a plant bowl [Constructable] public PlantBowl() : base( 0x15FD ) { Weight = 1.0; } public PlantBowl( Serial serial ) : base( serial ) { } public override void OnDoubleClick( Mobile from ) { if ( !IsChildOf( from.Backpack ) ) { from.SendLocalizedMessage( 1042664 ); // You must have the object in your backpack to use it. return; } from.Target = new InternalTarget( this ); from.SendLocalizedMessage( 1061897 ); // Choose a patch of dirt to scoop up. } private class InternalTarget : Target { private PlantBowl m_PlantBowl; public InternalTarget( PlantBowl plantBowl ) : base( 3, true, TargetFlags.None ) { m_PlantBowl = plantBowl; } protected override void OnTarget( Mobile from, object targeted ) { if ( m_PlantBowl.Deleted ) return; if ( !m_PlantBowl.IsChildOf( from.Backpack ) ) { from.SendLocalizedMessage( 1042664 ); // You must have the object in your backpack to use it. return; } if ( targeted is FertileDirt ) { int _dirtNeeded = Core.ML ? 20 : 40; FertileDirt dirt = (FertileDirt)targeted; if ( !dirt.IsChildOf( from.Backpack ) ) { from.SendLocalizedMessage( 1042664 ); // You must have the object in your backpack to use it. } else if ( dirt.Amount < _dirtNeeded ) { from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061896 ); // You need more dirt to fill a plant bowl! } else { PlantItem fullBowl = new PlantItem( true ); if ( from.PlaceInBackpack( fullBowl ) ) { dirt.Consume( _dirtNeeded ); m_PlantBowl.Delete(); from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061895 ); // You fill the bowl with fresh dirt. } else { fullBowl.Delete(); from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061894 ); // There is no room in your backpack for a bowl full of dirt! } } } else if ( PlantBowl.IsDirtPatch( targeted ) ) { PlantItem fullBowl = new PlantItem( false ); if ( from.PlaceInBackpack( fullBowl ) ) { m_PlantBowl.Delete(); from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061895 ); // You fill the bowl with fresh dirt. } else { fullBowl.Delete(); from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061894 ); // There is no room in your backpack for a bowl full of dirt! } } else { from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1061893 ); // You'll want to gather fresh dirt in order to raise a healthy plant! } } protected override void OnTargetOutOfRange( Mobile from, object targeted ) { from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 502825 ); // That location is too far away } } 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(); } public static bool IsDirtPatch( object obj ) { int tileID; if ( obj is Static && !((Static)obj).Movable ) tileID = (((Static)obj).ItemID & 0x3FFF) | 0x4000; else if ( obj is StaticTarget ) tileID = (((StaticTarget)obj).ItemID & 0x3FFF) | 0x4000; else if ( obj is LandTarget ) tileID = ((LandTarget)obj).TileID; else return false; bool contains = false; for ( int i = 0; !contains && i < m_DirtPatchTiles.Length; i += 2 ) contains = ( tileID >= m_DirtPatchTiles[i] && tileID <= m_DirtPatchTiles[i + 1] ); return contains; } private static int[] m_DirtPatchTiles = new int[] { 0x9, 0x15, 0x71, 0x7C, 0x82, 0xA7, 0xDC, 0xE3, 0xE8, 0xEB, 0x141, 0x144, 0x14C, 0x15C, 0x169, 0x174, 0x1DC, 0x1EF, 0x272, 0x275, 0x27E, 0x281, 0x2D0, 0x2D7, 0x2E5, 0x2FF, 0x303, 0x31F, 0x32C, 0x32F, 0x33D, 0x340, 0x345, 0x34C, 0x355, 0x358, 0x367, 0x36E, 0x377, 0x37A, 0x38D, 0x390, 0x395, 0x39C, 0x3A5, 0x3A8, 0x3F6, 0x405, 0x547, 0x54E, 0x553, 0x556, 0x597, 0x59E, 0x623, 0x63A, 0x6F3, 0x6FA, 0x777, 0x791, 0x79A, 0x7A9, 0x7AE, 0x7B1, 0x98C, 0x99F, 0x9AC, 0x9BF, 0x5B27, 0x5B3E, 0x71F4, 0x71FB, 0x72C9, 0x72CA, }; } }