william341

Untitled

Feb 16th, 2022
1,082
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.11 KB | None | 0 0
  1. internal class Program
  2. {
  3.     private static void <Main>$(string[] args)
  4.     {
  5.         Console.WriteLine("[INFO] Starting AmnesiaExtractor v2.0");
  6.         if (args.Length != 0 || OperatingSystem.IsWindows())
  7.         {
  8.             if (OperatingSystem.IsMacOS())
  9.             {
  10.                 Console.WriteLine("[WARNING] macOS is an unsupported platform");
  11.             }
  12.             if (args.Length == 0 || !Directory.Exists(args[0]))
  13.             {
  14.                 if (OperatingSystem.IsWindows())
  15.                 {
  16.                     Console.WriteLine("[INFO] No directory/invalid directory specified. Defaulting to default Kid A Mnesia Exhibition install location.");
  17.                     args = new string[1] { "C:\\Program Files\\Epic Games\\KidAMnesiaExhibition" };
  18.                     if (!Directory.Exists(args[0]))
  19.                     {
  20.                         Console.WriteLine("[FATAL] Default directory does not exist.");
  21.                         Console.WriteLine("[FATAL] Please drop the folder of the game you are try to extract on to AmnesiaExtractor.exe");
  22.                         Environment.Exit(1);
  23.                     }
  24.                 }
  25.                 else
  26.                 {
  27.                     Console.WriteLine("[FATAL] Argument 0 is not a valid folder, please provide a valid folder");
  28.                     Environment.Exit(1);
  29.                 }
  30.             }
  31.             Game game = new Game();
  32.             game.FindGame(args[0]);
  33.             game.VerifyFiles();
  34.             game.RetrieveKey();
  35.             DefaultFileProvider defaultFileProvider = new DefaultFileProvider(Path.Combine(args[0], "Paperbag", "Content", "Paks"), SearchOption.TopDirectoryOnly);
  36.             defaultFileProvider.Initialize();
  37.             defaultFileProvider.SubmitKey(default(FGuid), new FAesKey(game.AesKey));
  38.             defaultFileProvider.LoadMappings();
  39.             defaultFileProvider.LoadLocalization();
  40.             string text = Path.Combine(AppContext.BaseDirectory, game.GameName);
  41.             int num = 0;
  42.             while (Directory.Exists(text) && (args.Length <= 1 || !args.Contains("ogg")))
  43.             {
  44.                 num++;
  45.                 text = Path.Combine(AppContext.BaseDirectory, game.GameName + " (" + num + ")");
  46.             }
  47.             string text2 = Path.Combine(text, "wems");
  48.             string text3 = Path.Combine(text, "unknown");
  49.             string text4 = Path.Combine(text, "converted");
  50.             if (args.Length > 1 && args.Contains("debug"))
  51.             {
  52.                 DisplayOptions.DisplayDebug = true;
  53.             }
  54.             Directory.CreateDirectory(text);
  55.             Directory.CreateDirectory(text2);
  56.             Directory.CreateDirectory(text3);
  57.             Directory.CreateDirectory(text4);
  58.             int num2 = 0;
  59.             if (args.Length <= 1 || !args.Contains("ogg"))
  60.             {
  61.                 foreach (KeyValuePair<string, GameFile> file in defaultFileProvider.Files)
  62.                 {
  63.                     num2++;
  64.                     Console.Write("\r[INFO] Scanning files for audio to export: " + num2 + "/" + defaultFileProvider.Files.Count());
  65.                     if (!file.Key.StartsWith(game.GameName + "/Content/WwiseAudio/Media") || !file.Key.EndsWith(".uasset"))
  66.                     {
  67.                         continue;
  68.                     }
  69.                     IEnumerable<UObject> enumerable = defaultFileProvider.LoadObjectExports(file.Key);
  70.                     foreach (UObject item in enumerable)
  71.                     {
  72.                         if (!item.Name.Contains("AkMediaAssetData"))
  73.                         {
  74.                             continue;
  75.                         }
  76.                         if (DisplayOptions.DisplayDebug)
  77.                         {
  78.                             Console.WriteLine("Audio asset " + item.Outer?.ToString() + " found");
  79.                             Console.WriteLine("Attempting to save WEM data...");
  80.                         }
  81.                         if (defaultFileProvider.Files.ContainsKey(file.Key.Replace(".uasset", ".ubulk")))
  82.                         {
  83.                             byte[] array = defaultFileProvider.SaveAsset(file.Key.Replace(".uasset", ".ubulk"));
  84.                             byte[] exp = defaultFileProvider.SaveAsset(file.Key.Replace(".uasset", ".uexp"));
  85.                             string text5 = file.Key.Split("/").Last().Split(".")
  86.                                 .First();
  87.                             byte[] array2 = Extractor.Extract(array, exp);
  88.                             if (array2.Length == 0)
  89.                             {
  90.                                 File.WriteAllBytes(Path.Combine(text3, text5 + ".unknown"), array);
  91.                             }
  92.                             else
  93.                             {
  94.                                 File.WriteAllBytes(Path.Combine(text2, text5 + ".wem"), array2);
  95.                             }
  96.                         }
  97.                         else if (DisplayOptions.DisplayDebug)
  98.                         {
  99.                             Console.WriteLine("No data, skipping..");
  100.                         }
  101.                     }
  102.                 }
  103.                 Console.WriteLine();
  104.                 num2 = 0;
  105.                 foreach (KeyValuePair<string, GameFile> file2 in defaultFileProvider.Files)
  106.                 {
  107.                     num2++;
  108.                     Console.Write("\r[INFO] Scanning files for names: " + num2 + "/" + defaultFileProvider.Files.Count());
  109.                     if (!file2.Key.StartsWith(game.GameName + "/Content/WwiseAudio/Events/") || !file2.Key.EndsWith(".uasset"))
  110.                     {
  111.                         continue;
  112.                     }
  113.                     IEnumerable<UObject> enumerable2 = defaultFileProvider.LoadObjectExports(file2.Key);
  114.                     foreach (UObject item2 in enumerable2)
  115.                     {
  116.                         if (!item2.Name.Contains("AkAudioEventData"))
  117.                         {
  118.                             continue;
  119.                         }
  120.                         string value = JsonConvert.SerializeObject(item2);
  121.                         AkMediaAsset akMediaAsset = JsonConvert.DeserializeObject<AkMediaAsset>(value);
  122.                         if (akMediaAsset == null)
  123.                         {
  124.                             continue;
  125.                         }
  126.                         List<INameFinderData> list = NameFinder.FindName(akMediaAsset);
  127.                         foreach (INameFinderData item3 in list)
  128.                         {
  129.                             if (item3.Name == null || item3.Id == null)
  130.                             {
  131.                                 continue;
  132.                             }
  133.                             if (DisplayOptions.DisplayDebug)
  134.                             {
  135.                                 Console.WriteLine("Searching for " + item3.Id + ".wem...");
  136.                             }
  137.                             if (File.Exists(Path.Combine(text2, item3.Id + ".wem")))
  138.                             {
  139.                                 if (DisplayOptions.DisplayDebug)
  140.                                 {
  141.                                     Console.WriteLine("Found file, renaming...");
  142.                                 }
  143.                                 File.Move(Path.Combine(text2, item3.Id + ".wem"), Path.Combine(text2, item3.Name + " (" + item3.Id + ").wem"));
  144.                             }
  145.                         }
  146.                     }
  147.                 }
  148.                 Console.WriteLine();
  149.             }
  150.             num2 = 0;
  151.             int num3 = 0;
  152.             int num4 = 0;
  153.             Converter converter = new Converter();
  154.             converter.VerifyFiles();
  155.             converter.oggPath = text4;
  156.             string[] files = Directory.GetFiles(text2);
  157.             string[] array3 = files;
  158.             foreach (string wem in array3)
  159.             {
  160.                 num2++;
  161.                 Console.Write("\r[INFO] Converting files: " + num2 + "/" + files.Length + " (" + num3 + "/" + num2 + " failed, " + num4 + "/" + num2 + " unknown)");
  162.                 if (!args.Contains("dry"))
  163.                 {
  164.                     switch (converter.ConvertWem(wem))
  165.                     {
  166.                     case 1:
  167.                         num3++;
  168.                         break;
  169.                     case 2:
  170.                         num4++;
  171.                         break;
  172.                     }
  173.                 }
  174.             }
  175.             Console.WriteLine();
  176.             Console.WriteLine("[INFO] Files saved to " + text);
  177.         }
  178.         Console.WriteLine("Press any key to exit...");
  179.         Console.ReadKey();
  180.     }
  181. }
Advertisement
Add Comment
Please, Sign In to add comment