diff --git a/dll/steam_user_stats.cpp b/dll/steam_user_stats.cpp index d8ecbcb8..a90785e7 100644 --- a/dll/steam_user_stats.cpp +++ b/dll/steam_user_stats.cpp @@ -605,7 +605,7 @@ Steam_User_Stats::InternalSetResult Steam_User_Stats::set_achievement_inte result.notify_server = !settings->disable_sharing_stats_with_gameserver; - if (!settings->disable_overlay) overlay->AddAchievementNotification(it.value()); + if (!settings->disable_overlay) overlay->AddAchievementNotification(internal_name, user_achievements[internal_name]); } } catch (...) {} @@ -1151,10 +1151,7 @@ bool Steam_User_Stats::IndicateAchievementProgress( const char *pchName, uint32 user_achievements[actual_ach_name]["progress"] = nCurProgress; user_achievements[actual_ach_name]["max_progress"] = nMaxProgress; save_achievements(); - if (!settings->disable_overlay) { - overlay->AddAchievementNotification(it.value()); - overlay->update_achievement_progress(actual_ach_name, (int)nCurProgress); - } + if (!settings->disable_overlay) overlay->AddAchievementNotification(actual_ach_name, user_achievements[actual_ach_name]); } catch (...) {} { diff --git a/overlay_experimental/overlay/steam_overlay.h b/overlay_experimental/overlay/steam_overlay.h index 27baba39..318a112f 100644 --- a/overlay_experimental/overlay/steam_overlay.h +++ b/overlay_experimental/overlay/steam_overlay.h @@ -253,8 +253,7 @@ public: void FriendConnect(Friend _friend); void FriendDisconnect(Friend _friend); - void AddAchievementNotification(nlohmann::json const& ach); - void update_achievement_progress(std::string const& ach_name, int nCurProgress); + void AddAchievementNotification(std::string ach_name, nlohmann::json const& ach); }; #else // EMU_OVERLAY @@ -288,8 +287,7 @@ public: void FriendConnect(Friend _friend) {} void FriendDisconnect(Friend _friend) {} - void AddAchievementNotification(nlohmann::json const& ach) {} - void update_achievement_progress(std::string const& ach_name, int nCurProgress); + void AddAchievementNotification(std::string ach_name, nlohmann::json const& ach) {} }; #endif // EMU_OVERLAY diff --git a/overlay_experimental/steam_overlay.cpp b/overlay_experimental/steam_overlay.cpp index 8935e53c..42ffa07f 100644 --- a/overlay_experimental/steam_overlay.cpp +++ b/overlay_experimental/steam_overlay.cpp @@ -380,19 +380,6 @@ void Steam_Overlay::load_achievements_data() } -void Steam_Overlay::update_achievement_progress(std::string const& ach_name, int nCurProgress) { - - PRINT_DEBUG_ENTRY(); - std::lock_guard lock(overlay_mutex); - - for (auto& ach : achievements) { - if (ach.name == ach_name) { - ach.progress = (float)nCurProgress; - break; - } - } -} - void Steam_Overlay::initial_load_achievements_icons() { @@ -1977,7 +1964,7 @@ void Steam_Overlay::FriendDisconnect(Friend _friend) } // show a notification when the user unlocks an achievement -void Steam_Overlay::AddAchievementNotification(nlohmann::json const &ach) +void Steam_Overlay::AddAchievementNotification(std::string ach_name, nlohmann::json const &ach) { PRINT_DEBUG_ENTRY(); std::lock_guard lock(overlay_mutex); @@ -1989,16 +1976,13 @@ void Steam_Overlay::AddAchievementNotification(nlohmann::json const &ach) // adjust the local 'is_achieved' and 'unlock_time' std::lock_guard lock2(global_mutex); - std::string ach_name = ach.value("name", std::string()); for (auto &a : achievements) { if (a.name == ach_name) { - bool achieved = false; - uint32 unlock_time = 0; + a.achieved = ach.value("earned", false); + a.unlock_time = ach.value("earned_time", static_cast(0)); + a.progress = ach.value("progress", static_cast(0)); + a.max_progress = ach.value("max_progress", static_cast(0)); - get_steam_client()->steam_user_stats->GetAchievementAndUnlockTime(a.name.c_str(), &achieved, &unlock_time); - a.achieved = achieved; - a.unlock_time = unlock_time; - if (achieved) { post_achievement_notification(a); notify_sound_user_achievement();