[Download]: Cleanup some stuff (#703)

This commit is contained in:
Edo 2023-01-06 12:51:41 +00:00 committed by GitHub
parent 0fd0cc977b
commit 1bf8601998
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 53 additions and 44 deletions

2
.gitmodules vendored
View File

@ -17,7 +17,7 @@
[submodule "deps/mongoose"] [submodule "deps/mongoose"]
path = deps/mongoose path = deps/mongoose
url = https://github.com/cesanta/mongoose.git url = https://github.com/cesanta/mongoose.git
branch = master branch = 7.8
[submodule "deps/protobuf"] [submodule "deps/protobuf"]
path = deps/protobuf path = deps/protobuf
url = https://github.com/google/protobuf.git url = https://github.com/google/protobuf.git

2
deps/mongoose vendored

@ -1 +1 @@
Subproject commit 73813a838386f6ebca447eb54c626803163ee257 Subproject commit 0a265e79a67d7bfcdca27f2ccb98ccb474677ec6

View File

@ -77,7 +77,7 @@ namespace Assets
{ {
Components::FileSystem::File modelFile(std::format("xmodel/{}.iw4xModel", name)); Components::FileSystem::File modelFile(std::format("xmodel/{}.iw4xModel", name));
if (!builder->isPrimaryAsset() && (!Components::ZoneBuilder::PreferDiskAssetsDvar.get<bool>() || !modelFile.exists())) if (!builder->isPrimaryAsset() && (!Components::ZoneBuilder::ZBPreferDiskAssets.get<bool>() || !modelFile.exists()))
{ {
header->model = Components::AssetHandler::FindOriginalAsset(this->getType(), name.data()).model; header->model = Components::AssetHandler::FindOriginalAsset(this->getType(), name.data()).model;
if (header->model) return; if (header->model) return;

View File

@ -455,35 +455,40 @@ namespace Components
static std::string ListHandler() static std::string ListHandler()
{ {
static nlohmann::json jsonList; static nlohmann::json jsonList;
static auto handled = false; static std::filesystem::path fsGamePre;
const std::filesystem::path fs_gameDirVar((*Game::fs_gameDirVar)->current.string); const std::filesystem::path fsGame = (*Game::fs_gameDirVar)->current.string;
if (!fs_gameDirVar.empty() && !handled) if (!fsGame.empty() && (fsGamePre != fsGame))
{ {
handled = true; fsGamePre = fsGame;
std::vector<nlohmann::json> fileList; std::vector<nlohmann::json> fileList;
const auto path = (*Game::fs_basepath)->current.string / fs_gameDirVar; const auto path = (*Game::fs_basepath)->current.string / fsGame;
auto list = FileSystem::GetSysFileList(path.generic_string(), "iwd", false); auto list = Utils::IO::ListFiles(path, false);
list.emplace_back("mod.ff"); list.emplace_back("mod.ff");
for (const auto& file : list) for (const auto& file : list)
{ {
auto filename = path / file; auto filename = path / file;
if (file.find("_svr_") != std::string::npos) if (filename.extension() != ".iwd"s) // We don't want to serve other files
{
continue;
}
if (file.find("_svr_") != std::string::npos) // Files that are 'server only' are skipped
{ {
continue; continue;
} }
std::unordered_map<std::string, nlohmann::json> jsonFileList;
auto fileBuffer = Utils::IO::ReadFile(filename.generic_string()); auto fileBuffer = Utils::IO::ReadFile(filename.generic_string());
if (fileBuffer.empty()) if (fileBuffer.empty())
{ {
continue; continue;
} }
std::unordered_map<std::string, nlohmann::json> jsonFileList;
jsonFileList["name"] = file; jsonFileList["name"] = file;
jsonFileList["size"] = fileBuffer.size(); jsonFileList["size"] = fileBuffer.size();
jsonFileList["hash"] = Utils::Cryptography::SHA256::Compute(fileBuffer, true); jsonFileList["hash"] = Utils::Cryptography::SHA256::Compute(fileBuffer, true);

View File

@ -543,17 +543,22 @@ namespace Components
} }
std::vector<std::string> fastFiles; std::vector<std::string> fastFiles;
if (std::strcmp(param->get(1), "all") == 0)
if (param->get(1) == "all"s)
{ {
for (const auto& f : Utils::IO::ListFiles("zone/english")) for (const auto& f : Utils::IO::ListFiles("zone/english", false))
{
fastFiles.emplace_back(f.substr(7, f.length() - 10)); fastFiles.emplace_back(f.substr(7, f.length() - 10));
}
for (const auto& f : Utils::IO::ListFiles("zone/dlc")) for (const auto& f : Utils::IO::ListFiles("zone/dlc", false))
{
fastFiles.emplace_back(f.substr(3, f.length() - 6)); fastFiles.emplace_back(f.substr(3, f.length() - 6));
}
for (const auto& f : Utils::IO::ListFiles("zone/patch")) for (const auto& f : Utils::IO::ListFiles("zone/patch", false))
{
fastFiles.emplace_back(f.substr(5, f.length() - 8)); fastFiles.emplace_back(f.substr(5, f.length() - 8));
}
} }
else else
{ {
@ -599,7 +604,7 @@ namespace Components
{ {
Utils::IO::CreateDir("userraw/techsets"); Utils::IO::CreateDir("userraw/techsets");
Utils::Stream buffer(0x1000); Utils::Stream buffer(0x1000);
Game::MaterialTechniqueSet* dest = buffer.dest<Game::MaterialTechniqueSet>(); auto* dest = buffer.dest<Game::MaterialTechniqueSet>();
buffer.save(asset.techniqueSet); buffer.save(asset.techniqueSet);
if (asset.techniqueSet->name) if (asset.techniqueSet->name)

View File

@ -21,7 +21,7 @@ namespace Components
volatile bool ZoneBuilder::CommandThreadTerminate = false; volatile bool ZoneBuilder::CommandThreadTerminate = false;
std::thread ZoneBuilder::CommandThread; std::thread ZoneBuilder::CommandThread;
Dvar::Var ZoneBuilder::PreferDiskAssetsDvar; Dvar::Var ZoneBuilder::ZBPreferDiskAssets;
ZoneBuilder::Zone::Zone(const std::string& name) : indexStart(0), externalSize(0), ZoneBuilder::Zone::Zone(const std::string& name) : indexStart(0), externalSize(0),
// Reserve 100MB by default. // Reserve 100MB by default.
@ -1101,18 +1101,6 @@ namespace Components
Utils::Hook::Set<int*>(0x5BC759, g_copyInfo_new); Utils::Hook::Set<int*>(0x5BC759, g_copyInfo_new);
Utils::Hook::Set<int>(0x5BB9AD, newLimit); // limit check Utils::Hook::Set<int>(0x5BB9AD, newLimit); // limit check
// this one lets us keep loading zones and it will ignore assets when the pool is filled
/*
AssetHandler::OnLoad([](Game::XAssetType type, Game::XAssetHeader, const std::string&, bool* restrict)
{
//if (*static_cast<int*>(Game::DB_XAssetPool[type].data) == 0)
if (Game::g_poolSize[type] == 0)
{
*restrict = true;
}
});
*/
// hunk size (was 300 MiB) // hunk size (was 300 MiB)
Utils::Hook::Set<DWORD>(0x64A029, 0x38400000); // 900 MiB Utils::Hook::Set<DWORD>(0x64A029, 0x38400000); // 900 MiB
Utils::Hook::Set<DWORD>(0x64A057, 0x38400000); Utils::Hook::Set<DWORD>(0x64A057, 0x38400000);
@ -1289,7 +1277,8 @@ namespace Components
std::string csvStr; std::string csvStr;
auto fileList = Utils::IO::ListFiles(Utils::String::VA("zone/%s", Game::Win_GetLanguage())); const auto dir = std::format("zone/{}", Game::Win_GetLanguage());
auto fileList = Utils::IO::ListFiles(dir, false);
for (auto zone : fileList) for (auto zone : fileList)
{ {
Utils::String::Replace(zone, Utils::String::VA("zone/%s/", Game::Win_GetLanguage()), ""); Utils::String::Replace(zone, Utils::String::VA("zone/%s/", Game::Win_GetLanguage()), "");
@ -1325,7 +1314,7 @@ namespace Components
while (!Game::Sys_IsDatabaseReady()) std::this_thread::sleep_for(100ms); // wait till its fully loaded while (!Game::Sys_IsDatabaseReady()) std::this_thread::sleep_for(100ms); // wait till its fully loaded
if (curTechsets_list.size() == 0) if (curTechsets_list.empty())
{ {
Logger::Print("Skipping empty zone {}\n", zone); Logger::Print("Skipping empty zone {}\n", zone);
// unload zone // unload zone
@ -1352,7 +1341,7 @@ namespace Components
} }
// save csv // save csv
Utils::IO::WriteFile("zone_source/techsets/" + zone + "_techsets.csv", csvStr.data()); Utils::IO::WriteFile("zone_source/techsets/" + zone + "_techsets.csv", csvStr);
// build the techset zone // build the techset zone
std::string zoneName = "techsets/" + zone + "_techsets"; std::string zoneName = "techsets/" + zone + "_techsets";
@ -1382,7 +1371,7 @@ namespace Components
Utils::Hook::Set<const char*>(0x649E740, "techsets"); Utils::Hook::Set<const char*>(0x649E740, "techsets");
// load generated techset fastfiles // load generated techset fastfiles
auto list = Utils::IO::ListFiles("zone/techsets"); auto list = Utils::IO::ListFiles("zone/techsets", false);
int i = 0; int i = 0;
int subCount = 0; int subCount = 0;
for (auto it : list) for (auto it : list)
@ -1427,7 +1416,7 @@ namespace Components
std::string tempZoneFile = Utils::String::VA("zone_source/techsets/techsets%d.csv", subCount); std::string tempZoneFile = Utils::String::VA("zone_source/techsets/techsets%d.csv", subCount);
std::string tempZone = Utils::String::VA("techsets/techsets%d", subCount); std::string tempZone = Utils::String::VA("techsets/techsets%d", subCount);
Utils::IO::WriteFile(tempZoneFile, csvStr.data()); Utils::IO::WriteFile(tempZoneFile, csvStr);
Logger::Print("Building zone '{}'...\n", tempZone); Logger::Print("Building zone '{}'...\n", tempZone);
Zone(tempZone).build(); Zone(tempZone).build();
@ -1472,7 +1461,7 @@ namespace Components
std::string tempZoneFile = Utils::String::VA("zone_source/techsets/techsets%d.csv", subCount); std::string tempZoneFile = Utils::String::VA("zone_source/techsets/techsets%d.csv", subCount);
std::string tempZone = Utils::String::VA("techsets/techsets%d", subCount); std::string tempZone = Utils::String::VA("techsets/techsets%d", subCount);
Utils::IO::WriteFile(tempZoneFile, csvStr.data()); Utils::IO::WriteFile(tempZoneFile, csvStr);
Logger::Print("Building zone '{}'...\n", tempZone); Logger::Print("Building zone '{}'...\n", tempZone);
Zone(tempZone).build(); Zone(tempZone).build();
@ -1511,7 +1500,7 @@ namespace Components
csvStr.clear(); csvStr.clear();
for (auto tech : curTechsets_list) for (auto tech : curTechsets_list)
{ {
std::string mat = ZoneBuilder::FindMaterialByTechnique(tech); auto mat = ZoneBuilder::FindMaterialByTechnique(tech);
if (mat.length() == 0) if (mat.length() == 0)
{ {
csvStr.append("techset," + tech + "\n"); csvStr.append("techset," + tech + "\n");
@ -1522,7 +1511,7 @@ namespace Components
} }
} }
Utils::IO::WriteFile("zone_source/techsets/techsets.csv", csvStr.data()); Utils::IO::WriteFile("zone_source/techsets/techsets.csv", csvStr);
// set language back // set language back
Utils::Hook::Set<const char*>(0x649E740, language); Utils::Hook::Set<const char*>(0x649E740, language);
@ -1605,7 +1594,7 @@ namespace Components
}); });
// True by default, but can be put to zero for backward compatibility if needed // True by default, but can be put to zero for backward compatibility if needed
ZoneBuilder::PreferDiskAssetsDvar = Dvar::Register<bool>("zb_prefer_disk_assets", true, Game::DVAR_NONE, "Should zonebuilder prefer in-memory assets (requirements) or disk assets, when both are present?"); ZoneBuilder::ZBPreferDiskAssets = Dvar::Register<bool>("zb_prefer_disk_assets", true, Game::DVAR_NONE, "Should ZoneBuilder prefer in-memory assets (requirements) or disk assets, when both are present");
} }
} }

View File

@ -131,7 +131,7 @@ namespace Components
static std::vector<std::pair<Game::XAssetType, std::string>> EndAssetTrace(); static std::vector<std::pair<Game::XAssetType, std::string>> EndAssetTrace();
static Game::XAssetHeader GetEmptyAssetIfCommon(Game::XAssetType type, const std::string& name, Zone* builder); static Game::XAssetHeader GetEmptyAssetIfCommon(Game::XAssetType type, const std::string& name, Zone* builder);
static Dvar::Var PreferDiskAssetsDvar; static Dvar::Var ZBPreferDiskAssets;
private: private:
static int StoreTexture(Game::GfxImageLoadDef **loadDef, Game::GfxImage *image); static int StoreTexture(Game::GfxImageLoadDef **loadDef, Game::GfxImage *image);

View File

@ -97,13 +97,23 @@ namespace Utils::IO
return std::filesystem::is_empty(directory); return std::filesystem::is_empty(directory);
} }
std::vector<std::string> ListFiles(const std::filesystem::path& directory) std::vector<std::string> ListFiles(const std::filesystem::path& directory, const bool recursive)
{ {
std::vector<std::string> files; std::vector<std::string> files;
for (auto& file : std::filesystem::directory_iterator(directory)) if (recursive)
{ {
files.push_back(file.path().generic_string()); for (auto& file : std::filesystem::recursive_directory_iterator(directory))
{
files.push_back(file.path().generic_string());
}
}
else
{
for (auto& file : std::filesystem::directory_iterator(directory))
{
files.push_back(file.path().generic_string());
}
} }
return files; return files;

View File

@ -11,5 +11,5 @@ namespace Utils::IO
bool CreateDir(const std::string& dir); bool CreateDir(const std::string& dir);
bool DirectoryExists(const std::filesystem::path& file); bool DirectoryExists(const std::filesystem::path& file);
bool DirectoryIsEmpty(const std::filesystem::path& file); bool DirectoryIsEmpty(const std::filesystem::path& file);
std::vector<std::string> ListFiles(const std::filesystem::path& directory); std::vector<std::string> ListFiles(const std::filesystem::path& directory, bool recursive = false);
} }