mirror of
https://github.com/Detanup01/gbe_fork.git
synced 2025-01-12 02:19:31 +08:00
+ fixed the implementation of BIsAppInstalled(), it must lock the global mutex since it is thread-safe, otherwise it will cause starvation and the current thread wion't yield, which triggers some games
+ even more accurate behavior for BIsAppInstalled(), reject app ID if it was in the DLC list and isUnlockAllDlc was false + citing the source for app id 0
This commit is contained in:
parent
5c8a57e7af
commit
8289ec81a7
@ -251,6 +251,11 @@ bool Settings::getDLC(unsigned int index, AppId_t &appID, bool &available, std::
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Settings::allDLCUnlocked() const
|
||||||
|
{
|
||||||
|
return this->unlockAllDLCs;
|
||||||
|
}
|
||||||
|
|
||||||
void Settings::setAppInstallPath(AppId_t appID, std::string path)
|
void Settings::setAppInstallPath(AppId_t appID, std::string path)
|
||||||
{
|
{
|
||||||
app_paths[appID] = path;
|
app_paths[appID] = path;
|
||||||
|
@ -167,6 +167,7 @@ public:
|
|||||||
unsigned int DLCCount();
|
unsigned int DLCCount();
|
||||||
bool hasDLC(AppId_t appID);
|
bool hasDLC(AppId_t appID);
|
||||||
bool getDLC(unsigned int index, AppId_t &appID, bool &available, std::string &name);
|
bool getDLC(unsigned int index, AppId_t &appID, bool &available, std::string &name);
|
||||||
|
bool allDLCUnlocked() const;
|
||||||
|
|
||||||
//Depots
|
//Depots
|
||||||
std::vector<DepotId_t> depots;
|
std::vector<DepotId_t> depots;
|
||||||
|
@ -245,12 +245,21 @@ uint32 Steam_Apps::GetAppInstallDir( AppId_t appID, char *pchFolder, uint32 cchF
|
|||||||
bool Steam_Apps::BIsAppInstalled( AppId_t appID )
|
bool Steam_Apps::BIsAppInstalled( AppId_t appID )
|
||||||
{
|
{
|
||||||
PRINT_DEBUG("BIsAppInstalled %u\n", appID);
|
PRINT_DEBUG("BIsAppInstalled %u\n", appID);
|
||||||
// is this true? it seems to indicate a non-steam game
|
std::lock_guard<std::recursive_mutex> lock(global_mutex);
|
||||||
|
|
||||||
|
// "0 Base Goldsource Shared Binaries"
|
||||||
|
// https://developer.valvesoftware.com/wiki/Steam_Application_IDs
|
||||||
if (appID == 0) return true;
|
if (appID == 0) return true;
|
||||||
// game LEGO® 2K Drive (app id 1451810) checks for a proper steam behavior by sending uint32_max and expects false in return
|
// game LEGO® 2K Drive (app id 1451810) checks for a proper steam behavior by sending uint32_max and expects false in return
|
||||||
if (appID == UINT32_MAX) return false;
|
if (appID == UINT32_MAX) return false;
|
||||||
if (appID == settings->get_local_game_id().AppID()) return true;
|
if (appID == settings->get_local_game_id().AppID()) return true;
|
||||||
|
|
||||||
|
// only check for DLC if the the list is limited/bounded,
|
||||||
|
// calling hasDLC() wehn unlockAllDLCs is true will always satisfy the below condition
|
||||||
|
if (!settings->allDLCUnlocked() && settings->hasDLC(appID)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return settings->appIsInstalled(appID);
|
return settings->appIsInstalled(appID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user