[XAM] Fixed XamUserCreateAchievementEnumerator starting index usage

Fixed Vancouver 2010 spamming XamUserCreateAchievementEnumerator
This commit is contained in:
Adrian
2026-01-20 01:30:41 +00:00
committed by Radosław Gliński
parent 81656a9729
commit 263e91b014

View File

@@ -7,6 +7,8 @@
****************************************************************************** ******************************************************************************
*/ */
#include <ranges>
#include "xenia/base/logging.h" #include "xenia/base/logging.h"
#include "xenia/kernel/kernel_state.h" #include "xenia/kernel/kernel_state.h"
#include "xenia/kernel/util/shim_utils.h" #include "xenia/kernel/util/shim_utils.h"
@@ -593,8 +595,15 @@ dword_result_t XamUserCreateAchievementEnumerator_entry(
kernel_state()->achievement_manager()->GetTitleAchievements( kernel_state()->achievement_manager()->GetTitleAchievements(
requester_xuid, title_id_); requester_xuid, title_id_);
if (!user_title_achievements.empty()) { const auto requested_achievements = user_title_achievements |
for (const auto& entry : user_title_achievements) { std::views::drop(offset) |
std::views::take(count);
if (requested_achievements.empty()) {
return X_ERROR_INVALID_PARAMETER;
}
for (const auto& entry : requested_achievements) {
auto unlock_time = X_FILETIME(); auto unlock_time = X_FILETIME();
if (entry.IsUnlocked() && entry.unlock_time.is_valid()) { if (entry.IsUnlocked() && entry.unlock_time.is_valid()) {
unlock_time = entry.unlock_time; unlock_time = entry.unlock_time;
@@ -607,7 +616,6 @@ dword_result_t XamUserCreateAchievementEnumerator_entry(
e->AppendItem(item); e->AppendItem(item);
} }
}
*handle_ptr = e->handle(); *handle_ptr = e->handle();
return X_ERROR_SUCCESS; return X_ERROR_SUCCESS;