#include "UgcJobs.h" #include #include #include #include #include "json.hpp" #include "NifFile.h" #include "Sd0.h" #include "UgcFormats.h" #include "UgcModel.h" #include "UgcModular.h" #include "ZCompression.h" namespace UgcJobs { void AddDownload(UgcStorage::Files& files, const std::string& name, const std::string& data) { files[name + ".gz"] = ZCompression::Gzip(data); files[name + ".checksum"] = UgcFormats::ChecksumXml(data); // Without 3D services the client downloads it as sd0 (after asking its world for the checksum) auto sd0 = Sd0::Compress(data); if (!sd0.empty()) files[name + ".sd0"] = std::move(sd0); } std::string LxfmlFromBlob(const std::string& blob) { if (blob.starts_with("* ao = nullptr) { const auto icon = UgcRender::RenderIcon(model, options, ao); bool drawn = false; for (size_t i = 3; i < icon.rgba.size(); i += 4) drawn = drawn || icon.rgba[i] != 0; files["icon.png"] = UgcFormats::EncodePng(icon); AddDownload(files, "icon.dds", UgcFormats::EncodeDds(icon)); return drawn; } } size_t CountParts(std::string_view lxfml) { size_t count = 0; for (size_t at = lxfml.find("