Bring back maximum scores obtained stats for compatibility

This commit is contained in:
Benau 2020-08-25 16:40:40 +08:00
parent 5a7099da02
commit 067feb70f5
2 changed files with 19 additions and 7 deletions

View File

@ -3066,8 +3066,11 @@ void ServerLobby::computeNewRankings()
// Update the maximum (reliable floor) score. At min RD, it is equal to the raw score. // Update the maximum (reliable floor) score. At min RD, it is equal to the raw score.
// TODO : make the public-facing score and rankings based on a reliable floor score ? // TODO : make the public-facing score and rankings based on a reliable floor score ?
double reliable_score = m_scores.at(id) - 3*new_rating_deviations[i] + 3*MIN_RATING_DEVIATION; double reliable_score = m_scores.at(id) - 3*new_rating_deviations[i] + 3*MIN_RATING_DEVIATION;
if (reliable_score > m_max_scores.at(id)) if (reliable_score > m_reliable_scores.at(id))
m_max_scores.at(id) = m_scores.at(id) - 3*new_rating_deviations[i] + 3*MIN_RATING_DEVIATION; m_reliable_scores.at(id) = m_scores.at(id) - 3*new_rating_deviations[i] + 3*MIN_RATING_DEVIATION;
if (m_scores.at(id) > m_max_scores.at(id))
m_max_scores.at(id) = m_scores.at(id);
} }
// Used to display rating change at the end of a race // Used to display rating change at the end of a race
@ -3276,6 +3279,7 @@ void ServerLobby::clearDisconnectedRankedPlayer()
m_scores.erase(id); m_scores.erase(id);
m_max_scores.erase(id); m_max_scores.erase(id);
m_num_ranked_races.erase(id); m_num_ranked_races.erase(id);
m_reliable_scores.erase(id);
m_rating_deviations.erase(id); m_rating_deviations.erase(id);
m_num_ranked_disconnects.erase(id); m_num_ranked_disconnects.erase(id);
it = m_ranked_players.erase(it); it = m_ranked_players.erase(it);
@ -4483,8 +4487,9 @@ void ServerLobby::getRankingForPlayer(std::shared_ptr<NetworkPlayerProfile> p)
// Default result // Default result
double score = 4000.0; double score = 4000.0;
double max_score = 1300.0; double max_score = 4000.0;
unsigned num_races = 0; unsigned num_races = 0;
double reliable_score = 1300.0;
double rating_deviation = 1000.0; double rating_deviation = 1000.0;
uint64_t disconnection = 0; uint64_t disconnection = 0;
if (result->get("success", &rec_success)) if (result->get("success", &rec_success))
@ -4494,6 +4499,7 @@ void ServerLobby::getRankingForPlayer(std::shared_ptr<NetworkPlayerProfile> p)
result->get("scores", &score); result->get("scores", &score);
result->get("max-scores", &max_score); result->get("max-scores", &max_score);
result->get("num-races-done", &num_races); result->get("num-races-done", &num_races);
result->get("reliable-scores", &reliable_score);
result->get("rating-deviation", &rating_deviation); result->get("rating-deviation", &rating_deviation);
result->get("disconnection", &disconnection); result->get("disconnection", &disconnection);
} }
@ -4526,6 +4532,7 @@ void ServerLobby::getRankingForPlayer(std::shared_ptr<NetworkPlayerProfile> p)
m_scores[id] = score; m_scores[id] = score;
m_max_scores[id] = max_score; m_max_scores[id] = max_score;
m_num_ranked_races[id] = num_races; m_num_ranked_races[id] = num_races;
m_reliable_scores[id] = reliable_score;
m_rating_deviations[id] = rating_deviation; m_rating_deviations[id] = rating_deviation;
m_num_ranked_disconnects[id] = disconnection; m_num_ranked_disconnects[id] = disconnection;
} // getRankingForPlayer } // getRankingForPlayer
@ -4543,7 +4550,8 @@ void ServerLobby::submitRankingsToAddons()
public: public:
SubmitRankingRequest(uint32_t online_id, double scores, SubmitRankingRequest(uint32_t online_id, double scores,
double max_scores, unsigned num_races, double max_scores, unsigned num_races,
double rating_deviation, uint64_t disconnection, double reliable_scores, double rating_deviation,
uint64_t disconnection,
const std::string& country_code) const std::string& country_code)
: XMLRequest(Online::RequestManager::HTTP_MAX_PRIORITY) : XMLRequest(Online::RequestManager::HTTP_MAX_PRIORITY)
{ {
@ -4551,6 +4559,7 @@ void ServerLobby::submitRankingsToAddons()
addParameter("scores", scores); addParameter("scores", scores);
addParameter("max-scores", max_scores); addParameter("max-scores", max_scores);
addParameter("num-races-done", num_races); addParameter("num-races-done", num_races);
addParameter("reliable-scores", reliable_scores);
addParameter("rating-deviation", rating_deviation); addParameter("rating-deviation", rating_deviation);
addParameter("disconnection", disconnection); addParameter("disconnection", disconnection);
addParameter("country-code", country_code); addParameter("country-code", country_code);
@ -4574,8 +4583,8 @@ void ServerLobby::submitRankingsToAddons()
const uint32_t id = RaceManager::get()->getKartInfo(i).getOnlineId(); const uint32_t id = RaceManager::get()->getKartInfo(i).getOnlineId();
auto request = std::make_shared<SubmitRankingRequest> auto request = std::make_shared<SubmitRankingRequest>
(id, m_scores.at(id), m_max_scores.at(id), (id, m_scores.at(id), m_max_scores.at(id),
m_num_ranked_races.at(id), m_rating_deviations.at(id), m_num_ranked_races.at(id), m_reliable_scores.at(id),
m_num_ranked_disconnects.at(id), m_rating_deviations.at(id), m_num_ranked_disconnects.at(id),
RaceManager::get()->getKartInfo(i).getCountryCode()); RaceManager::get()->getKartInfo(i).getCountryCode());
NetworkConfig::get()->setUserDetails(request, "submit-ranking"); NetworkConfig::get()->setUserDetails(request, "submit-ranking");
Log::info("ServerLobby", "Submiting ranking for %s (%d) : %lf, %lf %d", Log::info("ServerLobby", "Submiting ranking for %s (%d) : %lf, %lf %d",

View File

@ -199,10 +199,13 @@ private:
/** The rating uncertainty for each current player */ /** The rating uncertainty for each current player */
std::map<uint32_t, double> m_rating_deviations; std::map<uint32_t, double> m_rating_deviations;
/** The maximum scores obtained for each current player */
std::map<uint32_t, double> m_max_scores;
/** The maximum reliable ranking scores achieved for each current player. /** The maximum reliable ranking scores achieved for each current player.
This is not the same as the maximum raw ranking points, This is not the same as the maximum raw ranking points,
because a very high rating with very high RD is most likely lucky. */ because a very high rating with very high RD is most likely lucky. */
std::map<uint32_t, double> m_max_scores; std::map<uint32_t, double> m_reliable_scores;
/** Number of disconnects in the previous 64 ranked races for each current players */ /** Number of disconnects in the previous 64 ranked races for each current players */
std::map<uint32_t, uint64_t> m_num_ranked_disconnects; // TODO Initialized to 0 for a new player on 1st connection to a ranked server std::map<uint32_t, uint64_t> m_num_ranked_disconnects; // TODO Initialized to 0 for a new player on 1st connection to a ranked server