193 lines
4.5 KiB
C#
193 lines
4.5 KiB
C#
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,
|
|
};
|
|
}
|
|
} |