sceNpTrophy: deny unlocking of platinum trophies

This commit is contained in:
Megamouse 2020-01-06 09:47:11 +01:00
parent 765bd6b6c6
commit be2d225d96
3 changed files with 22 additions and 0 deletions

View file

@ -819,9 +819,19 @@ error_code sceNpTrophyUnlockTrophy(u32 context, u32 handle, s32 trophyId, vm::pt
}
if (trophyId < 0 || trophyId >= static_cast<s32>(ctxt->tropusr->GetTrophiesCount()))
{
return SCE_NP_TROPHY_ERROR_INVALID_TROPHY_ID;
}
if (ctxt->tropusr->GetTrophyGrade(trophyId) == SCE_NP_TROPHY_GRADE_PLATINUM)
{
return SCE_NP_TROPHY_ERROR_CANNOT_UNLOCK_PLATINUM;
}
if (ctxt->tropusr->GetTrophyUnlockState(trophyId))
{
return SCE_NP_TROPHY_ERROR_ALREADY_UNLOCKED;
}
ctxt->tropusr->UnlockTrophy(trophyId, 0, 0); // TODO: add timestamps

View file

@ -291,6 +291,17 @@ u32 TROPUSRLoader::GetUnlockedPlatinumID(u32 trophy_id, const std::string& confi
return pid;
}
u32 TROPUSRLoader::GetTrophyGrade(u32 id)
{
if (id >= m_table4.size())
{
LOG_WARNING(LOADER, "TROPUSRLoader::GetTrophyGrade: Invalid id=%d", id);
return trophy_grade::unknown;
}
return m_table4[id].trophy_grade; // Let's assume the trophies are stored ordered
}
u32 TROPUSRLoader::GetTrophyUnlockState(u32 id)
{
if (id >= m_table6.size())

View file

@ -86,6 +86,7 @@ public:
virtual u32 GetUnlockedPlatinumID(u32 trophy_id, const std::string& config_path);
virtual u32 GetTrophyGrade(u32 id);
virtual u32 GetTrophyUnlockState(u32 id);
virtual u64 GetTrophyTimestamp(u32 id);