public WorldItem( Item item ) : base(0x1A) { this.EnsureCapacity( 20 ); // 14 base length // +2 - Amount // +2 - Hue // +1 - Flags uint serial = (uint)item.Serial; ushort itemID = item.ItemID; ushort amount = item.Amount; int x = item.Position.X; int y = item.Position.Y; ushort hue = item.Hue; byte flags = item.GetPacketFlags(); byte direction = item.Direction; if ( amount != 0 ) serial |= 0x80000000; else serial &= 0x7FFFFFFF; Write( (uint) serial ); Write( (ushort) (itemID & 0x7FFF) ); if ( amount != 0 ) Write( (ushort) amount ); x &= 0x7FFF; if ( direction != 0 ) x |= 0x8000; Write( (ushort) x ); y &= 0x3FFF; if ( hue != 0 ) y |= 0x8000; if ( flags != 0 ) y |= 0x4000; Write( (ushort) y ); if ( direction != 0 ) Write( (byte) direction ); Write( (sbyte) item.Position.Z ); if ( hue != 0 ) Write( (ushort) hue ); if ( flags != 0 ) Write( (byte) flags ); }
internal WorldItem(Item item) : base(0x1A) { this.EnsureCapacity(20); // 14 base length // +2 - Amount // +2 - Hue // +1 - Flags uint serial = (uint)item.Serial; ushort itemID = item.ItemID; ushort amount = item.Amount; int x = item.Position.X; int y = item.Position.Y; ushort hue = item.Hue; byte flags = item.GetPacketFlags(); byte direction = item.Direction; if (amount != 0) { serial |= 0x80000000; } else { serial &= 0x7FFFFFFF; } Write((uint)serial); Write((ushort)(itemID & 0x7FFF)); if (amount != 0) { Write((ushort)amount); } x &= 0x7FFF; if (direction != 0) { x |= 0x8000; } Write((ushort)x); y &= 0x3FFF; if (hue != 0) { y |= 0x8000; } if (flags != 0) { y |= 0x4000; } Write((ushort)y); if (direction != 0) { Write((byte)direction); } Write((sbyte)item.Position.Z); if (hue != 0) { Write((ushort)hue); } if (flags != 0) { Write((byte)flags); } }