From 1232a6ae6e39da4060fbdfb2bdfc27becc3e0057 Mon Sep 17 00:00:00 2001 From: Jamiras <32680403+Jamiras@users.noreply.github.com> Date: Thu, 18 Jul 2024 14:32:37 -0600 Subject: [PATCH] include rank on leaderboard submission notification (#16788) --- cheevos/cheevos.c | 28 +++++++++++++++++++++------- intl/msg_hash_us.h | 8 ++++++++ msg_hash.h | 2 ++ 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index 745e45001e..92e546ac76 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -529,14 +529,28 @@ static void rcheevos_award_achievement(const rc_client_achievement_t* cheevo) #endif } -static void rcheevos_lboard_submit(const rc_client_leaderboard_t* lboard) +static void rcheevos_lboard_submitted(const rc_client_leaderboard_t* lboard, const rc_client_leaderboard_scoreboard_t* scoreboard) { const settings_t* settings = config_get_ptr(); if (lboard && settings->bools.cheevos_visibility_lboard_submit) { char buffer[256]; - snprintf(buffer, sizeof(buffer), msg_hash_to_str(MSG_LEADERBOARD_SUBMISSION), - lboard->tracker_value, lboard->title); + if (scoreboard) + { + char addendum[64]; + const size_t len = snprintf(buffer, sizeof(buffer), msg_hash_to_str(MSG_LEADERBOARD_SUBMISSION), + scoreboard->submitted_score, lboard->title); + if (strcmp(scoreboard->best_score, scoreboard->submitted_score) == 0) + snprintf(addendum, sizeof(addendum), msg_hash_to_str(MSG_LEADERBOARD_RANK), scoreboard->new_rank); + else + snprintf(addendum, sizeof(addendum), msg_hash_to_str(MSG_LEADERBOARD_BEST), scoreboard->best_score); + snprintf(buffer + len, sizeof(buffer) - len, " (%s)", addendum); + } + else + { + snprintf(buffer, sizeof(buffer), msg_hash_to_str(MSG_LEADERBOARD_SUBMISSION), + lboard->tracker_value, lboard->title); + } runloop_msg_queue_push(buffer, 0, 2 * 60, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } @@ -696,9 +710,6 @@ static void rcheevos_client_event_handler(const rc_client_event_t* event, rc_cli case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_HIDE: rcheevos_lboard_hide_tracker(event->leaderboard_tracker); break; - case RC_CLIENT_EVENT_LEADERBOARD_SCOREBOARD: - /* not supported */ - break; #endif case RC_CLIENT_EVENT_ACHIEVEMENT_TRIGGERED: rcheevos_award_achievement(event->achievement); @@ -710,7 +721,10 @@ static void rcheevos_client_event_handler(const rc_client_event_t* event, rc_cli rcheevos_lboard_canceled(event->leaderboard); break; case RC_CLIENT_EVENT_LEADERBOARD_SUBMITTED: - rcheevos_lboard_submit(event->leaderboard); + /* don't notify on submission - report new rank/best score after submission via SCOREBOARD event */ + break; + case RC_CLIENT_EVENT_LEADERBOARD_SCOREBOARD: + rcheevos_lboard_submitted(event->leaderboard, event->leaderboard_scoreboard); break; case RC_CLIENT_EVENT_RESET: command_event(CMD_EVENT_RESET, NULL); /* reset the game */ diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index f8acb1bdbf..8080b36863 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -15057,6 +15057,14 @@ MSG_HASH( MSG_LEADERBOARD_SUBMISSION, "Submitted %s for %s" /* Submitted [value] for [leaderboard name] */ ) +MSG_HASH( + MSG_LEADERBOARD_RANK, + "Rank: %d" /* Rank: [leaderboard rank] */ + ) +MSG_HASH( + MSG_LEADERBOARD_BEST, + "Best: %s" /* Best: [value] */ + ) MSG_HASH( MSG_CHANGE_THUMBNAIL_TYPE, "Change thumbnail type" diff --git a/msg_hash.h b/msg_hash.h index b38471c158..d6486beda2 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -437,6 +437,8 @@ enum msg_hash_enums MSG_LEADERBOARD_STARTED, MSG_LEADERBOARD_FAILED, MSG_LEADERBOARD_SUBMISSION, + MSG_LEADERBOARD_RANK, + MSG_LEADERBOARD_BEST, MSG_CHANGE_THUMBNAIL_TYPE, MSG_TOGGLE_FULLSCREEN_THUMBNAILS, MSG_TOGGLE_CONTENT_METADATA,