Files
ClassicAssist.Avalonia/ClassicAssist.Shared/UO/Objects/Item.cs
T
Beyhan Oğur d5f52cc3d3 first commit
2026-09-03 04:45:36 +03:00

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() );
}
}
}
}