Esempio n. 1
0
        public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
        {
            reader.ReadBytes(20);
            int textLength = reader.ReadInt32();

            return(new string(Encoding.Default.GetChars(reader.ReadBytes(textLength))));
        }
 public UE3PropertyListInstanceReader(UnPackage package, BinaryReader reader, UnExport export, UnContainer owner)
 {
     _package = package;
     _reader = reader;
     _export = export;
     _owner = owner;
 }
Esempio n. 3
0
        public static UnPackage ReadPackage(BinaryReader reader, string baseDir)
        {
            UnPackage package = DoReadPackage(reader);

            package.LoadImportedDeclarations(new UE3PackageReader(baseDir));
            return(package);
        }
Esempio n. 4
0
        public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
        {
            reader.ReadBytes(12);
            int super    = reader.ReadInt32();
            int children = reader.ReadInt32();

            reader.ReadBytes(12);
            int line       = reader.ReadInt32();
            int textPos    = reader.ReadInt32();
            int scriptSize = reader.ReadInt32();

            byte[] bytecode           = reader.ReadBytes(scriptSize);
            int    nativeIndex        = reader.ReadInt16();
            int    operatorPrecedence = reader.ReadByte();
            int    functionFlags      = reader.ReadInt32();

            if ((functionFlags & _flagSet.GetMask("Net")) != 0)
            {
                reader.ReadInt16();  // repOffset
            }
            int friendlyNameIndex = reader.ReadInt32();

            reader.ReadInt32();
            return(new UnFunction(export, package.Names[friendlyNameIndex].Name,
                                  new FlagValues(functionFlags, _flagSet), bytecode, nativeIndex, operatorPrecedence));
        }
Esempio n. 5
0
 public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
 {
     reader.ReadBytes(20);
     int valueSize = reader.ReadInt32();
     string value = new string(reader.ReadChars(valueSize));
     return new UnConst(export, value.Trim('\0'));
 }
Esempio n. 6
0
 public UE3PropertyListInstanceReader(UnPackage package, BinaryReader reader, UnExport export, UnContainer owner)
 {
     _package = package;
     _reader  = reader;
     _export  = export;
     _owner   = owner;
 }
Esempio n. 7
0
        private static UnPackage DoReadPackage(BinaryReader reader)
        {
            var signature         = reader.ReadInt32();
            var packageVersion    = reader.ReadInt32();
            var firstExportOffset = reader.ReadInt32();
            var folderNameLength  = reader.ReadInt32();
            var folderName        = reader.ReadBytes(folderNameLength);
            var packageFlags      = reader.ReadInt32();
            var namesCount        = reader.ReadInt32();
            var namesOffset       = reader.ReadInt32();
            var exportsCount      = reader.ReadInt32();
            var exportsOffset     = reader.ReadInt32();
            var importsCount      = reader.ReadInt32();
            var importsOffset     = reader.ReadInt32();

            reader.ReadInt32();  // unknown
            var guid             = reader.ReadBytes(16);
            var generationsCount = reader.ReadInt32();

            for (int i = 0; i < generationsCount; i++)
            {
                reader.ReadBytes(12);
            }
            var engineVersion = reader.ReadInt32();
            var cookerVersion = reader.ReadInt32();

            if (engineVersion == 3240)
            {
                reader.ReadBytes(28);
            }
            Stream dataStream;

            if ((packageFlags & 0x00800000) != 0)
            {
                var compressionFlag = reader.ReadInt32();
                var chunkedStream   = new ChunkedStream(reader.BaseStream);
                var chunkCount      = reader.ReadInt32();
                for (int i = 0; i < chunkCount; i++)
                {
                    var uncompressedOffset = reader.ReadInt32();
                    var uncompressedSize   = reader.ReadInt32();
                    var compressedOffset   = reader.ReadInt32();
                    var compressedSize     = reader.ReadInt32();
                    chunkedStream.AddChunk(uncompressedOffset, uncompressedSize, compressedOffset, compressedSize);
                }
                dataStream = chunkedStream;
            }
            else
            {
                dataStream = reader.BaseStream;
            }
            UnPackage package = new UnPackage(dataStream);

            RegisterInstanceReaders(package);
            ReadNames(package, dataStream, namesOffset, namesCount);
            ReadImports(package, dataStream, importsOffset, importsCount);
            ReadExports(package, dataStream, exportsOffset, exportsCount);
            return(package);
        }
