Ejemplo n.º 1
0
        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 );
        }
Ejemplo n.º 2
0
        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);
            }
        }