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; }