Esempio n. 8
0
        public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
        {
            reader.ReadBytes(20);
            int    valueSize = reader.ReadInt32();
            string value     = new string(reader.ReadChars(valueSize));

            return(new UnConst(export, value.Trim('\0')));
        }
 public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
 {
     int[] values = new int[11];
     for (int i = 0; i < 11; i++)
         values[i] = reader.ReadInt32();
     int flags = reader.ReadInt32();
     return new UnScriptStruct(export, flags, values [3]);
 }
Esempio n. 10
0
        public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
        {
            int[] values = new int[11];
            for (int i = 0; i < 11; i++)
            {
                values[i] = reader.ReadInt32();
            }
            int flags = reader.ReadInt32();

            return(new UnScriptStruct(export, flags, values [3]));
        }
Esempio n. 11
0
 public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
 {
     reader.ReadBytes(20);
     int valueCount = reader.ReadInt32();
     var values = new List<string>();
     for(int i=0; i<valueCount; i++)
     {
         int index = (int) reader.ReadInt64();
         values.Add(export.Package.Names[index].Name);
     }
     return new UnEnum(export, values);
 }
Esempio n. 12
0
 public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
 {
     reader.ReadBytes(40);
     int scriptSize = reader.ReadInt32();
     byte[] script = reader.ReadBytes(scriptSize);
     reader.ReadBytes(22);
     int methodCount = reader.ReadInt32();
     for(int i=0; i<methodCount; i++)
     {
         reader.ReadBytes(12);
     }
     return new UnState(export, script);
 }
Esempio n. 13
0
        public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
        {
            reader.ReadBytes(20);
            int valueCount = reader.ReadInt32();
            var values     = new List <string>();

            for (int i = 0; i < valueCount; i++)
            {
                int index = (int)reader.ReadInt64();
                values.Add(export.Package.Names[index].Name);
            }
            return(new UnEnum(export, values));
        }
Esempio n. 14
0
        public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
        {
            reader.ReadBytes(40);
            int scriptSize = reader.ReadInt32();

            byte[] script = reader.ReadBytes(scriptSize);
            reader.ReadBytes(22);
            int methodCount = reader.ReadInt32();

            for (int i = 0; i < methodCount; i++)
            {
                reader.ReadBytes(12);
            }
            return(new UnState(export, script));
        }
Esempio n. 15
0
 public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
 {
     reader.ReadInt32();
     int superIndex = reader.ReadInt32();
     reader.ReadInt32();
     int scriptTextIndex = reader.ReadInt32();
     for (int i = 0; i < 4; i++)
         reader.ReadInt32();
     int scriptSize = reader.ReadInt32();
     var bytecode = reader.ReadBytes(scriptSize);
     for (int i = 0; i < 4; i++)
         reader.ReadInt32();
     reader.ReadInt16();
     reader.ReadInt32();
     int methodCount = reader.ReadInt32();
     for (int i = 0; i < methodCount * 3; i++)
         reader.ReadInt32();
     int flags = reader.ReadInt32();
     reader.ReadByte();
     int outerIndex = reader.ReadInt32();
     var outerInstance = package.ResolveClassItem(outerIndex);
     var configNameIndex = reader.ReadInt64();
     var config = package.Names[(int) configNameIndex].Name;
     int hideCategoriesCount = reader.ReadInt32();
     var hideCategories = new List<string>();
     for (int i = 0; i < hideCategoriesCount; i++)
     {
         var nameIndex = reader.ReadInt64();
         var name = package.Names[(int) nameIndex].Name;
         hideCategories.Add(name);
     }
     int c3 = reader.ReadInt32();
     for (int i = 0; i < c3 * 3; i++)
         reader.ReadInt32();
     var interfaceCount = reader.ReadInt32();
     var interfaces = new List<UnPackageItem>();
     for(int i=0; i<interfaceCount; i++)
     {
         var intfIndex = reader.ReadInt32();
         reader.ReadInt32();
         interfaces.Add(package.ResolveClassItem(intfIndex));
     }
     reader.ReadInt32();
     int defaultPropertiesIndex = reader.ReadInt32();
     UnExport defaultProperties = defaultPropertiesIndex == 0
         ? null : package.ResolveClassItem(defaultPropertiesIndex).Resolve();
     return new UnClass(export, superIndex, outerInstance, bytecode, new FlagValues(flags, _flagSet), defaultProperties, config, hideCategories, interfaces);
 }
