Beispiel #1
0
        internal bool ReadMovement(IMoveable pMoveable, Packet pPacket)
        {
            byte movements;
            Coordinates position = null;
            ushort foothold = 0;
            byte stance = 0;
            if (!pPacket.ReadByte(out movements)) return false;
            while (movements-- > 0)
            {
                byte type;
                if (!pPacket.ReadByte(out type)) return false;
                switch (type)
                {
                    case 0:
                    case 5:
                        if (!pPacket.ReadCoordinates(out position) ||
                            !pPacket.ReadSkip(4) ||
                            !pPacket.ReadUShort(out foothold) ||
                            !pPacket.ReadByte(out stance) ||
                            !pPacket.ReadSkip(2)) return false;
                        break;
                    case 1:
                    case 2:
                    case 6:
                    case 13:
                        if (!pPacket.ReadCoordinates(out position) ||
                            !pPacket.ReadByte(out stance) ||
                            !pPacket.ReadUShort(out foothold)) return false;
                        break;
                    case 3:
                    case 4:
                    case 7:
                    case 8:
                    case 9:
                        if (!pPacket.ReadCoordinates(out position) ||
                            !pPacket.ReadSkip(4) ||
                            !pPacket.ReadByte(out stance)) return false;
                        break;
                    case 10:
                        if (!pPacket.ReadSkip(1)) return false;
                        break;
                    case 11:
                        if (!pPacket.ReadCoordinates(out position) ||
                            !pPacket.ReadUShort(out foothold) ||
                            !pPacket.ReadByte(out stance) ||
                            !pPacket.ReadSkip(2)) return false;
                        break;
                    case 12:
                    case 16:
                        if (!pPacket.ReadSkip(7)) return false;
                        break;
                    case 14:
                        if (!pPacket.ReadSkip(9)) return false;
                        break;
                    case 15:
                        if (!pPacket.ReadCoordinates(out position) ||
                            !pPacket.ReadSkip(6) ||
                            !pPacket.ReadUShort(out foothold) ||
                            !pPacket.ReadByte(out stance) ||
                            !pPacket.ReadSkip(2)) return false;
                        break;
                    case 17:
                        if (!pPacket.ReadCoordinates(out position) ||
                            !pPacket.ReadUShort(out foothold) ||
                            !pPacket.ReadByte(out stance) ||
                            !pPacket.ReadSkip(6)) return false;
                        break;
                    default: return false;
                }
            }

            if (position != null)
            {
                pMoveable.Position = position;
                pMoveable.Foothold = foothold;
                pMoveable.Stance = stance;
            }
            return true;
        }