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