示例#1
0
文件: Multis.cs 项目: uotools/PlayUO
        private unsafe ArrayList ReadFromDisk(int multiID)
        {
            BinaryReader reader = new BinaryReader(Engine.FileManager.OpenMUL(Files.MultiIdx));

            reader.BaseStream.Seek((long)(multiID * 12), SeekOrigin.Begin);
            int num  = reader.ReadInt32();
            int num2 = reader.ReadInt32();

            reader.Close();
            if (num == -1)
            {
                return(new ArrayList());
            }
            Stream stream = Engine.FileManager.OpenMUL(Files.MultiMul);

            stream.Seek((long)num, SeekOrigin.Begin);
            byte[] buffer = new byte[num2];
            Engine.NativeRead((FileStream)stream, buffer, 0, buffer.Length);
            stream.Close();
            int num3 = num2 / 12;

            MultiItem[] c = new MultiItem[num3];
            fixed(byte *numRef = buffer)
            {
                MultiItem *itemPtr  = (MultiItem *)numRef;
                MultiItem *itemPtr2 = itemPtr + num3;

                fixed(MultiItem *itemRef = c)
                {
                    MultiItem *itemPtr3 = itemRef;

                    while (itemPtr < itemPtr2)
                    {
                        itemPtr->ItemID = (short)(itemPtr->ItemID & 0x3fff);
                        itemPtr->ItemID = (short)(itemPtr->ItemID + 0x4000);
                        itemPtr3++;
                        itemPtr++;
                        itemPtr3[0] = itemPtr[0];
                    }
                }
            }

            return(new ArrayList(c));
        }
示例#2
0
        private unsafe ArrayList ReadFromDisk(int multiID)
        {
            BinaryReader binaryReader = new BinaryReader(Engine.FileManager.OpenMUL(Files.MultiIdx));

            binaryReader.BaseStream.Seek((long)(multiID * 12), SeekOrigin.Begin);
            int num     = binaryReader.ReadInt32();
            int length1 = binaryReader.ReadInt32();

            binaryReader.Close();
            if (num == -1)
            {
                return(new ArrayList());
            }
            Stream stream = Engine.FileManager.OpenMUL(Files.MultiMul);

            stream.Seek((long)num, SeekOrigin.Begin);
            byte[] buffer = new byte[length1];
            UnsafeMethods.ReadFile((FileStream)stream, buffer, 0, buffer.Length);
            stream.Close();
            int length2 = length1 / sizeof(MultiItem);

            MultiItem[] multiItemArray = new MultiItem[length2];
            fixed(byte *numPtr = buffer)
            {
                MultiItem *multiItemPtr1 = (MultiItem *)numPtr;
                MultiItem *multiItemPtr2 = multiItemPtr1 + length2;

                fixed(MultiItem *multiItemPtr3 = multiItemArray)
                {
                    MultiItem *multiItemPtr4 = multiItemPtr3;

                    while (multiItemPtr1 < multiItemPtr2)
                    {
                        *multiItemPtr4++ = *multiItemPtr1++;
                    }
                }
            }

            return(new ArrayList((ICollection)multiItemArray));
        }