Ultima.FileIndex.Seek C# (CSharp) Method

Seek() public method

public Seek ( int index, int &length, int &extra, bool &patched ) : Stream
index int
length int
extra int
patched bool
return System.IO.Stream
        public Stream Seek(int index, out int length, out int extra, out bool patched)
        {
            if (index < 0 || index >= Index.Length)
            {
                length = extra = 0;
                patched = false;
                return null;
            }

            Entry3D e = Index[index];

            if (e.lookup < 0)
            {
                length = extra = 0;
                patched = false;
                return null;
            }

            length = e.length & 0x7FFFFFFF;
            extra = e.extra;

            if ((e.length & (1 << 31)) != 0)
            {
                patched = true;
                Verdata.Seek(e.lookup);
                return Verdata.Stream;
            }

            if (e.length < 0)
            {
                length = extra = 0;
                patched = false;
                return null;
            }

            if ((Stream == null) || (!Stream.CanRead) || (!Stream.CanSeek))
            {
                if (MulPath == null)
                    Stream = null;
                else
                    Stream = new FileStream(MulPath, FileMode.Open, FileAccess.Read, FileShare.Read);
            }

            if (Stream == null)
            {
                length = extra = 0;
                patched = false;
                return null;
            }
            else if (Stream.Length < e.lookup)
            {
                length = extra = 0;
                patched = false;
                return null;
            }

            patched = false;

            Stream.Seek(e.lookup, SeekOrigin.Begin);
            return Stream;
        }

Usage Example

Beispiel #1
0
        public static byte[] GetRawGump(int index, out int width, out int height)
        {
            width  = -1;
            height = -1;
            int    length, extra;
            bool   patched;
            Stream stream = m_FileIndex.Seek(index, out length, out extra, out patched);

            if (stream == null)
            {
                return(null);
            }
            if (extra == -1)
            {
                return(null);
            }
            width  = (extra >> 16) & 0xFFFF;
            height = extra & 0xFFFF;
            if (width <= 0 || height <= 0)
            {
                return(null);
            }
            byte[] buffer = new byte[length];
            stream.Read(buffer, 0, length);
            stream.Close();
            return(buffer);
        }
All Usage Examples Of Ultima.FileIndex::Seek