feat: add dlc dumper

This commit is contained in:
2026-04-28 15:24:06 -03:00
parent 13bb48ccce
commit 76e9c8eec4
3 changed files with 78 additions and 1 deletions
+2
View File
@@ -7,4 +7,6 @@ public static class Constants
public static readonly string AESKey = "0x22B1639B548124925CF7B9CBAA09F9AC295FCF0324586D6B37EE1D42670B39B3"; public static readonly string AESKey = "0x22B1639B548124925CF7B9CBAA09F9AC295FCF0324586D6B37EE1D42670B39B3";
public static readonly string[] BlacklistedCustomizationItems = ["NK_Torso01_Crew01Kraken"]; public static readonly string[] BlacklistedCustomizationItems = ["NK_Torso01_Crew01Kraken"];
public static readonly string[] BlacklistedDLCNames = ["development"];
} }
+66 -1
View File
@@ -8,6 +8,7 @@ using CUE4Parse.UE4.Assets.Objects;
using CUE4Parse.UE4.Objects.Core.Misc; using CUE4Parse.UE4.Objects.Core.Misc;
using CUE4Parse.UE4.Versions; using CUE4Parse.UE4.Versions;
using CUE4Parse.UE4.VirtualFileSystem; using CUE4Parse.UE4.VirtualFileSystem;
using CUE4Parse.Utils;
using Microsoft.Win32; using Microsoft.Win32;
using Newtonsoft.Json; using Newtonsoft.Json;
class Dumper class Dumper
@@ -34,7 +35,6 @@ class Dumper
return false; return false;
} }
/* /*
* compression setup * compression setup
*/ */
@@ -367,6 +367,71 @@ class Dumper
return JsonConvert.SerializeObject(perksSerialized, Formatting.Indented); return JsonConvert.SerializeObject(perksSerialized, Formatting.Indented);
} }
public struct DLCInfo
{
public string name;
public string? grdk;
public string? egs;
public string? steam;
};
public string? DumpDLCs()
{
if (_dataPak == null || _provider == null) return null;
var searchPaths = _dataPak.Files.Keys.Where(x => x.Contains($"/DlcDB.uasset", StringComparison.OrdinalIgnoreCase)).ToList();
var dlcs = new List<DLCInfo>();
foreach (var path in searchPaths)
{
var cleanPath = path.Contains('.') ? path.Substring(0, path.LastIndexOf('.')) : path;
if (_provider.TryLoadPackageObject<UDataTable>(cleanPath, out var dataTable))
{
foreach (var row in dataTable.RowMap)
{
/*
* props
*/
var props = row.Value.Properties;
FPropertyTag? steamIdProp = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "DlcIdSteam");
FPropertyTag? grdkIdProp = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "DlcIdGRDK");
FPropertyTag? epicIdProp = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "DlcIdEpic");
/*
* real data
*/
string dlcName = row.Key.Text;
if (Constants.BlacklistedDLCNames.Contains(dlcName)) continue;
string? steamId = null, grdkId = null, epicId = null;
if (steamIdProp != null && steamIdProp.Tag != null)
steamId = steamIdProp.Tag.GetValue<string>();
if (grdkIdProp != null && grdkIdProp.Tag != null)
grdkId = grdkIdProp.Tag.GetValue<string>();
if (epicIdProp != null && epicIdProp.Tag != null)
epicId = epicIdProp.Tag.GetValue<string>();
var info = new DLCInfo
{
name = dlcName,
steam = steamId,
grdk = grdkId,
egs = epicId
};
dlcs.Add(info);
}
}
}
return JsonConvert.SerializeObject(dlcs, Formatting.Indented);
}
private string? getGamePath() private string? getGamePath()
{ {
const string packagesPath = @"Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages"; const string packagesPath = @"Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages";
+10
View File
@@ -65,6 +65,16 @@ else
Console.WriteLine("Failed to dump perks"); Console.WriteLine("Failed to dump perks");
} }
string? dlcsJSON = dumper.DumpDLCs();
if (dlcsJSON != null)
{
File.WriteAllText("dlcs.json", dlcsJSON);
}
else
{
Console.WriteLine("Failed to dump dlcs");
}
Console.WriteLine("Dumper finished"); Console.WriteLine("Dumper finished");
return 0; return 0;