Esempio n. 16
0
        public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
        {
            // 44 bytes
            reader.ReadBytes(16);
            int next      = reader.ReadInt32();
            int arraySize = reader.ReadInt32();
            int flags     = reader.ReadInt32();

            reader.ReadInt32();
            int category = (int)reader.ReadInt64();

            reader.ReadInt32();
            var repOffset = ((flags & _flagSet.GetMask("Net")) != 0) ? reader.ReadInt16() : (short)-1;

            return(CreateProperty(export, arraySize, new FlagValues(flags, _flagSet), category, reader, repOffset));
        }
Esempio n. 17
0
        private static void ReadImports(UnPackage package, Stream stream, int offset, int count)
        {
            stream.Position = offset;
            var reader = new BinaryReader(stream);

            for (int i = 0; i < count; i++)
            {
                var packageNameIndex = reader.ReadInt32();
                reader.ReadInt32();
                var classNameIndex = reader.ReadInt32();
                reader.ReadInt32();
                var outer           = reader.ReadInt32();
                var objectNameIndex = reader.ReadInt32();
                var flags           = reader.ReadInt32();
                package.AddImport(packageNameIndex, classNameIndex, outer, objectNameIndex, flags);
            }
        }
Esempio n. 18
0
        private static void ReadExports(UnPackage package, Stream stream, int offset, int count)
        {
            stream.Position = offset;
            var reader = new BinaryReader(stream);

            for (int i = 0; i < count; i++)
            {
                var classIndex      = reader.ReadInt32();
                var superIndex      = reader.ReadInt32();
                var outerIndex      = reader.ReadInt32();
                var objectNameIndex = reader.ReadInt32();
                reader.ReadInt32();  // exportNameSuffix
                reader.ReadInt32();  // archetypeIndex
                var flags             = reader.ReadInt64();
                var exportSize        = reader.ReadInt32();
                var exportOffset      = reader.ReadInt32();
                var componentMapCount = reader.ReadInt32();
                for (int j = 0; j < componentMapCount * 3; j++)
                {
                    reader.ReadInt32();
                }
                var exportFlags    = reader.ReadInt32();
                var netObjectCount = reader.ReadInt32();
                for (int j = 0; j < netObjectCount; j++)
                {
                    reader.ReadInt32();
                }
                if (netObjectCount == 0)
                {
                    reader.ReadInt32();
                }
                for (int j = 0; j < 4; j++)
                {
                    reader.ReadInt32();  // GUID
                }
                if (netObjectCount > 0)
                {
                    reader.ReadInt32();
                }
                package.AddExport(objectNameIndex, classIndex, outerIndex, exportOffset, exportSize);
            }
            package.ResolveExports();
        }
Esempio n. 19
0
        private static void ReadNames(UnPackage package, Stream stream, int offset, int count)
        {
            stream.Position = offset;
            var reader = new BinaryReader(stream);

            for (int i = 0; i < count; i++)
            {
                var    nameLength = reader.ReadInt32();
                string name;
                if (nameLength < 0)
                {
                    var bytes = reader.ReadBytes(-2 * nameLength);
                    name = new string(Encoding.Unicode.GetChars(bytes)).Trim('\0');
                }
                else
                {
                    name = new string(reader.ReadChars(nameLength)).Trim('\0');
                }
                var flags = reader.ReadInt64();
                package.AddName(name, flags);
            }
        }
