Seek() public static method

public static Seek ( int lookup ) : void
lookup int
return void
Esempio n. 1
0
        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?.CanRead != true) || (!_stream.CanSeek))
            {
                _stream = _mulPath == null ? null : new FileStream(_mulPath, FileMode.Open, FileAccess.Read, FileShare.Read);
            }

            if (_stream == null)
            {
                length  = extra = 0;
                patched = false;
                return(null);
            }

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

            patched = false;

            _stream.Seek(e.Lookup, SeekOrigin.Begin);
            return(_stream);
        }
Esempio n. 2
0
        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);
        }