diff --git a/src/dumper/dumper.cs b/src/dumper/dumper.cs index 1898f13..80a4ada 100644 --- a/src/dumper/dumper.cs +++ b/src/dumper/dumper.cs @@ -37,6 +37,13 @@ struct OfferingInfo public EPlayerRole role; } +struct DLCInfo +{ + public string id; + public string? name; + public Dictionary dlcIds; +} + class Dumper { private DefaultFileProvider? _provider; @@ -207,6 +214,37 @@ class Dumper WriteJson("offerings", _offeringMap.Values); } + public void DumpDLCs() + { + List dlcList = new List(); + + ProcessDataTables("/DlcDB.uasset", "dlcs", (rowKey, props) => + { + if (!TryGetProp(props, "DlcIdSteam", out string steamId) + || !TryGetProp(props, "DlcIdEpic", out string epicId) + || !TryGetProp(props, "DlcIdGRDK", out string grdkId) + ) + throw new KeyNotFoundException("DLC id or DisplayName was not found"); + + + string? displayName = null; + if (TryGetStringProp(props, "DisplayName", out string foundName) && !string.IsNullOrWhiteSpace(foundName)) + displayName = foundName; + + DLCInfo info = new DLCInfo + { + id = rowKey, + name = displayName, + dlcIds = new Dictionary { { "steam", steamId }, { "epic", epicId }, { "grdk", grdkId } } + }; + + dlcList.Add(info); + }); + + _log.Info("Dumped {0} dlcs", dlcList.Count); + WriteJson("dlcs", dlcList.ToArray()); + } + public void DumpCharacterIcons() => ExportIcons(_characterMap.Values.Select(x => x.iconFilePath), "character", "/character-icons/"); public void DumpItemIcons() => ExportIcons(_itemMap.Values.Select(x => x.iconFilePath), "item", "/item-icons/"); public void DumpOfferingIcons() => ExportIcons(_offeringMap.Values.Select(x => x.iconFilePath), "offering", "/offering-icons/"); diff --git a/src/dumper/main.cs b/src/dumper/main.cs index 869883b..5936f07 100644 --- a/src/dumper/main.cs +++ b/src/dumper/main.cs @@ -14,7 +14,8 @@ var dumpTasks = new (string Name, Action Execute)[] { ("character", () => { dumper.DumpCharacters(); dumper.DumpCharacterIcons(); }), ("item", () => { dumper.DumpItems(); dumper.DumpItemIcons(); }), - ("offering", () => { dumper.DumpOfferings(); dumper.DumpOfferingIcons(); }) + ("offering", () => { dumper.DumpOfferings(); dumper.DumpOfferingIcons(); }), + ("dlc", () => { dumper.DumpDLCs(); }) }; foreach (var task in dumpTasks)