116 lines
2.9 KiB
C#
116 lines
2.9 KiB
C#
using System;
|
|
using System.Text;
|
|
using ClassicAssist.Shared;
|
|
using ClassicAssist.Misc;
|
|
using ClassicAssist.UO.Data;
|
|
|
|
namespace ClassicAssist.UO.Objects
|
|
{
|
|
public class Item : Entity
|
|
{
|
|
private string _name;
|
|
|
|
public Item( int serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public Item( int serial, int containerSerial ) : base( serial )
|
|
{
|
|
Owner = containerSerial;
|
|
}
|
|
|
|
public int ArtDataID { get; set; }
|
|
public ItemCollection Container { get; set; }
|
|
public int Count { get; set; } = 1;
|
|
|
|
public override int Distance
|
|
{
|
|
get
|
|
{
|
|
if ( Owner == 0 )
|
|
{
|
|
return Math.Max( Math.Abs( X - Engine.Player?.X ?? X ), Math.Abs( Y - Engine.Player?.Y ?? Y ) );
|
|
}
|
|
|
|
Entity entity = UOMath.IsMobile( Owner )
|
|
? (Entity) Engine.Mobiles.GetMobile( Owner )
|
|
: Engine.Items.GetItem( Owner );
|
|
|
|
return entity?.Distance ?? 0;
|
|
}
|
|
}
|
|
|
|
public int Flags { get; set; }
|
|
public int Grid { get; set; }
|
|
public bool IsContainer => Container != null;
|
|
public Layer Layer { get; set; }
|
|
public int Light { get; set; }
|
|
|
|
public override string Name
|
|
{
|
|
get => string.IsNullOrEmpty( _name ) ? TileData.GetStaticTile( ID ).Name : _name;
|
|
set => _name = value;
|
|
}
|
|
|
|
[DisplayFormat( typeof( HexFormatProvider ) )]
|
|
public int Owner { get; set; }
|
|
|
|
[DisplayFormat( typeof( HexFormatProvider ) )]
|
|
public int RootOwner
|
|
{
|
|
get
|
|
{
|
|
int owner = Owner;
|
|
Item ownerItem;
|
|
|
|
while ( ( ownerItem = Engine.Items.GetItem( owner ) )?.Owner != 0 )
|
|
{
|
|
if ( ownerItem == null )
|
|
{
|
|
break;
|
|
}
|
|
|
|
owner = ownerItem.Owner;
|
|
}
|
|
|
|
return owner;
|
|
}
|
|
}
|
|
|
|
public bool IsDescendantOf( int serial, int searchLevel = -1 )
|
|
{
|
|
int owner = Owner;
|
|
int level = 0;
|
|
|
|
do
|
|
{
|
|
if ( owner == serial )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
level++;
|
|
|
|
if ( searchLevel != -1 && level > searchLevel )
|
|
{
|
|
break;
|
|
}
|
|
|
|
owner = Engine.Items.GetItem( owner )?.Owner ?? 0;
|
|
}
|
|
while ( owner != 0 );
|
|
|
|
return false;
|
|
}
|
|
|
|
protected override void ToString( StringBuilder sb )
|
|
{
|
|
base.ToString( sb );
|
|
|
|
if ( Container != null )
|
|
{
|
|
sb.AppendLine( Container.ToString() );
|
|
}
|
|
}
|
|
}
|
|
} |