private static void DumpPackage(string packageName, string gameDir, string outDir, bool scriptSource) { using (Stream s = new FileStream(packageName, FileMode.Open, FileAccess.Read, FileShare.Read)) { var package = UE3PackageReader.ReadPackage(new BinaryReader(s, Encoding.ASCII), gameDir); foreach (var export in package.TopLevelExports) { if (export.ClassName == "Class") { Directory.CreateDirectory(outDir); if (scriptSource) { var scriptText = export.Children.SingleOrDefault(e => e.ObjectName == "ScriptText"); if (scriptText != null) { var text = (string) scriptText.ReadInstance(); DumpOutput(export, outDir, text); continue; } } var instance = (UnClass)export.ReadInstance(); var builder = new TextBuilder(); instance.Decompile(builder); DumpOutput(export, outDir, builder.ToString()); } } ProblemRegistry.LogProblems(Path.Combine(outDir, "unhood.log")); } }
private static string PrintText(StatementListBuilder builder) { builder.List.CreateControlStatements(); builder.List.RemoveRedundantReturns(); var result = new TextBuilder(); builder.List.Print(result, null, false); return result.ToString(); }