Esempio n. 20
0
 public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
 {
     reader.ReadBytes(12);
     int super = reader.ReadInt32();
     int children = reader.ReadInt32();
     reader.ReadBytes(12);
     int line = reader.ReadInt32();
     int textPos = reader.ReadInt32();
     int scriptSize = reader.ReadInt32();
     byte[] bytecode = reader.ReadBytes(scriptSize);
     int nativeIndex = reader.ReadInt16();
     int operatorPrecedence = reader.ReadByte();
     int functionFlags = reader.ReadInt32();
     if ((functionFlags & _flagSet.GetMask("Net")) != 0)
     {
         reader.ReadInt16();  // repOffset
     }
     int friendlyNameIndex = reader.ReadInt32();
     reader.ReadInt32();
     return new UnFunction(export, package.Names[friendlyNameIndex].Name,
         new FlagValues(functionFlags, _flagSet), bytecode, nativeIndex, operatorPrecedence);
 }
Esempio n. 21
0
 private static void RegisterInstanceReaders(UnPackage package)
 {
     package.PropertyListReader = new UE3PropertyListReader();
     package.RegisterInstanceReader("Class", new UE3ClassReader());
     package.RegisterInstanceReader("Function", new UE3FunctionReader());
     package.RegisterInstanceReader("IntProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("FloatProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("StrProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("BoolProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("NameProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("ObjectProperty", new UE3StructPropertyReader());
     package.RegisterInstanceReader("ByteProperty", new UE3TypedClassPropertyReader());
     package.RegisterInstanceReader("ComponentProperty", new UE3TypedClassPropertyReader());
     package.RegisterInstanceReader("StructProperty", new UE3StructPropertyReader());
     package.RegisterInstanceReader("ClassProperty", new UE3ClassClassPropertyReader());
     package.RegisterInstanceReader("ArrayProperty", new UE3ArrayClassPropertyReader());
     package.RegisterInstanceReader("DelegateProperty", new UE3DelegateClassPropertyReader());
     package.RegisterInstanceReader("Enum", new UE3EnumReader());
     package.RegisterInstanceReader("Const", new UE3ConstReader());
     package.RegisterInstanceReader("ScriptStruct", new UE3ScriptStructReader());
     package.RegisterInstanceReader("State", new UE3StateReader());
     package.RegisterInstanceReader("TextBuffer", new UE3TextBufferReader());
 }
Esempio n. 22
0
        public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
        {
            reader.ReadInt32();
            int superIndex = reader.ReadInt32();

            reader.ReadInt32();
            int scriptTextIndex = reader.ReadInt32();

            for (int i = 0; i < 4; i++)
            {
                reader.ReadInt32();
            }
            int scriptSize = reader.ReadInt32();
            var bytecode   = reader.ReadBytes(scriptSize);

            for (int i = 0; i < 4; i++)
            {
                reader.ReadInt32();
            }
            reader.ReadInt16();
            reader.ReadInt32();
            int methodCount = reader.ReadInt32();

            for (int i = 0; i < methodCount * 3; i++)
            {
                reader.ReadInt32();
            }
            int flags = reader.ReadInt32();

            reader.ReadByte();
            int outerIndex          = reader.ReadInt32();
            var outerInstance       = package.ResolveClassItem(outerIndex);
            var configNameIndex     = reader.ReadInt64();
            var config              = package.Names[(int)configNameIndex].Name;
            int hideCategoriesCount = reader.ReadInt32();
            var hideCategories      = new List <string>();

            for (int i = 0; i < hideCategoriesCount; i++)
            {
                var nameIndex = reader.ReadInt64();
                var name      = package.Names[(int)nameIndex].Name;
                hideCategories.Add(name);
            }
            int c3 = reader.ReadInt32();

            for (int i = 0; i < c3 * 3; i++)
            {
                reader.ReadInt32();
            }
            var interfaceCount = reader.ReadInt32();
            var interfaces     = new List <UnPackageItem>();

            for (int i = 0; i < interfaceCount; i++)
            {
                var intfIndex = reader.ReadInt32();
                reader.ReadInt32();
                interfaces.Add(package.ResolveClassItem(intfIndex));
            }
            reader.ReadInt32();
            int      defaultPropertiesIndex = reader.ReadInt32();
            UnExport defaultProperties      = defaultPropertiesIndex == 0
                ? null : package.ResolveClassItem(defaultPropertiesIndex).Resolve();

            return(new UnClass(export, superIndex, outerInstance, bytecode, new FlagValues(flags, _flagSet), defaultProperties, config, hideCategories, interfaces));
        }
Esempio n. 23
0
 private static void ReadExports(UnPackage package, Stream stream, int offset, int count)
 {
     stream.Position = offset;
     var reader = new BinaryReader(stream);
     for (int i = 0; i < count; i++)
     {
         var classIndex = reader.ReadInt32();
         var superIndex = reader.ReadInt32();
         var outerIndex = reader.ReadInt32();
         var objectNameIndex = reader.ReadInt32();
         reader.ReadInt32();  // exportNameSuffix
         reader.ReadInt32();  // archetypeIndex
         var flags = reader.ReadInt64();
         var exportSize = reader.ReadInt32();
         var exportOffset = reader.ReadInt32();
         var componentMapCount = reader.ReadInt32();
         for (int j = 0; j < componentMapCount*3; j++)
         {
             reader.ReadInt32();
         }
         var exportFlags = reader.ReadInt32();
         var netObjectCount = reader.ReadInt32();
         for (int j = 0; j < netObjectCount; j++)
         {
             reader.ReadInt32();
         }
         if (netObjectCount == 0)
         {
             reader.ReadInt32();
         }
         for(int j=0; j<4; j++)
         {
             reader.ReadInt32();  // GUID
         }
         if (netObjectCount > 0)
         {
             reader.ReadInt32();
         }
         package.AddExport(objectNameIndex, classIndex, outerIndex, exportOffset, exportSize);
     }
     package.ResolveExports();
 }
 public UnPropertyList ReadPropertyList(UnPackage package, BinaryReader reader, UnExport export, UnClass owner)
 {
     return new UE3PropertyListInstanceReader(package, reader, export, owner).Read();
 }
Esempio n. 25
0
 public object ReadInstance(UnPackage package, BinaryReader reader, UnExport export)
 {
     reader.ReadBytes(20);
     int textLength = reader.ReadInt32();
     return new string(Encoding.Default.GetChars(reader.ReadBytes(textLength)));
 }
Esempio n. 26
0
 private static void RegisterInstanceReaders(UnPackage package)
 {
     package.PropertyListReader = new UE3PropertyListReader();
     package.RegisterInstanceReader("Class", new UE3ClassReader());
     package.RegisterInstanceReader("Function", new UE3FunctionReader());
     package.RegisterInstanceReader("IntProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("FloatProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("StrProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("BoolProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("NameProperty", new UE3ClassPropertyReader());
     package.RegisterInstanceReader("ObjectProperty", new UE3StructPropertyReader());
     package.RegisterInstanceReader("ByteProperty", new UE3TypedClassPropertyReader());
     package.RegisterInstanceReader("ComponentProperty", new UE3TypedClassPropertyReader());
     package.RegisterInstanceReader("StructProperty", new UE3StructPropertyReader());
     package.RegisterInstanceReader("ClassProperty", new UE3ClassClassPropertyReader());
     package.RegisterInstanceReader("ArrayProperty", new UE3ArrayClassPropertyReader());
     package.RegisterInstanceReader("DelegateProperty", new UE3DelegateClassPropertyReader());
     package.RegisterInstanceReader("Enum", new UE3EnumReader());
     package.RegisterInstanceReader("Const", new UE3ConstReader());
     package.RegisterInstanceReader("ScriptStruct", new UE3ScriptStructReader());
     package.RegisterInstanceReader("State", new UE3StateReader());
     package.RegisterInstanceReader("TextBuffer", new UE3TextBufferReader());
 }
Esempio n. 27
0
 private static void ReadNames(UnPackage package, Stream stream, int offset, int count)
 {
     stream.Position = offset;
     var reader = new BinaryReader(stream);
     for(int i=0; i<count; i++)
     {
         var nameLength = reader.ReadInt32();
         string name;
         if (nameLength < 0)
         {
             var bytes = reader.ReadBytes(-2*nameLength);
             name = new string(Encoding.Unicode.GetChars(bytes)).Trim('\0');
         }
         else
         {
             name = new string(reader.ReadChars(nameLength)).Trim('\0');
         }
         var flags = reader.ReadInt64();
         package.AddName(name, flags);
     }
 }
Esempio n. 28
0
 private static void ReadImports(UnPackage package, Stream stream, int offset, int count)
 {
     stream.Position = offset;
     var reader = new BinaryReader(stream);
     for (int i = 0; i < count; i++)
     {
         var packageNameIndex = reader.ReadInt32();
         reader.ReadInt32();
         var classNameIndex = reader.ReadInt32();
         reader.ReadInt32();
         var outer = reader.ReadInt32();
         var objectNameIndex = reader.ReadInt32();
         var flags = reader.ReadInt32();
         package.AddImport(packageNameIndex, classNameIndex, outer, objectNameIndex, flags);
     }
 }
Esempio n. 29
0
 private static UnPackage DoReadPackage(BinaryReader reader)
 {
     var signature = reader.ReadInt32();
     var packageVersion = reader.ReadInt32();
     var firstExportOffset = reader.ReadInt32();
     var folderNameLength = reader.ReadInt32();
     var folderName = reader.ReadBytes(folderNameLength);
     var packageFlags = reader.ReadInt32();
     var namesCount = reader.ReadInt32();
     var namesOffset = reader.ReadInt32();
     var exportsCount = reader.ReadInt32();
     var exportsOffset = reader.ReadInt32();
     var importsCount = reader.ReadInt32();
     var importsOffset = reader.ReadInt32();
     reader.ReadInt32();  // unknown
     var guid = reader.ReadBytes(16);
     var generationsCount = reader.ReadInt32();
     for (int i = 0; i < generationsCount; i++)
     {
         reader.ReadBytes(12);
     }
     var engineVersion = reader.ReadInt32();
     var cookerVersion = reader.ReadInt32();
     if (engineVersion == 3240)
     {
         reader.ReadBytes(28);
     }
     Stream dataStream;
     if ((packageFlags & 0x00800000) != 0)
     {
         var compressionFlag = reader.ReadInt32();
         var chunkedStream = new ChunkedStream(reader.BaseStream);
         var chunkCount = reader.ReadInt32();
         for(int i=0; i<chunkCount; i++)
         {
             var uncompressedOffset = reader.ReadInt32();
             var uncompressedSize = reader.ReadInt32();
             var compressedOffset = reader.ReadInt32();
             var compressedSize = reader.ReadInt32();
             chunkedStream.AddChunk(uncompressedOffset, uncompressedSize, compressedOffset, compressedSize);
         }
         dataStream = chunkedStream;
     }
     else
     {
         dataStream = reader.BaseStream;
     }
     UnPackage package = new UnPackage(dataStream);
     RegisterInstanceReaders(package);
     ReadNames(package, dataStream, namesOffset, namesCount);
     ReadImports(package, dataStream, importsOffset, importsCount);
     ReadExports(package, dataStream, exportsOffset, exportsCount);
     return package;
 }
Esempio n. 30
0
 public UnPropertyList ReadPropertyList(UnPackage package, BinaryReader reader, UnExport export, UnClass owner)
 {
     return(new UE3PropertyListInstanceReader(package, reader, export, owner).Read());
 }