public DisplayBoatHS( Mobile beholder, BaseBoat boat )
: base( 0xF7 )
{
List<IEntity> ents = boat.GetMovingEntities();
SafeAdd( boat.TillerMan, ents );
SafeAdd( boat.Hold, ents );
SafeAdd( boat.PPlank, ents );
SafeAdd( boat.SPlank, ents );
ents.Add( boat );
EnsureCapacity( 3 + 2 + ents.Count * 26 );
m_Stream.Write( (short) 0 ); // count placeholder
int count = 0;
foreach ( IEntity ent in ents )
{
if ( !beholder.CanSee( ent ) )
continue;
// Embedded WorldItemHS packets
m_Stream.Write( (byte) 0xF3 );
m_Stream.Write( (short) 0x1 );
if ( ent is BaseMulti )
{
BaseMulti bm = (BaseMulti)ent;
m_Stream.Write( (byte) 0x02 );
m_Stream.Write( (int) bm.Serial );
// TODO: Mask no longer needed, merge with Item case?
m_Stream.Write( (ushort) ( bm.ItemID & 0x3FFF ) );
m_Stream.Write( (byte) 0 );
m_Stream.Write( (short) bm.Amount );
m_Stream.Write( (short) bm.Amount );
m_Stream.Write( (short) ( bm.X & 0x7FFF ) );
m_Stream.Write( (short) ( bm.Y & 0x3FFF ) );
m_Stream.Write( (sbyte) bm.Z );
m_Stream.Write( (byte) bm.Light );
m_Stream.Write( (short) bm.Hue );
m_Stream.Write( (byte) bm.GetPacketFlags() );
}
else if ( ent is Mobile )
{
Mobile m = (Mobile)ent;
m_Stream.Write( (byte) 0x01 );
m_Stream.Write( (int) m.Serial );
m_Stream.Write( (short) m.Body );
m_Stream.Write( (byte) 0 );
m_Stream.Write( (short) 1 );
m_Stream.Write( (short) 1 );
m_Stream.Write( (short) ( m.X & 0x7FFF ) );
m_Stream.Write( (short) ( m.Y & 0x3FFF ) );
m_Stream.Write( (sbyte) m.Z );
m_Stream.Write( (byte) m.Direction );
m_Stream.Write( (short) m.Hue );
m_Stream.Write( (byte) m.GetPacketFlags() );
}
else if ( ent is Item )
{
Item item = (Item)ent;
m_Stream.Write( (byte) 0x00 );
m_Stream.Write( (int) item.Serial );
m_Stream.Write( (ushort) ( item.ItemID & 0xFFFF ) );
m_Stream.Write( (byte) 0 );
m_Stream.Write( (short) item.Amount );
m_Stream.Write( (short) item.Amount );
m_Stream.Write( (short) ( item.X & 0x7FFF ) );
m_Stream.Write( (short) ( item.Y & 0x3FFF ) );
m_Stream.Write( (sbyte) item.Z );
m_Stream.Write( (byte) item.Light );
m_Stream.Write( (short) item.Hue );
m_Stream.Write( (byte) item.GetPacketFlags() );
}
m_Stream.Write( (short) 0x00 );
++count;
}
m_Stream.Seek( 3, System.IO.SeekOrigin.Begin );
m_Stream.Write( (short) count );
}
}