feat: output categorized data

This commit is contained in:
2026-03-21 23:31:19 -03:00
parent 3d307746da
commit 2638344649
+72 -32
View File
@@ -2,6 +2,7 @@ using CUE4Parse.Compression;
using CUE4Parse.Encryption.Aes; using CUE4Parse.Encryption.Aes;
using CUE4Parse.FileProvider; using CUE4Parse.FileProvider;
using CUE4Parse.MappingsProvider; using CUE4Parse.MappingsProvider;
using CUE4Parse.UE4.Assets.Exports.Actor;
using CUE4Parse.UE4.Assets.Exports.Engine; using CUE4Parse.UE4.Assets.Exports.Engine;
using CUE4Parse.UE4.Assets.Exports.Texture; using CUE4Parse.UE4.Assets.Exports.Texture;
using CUE4Parse.UE4.Assets.Objects.Properties; using CUE4Parse.UE4.Assets.Objects.Properties;
@@ -72,27 +73,30 @@ class DumpByDaylight
* itemdb dump * itemdb dump
*/ */
var searchPaths = dataPak.Files.Keys.Where(x => x.Contains($"/ItemDB.uasset", StringComparison.OrdinalIgnoreCase)).ToList(); var searchPaths = dataPak.Files.Keys.Where(x => x.Contains($"/ItemDB.uasset", StringComparison.OrdinalIgnoreCase)).ToList();
var items = new List<string>(); var camperItems = new List<string>();
var powers = new List<string>();
var slasherPowers = new List<string>();
foreach (var path in searchPaths) foreach (var path in searchPaths)
{ {
var cleanPath = path.Contains('.') ? path.Substring(0, path.LastIndexOf('.')) : path; var cleanPath = path.Contains('.') ? path.Substring(0, path.LastIndexOf('.')) : path;
if (provider.TryLoadPackageObject<UDataTable>(cleanPath, out var dataTable)) if (provider.TryLoadPackageObject<UDataTable>(cleanPath, out var dataTable))
{ {
Console.WriteLine($"getting items / powers from {Path.GetFileName(path)}"); Console.WriteLine($"getting items / powers from {Path.GetFullPath(path)}");
foreach (var row in dataTable.RowMap) foreach (var row in dataTable.RowMap)
{ {
var roleProperty = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "Role");
var typeProperty = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "Type"); var typeProperty = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "Type");
if (typeProperty?.Tag is EnumProperty enumProp) if (typeProperty?.Tag is EnumProperty typeProp && roleProperty?.Tag is EnumProperty roleProp)
{ {
string typeName = enumProp.Value.ToString() ?? "null"; string typeName = typeProp.Value.ToString() ?? "null";
string roleName = roleProp.Value.ToString() ?? "null";
if (typeName == "EInventoryItemType::Power") if (roleName == "EPlayerRole::VE_Slasher")
powers.Add(row.Key.Text); slasherPowers.Add(row.Key.Text);
else if (typeName == "EInventoryItemType::Item") else
items.Add(row.Key.Text); camperItems.Add(row.Key.Text);
} }
} }
} }
@@ -100,8 +104,8 @@ class DumpByDaylight
var itemsSerialized = new var itemsSerialized = new
{ {
Items = items.OrderBy(x => x).ToList(), Camper = new { Items = camperItems.OrderBy(x => x).ToList() },
Powers = powers.OrderBy(x => x).ToList() Slasher = new { Powers = slasherPowers.OrderBy(x => x).ToList() }
}; };
File.WriteAllText("items.json", JsonConvert.SerializeObject(itemsSerialized, Formatting.Indented)); File.WriteAllText("items.json", JsonConvert.SerializeObject(itemsSerialized, Formatting.Indented));
@@ -109,36 +113,39 @@ class DumpByDaylight
* addon dump * addon dump
*/ */
searchPaths = dataPak.Files.Keys.Where(x => x.Contains($"/ItemAddonDB.uasset", StringComparison.OrdinalIgnoreCase)).ToList(); searchPaths = dataPak.Files.Keys.Where(x => x.Contains($"/ItemAddonDB.uasset", StringComparison.OrdinalIgnoreCase)).ToList();
var itemAddons = new List<string>(); var camperAddons = new List<string>();
var powerAddons = new List<string>(); var slaherAddons = new List<string>();
foreach (var path in searchPaths) foreach (var path in searchPaths)
{ {
var cleanPath = path.Contains('.') ? path.Substring(0, path.LastIndexOf('.')) : path; var cleanPath = path.Contains('.') ? path.Substring(0, path.LastIndexOf('.')) : path;
if (provider.TryLoadPackageObject<UDataTable>(cleanPath, out var dataTable)) if (provider.TryLoadPackageObject<UDataTable>(cleanPath, out var dataTable))
{ {
Console.WriteLine($"getting item / power addons from {Path.GetFileName(path)}"); Console.WriteLine($"getting item / power addons from {Path.GetFullPath(path)}");
foreach (var row in dataTable.RowMap) foreach (var row in dataTable.RowMap)
{ {
var typeProperty = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "Type"); bool isSlasherAddon = false;
if (typeProperty?.Tag is EnumProperty enumProp) var roleProperty = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "Role");
if (roleProperty?.Tag is EnumProperty roleEnumProp)
{ {
string typeName = enumProp.Value.ToString() ?? "null"; string roleName = roleEnumProp.Value.ToString() ?? "null";
if (roleName == "EPlayerRole::VE_Slasher")
if (typeName == "EInventoryItemType::ItemAddOn") isSlasherAddon = true;
itemAddons.Add(row.Key.Text);
else if (typeName == "EInventoryItemType::PowerAddOn")
powerAddons.Add(row.Key.Text);
} }
if (isSlasherAddon)
slaherAddons.Add(row.Key.Text);
else
camperAddons.Add(row.Key.Text);
} }
} }
} }
var addonsSerialized = new var addonsSerialized = new
{ {
Items = itemAddons.OrderBy(x => x).ToList(), Slashers = slaherAddons.OrderBy(x => x).ToList(),
Powers = powerAddons.OrderBy(x => x).ToList() Campers = camperAddons.OrderBy(x => x).ToList()
}; };
File.WriteAllText("addons.json", JsonConvert.SerializeObject(addonsSerialized, Formatting.Indented)); File.WriteAllText("addons.json", JsonConvert.SerializeObject(addonsSerialized, Formatting.Indented));
@@ -147,40 +154,73 @@ class DumpByDaylight
*/ */
searchPaths = dataPak.Files.Keys.Where(x => x.Contains($"/OfferingDB.uasset", StringComparison.OrdinalIgnoreCase)).ToList(); searchPaths = dataPak.Files.Keys.Where(x => x.Contains($"/OfferingDB.uasset", StringComparison.OrdinalIgnoreCase)).ToList();
var offerings = new List<string>(); var camperOfferings = new List<string>();
var slasherOfferings = new List<string>();
foreach (var path in searchPaths) foreach (var path in searchPaths)
{ {
var cleanPath = path.Contains('.') ? path.Substring(0, path.LastIndexOf('.')) : path; var cleanPath = path.Contains('.') ? path.Substring(0, path.LastIndexOf('.')) : path;
if (provider.TryLoadPackageObject<UDataTable>(cleanPath, out var dataTable)) if (provider.TryLoadPackageObject<UDataTable>(cleanPath, out var dataTable))
{ {
Console.WriteLine($"getting offerings from {Path.GetFileName(path)}"); Console.WriteLine($"getting offerings from {Path.GetFullPath(path)}");
foreach (var row in dataTable.RowMap) foreach (var row in dataTable.RowMap)
offerings.Add(row.Key.Text); {
var roleProperty = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "Role");
if (roleProperty?.Tag is EnumProperty roleEnumProp)
{
string roleName = roleEnumProp.Value.ToString() ?? "null";
if (roleName == "EPlayerRole::VE_Slasher")
slasherOfferings.Add(row.Key.Text);
else
camperOfferings.Add(row.Key.Text);
} }
} }
File.WriteAllText("offerings.json", JsonConvert.SerializeObject(offerings, Formatting.Indented)); }
}
var offeringsSerialized = new
{
Slashers = slasherOfferings.OrderBy(x => x).ToList(),
Campers = camperOfferings.OrderBy(x => x).ToList()
};
File.WriteAllText("offerings.json", JsonConvert.SerializeObject(offeringsSerialized, Formatting.Indented));
/* /*
* perks * perks
*/ */
searchPaths = dataPak.Files.Keys.Where(x => x.Contains($"/PerkDB.uasset", StringComparison.OrdinalIgnoreCase)).ToList(); searchPaths = dataPak.Files.Keys.Where(x => x.Contains($"/PerkDB.uasset", StringComparison.OrdinalIgnoreCase)).ToList();
var perks = new List<string>(); var slasherPerks = new List<string>();
var camperPerks = new List<string>();
foreach (var path in searchPaths) foreach (var path in searchPaths)
{ {
var cleanPath = path.Contains('.') ? path.Substring(0, path.LastIndexOf('.')) : path; var cleanPath = path.Contains('.') ? path.Substring(0, path.LastIndexOf('.')) : path;
if (provider.TryLoadPackageObject<UDataTable>(cleanPath, out var dataTable)) if (provider.TryLoadPackageObject<UDataTable>(cleanPath, out var dataTable))
{ {
Console.WriteLine($"getting perks from {Path.GetFileName(path)}"); Console.WriteLine($"getting perks from {Path.GetFullPath(path)}");
foreach (var row in dataTable.RowMap) foreach (var row in dataTable.RowMap)
perks.Add(row.Key.Text); {
var roleProperty = row.Value.Properties.FirstOrDefault(p => p.Name.Text == "Role");
if (roleProperty?.Tag is EnumProperty roleEnumProp)
{
string roleName = roleEnumProp.Value.ToString() ?? "null";
if (roleName == "EPlayerRole::VE_Slasher")
slasherPerks.Add(row.Key.Text);
else
camperPerks.Add(row.Key.Text);
} }
} }
File.WriteAllText("perks.json", JsonConvert.SerializeObject(perks, Formatting.Indented)); }
}
var perksSerialized = new
{
Slashers = slasherPerks.OrderBy(x => x).ToList(),
Campers = camperPerks.OrderBy(x => x).ToList()
};
File.WriteAllText("perks.json", JsonConvert.SerializeObject(perksSerialized, Formatting.Indented));
Console.WriteLine("\nAll dumper operations finished. Press any key to Close."); Console.WriteLine("\nAll dumper operations finished. Press any key to Close.");
Console.ReadKey(); Console.ReadKey();