Fixed GameDir location issues. (#152)

I couldn't launch the game without this.

---

By creating this pull request, I understand that code that is AI
generated or otherwise automatically generated may be rejected without
further discussion.
I declare that I fully understand all code I pushed into this PR, and
wrote all this code myself and own the rights to this code.
This commit is contained in:
Tixx 2024-12-23 23:00:47 +01:00 committed by GitHub
commit a8a4dfb77c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -179,17 +179,54 @@ void LegitimacyCheck() {
RegCloseKey(hKey); RegCloseKey(hKey);
#elif defined(__linux__) #elif defined(__linux__)
struct passwd* pw = getpwuid(getuid()); struct passwd* pw = getpwuid(getuid());
std::string homeDir = pw->pw_dir; std::filesystem::path homeDir = pw->pw_dir;
// Right now only steam is supported
std::ifstream libraryFolders(homeDir + "/.steam/root/steamapps/libraryfolders.vdf");
auto root = tyti::vdf::read(libraryFolders);
// Right now only steam is supported
std::vector<std::filesystem::path> steamappsCommonPaths = {
".steam/root/steamapps", // default
".var/app/com.valvesoftware.Steam/.steam/root/steamapps", // flatpak
"snap/steam/common/.local/share/Steam/steamapps" // snap
};
std::filesystem::path steamappsPath;
std::filesystem::path libraryFoldersPath;
bool steamappsFolderFound = false;
bool libraryFoldersFound = false;
for (const auto& path : steamappsCommonPaths) {
steamappsPath = homeDir / path;
if (std::filesystem::exists(steamappsPath)) {
steamappsFolderFound = true;
libraryFoldersPath = steamappsPath / "libraryfolders.vdf";
if (std::filesystem::exists(libraryFoldersPath)) {
libraryFoldersPath = libraryFoldersPath;
libraryFoldersFound = true;
break;
}
}
}
if (!steamappsFolderFound) {
error("Unsupported Steam installation.");
return;
}
if (!libraryFoldersFound) {
error("libraryfolders.vdf is missing.");
return;
}
std::ifstream libraryFolders(libraryFoldersPath);
auto root = tyti::vdf::read(libraryFolders);
for (auto folderInfo : root.childs) { for (auto folderInfo : root.childs) {
if (std::filesystem::exists(folderInfo.second->attribs["path"] + "/steamapps/common/BeamNG.drive/integrity.json")){ if (std::filesystem::exists(folderInfo.second->attribs["path"] + "/steamapps/common/BeamNG.drive/integrity.json")){
GameDir = folderInfo.second->attribs["path"] + "/steamapps/common/BeamNG.drive/"; GameDir = folderInfo.second->attribs["path"] + "/steamapps/common/BeamNG.drive/";
break; break;
} }
} }
if (GameDir.empty()) {
error("The game directory was not found.");
return;
}
#endif #endif
} }
std::string CheckVer(const std::string& dir) { std::string CheckVer(const std::string& dir) {
@ -210,4 +247,4 @@ std::string CheckVer(const std::string& dir) {
temp += a; temp += a;
} }
return temp; return temp;
} }