diff --git a/docs/SupportedAssetTypes.md b/docs/SupportedAssetTypes.md index deeca7c4..2de60610 100644 --- a/docs/SupportedAssetTypes.md +++ b/docs/SupportedAssetTypes.md @@ -71,7 +71,7 @@ The following section specify which assets are supported to be dumped to disk (u | FxImpactTable | ❌ | ❌ | | | RawFile | ✅ | ✅ | | | StringTable | ✅ | ✅ | | -| LeaderboardDef | ❌ | ❌ | | +| LeaderboardDef | ✅ | ❌ | | | StructuredDataDefSet | ✅ | ✅ | The format is custom due to lacking information about original format. | | TracerDef | ✅ | ❌ | | | VehicleDef | ✅ | ❌ | | @@ -116,7 +116,7 @@ The following section specify which assets are supported to be dumped to disk (u | RawFile | ✅ | ✅ | | | ScriptFile | ⁉️ | ⁉️ | Can only be dumped/loaded as binary. Editing is possible with [GSC-Tool](https://github.com/xensik/gsc-tool). | | StringTable | ✅ | ✅ | | -| LeaderboardDef | ❌ | ❌ | | +| LeaderboardDef | ✅ | ❌ | | | StructuredDataDefSet | ❌ | ❌ | | | TracerDef | ❌ | ❌ | | | VehicleDef | ❌ | ❌ | | diff --git a/src/Common/Game/IW4/IW4_Assets.h b/src/Common/Game/IW4/IW4_Assets.h index 7f606455..ca60a53a 100644 --- a/src/Common/Game/IW4/IW4_Assets.h +++ b/src/Common/Game/IW4/IW4_Assets.h @@ -2549,7 +2549,8 @@ namespace IW4 LBCOL_TYPE_PRESTIGE = 0x3, LBCOL_TYPE_BIGNUMBER = 0x4, LBCOL_TYPE_PERCENT = 0x5, - LBCOL_TYPE_COUNT = 0x6, + + LBCOL_TYPE_COUNT }; enum LbAggType @@ -2558,7 +2559,8 @@ namespace IW4 LBAGG_TYPE_MAX = 0x1, LBAGG_TYPE_SUM = 0x2, LBAGG_TYPE_LAST = 0x3, - LBAGG_TYPE_COUNT = 0x4, + + LBAGG_TYPE_COUNT }; struct LbColumnDef diff --git a/src/Common/Game/IW5/IW5_Assets.h b/src/Common/Game/IW5/IW5_Assets.h index 33a21ada..fea3e995 100644 --- a/src/Common/Game/IW5/IW5_Assets.h +++ b/src/Common/Game/IW5/IW5_Assets.h @@ -4346,7 +4346,8 @@ namespace IW5 LBCOL_TYPE_BIGNUMBER = 0x4, LBCOL_TYPE_PERCENT = 0x5, LBCOL_TYPE_TIME_FULL = 0x6, - LBCOL_TYPE_COUNT = 0x7 + + LBCOL_TYPE_COUNT }; enum LbAggType @@ -4355,7 +4356,8 @@ namespace IW5 LBAGG_TYPE_MAX = 0x1, LBAGG_TYPE_SUM = 0x2, LBAGG_TYPE_LAST = 0x3, - LBAGG_TYPE_COUNT = 0x4 + + LBAGG_TYPE_COUNT }; struct LbColumnDef @@ -4377,7 +4379,22 @@ namespace IW5 LBUPDATE_TYPE_NORMAL = 0x0, LBUPDATE_TYPE_RANK = 0x1, LBUPDATE_TYPE_COMBINE = 0x2, - LBUPDATE_TYPE_COUNT = 0x3 + + LBUPDATE_TYPE_COUNT + }; + + enum LbTrackType + { + TRK_ALLTIME = 0x0, + TRK_WEEKLY = 0x1, + TRK_MONTHLY = 0x2, + TRK_PRESTIGE_ALLTIME = 0x3, + TRK_PRESTIGE_WEEKLY = 0x4, + TRK_PRESTIGE_MONTHLY = 0x5, + TRK_DAILY = 0x6, + TRK_PRESTIGE_DAILY = 0x7, + + TRK_COUNT }; struct LeaderboardDef @@ -4417,7 +4434,8 @@ namespace IW5 DATA_ENUM_ARRAY = 0x7, DATA_FLOAT = 0x8, DATA_SHORT = 0x9, - DATA_COUNT = 0xA + + DATA_COUNT }; union StructuredDataTypeUnion @@ -4444,7 +4462,8 @@ namespace IW5 VALIDATION_DELTACLAMP = 0x4, VALIDATION_DELTASTRICT = 0x5, VALIDATION_XP = 0x6, - VALIDATION_COUNT = 0x7 + + VALIDATION_COUNT }; struct StructuredDataStructProperty diff --git a/src/ObjCommon/Game/IW4/Leaderboard/JsonLeaderboardDef.h b/src/ObjCommon/Game/IW4/Leaderboard/JsonLeaderboardDef.h new file mode 100644 index 00000000..b4ba09ef --- /dev/null +++ b/src/ObjCommon/Game/IW4/Leaderboard/JsonLeaderboardDef.h @@ -0,0 +1,58 @@ +#pragma once + +#include "Game/IW4/IW4.h" + +#include "Json/JsonCommon.h" +#include "Json/JsonExtension.h" +#include +#include +#include +#include +#include + +namespace IW4 +{ + NLOHMANN_JSON_SERIALIZE_ENUM(LbColType, + { + {LBCOL_TYPE_NUMBER, "number" }, + {LBCOL_TYPE_TIME, "time" }, + {LBCOL_TYPE_LEVELXP, "levelxp" }, + {LBCOL_TYPE_PRESTIGE, "prestige" }, + {LBCOL_TYPE_BIGNUMBER, "bignumber"}, + {LBCOL_TYPE_PERCENT, "percent" }, + }); + + NLOHMANN_JSON_SERIALIZE_ENUM(LbAggType, + { + {LBAGG_TYPE_MIN, "min" }, + {LBAGG_TYPE_MAX, "max" }, + {LBAGG_TYPE_SUM, "sum" }, + {LBAGG_TYPE_LAST, "last"}, + }); + + class JsonColumnDef + { + public: + std::string name; + int id; + int propertyId; + bool hidden; + std::string statName; + LbColType type; + int precision; + LbAggType aggregationFunction; + }; + + NLOHMANN_DEFINE_TYPE_EXTENSION(JsonColumnDef, name, id, propertyId, hidden, statName, type, precision, aggregationFunction); + + class JsonLeaderboardDef + { + public: + int id; + std::optional xpColId; + std::optional prestigeColId; + std::vector columns; + }; + + NLOHMANN_DEFINE_TYPE_EXTENSION(JsonLeaderboardDef, id, xpColId, prestigeColId, columns); +} // namespace IW4 diff --git a/src/ObjCommon/Game/IW5/Leaderboard/JsonLeaderboardDef.h b/src/ObjCommon/Game/IW5/Leaderboard/JsonLeaderboardDef.h new file mode 100644 index 00000000..8b3c6687 --- /dev/null +++ b/src/ObjCommon/Game/IW5/Leaderboard/JsonLeaderboardDef.h @@ -0,0 +1,82 @@ +#pragma once + +#include "Game/IW5/IW5.h" + +#include "Json/JsonCommon.h" +#include "Json/JsonExtension.h" +#include +#include +#include +#include +#include + +namespace IW5 +{ + NLOHMANN_JSON_SERIALIZE_ENUM(LbColType, + { + {LBCOL_TYPE_NUMBER, "number" }, + {LBCOL_TYPE_TIME, "time" }, + {LBCOL_TYPE_LEVELXP, "levelxp" }, + {LBCOL_TYPE_PRESTIGE, "prestige" }, + {LBCOL_TYPE_BIGNUMBER, "bignumber"}, + {LBCOL_TYPE_PERCENT, "percent" }, + {LBCOL_TYPE_TIME_FULL, "time_full"}, + }); + + NLOHMANN_JSON_SERIALIZE_ENUM(LbAggType, + { + {LBAGG_TYPE_MIN, "min" }, + {LBAGG_TYPE_MAX, "max" }, + {LBAGG_TYPE_SUM, "sum" }, + {LBAGG_TYPE_LAST, "last"}, + }); + + NLOHMANN_JSON_SERIALIZE_ENUM(LbUpdateType, + { + {LBUPDATE_TYPE_NORMAL, "normal" }, + {LBUPDATE_TYPE_RANK, "rank" }, + {LBUPDATE_TYPE_COMBINE, "combine"}, + }); + + NLOHMANN_JSON_SERIALIZE_ENUM(LbTrackType, + { + {TRK_ALLTIME, "ALLTIME" }, + {TRK_WEEKLY, "WEEKLY" }, + {TRK_MONTHLY, "MONTHLY" }, + {TRK_PRESTIGE_ALLTIME, "PRESTIGE_ALLTIME"}, + {TRK_PRESTIGE_WEEKLY, "PRESTIGE_WEEKLY" }, + {TRK_PRESTIGE_MONTHLY, "PRESTIGE_MONTHLY"}, + {TRK_DAILY, "DAILY" }, + {TRK_PRESTIGE_DAILY, "PRESTIGE_DAILY" }, + }); + + class JsonColumnDef + { + public: + std::string name; + int id; + std::optional propertyId; + std::optional hidden; + std::optional statName; + LbColType type; + std::optional precision; + LbAggType aggregationFunction; + std::optional uiCalColX; + std::optional uiCalColY; + }; + + NLOHMANN_DEFINE_TYPE_EXTENSION(JsonColumnDef, name, id, propertyId, hidden, statName, type, precision, aggregationFunction, uiCalColX, uiCalColY); + + class JsonLeaderboardDef + { + public: + int id; + std::optional xpColId; + std::optional prestigeColId; + std::vector columns; + LbUpdateType updateType; + std::vector trackTypes; + }; + + NLOHMANN_DEFINE_TYPE_EXTENSION(JsonLeaderboardDef, id, xpColId, prestigeColId, columns, updateType, trackTypes); +} // namespace IW5 diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLeaderboardDef.cpp b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLeaderboardDef.cpp new file mode 100644 index 00000000..8e2f5ee7 --- /dev/null +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLeaderboardDef.cpp @@ -0,0 +1,29 @@ +#include "AssetDumperLeaderboardDef.h" + +#include "Game/IW4/Leaderboard/JsonLeaderboardDefWriter.h" + +#include +#include + +using namespace IW4; + +std::string AssetDumperLeaderboardDef::GetFileNameForAsset(const std::string& assetName) +{ + + return std::format("leaderboards/{}.json", assetName); +} + +bool AssetDumperLeaderboardDef::ShouldDump(XAssetInfo* asset) +{ + return true; +} + +void AssetDumperLeaderboardDef::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) +{ + const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name)); + + if (!assetFile) + return; + + DumpLeaderboardDefAsJson(*assetFile, asset->Asset()); +} diff --git a/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLeaderboardDef.h b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLeaderboardDef.h new file mode 100644 index 00000000..00b9c2c0 --- /dev/null +++ b/src/ObjWriting/Game/IW4/AssetDumpers/AssetDumperLeaderboardDef.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Dumping/AbstractAssetDumper.h" +#include "Game/IW4/IW4.h" + +namespace IW4 +{ + class AssetDumperLeaderboardDef final : public AbstractAssetDumper + { + static std::string GetFileNameForAsset(const std::string& assetName); + + protected: + _NODISCARD bool ShouldDump(XAssetInfo* asset) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; + }; +} // namespace IW4 diff --git a/src/ObjWriting/Game/IW4/Leaderboard/JsonLeaderboardDefWriter.cpp b/src/ObjWriting/Game/IW4/Leaderboard/JsonLeaderboardDefWriter.cpp new file mode 100644 index 00000000..c6daa2d4 --- /dev/null +++ b/src/ObjWriting/Game/IW4/Leaderboard/JsonLeaderboardDefWriter.cpp @@ -0,0 +1,83 @@ +#include "JsonLeaderboardDefWriter.h" + +#include "Game/IW4/CommonIW4.h" +#include "Game/IW4/Leaderboard/JsonLeaderboardDef.h" + +#include +#include + +using namespace nlohmann; +using namespace IW4; + +namespace +{ + class JsonDumper + { + public: + explicit JsonDumper(std::ostream& stream) + : m_stream(stream) + { + } + + void Dump(const LeaderboardDef* leaderboardDef) const + { + JsonLeaderboardDef jsonLeaderboardDef; + CreateJsonLeaderboardDef(jsonLeaderboardDef, *leaderboardDef); + + json jRoot = jsonLeaderboardDef; + + jRoot["_type"] = "leaderboard"; + jRoot["_version"] = 1; + + m_stream << std::setw(4) << jRoot << "\n"; + } + + private: + static void CreateJsonColumnDef(JsonColumnDef& jColumnDef, const LbColumnDef& lbColumnDef) + { + jColumnDef.name = lbColumnDef.name; + jColumnDef.id = lbColumnDef.id; + + if (lbColumnDef.propertyId != 0) + jColumnDef.propertyId = lbColumnDef.propertyId; + + if (lbColumnDef.hidden) + jColumnDef.hidden = lbColumnDef.hidden; + + if (lbColumnDef.statName && lbColumnDef.statName[0]) + jColumnDef.statName = lbColumnDef.statName; + + jColumnDef.type = lbColumnDef.type; + + if (lbColumnDef.precision != 0) + jColumnDef.precision = lbColumnDef.precision; + + jColumnDef.aggregationFunction = lbColumnDef.agg; + } + + static void CreateJsonLeaderboardDef(JsonLeaderboardDef& jLeaderboardDef, const LeaderboardDef& leaderboardDef) + { + jLeaderboardDef.id = leaderboardDef.id; + + if (leaderboardDef.xpColId != 0) + jLeaderboardDef.xpColId = leaderboardDef.xpColId; + if (leaderboardDef.prestigeColId != 0) + jLeaderboardDef.prestigeColId = leaderboardDef.prestigeColId; + + jLeaderboardDef.columns.resize(leaderboardDef.columnCount); + for (auto i = 0; i < leaderboardDef.columnCount; ++i) + CreateJsonColumnDef(jLeaderboardDef.columns[i], leaderboardDef.columns[i]); + } + + std::ostream& m_stream; + }; +} // namespace + +namespace IW4 +{ + void DumpLeaderboardDefAsJson(std::ostream& stream, const LeaderboardDef* leaderboardDef) + { + JsonDumper dumper(stream); + dumper.Dump(leaderboardDef); + } +} // namespace IW4 diff --git a/src/ObjWriting/Game/IW4/Leaderboard/JsonLeaderboardDefWriter.h b/src/ObjWriting/Game/IW4/Leaderboard/JsonLeaderboardDefWriter.h new file mode 100644 index 00000000..a1b4546d --- /dev/null +++ b/src/ObjWriting/Game/IW4/Leaderboard/JsonLeaderboardDefWriter.h @@ -0,0 +1,11 @@ +#pragma once + +#include "Dumping/AssetDumpingContext.h" +#include "Game/IW4/IW4.h" + +#include + +namespace IW4 +{ + void DumpLeaderboardDefAsJson(std::ostream& stream, const LeaderboardDef* leaderboardDef); +} // namespace IW4 diff --git a/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp b/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp index b77684d7..94aa8787 100644 --- a/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/ZoneDumperIW4.cpp @@ -3,6 +3,7 @@ #include "AssetDumpers/AssetDumperAddonMapEnts.h" #include "AssetDumpers/AssetDumperGfxImage.h" #include "AssetDumpers/AssetDumperGfxLightDef.h" +#include "AssetDumpers/AssetDumperLeaderboardDef.h" #include "AssetDumpers/AssetDumperLoadedSound.h" #include "AssetDumpers/AssetDumperLocalizeEntry.h" #include "AssetDumpers/AssetDumperMaterial.h" @@ -73,7 +74,7 @@ bool ZoneDumper::DumpZone(AssetDumpingContext& context) const // DUMP_ASSET_POOL(AssetDumperFxImpactTable, m_fx_impact_table, ASSET_TYPE_IMPACT_FX) DUMP_ASSET_POOL(AssetDumperRawFile, m_raw_file, ASSET_TYPE_RAWFILE) DUMP_ASSET_POOL(AssetDumperStringTable, m_string_table, ASSET_TYPE_STRINGTABLE) - // DUMP_ASSET_POOL(AssetDumperLeaderboardDef, m_leaderboard, ASSET_TYPE_LEADERBOARD) + DUMP_ASSET_POOL(AssetDumperLeaderboardDef, m_leaderboard, ASSET_TYPE_LEADERBOARD) DUMP_ASSET_POOL(AssetDumperStructuredDataDefSet, m_structed_data_def_set, ASSET_TYPE_STRUCTURED_DATA_DEF) DUMP_ASSET_POOL(AssetDumperTracer, m_tracer, ASSET_TYPE_TRACER) DUMP_ASSET_POOL(AssetDumperVehicle, m_vehicle, ASSET_TYPE_VEHICLE) diff --git a/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperLeaderboardDef.cpp b/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperLeaderboardDef.cpp new file mode 100644 index 00000000..6587432b --- /dev/null +++ b/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperLeaderboardDef.cpp @@ -0,0 +1,29 @@ +#include "AssetDumperLeaderboardDef.h" + +#include "Game/IW5/Leaderboard/JsonLeaderboardDefWriter.h" + +#include +#include + +using namespace IW5; + +std::string AssetDumperLeaderboardDef::GetFileNameForAsset(const std::string& assetName) +{ + + return std::format("leaderboards/{}.json", assetName); +} + +bool AssetDumperLeaderboardDef::ShouldDump(XAssetInfo* asset) +{ + return true; +} + +void AssetDumperLeaderboardDef::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) +{ + const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name)); + + if (!assetFile) + return; + + DumpLeaderboardDefAsJson(*assetFile, asset->Asset()); +} diff --git a/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperLeaderboardDef.h b/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperLeaderboardDef.h new file mode 100644 index 00000000..fad9cb5e --- /dev/null +++ b/src/ObjWriting/Game/IW5/AssetDumpers/AssetDumperLeaderboardDef.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Dumping/AbstractAssetDumper.h" +#include "Game/IW5/IW5.h" + +namespace IW5 +{ + class AssetDumperLeaderboardDef final : public AbstractAssetDumper + { + static std::string GetFileNameForAsset(const std::string& assetName); + + protected: + _NODISCARD bool ShouldDump(XAssetInfo* asset) override; + void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; + }; +} // namespace IW5 diff --git a/src/ObjWriting/Game/IW5/Leaderboard/JsonLeaderboardDefWriter.cpp b/src/ObjWriting/Game/IW5/Leaderboard/JsonLeaderboardDefWriter.cpp new file mode 100644 index 00000000..51fd5703 --- /dev/null +++ b/src/ObjWriting/Game/IW5/Leaderboard/JsonLeaderboardDefWriter.cpp @@ -0,0 +1,99 @@ +#include "JsonLeaderboardDefWriter.h" + +#include "Game/IW5/CommonIW5.h" +#include "Game/IW5/Leaderboard/JsonLeaderboardDef.h" + +#include +#include + +using namespace nlohmann; +using namespace IW5; + +namespace +{ + class JsonDumper + { + public: + explicit JsonDumper(std::ostream& stream) + : m_stream(stream) + { + } + + void Dump(const LeaderboardDef* leaderboardDef) const + { + JsonLeaderboardDef jsonLeaderboardDef; + CreateJsonLeaderboardDef(jsonLeaderboardDef, *leaderboardDef); + + json jRoot = jsonLeaderboardDef; + + jRoot["_type"] = "leaderboard"; + jRoot["_version"] = 1; + + m_stream << std::setw(4) << jRoot << "\n"; + } + + private: + static void CreateJsonColumnDef(JsonColumnDef& jColumnDef, const LbColumnDef& lbColumnDef) + { + jColumnDef.name = lbColumnDef.name; + jColumnDef.id = lbColumnDef.id; + + if (lbColumnDef.propertyId != 0) + jColumnDef.propertyId = lbColumnDef.propertyId; + + if (lbColumnDef.hidden) + jColumnDef.hidden = lbColumnDef.hidden; + + if (lbColumnDef.statName && lbColumnDef.statName[0]) + jColumnDef.statName = lbColumnDef.statName; + + jColumnDef.type = lbColumnDef.type; + + if (lbColumnDef.precision != 0) + jColumnDef.precision = lbColumnDef.precision; + + jColumnDef.aggregationFunction = lbColumnDef.agg; + + if (lbColumnDef.uiCalColX != 0 || lbColumnDef.uiCalColY != 0) + { + jColumnDef.uiCalColX = lbColumnDef.uiCalColX; + jColumnDef.uiCalColY = lbColumnDef.uiCalColY; + } + } + + static void CreateJsonLeaderboardDef(JsonLeaderboardDef& jLeaderboardDef, const LeaderboardDef& leaderboardDef) + { + jLeaderboardDef.id = leaderboardDef.id; + + if (leaderboardDef.xpColId != 0) + jLeaderboardDef.xpColId = leaderboardDef.xpColId; + if (leaderboardDef.prestigeColId != 0) + jLeaderboardDef.prestigeColId = leaderboardDef.prestigeColId; + + jLeaderboardDef.columns.resize(leaderboardDef.columnCount); + for (auto i = 0; i < leaderboardDef.columnCount; ++i) + CreateJsonColumnDef(jLeaderboardDef.columns[i], leaderboardDef.columns[i]); + + jLeaderboardDef.updateType = leaderboardDef.updateType; + + for (auto i = 0; i < TRK_COUNT; ++i) + { + const auto trackTypeMask = 1 << i; + + if (leaderboardDef.trackTypes & trackTypeMask) + jLeaderboardDef.trackTypes.emplace_back(static_cast(i)); + } + } + + std::ostream& m_stream; + }; +} // namespace + +namespace IW5 +{ + void DumpLeaderboardDefAsJson(std::ostream& stream, const LeaderboardDef* leaderboardDef) + { + JsonDumper dumper(stream); + dumper.Dump(leaderboardDef); + } +} // namespace IW5 diff --git a/src/ObjWriting/Game/IW5/Leaderboard/JsonLeaderboardDefWriter.h b/src/ObjWriting/Game/IW5/Leaderboard/JsonLeaderboardDefWriter.h new file mode 100644 index 00000000..b992e6b2 --- /dev/null +++ b/src/ObjWriting/Game/IW5/Leaderboard/JsonLeaderboardDefWriter.h @@ -0,0 +1,11 @@ +#pragma once + +#include "Dumping/AssetDumpingContext.h" +#include "Game/IW5/IW5.h" + +#include + +namespace IW5 +{ + void DumpLeaderboardDefAsJson(std::ostream& stream, const LeaderboardDef* leaderboardDef); +} // namespace IW5 diff --git a/src/ObjWriting/Game/IW5/ZoneDumperIW5.cpp b/src/ObjWriting/Game/IW5/ZoneDumperIW5.cpp index b3cc16d3..ea18d89c 100644 --- a/src/ObjWriting/Game/IW5/ZoneDumperIW5.cpp +++ b/src/ObjWriting/Game/IW5/ZoneDumperIW5.cpp @@ -2,6 +2,7 @@ #include "AssetDumpers/AssetDumperAddonMapEnts.h" #include "AssetDumpers/AssetDumperGfxImage.h" +#include "AssetDumpers/AssetDumperLeaderboardDef.h" #include "AssetDumpers/AssetDumperLoadedSound.h" #include "AssetDumpers/AssetDumperLocalizeEntry.h" #include "AssetDumpers/AssetDumperMenuDef.h" @@ -68,7 +69,7 @@ bool ZoneDumper::DumpZone(AssetDumpingContext& context) const DUMP_ASSET_POOL(AssetDumperRawFile, m_raw_file, ASSET_TYPE_RAWFILE) DUMP_ASSET_POOL(AssetDumperScriptFile, m_script_file, ASSET_TYPE_SCRIPTFILE) DUMP_ASSET_POOL(AssetDumperStringTable, m_string_table, ASSET_TYPE_STRINGTABLE) - // DUMP_ASSET_POOL(AssetDumperLeaderboardDef, m_leaderboard, ASSET_TYPE_LEADERBOARD) + DUMP_ASSET_POOL(AssetDumperLeaderboardDef, m_leaderboard, ASSET_TYPE_LEADERBOARD) // DUMP_ASSET_POOL(AssetDumperStructuredDataDefSet, m_structed_data_def_set, ASSET_TYPE_STRUCTURED_DATA_DEF) // DUMP_ASSET_POOL(AssetDumperTracerDef, m_tracer, ASSET_TYPE_TRACER) // DUMP_ASSET_POOL(AssetDumperVehicleDef, m_vehicle, ASSET_TYPE_VEHICLE)