/// <summary> /// Loads the given file specified by PackagePath and /// returns the serialized UnrealPackage. /// </summary> public static UnrealPackage LoadPackage( string packagePath, IBufferDecoder decoder = null, FileAccess fileAccess = FileAccess.Read ) { var stream = new UPackageStream( packagePath, FileMode.Open, fileAccess ); var package = new UnrealPackage( stream ) {Decoder = decoder}; package.Deserialize( stream ); return package; }
public void PostInit( UnrealPackage package ) { Package = package; if( !CanRead ) return; if( package.Decoder != null ) { package.Decoder.PreDecode( this ); } var bytes = new byte[4]; Read( bytes, 0, 4 ); var readSignature = BitConverter.ToUInt32( bytes, 0 ); if( readSignature == UnrealPackage.Signature_BigEndian ) { Console.WriteLine( "Encoding:BigEndian" ); BigEndianCode = true; } if( !UnrealConfig.SuppressSignature && readSignature != UnrealPackage.Signature && readSignature != UnrealPackage.Signature_BigEndian ) { throw new FileLoadException( package.PackageName + " isn't an UnrealPackage!" ); } Position = 4; }
/// <summary> /// Called as soon the build for @Package is detected. /// </summary> /// <param name="build"></param> public void BuildDetected( UnrealPackage.GameBuild build ) { if( Package.Decoder != null ) { Package.Decoder.DecodeBuild( this, build ); } }
public static UnrealPackage DeserializePackage( string packagePath, FileAccess fileAccess = FileAccess.Read ) { var stream = new UPackageStream( packagePath, FileMode.Open, fileAccess ); var pkg = new UnrealPackage( stream ); pkg.Deserialize( stream ); return pkg; }
public GameBuild( UnrealPackage package ) { if( UnrealConfig.Platform == UnrealConfig.CookedPlatform.Console ) { IsConsoleCompressed = true; } var gameBuilds = Enum.GetValues( typeof(BuildName) ) as BuildName[]; foreach( var gameBuild in gameBuilds ) { var gameBuildMember = typeof(BuildName).GetMember( gameBuild.ToString() ); if( gameBuildMember.Length == 0 ) continue; var attribs = gameBuildMember[0].GetCustomAttributes( false ); var game = attribs.OfType<BuildAttribute>().SingleOrDefault(attr => attr.Verify( this, package )); if( game == null ) continue; Name = (BuildName)Enum.Parse( typeof(BuildName), Enum.GetName( typeof(BuildName), gameBuild ) ); if( package.Decoder != null ) { break; } var buildDecoderAttr = attribs.SingleOrDefault( attr => attr is BuildDecoderAttribute ) as BuildDecoderAttribute; if( buildDecoderAttr == null ) break; package.Decoder = buildDecoderAttr.CreateDecoder(); break; } if( Name == BuildName.Unset ) { Name = package.LicenseeVersion == 0 ? BuildName.Default : BuildName.Unknown; } }
public bool Verify( GameBuild gb, UnrealPackage package ) { if( _VerifyEqual ? package.Version != _MinVersion || package.LicenseeVersion != _MinLicensee : package.Version < _MinVersion || package.Version > _MaxVersion || package.LicenseeVersion < _MinLicensee || package.LicenseeVersion > _MaxLicensee ) return false; gb.Version = package.Version; gb.LicenseeVersion = package.LicenseeVersion; if( _IsConsoleCompressed < 2 ) { gb.IsConsoleCompressed = _IsConsoleCompressed == 1; } if( _IsXenonCompressed < 2 ) { gb.IsXenonCompressed = _IsXenonCompressed == 1; } return true; }