Beispiel #1
0
        public SmoothMovement(BaseSmoothMulti multi, DynamicComponentList objectsToMove)
            : base(0xF6)
        {
            var length = (short)(3 + 15 + (objectsToMove.Count * 10));

            EnsureCapacity(length);

            length = (short)(((length & 0xff) << 8) | ((length >> 8) & 0xff));

            //Hungarian notation used to be compatible with the core code
            m_Stream.Seek(1, SeekOrigin.Begin);
            m_Stream.Write(length);

            m_Stream.Write((int)multi.Serial);
            m_Stream.Write((byte)multi.Speed);
            m_Stream.Write((byte)multi.Moving);
            m_Stream.Write((byte)multi.Facing);

            m_Stream.Write((short)multi.X);
            m_Stream.Write((short)multi.Y);
            m_Stream.Write((short)multi.Z);

            m_Stream.Write((short)0);

            int count = 0;

            //Safety check : avoiding client stack overflow
            if (multi != null && multi.ContainedObjects != null)
            {
                multi.ContainedObjects.Remove(multi);
            }

            objectsToMove.ForEachObject(onBoard =>
            {
                m_Stream.Write((int)onBoard.Serial);
                m_Stream.Write((short)onBoard.X);
                m_Stream.Write((short)onBoard.Y);
                m_Stream.Write((short)onBoard.Z);
                ++count;
            },
                                        onBoard =>
            {
                m_Stream.Write((int)onBoard.Serial);
                m_Stream.Write((short)onBoard.X);
                m_Stream.Write((short)onBoard.Y);
                m_Stream.Write((short)onBoard.Z);
                ++count;
            });

            m_Stream.Seek(16, System.IO.SeekOrigin.Begin);
            m_Stream.Write((short)count);
        }
Beispiel #2
0
            public ContainerMultiList(BaseSmoothMulti multi, DynamicComponentList objectsOnBoard)
                : base(0xF7)
            {
                EnsureCapacity(5 + objectsOnBoard.Count * 26);

                m_Stream.Write((short)objectsOnBoard.Count);
                new WorldItemHS(multi, m_Stream);
                objectsOnBoard.ForEachObject(
                    item => new WorldItemHS(item, m_Stream),
                    mob =>
                    {
                        if (mob.Hidden == false)
                            new WorldItemHS(mob, m_Stream);
                    }
                );
            }
Beispiel #3
0
            public SmoothMovement(BaseSmoothMulti multi, DynamicComponentList objectsToMove)
                : base(0xF6)
            {
                EnsureCapacity(18 + objectsToMove.Count * 10);

                m_Stream.Write((int)multi.Serial);
                m_Stream.Write((byte)multi.CurrentSpeed);
                m_Stream.Write((byte)multi.Moving);
                m_Stream.Write((byte)multi.Facing);

                m_Stream.Write((short)multi.X);
                m_Stream.Write((short)multi.Y);
                m_Stream.Write((short)multi.Z);

                m_Stream.Write((short)(objectsToMove.Count));
                objectsToMove.ForEachObject(onBoard =>
                {
                    m_Stream.Write((int)onBoard.Serial);
                    m_Stream.Write((short)onBoard.X);
                    m_Stream.Write((short)onBoard.Y);
                    m_Stream.Write((short)onBoard.Z);
                },
                onBoard =>
                {
                    m_Stream.Write((int)onBoard.Serial);
                    m_Stream.Write((short)onBoard.X);
                    m_Stream.Write((short)onBoard.Y);
                    m_Stream.Write((short)onBoard.Z);
                }
                );
            }